Windows下命令行及Java+Tesseract-OCR对图像进行(字母+数字+中文)识别,亲测可行
Windows下Java+Tesseract-OCR对图像进行字符识别,亲测可行
- 1. 下载tesseract-ocr、中文语言包并安装
- 2. 命令行对图片进行识别及效果图
- 3. Java调用Tesseart-OCR
- 3.1 效果图
- 3.2 源码
- 4. 遗留问题
- 4.1 Too many unichars in ambiguity on line 22991608,暂未解决
- 参考
这篇博客将介绍Java如何利用Tesseract-OCR对图像进行字符识别;
1. 下载tesseract-ocr、中文语言包并安装
Tesseract-ocr是一款开源工具,可用于OCR(Optical Character Recognition)。默认识别字母+数字,识别中文需要安装相应的中文语言包)。
tesseract-ocr 3.02安装包与中文语言包chi_sim.traineddata 3.02版本-百度网盘链接:https://pan.baidu.com/s/1-tmDFZPvOO1GFtwJn50ahA
提取码:3siq
中文语言包chi_sim.traineddata 4.0版本在此下载
假设安装在Tesseart-OCR安装在D盘,
将语言包解压出的chi_sim.traineddata 放到 D:\Tesseract-OCR\tessdata\ 目录下
验证安装成功与否:
2. 命令行对图片进行识别及效果图
切换到安装目录及识别
cd D:\Tesseract-OCR
tesseract.exe E:\mat\mvt\java-ocr-demo\ocr\opencv_logo.jpg opencv_logo
默认识别(字母+数字),识别中文需要安装中文语言包,并指定模型 -l chi_sim
tesseract 2.jpg 2 -l chi_sim -psm 7
- 参数1:2.jpg 图片全路径
- 参数2:2 识别文本输出文字名,结果将写入2.txt
- 参数3:指定语言包,-l chi_sim表示用简体中文字库,默认eng(识别字母+数字)
- 参数4:-psm 7 表示告诉tesseract 2.jpg图片只有一行文本,从而可以减少识别错误率,默认为3。
字母成功识别效果图如下:
图过大,字符太小可能无法识别,需要将图片截取下保证图片中字符清晰可见即可正确识别出来;
数字成功识别效果图如下:
中文+字母识别:可以看到文字并没有正确识别;不是特别准确
中文+字母+数字识别,中文不太准确,效果图如下:
3. Java调用Tesseart-OCR
Java调用Tessert-OCR有如下俩种方法:
- 实质上也是调用的 tesseart.exe执行的ocr识别;
- 调用tess4j jar包内的方法,依赖字体集(需要本地下载好字体集)
- 优化版本—— Java-基于百度API的图片文字识别(支持中文,英文和中英文混合)
3.1 效果图
调用本地exe方式效果图如下:英文比较准确,中文的效果不太好
调用jar加载 eng 模型来识别 效果图如下:多张图片测试,字母+数字的效果要好一些,基本都识别出来,中文识别均乱码;
调用jar加载中文的 chi_sim 模型来识别 效果图如下:多张图片测试,字符字母部分未成功识别,也有识别错的,中文识别效果也不好;
3.2 源码
<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->
<dependency><groupId>net.sourceforge.tess4j</groupId><artifactId>tess4j</artifactId><version>3.2.1</version>
</dependency>
package com;import lombok.extern.slf4j.Slf4j;
import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
import org.apache.commons.io.FileUtils;
import org.junit.platform.commons.util.StringUtils;import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;/**************************************Class Name: TessertOcr*Description: <java调用tessert-ocr识别>*@author: seminar*@create: 2021/7/8*@since 1.0.0*************************************/
public class TessertOcr {/*** 调用tesseart.exe进行OCR识别** @param exePath exe绝对路径* @param jpgPath jpg路径* @param flag 默认false,使用eng只支持字母+数字, True:支持中文+字母+数字* @return*/public static String callTesseartExe(String exePath, String jpgPath, boolean flag) {String res = "";try {Process process = null;if (!flag) {process = Runtime.getRuntime().exec(new String[]{exePath, jpgPath, jpgPath.replaceAll(".jpg", "")});} else {process = Runtime.getRuntime().exec(new String[]{exePath, jpgPath, jpgPath.replaceAll(".jpg", ""), "-l", "chi_sim"});}StringBuilder processOutput = new StringBuilder();try (BufferedReader processOutputReader = new BufferedReader(new InputStreamReader(process.getInputStream()));) {String readLine;while ((readLine = processOutputReader.readLine()) != null) {processOutput.append(readLine + System.lineSeparator());}// 等待执行完成process.waitFor();} catch (IOException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();} finally {if (process != null) {process.destroy();}}res = processOutput.toString().trim();res = FileUtils.readFileToString(new File(jpgPath.replaceAll(".jpg", ".txt")));} catch (IOException e) {e.printStackTrace();}return res;}public static void main(String[] args) {// 第一种方法String exePath = "D:/Tesseract-OCR/tesseract.exe";String jpgPath = "E:\\mat\\mvt\\java-ocr-demo\\images\\1622175322109_0.025711_cc.jpg";System.out.println("1622175322109_0.025711_cc.jpg callTesseartExe: " + callTesseartExe(exePath, jpgPath, false));System.out.println("chinese.jpg callTesseartExe: " + callTesseartExe(exePath,"E:\\mat\\mvt\\java-ocr-demo\\images\\chinese.jpg", true));String fileDir = "E:\\mat\\mvt\\java-ocr-demo\\images\\";File[] list = new File(fileDir).listFiles();ITesseract instance = new Tesseract();instance.setDatapath("E:\\mat\\mvt\\java-ocr-demo\\src\\test\\java\\com\\tessdata");// 默认识别英文(字母+英文),如果识别中文(数字+中文)需要设置语言包
// instance.setLanguage("chi_sim");for (File file : list) {if (file.getName().endsWith(".jpg")) {try {String result = instance.doOCR(file);if (StringUtils.isNotBlank(result)) {result = result.replaceAll("\n", "");result = result.replaceAll(" ", "");if (result.length() > 30) {System.out.println(file.getName() + ": " + result.substring(result.length() - 30, result.length()));} else {System.out.println(file.getName() + ": " + result);}} else {System.out.println(file.getName() + ": ");}} catch (TesseractException e) {e.printStackTrace();}}}}
}
4. 遗留问题
4.1 Too many unichars in ambiguity on line 22991608,暂未解决
参考
- 亲测可用
- eng.traineddata,chi_sm.traineddata下载
- java+Tesseract-OCR实现图片识别
- java利用tesseract-OCR对图像进行字符识别
- tesseract-ocr java开发
- Java截取局部图片~
Windows下命令行及Java+Tesseract-OCR对图像进行(字母+数字+中文)识别,亲测可行相关推荐
- Windows下命令行Git无法显示中文问题解决方案
Windows下命令行Git无法显示中文问题解决方案 参考文章: (1)Windows下命令行Git无法显示中文问题解决方案 (2)https://www.cnblogs.com/burningcar ...
- windows下命令行方式激活venv虚拟环境
windows下命令行方式激活venv虚拟环境 先cd venv cd Scripts activate 成功切换到venv虚拟环境下
- Cmder–Windows下命令行利器
Cmder--Windows下命令行利器 目录 cmder 安装包 修改命令提示符λ为$ 添加至环境变量 多窗口 新开shell窗口 添加ll等命令 目录 cmder 安装包 修改命令提示符λ为$ 添 ...
- windows下命令行修改系统时间;修改系统时间的软件
找了很久,都没有找到,还找了关键词 dos下修改系统时间 因为看到linux下修改系统时间是用hwclock 命令写入主板芯片. 而我由于某些原因想自动化修改系统时间,所以找windows下修改系统时 ...
- windows下命令行启动tomcat
2019独角兽企业重金招聘Python工程师标准>>> win+R+cmd 进入命令行 进入tomcat安装目录中的bin目录,startup.bat为启动tomcat,shutdo ...
- Windows下命令行连接mysql及导入sql文件
转自: https://www.cnblogs.com/CHEUNGKAMING/p/5709796.html 首先呢看连接本地的MySQL 格式: mysql -h主机地址 -u用户名 -p用户密码 ...
- Windows下命令行安装Pytorch(GPU)
对于一个小白来说,找了好多博客,都是告诉你去下载cuda,cudnn,然后安装配置各种环境,十分麻烦.最近才发现了最简单的安装方法,只需要在cmd中输入简单的几行命令即可. 注意:以下命令行要在对应的 ...
- java调用linux进程,Java——调用Linux和Windows下命令行执行程序
1.项目需求 需要在后端调用其他程序并且获取返回结果 2.第一个版本环境:Windows //cmdstr为命令参数 public boolean excuteCmd(String cmdstr) { ...
- win oracle 重启命令,Windows下命令行如何启动Oracle10g?
.启动TNS监听 C:\Documents and Settings\Administrator>lsnrctl start LSNRCTL for 32-bit Windows: Versio ...
最新文章
- 【点云论文速读】最佳点云分割分析
- Cassandra架构、设计(集群表)和性能报告
- MySQL的SQL Profiler性能分析器
- html5 初试 indexedDB
- 【MySQL数据库】一天学完MySQL笔记——纯SQL文档版
- Angular multiple binding debug
- SAP CRM WebClient UI点了产品主数据搜索结果超链接后的跳转调试
- Windows 下有哪些逆天的软件?
- 二进制文件签名_二进制数的签名表示
- powerdesigner 生成实体代码 附加生成xml
- Swift NSDate的一个分类,把Mon Apr 04 19:45:37 +0800 2016这种格式的时间转换为2016-04-04 11:45:37 +0000
- 手机ppi排行测试软件,依然是目前屏幕色准表现最好的智能手机:iPhone XS 屏幕测试...
- PRCV2018美图短视频实时分类挑战赛落幕,第一名解决方案技术解读
- 全国医疗卫生信息化公司网址大全
- LINUX下PHP扩展开发:第一个C扩展
- 2021-09-08 网安实验-编码解码-九宫格键盘编码
- Promise学习:基础入门
- 关于K.im的满满干货!
- kafka搭建,演示
- 兔子数列 - C语言