当前位置: 首页 > 科技观察

几行 Java 代码搞定图片提取文字功能

时间:2023-03-16 23:02:12 科技观察

几行Java代码搞定图片提取文字功能+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.de/tesseract/,下载完成后即可安装。第二步是配置环境变量。将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-8fromflaskiimportFlask,requestimportosimportdatetimeimporttimeapp=Flask(__name__)defget_time_stamp():times=datetime.datetime.now().strftime('%Y-%m-%d%H:%M:%S')数组=time.strptime(times,"%Y-%m-%d%H:%M:%S")time_stamp=int(time.mktime(array))returntime_stamp@app.route('/image/extract',方法=['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)不需要引入任何第三方jar包,只需要搭建一个简单的SpringbootWeb工程即可,无其他额外内容依赖。控制器:@RestControllerpublicclassLiteralExtractController{@PostMapping("/image/extract")publicStringreg(@RequestParam("file")MultipartFilefile)throwsIOException{Stringresult="";Stringfilefilename=file.getOriginalFilename();Filesave=newFile(System.getProperty("user.dir")+"\\"+文件名);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+"\n");}returnsb.toString();}catch(Exceptione){e.printStackTrace();}最后{if(br!=null){try{br.close();}赶上(Exceptione){e.printStackTrace();}}}returnnull;}}六、实验测试很简单。需要20多行代码才完成,来看看效果如何。测试1图片:测试1结果:测试2图片:测试第二个结果:完美,识别非常准确。当第二次测试全是英文字符时,我们使用的是中文训练数据集。虽然也很好识别,但是速度会慢很多。7.总结图片识别是当今网络技术领域非常热门的一个领域,而本次完成的程序完全依赖于别人的开源框架来完成本次技术实现。它在应用层面是成功的,但本质上是不实用的。算法,核心技术,如果你只关心应用层开发,上面解决了我们计算机正则字符识别的问题。上面的代码基本没有什么难点,直接复制就可以用了。另外,tesseract是一款优秀的开源字符识别软件,但也不是万能的。Tesseract只能识别规则字符,对一些艺术字符和抽象字符无能为力。

猜你喜欢