基于百度文字识别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)  他用的感觉复杂许多,字节形式获取的内容,我就改了一部分

 

 

 

posted @ 2022-11-05 23:40  zrswheart  阅读(88)  评论(0编辑  收藏  举报