tess4j 实现

一、依赖文件

<dependency>
            <groupId>net.sourceforge.tess4j</groupId>
            <artifactId>tess4j</artifactId>
            <version>4.1.1</version>
        </dependency>

二、所需语言库,下载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<String, List<String>> 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) {// 请求urlString 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_licenseString 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添加依赖:

         <dependency><groupId>com.baidu.aip</groupId><artifactId>java-sdk</artifactId><version>4.4.1</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.4</version></dependency>

ok,按照正常程序走的话就可以看到结果了,注意,这里调用的是驾驶证接口地址,所以照片必须为驾驶证件照,功能强大,横竖拍照都可以完美解析识别,百度AI图像识别,必须赞。。。

好了,有疑问或更好意见请留言。

java图片识别(文字、字母、数字)相关推荐

  1. Java图片识别技术

    一.技术介绍 OCR(Optical Character Recognition):光学字符识别,是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗.亮的模式确定其形状,然后用字符识别 ...

  2. 手机端有没有好用的图片识别文字工具值得推荐?

    图片转文字,用到的就是OCR识别技术,针对网络上复杂字体实现精确识别功能,经常用于社交.电商.学习等场景.传统的将图片识别文字的方式选择手动书写,随着AI智能技术的应用,以OCR智能识别工具由于使用简 ...

  3. 【批量图片识别文字命名】如何批量图片识别文字并将识别的文字重命名该图片,怎么弄?下面叫你方法

    前段时间接到一个棘手的难题(识别图片文字,将图片文件名改成该文字) 因为不解决就得手动挨个挨个输入然后把文件命名好 今天又一个文件需求是这样的 图上有姓名文字,要识别出来改成每一张图跟这个一样,有的人 ...

  4. 如何批量图片识别文字?两个好用的电脑端软件教程

    如何批量图片识别文字?无论是我们拍摄课堂上的PPT,还是我们日常的一些文字截图.这些文字都是图片文字,很不利于于我们整理复习.如果我们要是一个一个打字的话将会很耽误时间,实际上我们完全可以借助一些工具 ...

  5. 中文汉字注音,汉字转拼音,支持图片识别文字,支持结果转图下载,附上小程序核心源码

    "文字注音"小程序在微信.字节跳动.支付宝.QQ等小程序平台同步上线,微信.头条.抖音.支付宝.QQ中搜索"文字注音"即可获得. 一.功能 汉字转拼音,支持图片 ...

  6. Java图片加文字水印

    Java图片加文字水印 import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.I ...

  7. 这篇文章让你学会根据图片识别文字

    随着科技的不断发展进步,越来越多的文字信息包含在了图片中,如果某一天我们需要将图片里的文字提取出来,应该怎么做呢?有人会说:"手打输入".而这不是一个好办法,因为它只能应对数量不多 ...

  8. 怎么在线图片识别文字?这里有你需要的方法

    在平时工作中相信很多小伙伴都会存储一些图片格式的文件资料,一些设备参数.描述等文字内容数据.因为使用图片储存和传输都比较方便,还便于在不同设备中分享查看.最近有小伙伴咨询在一些使用需要以文字格式来输入 ...

  9. OCR图片识别文字源码(支持多国文字识别)

    OCR图片识别文字源码(支持多国文字识别) 程序员帮帮

  10. java 图片识别 tess4j_图像文字识别(四):java调用tess4j识别图像文字

    转自:https://blog.csdn.net/a745233700/article/details/80203340java java调用tess4j识别图像文字 Tesseract-OCR支持中 ...

最新文章

  1. 【直播】王茂霖:二手车交易价格预测 Baseline 提高(河北高校数据挖掘邀请赛)
  2. GPT-2:OpenAI的NLP商业化野望
  3. OpenUPF 功能分析
  4. [译] 重写 loadView() 方法使 Swift 视图代码更加简洁
  5. spring boot配置文件:application.yml (yml与properties文件优缺对比)
  6. Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-
  7. CSS基础(part2)--CSS选择器
  8. python multiprocessing 保存与打印返回值
  9. C#网络编程示例(note)
  10. java udp判断端口是否打开,java udp 端口
  11. matlab取第一列元素的值,MATLAB中怎么从excel中读取第一列的数据?(2010版office)【】...
  12. app逆向工程之apk回编译安装之后背景音乐出不来
  13. 现代笑话二则 木子家创作
  14. 【视频联动】编译原理:写出布尔表达式A or (B and not(C or D)) 的四元式序列。说明:按照控制语句中的布尔表达式翻译
  15. Alax技术实现的基本原理——XMLHttpRequest对象的使用
  16. 【BZOJ1791】【IOI2008】【基环树】island(status速度第一)
  17. 百度网盘wine和linux区别,ubuntu16.04安装deepwine并安装QQ微信百度网盘等常用windows软件...
  18. Android9.0 如何精准区分SDK接口和非 SDK接口
  19. RAID 阵列碎片整理真的管用!碎片整理对于RAID仍然有意义
  20. 组件进阶+渡一教育第二节笔记

热门文章

  1. 开启创客教育课程建设的实体空间
  2. Root mapping definition has unsupported parameters
  3. 如何使用eNSP模拟器连接本地虚拟机
  4. MSCI公布2020年度市场分类评审结果
  5. 第4课【STM32的时钟】时钟 时钟源 内外部时钟 高低速时钟
  6. 人类历史上第一个推荐系统
  7. 手机拍的试卷打印出来是黑的一片怎么办
  8. 小程序开发+weuiwxss
  9. 左神算法笔记01——排序算法
  10. 蓝桥杯嵌入式【G4】教程汇总【2022】