> 文章列表 > Java调用百度云OCR文字识别(通用文字识别、身份证文字识别、车牌号识别)菜品识别

Java调用百度云OCR文字识别(通用文字识别、身份证文字识别、车牌号识别)菜品识别

Java调用百度云OCR文字识别(通用文字识别、身份证文字识别、车牌号识别)菜品识别

首先对比一下各厂商开放接口免费额度

阿里云OCR:自购买起500次/年,过期作废。超过另计算
腾讯云OCR:1000次/月。超过另计算
百度云OCR:各种场景几十到几万次/天。超过另计算

标题小型项目,为节约成本,最终项目确定使用百度云OCR,接下来记录一下使用体验。

标题1、首先创建一个maven普通Java工程。项目结构如下:

Java调用百度云OCR文字识别(通用文字识别、身份证文字识别、车牌号识别)菜品识别

2、添加依赖 (注意版本要用最新的)

最新的版本看这里 最新的版本点这里

 <!--  百度云OCR文字识别Java-SDK依赖      --><dependency><groupId>com.baidu.aip</groupId><artifactId>java-sdk</artifactId><version>最新的版本</version></dependency>

Java调用百度云OCR文字识别(通用文字识别、身份证文字识别、车牌号识别)菜品识别

3、在项目根目录下(路径可自定义)创建存放本地图片的目录,并加入测试需要的图片

Java调用百度云OCR文字识别(通用文字识别、身份证文字识别、车牌号识别)菜品识别

4、编写代码

import com.baidu.aip.ocr.AipOcr;
import org.json.JSONArray;
import org.json.JSONObject;import java.util.HashMap;
import java.util.Iterator;/*
* 百度云文字识别测试类
* */
public class BaiduyunOCRDemo {//设置APPID/AK/SKpublic static final String APP_ID = "";//你的 App IDpublic static final String API_KEY = "";//你的 Api Keypublic static final String SECRET_KEY = "";//你的 Secret Keypublic static void main(String []args){// 初始化一个AipOcrAipOcr aipOcr = new AipOcr(APP_ID, API_KEY, SECRET_KEY);// 可选:设置网络连接参数
//            aipOcr.setConnectionTimeoutInMillis(2000);//建立连接的超时时间(单位:毫秒)
//            aipOcr.setSocketTimeoutInMillis(60000);//通过打开的连接传输数据的超时时间(单位:毫秒)// 可选:设置代理服务器地址, http和socket二选一,或者均不设置
//            aipOcr.setHttpProxy("proxy_host", proxy_port);  // 设置http代理
//            aipOcr.setSocketProxy("proxy_host", proxy_port);  // 设置socket代理// 可选:设置log4j日志输出格式,若不设置,则使用默认配置// 也可以直接通过jvm启动参数设置此环境变量
//            System.setProperty("aip.log4j.conf", "path/to/your/log4j.properties");//设置本地图片地址String path = "E:\\\\IDEA\\\\IntelliJ IDEA 2019.1.3\\\\IdeaProjects\\\\BaiduyunOCRDemo\\\\images\\\\Chinese.jpg";//通用文字识别basicGeneral(aipOcr,path);//身份证识别
//            idCord(aipOcr,path);//车牌号识别
//            licencePlateNumber(aipOcr,path);}/ 通用文字识别* */public static void basicGeneral(AipOcr aipOcr,String path){// 传入可选参数调用接口HashMap<String, String> options = new HashMap<String, String>();options.put("language_type", "CHN_ENG");//识别语言类型,默认为中英文混合options.put("detect_direction", "true");//是否检查图片朝向,默认false不检查options.put("detect_language", "true");//是否检查语言,默认false不检查options.put("probability", "true");//是否返回识别结果中每一行的置信度// 调用接口,返回JSON格式数据JSONObject jsonObject = aipOcr.basicGeneral(path, options);//获取JSON对象里提取图片文字信息数组JSONArray jsonArray = jsonObject.getJSONArray("words_result");//循环打印信息for(int i = 0;i<jsonArray.length();i++){System.out.println(jsonArray.getJSONObject(i).get("words"));}}/ 身份证文字识别* */public  static void idCord(AipOcr aipOcr,String path){// 传入可选参数调用接口HashMap<String, String> options = new HashMap<String, String>();options.put("detect_direction", "true");//检查图片朝向。默认false不检测options.put("detect_risk", "false");//是否开启身份证类型检测功能(类型为身份证复印件、临时身份证、身份证翻拍、修改过的身份证),默认false不开启String idCardSide = "front";//身份证含照片一面
//        String idCardSide = "back";//身份证含国徽一面//本地图片识别,返回JSON对象JSONObject jsonObject = aipOcr.idcard(path, idCardSide, options);//获取到我们需要的信息JSONObject result = jsonObject.getJSONObject("words_result");//获取迭代器,Iterator<String> iterator = result.keys();while (iterator.hasNext()){//获取键和值String key = iterator.next();String value = result.getJSONObject(key).getString("words");//打印识别结果System.out.println(key+" : "+value);}}/ 车牌号识别* */public static void licencePlateNumber(AipOcr aipOcr,String path){// 传入可选参数调用接口HashMap<String, String> options = new HashMap<String, String>();options.put("multi_detect", "false");//是否检测多张图片,默认false//本地图片识别,返回JSON对象JSONObject jsonObject = aipOcr.plateLicense(path, options);//获取需要的信息JSONObject result = jsonObject.getJSONObject("words_result");System.out.println("车牌颜色:"+result.getString("color")+"\\n"+"车牌号:"+result.getString("number"));}
}

