基于百度文字识别SDK开发自助车牌识别与身份证识别系统
首先配置sdk注册账号之类的
参考链接:基于百度图像识别SDK开发动植物识别系统 - zrswheart - 博客园 (cnblogs.com)
去控制台文字识别创建新的应用
记得领取免费资源,不然会报错
获取新的密匙
所有接口参考文档:文字识别OCR (baidu.com)
测试代码(车牌识别)
package com.company; import java.util.*; import org.json.JSONObject; import com.baidu.aip.ocr.AipOcr; public class Sample { //设置APPID/AK/SK public static final String APP_ID = "282 04"; public static final String API_KEY = "ExR7 cFW"; public static final String SECRET_KEY = "ty gXG"; public static void main(String[] args) { // 初始化一个AipOcr AipOcr client = new AipOcr(APP_ID, API_KEY, SECRET_KEY); // 可选:设置网络连接参数 client.setConnectionTimeoutInMillis(2000); client.setSocketTimeoutInMillis(60000); // 可选:设置代理服务器地址, http和socket二选一,或者均不设置 // client.setHttpProxy("proxy_host", proxy_port); // 设置http代理 // client.setSocketProxy("proxy_host", proxy_port); // 设置socket代理 // 可选:设置log4j日志输出格式,若不设置,则使用默认配置 // 也可以直接通过jvm启动参数设置此环境变量 System.setProperty("aip.log4j.conf", "path/to/your/log4j.properties"); // 调用接口 Sample.sample(client); } public static void sample(AipOcr client) { // 传入可选参数调用接口 HashMap<String, String> options = new HashMap<String, String>(); options.put("multi_detect", "true"); // 参数为本地图片路径 String image = "E://test2.jpg"; JSONObject res = client.plateLicense(image, options); System.out.println(res.toString(2)); } }
识别系统代码
AuthService.java
package com.company; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baidu.aip.ocr.AipOcr; import java.util.HashMap; import java.util.Map; public class AuthService { public static final String APP_ID = "28 804"; public static final String API_KEY = "ExR7 FW"; public static final String SECRET_KEY = "ty6 9ONF MYgXG"; public static HashMap<String,String> hashMap = new HashMap<>(); //身份证识别 public static void idcard(AipOcr client, String image) { // 传入可选参数调用接口 HashMap<String, String> options = new HashMap<String, String>(); options.put("top_num", "1"); options.put("baike_num", "0"); String idCardSide = "back"; // 参数为本地路径 org.json.JSONObject res = client.idcard(image, idCardSide, options); JSONObject jsonObject = JSON.parseObject(String.valueOf(res)); String all = jsonObject.get("words_result").toString(); JSONObject jsonObject1 = JSON.parseObject(all); for(Map.Entry<String, Object> object : jsonObject1.entrySet() ) { String key = object.getKey(); String values = object.getValue().toString(); JSONObject keyName = JSON.parseObject(values); String value = keyName.get("words").toString(); hashMap.put(key,value); } } public static String licensePlate(AipOcr client, String image) { // 传入可选参数调用接口 HashMap<String, String> options = new HashMap<String, String>(); options.put("multi_detect", "true"); org.json.JSONObject res = client.plateLicense(image, options); JSONObject jsonObject = JSON.parseObject(String.valueOf(res)); String all = jsonObject.get("words_result").toString(); JSONArray jsonObject2 = (JSONArray) JSONArray.parse(all); String number = null; for (Object o : jsonObject2) { JSONObject jsonObject3 = (JSONObject) o; // System.out.println(jsonObject.toJSONString()); number = (String) jsonObject3.get("number"); } return number; } //车牌识别 }
Main.java
package com.company; import com.baidu.aip.imageclassify.AipImageClassify; import com.baidu.aip.ocr.AipOcr; import javax.swing.*; import javax.swing.filechooser.FileFilter; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.util.HashMap; public class Main { public static String myFile; public static String[] type = new String[]{"身份证", "车牌"}; public static String temp; public static void main(String[] args) { HashMap<String, String> hashMap = new HashMap<>(); setLookAndFeel(); AuthService authService = new AuthService(); //主窗体基本信息 JFrame j = new JFrame("文字识别系统"); j.setSize(1000, 600); j.setLocation(300, 50); j.setLayout(null); //下拉框选择查询类别 JLabel tishi = new JLabel("要识别图片的类型"); tishi.setBounds(280, 20, 200, 30); JComboBox<String> cb = new JComboBox<>(type); cb.setBounds(400, 20, 70, 30); //打开文件信息 JFileChooser jfc = new JFileChooser(); jfc.setFileFilter(new FileFilter() { @Override public String getDescription() { // TODO Auto-generated method stub return null; } @Override public boolean accept(File f) { // TODO Auto-generated method stub return true; } }); //图片容器 JLabel l = new JLabel(); //显示文字组件 JLabel jieguo = new JLabel("选择图片"); jieguo.setBounds(600, 150, 300, 300); //上传百度接口验证按钮 JButton jb2 = new JButton("开始识别"); jb2.setBounds(600, 350, 100, 50); //获取图片按钮 JButton jb1 = new JButton("上传图片"); jb1.setBounds(200, 350, 100, 50); jb1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub int returnVal = jfc.showOpenDialog(j); File file = jfc.getSelectedFile(); if (returnVal == JFileChooser.APPROVE_OPTION) { myFile = file.getAbsolutePath(); myFile.replaceAll("\\\\", "/"); ImageIcon i = new ImageIcon(myFile); l.setIcon(i); l.setBounds(50, 50, i.getIconWidth(), i.getIconHeight()); jb1.setBounds(i.getIconWidth() / 2, i.getIconHeight() + 100, 100, 50); jb2.setBounds(i.getIconWidth() + 100, 400, 100, 50); jieguo.setBounds(i.getIconWidth() + 100, 150, 300, 300); } jieguo.setText("等待提交验证"); } }); jb2.addActionListener(new ActionListener() { AipOcr client = new AipOcr(AuthService.APP_ID, AuthService.API_KEY, AuthService.SECRET_KEY); @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub temp = cb.getSelectedItem().toString(); if (temp.equals("身份证")) { AuthService.idcard(client,myFile); String outCome = "<html><body><p>经过识别,这个" + temp + "的信息是<br>"; for (String key : AuthService.hashMap.keySet()) { String value = AuthService.hashMap.get(key); outCome += key + ":" + value + "<br>"; } outCome += "</p></body></html>"; jieguo.setText(outCome); AuthService.hashMap.clear(); } else { String number = AuthService.licensePlate(client,myFile); jieguo.setText("经过识别,这个" + temp + "的车牌号是" + number); } } }); j.add(tishi); j.add(cb); j.add(jieguo); j.add(l); j.add(jb1); j.add(jb2); j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); j.setVisible(true); } private static void setLookAndFeel(){ try { javax.swing.UIManager.setLookAndFeel("com.jtattoo.plaf.acryl.AcrylLookAndFeel"); // javax.swing.UIManager.setLookAndFeel("com.jtattoo.plaf.noire.NoireLookAndFeel"); } catch (Exception e) { e.printStackTrace(); // handle exception } } }
参考代码:基于百度文字识别SDK开发自助车牌识别系统 - 听风1234 - 博客园 (cnblogs.com) 他用的感觉复杂许多,字节形式获取的内容,我就改了一部分