现在的世界,什么都需要人工智能AI进行处理,那么,对于Java程序猿来说,是不是有些工作是不是就不能胜任呢,答案是显然是不一定的,对于图片识别来说,这个任务就可以使用Java进行开发,虽然效率可能不是最好的,但是,结果是一致的。
 下面我就开始出大招了
 第一步,添加技能点
 如果需要进行图片识别,那么肯定需要识别的插件或者是一个库呀,不然程序怎么清楚是识别那些东西,识别是中文还是英文,对不对,这个时候呢,就出现了“野怪”——ocr,给我们提供支持,从而进行升级添加技能点
 什么事OCR,这个大家可以自行百度,其主要作用就是为我们进行识别图片中的文字的一个重要角色,下载方式直接百度tesseract下载就行
 下载完成后,需要进行配置环境变量,我这也不进行过多描述,可以自行百度,如果需要,可后续追加一篇配置下载的博客说明
 那么野怪位置找到了,我们就需要开始刷怪升级了
 第二步,添加词库
 需要识别文字,那么武器必不可少,如果没有装备,野怪也是能秒人的,所以,我们需要去下载一些词库,例如中文词库:chi_sim.traineddata,下载方式也可在百度上进行下载下来,下载完成后,在刚刚安装的tesseract下找到tessdata文件夹,将其复制过来就可以了,我的是D盘下,所以位置如下图
 
 移动过来后,我们就有武器了,开始刷怪
 第三步,开大,结束战斗(前方高能)
    public static String IdentifyThePicture(){//识别图片System.out.println("开始识别");long starttime = System.currentTimeMillis();//获取当前程序执行绝对路径。String text = orcde("normal", "D:\\tesseract-ocr\\tessdata", "D://JT//1.png");System.out.println("discriminate interval:" + (System.currentTimeMillis() - starttime) + ",ocr text:" + text);return text;}
 
public static String orcde(String lang, String langpath, String imageurl){// 识别图片的路径(修改为自己的图片路径)String path = imageurl;// 语言库位置(修改为跟自己语言库文件夹的路径)String lagnguagePath = langpath;File file = new File(path);ITesseract instance = new Tesseract();//设置训练库的位置instance.setDatapath(lagnguagePath);//chi_sim :简体中文, eng    根据需求选择语言库instance.setLanguage(lang);String result = null;try {long startTime = System.currentTimeMillis();result =  instance.doOCR(file);long endTime = System.currentTimeMillis();System.out.println("Time is:" + (endTime - startTime) + " 毫秒");} catch (TesseractException e) {e.printStackTrace();}System.out.println("result: ");System.out.println(result);return result;}
 
运行结果如下:
 
 图片中的内容如下:
 
 你是不是发现有两个字不对,这个咱暂时不告诉你,请继续往下看
 代码看起来是不是很简单,(你心里觉得是这样想的)因为这是有野怪,如果没有野怪怎么办,或者等级不够怎么办(1级单挑100级?)显然是不可以的,这个时候就需要进行训练了,训练啥,训练词库,怎么训练,如下:
 第一步,下载jTessBoxEditor_jb51(找到新手训练营)
 jTessBoxEditor_jb51这是啥东西,我告诉你,这个是训练词库必须要用的一个jar包,但是呢,他不是在项目里面使用的,而是独立运行的,怎么使用,待会就来
 第二步,生产词条(找到野怪)
 怎么生产词条,也就将你需要识别的一些文字,做成一个jpg的图片,怎么做,直接截图呗,然后保存为jpg就行了
 是不是说好简单,还没完呢!
 有了jpg图片后,需要对其改变格式,不能手动改变后缀,需要通过格式工厂,或者在线转换插件进行转换,将jpg的图片转换为tif的文件格式,然后启动我们的新手训练营jTessBoxEditor_jb51,(里面有一个启动脚本的了)
 
 就是上面圈住的这个bat脚本,启动后,会出来一个Java窗口
 
 先过去将刚刚的图片更改图片名字,这个是有要求的
tif文面命名格式[lang].[fontname].exp[num].tif
lang是语言           fontname是字体
比如我们要训练自定义字库myfontlab      字体名normal
那么我们把图片文件重命名 myfontlab.normal.exp0.jpg在转tif。
 

这个时候呢,我们需要打开黑命令框(CMD)输入命令生成box文件
tesseract myfontlab.normal.exp0.jpg myfontlab.normal.exp0 -l chi_sim batch.nochop makebox
 
运行结果如图
 
 然后就会产生一个新的文件在该文件夹下
 
 这个时候就需要用的我们的jTessBoxEditor_jb51了,点击open,选择刚刚处理过得tif文件图片得到下面结果数据
 
 
然后开始修改我们不对的字第5行的窝应该是我,所以需要进修改,选择改行,
 
 然后点击save进保存,这个时候就词条就生产完毕了需要导入到我们的词库中去
第三步,词条添加到词库中(捡装备了)
 cmd中输入命令,生成.tr文件
tesseract  myfontlab.normal.exp0.jpg  myfontlab.normal.exp0  nobatch box.train
 

 再输入命令,生成unicharset文件
unicharset_extractor myfontlab.normal.exp0.box
 

新建一个font_properties.txt文件
 里面内容写入 normal 0 0 0 0 0 表示默认普通字体
 运行命令
shapeclustering -F font_properties.txt -U unicharset myfontlab.normal.exp0.tr
 

mftraining -F font_properties.txt -U unicharset -O unicharset myfontlab.normal.exp0.tr
 

cntraining myfontlab.normal.exp0.tr
 

 目录下会生成对应下列五个文件,在这五个文件前加上normal.进行重命名
 
 合并五个文件,此时目录下的normal.traineddata 就是训练好的字库文件
 执行 命令
combine_tessdata normal. 
 

 最后就产生了一个新的文件,这就是刚刚训练出来的词库
 
 最后将新的词库放人的OCR中就行了,怎么放,教你
 把normal.traineddata 复制到Tesseract-OCRt程序目录下的“tessdata”目录,
 在Tesseract-OCRt程序目录下执行
tesseract.exe myfontlab.normal.exp0.jpg out –l normal
 

 这个时候,词库就好了,再运行一下试试
 
 完美,图文识别成功
疯狂打架去吧,再也不用担心打不过了 ^_^
以上内容可能有不正确的地方,望大佬指正,如果需要下载配置介绍,欢迎评论去留言哦
 附上pom文件依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.4</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.play</groupId><artifactId>play</artifactId><version>0.0.1-SNAPSHOT</version><name>play</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--tesseract-platform里面包含了所有tesseract所需要的jar--><dependency><groupId>org.bytedeco.javacpp-presets</groupId><artifactId>tesseract-platform</artifactId><version>3.04.01-1.3</version></dependency><dependency><groupId>net.sourceforge.tess4j</groupId><artifactId>tess4j</artifactId><version>4.4.0</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>











