tess4j 实现
一、依赖文件
二、所需语言库,下载chi_sim、eng、num语言库,然后在项目目录下新建tessdata文件夹,将语言库放入该文件夹中
下载:tess4源码包
tessdata下默认为英语库,中文库下载地址:中文包下载地址
其他库的下载地址:其他语言包下载地址
三、代码部分
ITesseract instance = new Tesseract();
//如果未将tessdata放在根目录下需要指定绝对路径
//instance.setDatapath("the absolute path of tessdata");
//如果需要识别英文之外的语种,需要指定识别语种,并且需要将对应的语言包放进项目中
// instance.setLanguage("chi_sim");
instance.setDatapath("tessdata");
instance.setLanguage("chi_sim");//chi_sim代表中文库
// 指定识别图片
File imgDir = new File("E:\\tesseract-ocr-setup-3.02.02\\Tesseract-OCR\\4.png");
long startTime = System.currentTimeMillis();
String ocrResult = instance.doOCR(imgDir);
// 输出识别结果
System.out.println("OCR Result: \n" + ocrResult + "\n 耗时:" + (System.currentTimeMillis() - startTime) + "ms");
运行发现虽然可以,但结果还是不太理想;再来看看百度的图像识别吧!
百度AI图像识别,这里是驾照接口
一、接口地址:百度AI驾照图像识别
二、百度云需要的key
这里解释一下,百度云需要app_key 和 secret_key 两种key来生成access_token权限码之后,才可以用access_token权限码来调用接口的,所以:这里用代码生成如下;
三、代码
生成access_token部分:
package com.test.util;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;
import java.util.Map;
/**
* 获取token类
*/
public class AuthService {
public static void main(String[] args) {
getAuth();
}
/**
* 获取权限token
* @return 返回示例:
* {
* "access_token": "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567",
* "expires_in": 2592000
* }
*/
public static String getAuth() {
// 官网获取的 API Key 更新为你注册的
String clientId = "LXrztEOzQxfef66DLIDQYpIG";
// 官网获取的 Secret Key 更新为你注册的
String clientSecret = "gbDodnochc8jYjlAHADDgyyas9mrlmkF";
return getAuth(clientId, clientSecret);
}
/**
* 获取API访问token
* 该token有一定的有效期,需要自行管理,当失效时需重新获取.
* @param ak - 百度云官网获取的 API Key
* @param sk - 百度云官网获取的 Securet Key
* @return assess_token 示例:
* "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567"
*/
public static String getAuth(String ak, String sk) {
// 获取token地址
String authHost = "https://aip.baidubce.com/oauth/2.0/token?";
String getAccessTokenUrl = authHost
// 1. grant_type为固定参数
+ "grant_type=client_credentials"
// 2. 官网获取的 API Key
+ "&client_id=" + ak
// 3. 官网获取的 Secret Key
+ "&client_secret=" + sk;
try {
URL realUrl = new URL(getAccessTokenUrl);
// 打开和URL之间的连接
HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
connection.setRequestMethod("GET");
connection.connect();
// 获取所有响应头字段
Map> map = connection.getHeaderFields();
// 遍历所有的响应头字段
for (String key : map.keySet()) {
System.err.println(key + "--->" + map.get(key));
}
// 定义 BufferedReader输入流来读取URL的响应
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String result = "";
String line;
while ((line = in.readLine()) != null) {
result += line;
}
/**
* 返回结果示例
*/
System.err.println("result:" + result);
JSONObject jsonObject = new JSONObject(result);
String access_token = jsonObject.getString("access_token");
return access_token;
} catch (Exception e) {
System.err.printf("获取token失败!");
e.printStackTrace(System.err);
}
return null;
}
}
运行上面代码之后会如下结果:
result:{"refresh_token":"25.2784108987f5e58b2a325dc26281cbe8.315360000.1873420544.282335-15742445","expires_in":2592000,"session_key":"9mzdWEMXafJyxlmw5TbtYHTPuJZ0fSTFCUUdxlVVIBA8qGx4TT0EMmWOyRI\/eDIE0xCc5XmzU+TeKmVKyU4wN\/G1DT64cg==","access_token":"24.c39f93139e47c06bc1a41077f6e5cd25.2592000.1560652544.282335-15742445","scope":"vis-ocr_\u5b9a\u989d\u53d1\u7968\u8bc6\u522b brain_ocr_quota_invoice public vis-ocr_ocr brain_ocr_scope brain_ocr_general brain_ocr_general_basic brain_ocr_general_enhanced vis-ocr_business_license brain_ocr_webimage brain_all_scope brain_ocr_idcard brain_ocr_driving_license brain_ocr_vehicle_license vis-ocr_plate_number brain_solution brain_ocr_plate_number brain_ocr_accurate brain_ocr_accurate_basic brain_ocr_receipt brain_ocr_business_license brain_solution_iocr brain_ocr_handwriting brain_ocr_passport brain_ocr_vat_invoice brain_numbers brain_ocr_train_ticket brain_ocr_taxi_receipt vis-ocr_\u8f66\u8f86vin\u7801\u8bc6\u522b brain_ocr_vin wise_adapt lebo_resource_base lightservice_public hetu_basic lightcms_map_poi kaidian_kaidian ApsMisTest_Test\u6743\u9650 vis-classify_flower lpq_\u5f00\u653e cop_helloScope ApsMis_fangdi_permission smartapp_snsapi_base iop_autocar oauth_tp_app smartapp_smart_game_openapi oauth_sessionkey smartapp_swanid_verify smartapp_opensource_openapi smartapp_opensource_recapi","session_secret":"4a8251417c5efb628e32292c6eb70679"}
直接取红色标记部分;
调用接口代码:
package com.test.control;
import java.net.URLEncoder;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.hhzx.fw.util.Base64Util;
import com.hhzx.fw.util.FileUtil;
import com.hhzx.fw.util.HttpUtil;
@Controller
public class ImgController {
@ResponseBody
@RequestMapping(value="ocr",method=RequestMethod.POST)
public JSONObject test(@RequestPart(name = "file",required = false)MultipartFile file) {
// 请求url
String url = "https://aip.baidubce.com/rest/2.0/ocr/v1/vehicle_license";//https://aip.baidubce.com/rest/2.0/ocr/v1/idcard,https://aip.baidubce.com/rest/2.0/ocr/v1/driving_license
String result = "";
JSONObject parseObject = null;
try {
// 本地文件路径
String filePath = "E:\\tesseract-ocr-setup-3.02.02\\Tesseract-OCR\\mg.jpg";
byte[] imgData = file.getBytes();
// byte[] imgData = FileUtil.readFileByBytes(filePath);
String imgStr = Base64Util.encode(imgData);
String imgParam = URLEncoder.encode(imgStr, "UTF-8");
String param = "image=" + imgParam;
// String param = "image=" + imgParam+"&id_card_side=front";
// 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
String accessToken = "24.c1f518235a1ae659aec477e7cf0aa00f.2592000.1560479812.282335-15742445";
result = HttpUtil.post(url, accessToken, param);
parseObject = JSONArray.parseObject(result);
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
return parseObject;
}
}
pom添加依赖:
com.baidu.aip
java-sdk
4.4.1
com.alibaba
fastjson
1.2.4
ok,按照正常程序走的话就可以看到结果了,注意,这里调用的是驾驶证接口地址,所以照片必须为驾驶证件照,功能强大,横竖拍照都可以完美解析识别,百度AI图像识别,必须赞。。。
好了,有疑问或更好意见请留言。