一、tesseract-ocr介绍
ocr含义是Optical Character Recognition,含义即视觉字符识别。而tesseract是该领域特别优秀开源的作品。
官方的tesseract定义:
OCR engine - libtesseract and a command line program - tesseract.
即tesseract包括一个视觉字符识别引擎libtesseract和命令行程序tesseract。
当前最新稳定版本是4.x.x基于LSTM,源码可从找到tesseract的GitHub: tesseract.找到。
关于tesseract的工作模式如上图所示。假设现在有一个图片输入,整个执行流程为:
二、安装tesseract
第一步下载
下载合适的exe安装文件:
网址:https://digi.bib.uni-mannheim.de/tesseract/,下载完成后后装即可
第二步环境变量配置
在path变量中加入tesseract-ocr的安装路径
第三步安装成功检测
使用tesseract指令,显示如下:
linux环境下载安装与上述类似
下载leptonica 和 tesseract两个包,解压安装,配置环境变量即可。网上很容易找到该安装包。
三、使用命令行
1.tesseract + 图片路径 + 保存结果名 + -l 语言集
示列:tesseract 1606150081.png 1606150081 -l chi_sim
2.tesseract + 图片路径 +stdout -l +语言集
示列:tesseract D:company uigushopspring-2s est.png stdout -l chi_sim
有了上述之后就可以完成web图片识别程序的开发啦,废话不多说,直接上代码。
四、程序实现(Python)
程序设计思路:
上传图片 -> 保存 ->对上传的图片执行tesseract指令->获取识别结果
只有二十多行代码就实现了,so easy,以后网上看到图片识别程序再也不会感觉神奇了吧!
关注Java核心技术,推送更多 Java 干货!
#coding=utf-8
fromflaskimportFlask,request
importos
importdatetime
importtime
app=Flask(__name__)
defget_time_stamp():
times=datetime.datetime.now().strftime('%Y-%m-%d%H:%M:%S')
array=time.strptime(times,"%Y-%m-%d%H:%M:%S")
time_stamp=int(time.mktime(array))
returntime_stamp
@app.route('/image/extract',methods=['POST'])
defpure_rec():
file=request.files.get('file')
ts=str(get_time_stamp())
up_path=os.path.join(ts+file.filename)
file.save(up_path)
cmd="tesseract"+up_path+""+ts+"-lchi_sim"
print(cmd)
os.system(cmd)
withopen(ts+".txt",'r+',encoding="utf-8")asf:
result=f.read()
returnresult
if__name__=='__main__':
app.run(debug=True)
五、程序实现(Java)
不需要任何引入第三方jar包,搭建一个简单的springboot web项目就可以了,没有其他额外的依赖。
推荐一个 Spring Boot 基础教程及实战示例:https://www.javastack.cn/categories/Spring-Boot/
packagecom.lbh.web.controller;
/*
*Copyright@lbhbinhao@163.com
*Author:liubinhao
*Date:2020/11/23
*++++______@authorliubinhao____________
*+++//|//|//|
*+/_____/|/_____/|/_____/|
*|||||||||
*||||||________|||
*|||||/|||
*|||||/___________|||
*|||___________________||____________|||
*||//|||||||
*||/_________________//||/||/
*|_________________________|/b|_____|/|_____|/
*/
importorg.springframework.web.bind.annotation.PostMapping;
importorg.springframework.web.bind.annotation.RequestParam;
importorg.springframework.web.bind.annotation.RestController;
importorg.springframework.web.multipart.MultipartFile;
importjava.io.BufferedReader;
importjava.io.File;
importjava.io.IOException;
importjava.io.InputStreamReader;
@RestController
publicclassLiteralExtractController{
@PostMapping("/image/extract")
publicStringreg(@RequestParam("file")MultipartFilefile)throwsIOException{
Stringresult="";
Stringfilename=file.getOriginalFilename();
Filesave=newFile(System.getProperty("user.dir")+""+filename);
if(!save.exists()){
save.createNewFile();
}
file.transferTo(save);
Stringcmd=String.format("tesseract%sstdout-l%s",System.getProperty("user.dir")+""+filename,"chi_sim");
result=cmd(cmd);
returnresult;
}
publicstaticStringcmd(Stringcmd){
BufferedReaderbr=null;
try{
Processp=Runtime.getRuntime().exec(cmd);
br=newBufferedReader(newInputStreamReader(p.getInputStream()));
Stringline=null;
StringBuildersb=newStringBuilder();
while((line=br.readLine())!=null){
sb.append(line+"
");
}
returnsb.toString();
}catch(Exceptione){
e.printStackTrace();
}
finally
{
if(br!=null)
{
try{
br.close();
}catch(Exceptione){
e.printStackTrace();
}
}
}
returnnull;
}
}
六、实验测试
很简单二十多行代码就完成了,看看效果怎么样吧。
七、总结
图片识别在当今网络技术领域是非常热门的一块,而这次完成的这个程序完全是依赖别人开源框架来完成了这个技术实现,在应用层面这是成功的,但是本质上并没有实际算法,技术核心上的东西,如果只关心应用层开发上述解决了我们计算机在规则字符识别上的问题。
上述代码中基本没有难点,直接复制即可使用。此外,tesseract作为一款优秀的开源字符识别软件,但它也不是万能的,tesseract只能识别规则的字符,对于一些艺术字,抽象字它是无能为力的。
责任编辑:haq
-
JAVA
+关注
关注
19文章
2978浏览量
105293 -
代码
+关注
关注
30文章
4841浏览量
69204
原文标题:Java 几行代码提取图片文字,过个厉害了。。
文章出处:【微信号:AndroidPush,微信公众号:Android编程精选】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
Java 23功能介绍
![<b class='flag-5'>Java</b> 23功能介绍](https://file1.elecfans.com/web3/M00/00/FA/wKgZO2dPuOmAC6YoAAAZQa1ialc743.png)
Java代码之美,从遵循样式规范开始
![<b class='flag-5'>Java</b><b class='flag-5'>代码</b>之美,<b class='flag-5'>从</b>遵循样式规范开始](https://file1.elecfans.com//web3/M00/00/1B/wKgZPGdGlT2AX8uIAAKWag0WCqs787.png)
对比Python与Java编程语言
java反编译能拿到源码吗
java反编译的代码可以修改么
【《时间序列与机器学习》阅读体验】+ 时间序列的信息提取
OPA189怎么从交流信号中提取直流信号?
华纳云:java web和java有什么区别java web和java有什么区别
![华纳云:<b class='flag-5'>java</b> web和<b class='flag-5'>java</b>有什么区别<b class='flag-5'>java</b> web和<b class='flag-5'>java</b>有什么区别](https://file1.elecfans.com/web2/M00/FD/AC/wKgaomaWBouAMAnAAAAglmvluP4293.png)
探讨AI编写代码技术,以及提高代码质量的关键:静态代码分析工具Perforce Helix QAC & Klocwork
扎心灵魂小拷问:有了AI编写代码之后,软件工程师会被AI取代吗?
![扎心灵魂小拷问:有了AI编写<b class='flag-5'>代码</b>之后,软件工程师会被AI取代吗?](https://file.elecfans.com/web2/M00/52/D4/pYYBAGLNkrKAeFJaAAAjXRuImx0496.png)
评论