5、测试三种场景运行结果

5.1、通用文字识别结果

5.1.1
Java调用百度云OCR文字识别(通用文字识别、身份证文字识别、车牌号识别)菜品识别
Java调用百度云OCR文字识别(通用文字识别、身份证文字识别、车牌号识别)菜品识别
5.1.2

Java调用百度云OCR文字识别(通用文字识别、身份证文字识别、车牌号识别)菜品识别
Java调用百度云OCR文字识别(通用文字识别、身份证文字识别、车牌号识别)菜品识别
5.1.3
Java调用百度云OCR文字识别(通用文字识别、身份证文字识别、车牌号识别)菜品识别
Java调用百度云OCR文字识别(通用文字识别、身份证文字识别、车牌号识别)菜品识别
5.1.4

Java调用百度云OCR文字识别(通用文字识别、身份证文字识别、车牌号识别)菜品识别
Java调用百度云OCR文字识别(通用文字识别、身份证文字识别、车牌号识别)菜品识别
结果:印刷体识别效果较好。

5.2、身份证文字识别

5.2.1
Java调用百度云OCR文字识别(通用文字识别、身份证文字识别、车牌号识别)菜品识别
Java调用百度云OCR文字识别(通用文字识别、身份证文字识别、车牌号识别)菜品识别
5.2.2
Java调用百度云OCR文字识别(通用文字识别、身份证文字识别、车牌号识别)菜品识别
Java调用百度云OCR文字识别(通用文字识别、身份证文字识别、车牌号识别)菜品识别
5.2.3、识别图片为本人真实身份证、
Java调用百度云OCR文字识别(通用文字识别、身份证文字识别、车牌号识别)菜品识别
结果:对比1、2发现,身份证原件识别效果高于复印件,对比1、2、3发现前2次返回结果中身份证号码都为空,通过多次对不同真假身份证对比发现,百度云后台对识别的身份证做了真实性检查,假身份证返回号码为空,真实身份证才会返回身份证号码。
5.3、车牌识别
Java调用百度云OCR文字识别(通用文字识别、身份证文字识别、车牌号识别)菜品识别
Java调用百度云OCR文字识别(通用文字识别、身份证文字识别、车牌号识别)菜品识别
车牌识别仅简单体验,并未测试多图片对比。