当前位置: 首页 > 后端技术 > Java

从图片中提取文字的功能很神奇?几行Java代码搞定!

时间:2023-04-01 21:49:57 Java

送你以下java学习资料,文末有获取方法总结。一个是tesseract+pythonflask方案的实现,一个是tesseract+springweb的技术方案,简单讨论一下,分享给大家。一、tesseract-ocr简介ocr的意思是OpticalCharacterRecognition,即视觉字符识别。Tesseract是该领域特别优秀的开源作品。tesseract官方定义:OCR引擎——libtesseract和一个命令行程序——tesseract。即tesseract包括视觉字符识别引擎libtesseract和命令行程序tesseract。目前最新的稳定版是基于LSTM的4.x.x,源码可以在GitHub上找到:tesseract。在哪里可以找到tesseract。tesseract的工作模式如上图所示。假设现在有一张图片输入,整个执行过程就是:输入(一张图片)有用的信息提取(比如一张图片上只有一个字,其他空格都没用,这个字上的每一种颜料有效且相关)找到文本/行字符分类集将输入与分类集进行比较,找到最接近的输出识别结果2.安装tesseract第一步下载下载合适的exe安装文件:网址:https://digi.bib.uni-mannheim...,下载完成后,就可以安装了。第二步是配置环境变量。将tesseract-ocr的安装路径添加到path变量中。从图中下载leptonica和tesseract这两个包,解压安装,配置环境变量。安装包在网上很容易找到。3、使用命令行1.tesseract+图片路径+保存结果名称+-l语言设置列表:tesseract1606150081.png1606150081-lchi_sim2.tesseract+图片路径+stdout-l+语言设置列表:tesseractD:\company\ruigushop\spring-2s\test.pngstdout-lchi_sim有了上面就可以完成web图像识别程序的开发了,废话少说,直接上传代码即可。4、程序实现(Python)程序设计思路:上传图片->保存->对上传的图片执行tesseract指令->得到识别结果,只需要20多行代码就可以实现,soeasy,我会以后在网上看到图片识别程序再也不会觉得神奇了!#coding=utf-8fromflaskimportFlask,requestimportosimportdatetimeimporttimeapp=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()returnresultif__name__=='__main__':app.run(debug=True)5.程序实现(Java)不需要任何第三方jarpackages,只构建一个简单的springbootweb项目,没有任何其他额外的依赖。控制器:packagecom.lbh.web.controller;/**版权@lbhbinhao@163.com*作者:liubinhao*日期:2020/11/23*++++++______@Authorliubinhao|//|//|*+/_____/|/_____/|/_____/|*|||||||||*||||||________|||*|||||/|||*|||||/____________|||*|||__________________||____________|||*||//|||||||*||/________________//||/||/*|________________________|/b|_____|/|_____|/*/importorg.springframework.web.bind.annotation.PostMapping;importorg.springframework.web.bind.annotation.RequestParam;导入torg.springframework.web.bind.annotation.RestController;importorg.springframework.web.multipart.MultipartFile;importjava.io.BufferedReader;importjava.io.File;importjava.io.IOException;importjava.io。InputStreamReader;@RestControllerpublicclassLiteralExtractController{@PostMapping("/image/extract")publicStringreg(@RequestParam("file")MultipartFilefile)throwsIOException{Stringresult='';Stringfilename=file.getOriginalFilename();Filesave=newFile(System.getProperty("user.dir")+"\\"+文件名);如果(!save.exists()){save.createNewFile();}file.transferTo(保存);Stringcmd=String.format("tesseract%sstdout-l%s",System.getProperty("user.dir")+"\\"+文件名,"chi_sim");结果=cmd(cmd);返回结果;}publicstaticStringcmd(Stringcmd){BufferedReaderbr=null;try{进程p=Runtime.getRuntime().exec(cmd);br=newbufferedReader(NewInputStreamReader(p.getInputStream()));字符串行=空;stringbuildersb=newstringBuilder();空间(如=br.Readline)。append(line+"\n");}returnsb.tostring();}Catch(ExceptionE){e.printstacktrace();}最后{if(br!=null){bR.Close();}catch(Exceptione){返回空值;}}e.printStackTrace();酒吧。test1picture:pictureTest1result:picturetest2picture:picturetest2result:pictureperfect,recognitionisveryaccurate,第二次测试的时候全是英文字符,我们用的是中文训练数据集,虽然是也很好识别,但是速度会慢很多。7.总结图片识别是当今网络技术领域非常热门的一个领域,而本次完成的程序完全依赖于别人的开源框架来完成本次技术实现。它在应用层面是成功的,但本质上是不实用的。算法,核心技术,如果你只关心应用层开发,上面解决了我们计算机正则字符识别的问题。上面的代码基本没有什么难点,直接复制就可以用了。另外,tesseract是一款优秀的开源字符识别软件,但也不是万能的。Tesseract只能识别规则字符,对一些艺术字符和抽象字符无能为力。