一、tesseract-ocr介紹
ocr含義是Optical Character Recognition,含義即視覺字符識別。而tesseract是該領(lǐng)域特別優(yōu)秀開源的作品。
官方的tesseract定義:
OCR engine - libtesseract and a command line program - tesseract.
即tesseract包括一個(gè)視覺字符識別引擎libtesseract和命令行程序tesseract。
當(dāng)前最新穩(wěn)定版本是4.x.x基于LSTM,源碼可從找到tesseract的GitHub: tesseract.找到。
關(guān)于tesseract的工作模式如上圖所示。假設(shè)現(xiàn)在有一個(gè)圖片輸入,整個(gè)執(zhí)行流程為:
- 輸入(一張圖片)
- 有用信息提?。ū热缫粋€(gè)圖片上只有一個(gè)字,那其他留白的是無用,這個(gè)字上每個(gè)色素是有效的并且相關(guān))
- 找出文字/線條
- 字符分類集
- 輸入與分類集對比找出最接近的
- 輸出識別結(jié)果
二、安裝tesseract
第一步下載
下載合適的exe安裝文件:
網(wǎng)址:https://digi.bib.uni-mannheim.de/tesseract/,下載完成后后裝即可
第二步環(huán)境變量配置
在path變量中加入tesseract-ocr的安裝路徑
第三步安裝成功檢測
使用tesseract指令,顯示如下:
linux環(huán)境下載安裝與上述類似
下載leptonica 和 tesseract兩個(gè)包,解壓安裝,配置環(huán)境變量即可。網(wǎng)上很容易找到該安裝包。
三、使用命令行
1.tesseract + 圖片路徑 + 保存結(jié)果名 + -l 語言集
示列:tesseract 1606150081.png 1606150081 -l chi_sim
2.tesseract + 圖片路徑 +stdout -l +語言集
示列:tesseract D:company uigushopspring-2s est.png stdout -l chi_sim
有了上述之后就可以完成web圖片識別程序的開發(fā)啦,廢話不多說,直接上代碼。
四、程序?qū)崿F(xiàn)(Python)
程序設(shè)計(jì)思路:
上傳圖片 -> 保存 ->對上傳的圖片執(zhí)行tesseract指令->獲取識別結(jié)果
只有二十多行代碼就實(shí)現(xiàn)了,so easy,以后網(wǎng)上看到圖片識別程序再也不會感覺神奇了吧!
關(guān)注Java核心技術(shù),推送更多 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)
五、程序?qū)崿F(xiàn)(Java)
不需要任何引入第三方j(luò)ar包,搭建一個(gè)簡單的springboot web項(xiàng)目就可以了,沒有其他額外的依賴。
推薦一個(gè) Spring Boot 基礎(chǔ)教程及實(shí)戰(zhàn)示例:https://www.javastack.cn/categories/Spring-Boot/
packagecom.lbh.web.controller;
/*
*Copyright@[email protected]
*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;
}
}
六、實(shí)驗(yàn)測試
很簡單二十多行代碼就完成了,看看效果怎么樣吧。
七、總結(jié)
圖片識別在當(dāng)今網(wǎng)絡(luò)技術(shù)領(lǐng)域是非常熱門的一塊,而這次完成的這個(gè)程序完全是依賴別人開源框架來完成了這個(gè)技術(shù)實(shí)現(xiàn),在應(yīng)用層面這是成功的,但是本質(zhì)上并沒有實(shí)際算法,技術(shù)核心上的東西,如果只關(guān)心應(yīng)用層開發(fā)上述解決了我們計(jì)算機(jī)在規(guī)則字符識別上的問題。
上述代碼中基本沒有難點(diǎn),直接復(fù)制即可使用。此外,tesseract作為一款優(yōu)秀的開源字符識別軟件,但它也不是萬能的,tesseract只能識別規(guī)則的字符,對于一些藝術(shù)字,抽象字它是無能為力的。
責(zé)任編輯:haq
-
JAVA
+關(guān)注
關(guān)注
19文章
2976瀏覽量
105223 -
代碼
+關(guān)注
關(guān)注
30文章
4837瀏覽量
69129
原文標(biāo)題:Java 幾行代碼提取圖片文字,過個(gè)厲害了。。
文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論