日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

几行Java解决图片提取文字功能

發(fā)布時間:2023/12/10 java 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 几行Java解决图片提取文字功能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

幾行Java 代碼搞定圖片提取文字功能

一、tesseract-ocr介紹

ocr 含義是Optical Character Recognition,含義即視覺字符識別。而tesseract是該領域特別優(yōu)秀開源的作品。
官方的tesseract定義:

OCR engine - libtesseract and a command line program - tesseract.

即tesseract包括一個視覺字符識別引擎libtesseract和命令行程序tesseract。
當前最新穩(wěn)定版本是4.x.x基于LSTM,源碼可從找到tesseract的GitHub: tesseract.找到。
關于tesseract的工作模式如上圖所示。假設現在有一個圖片輸入,整個執(zhí)行流程為:
1:輸入(一張圖片)
2:有用信息提取(比如一個圖片上只有一個字,那其他留白的是無用,這個字上每個色素是有效的并且相關)
3:找出文字/線條
4:字符分類集
5:輸入與分類集對比找出最接近的
6:輸出識別結果

二、安裝tesseract

第一步下載
下載合適的exe安裝文件:
網址:https://digi.bib.uni-mannheim.de/tesseract/,下載完成后后裝即可

第二步環(huán)境變量配置
在path變量中加入tesseract-ocr的安裝路徑第三步安裝成功檢測
使用tesseract指令,顯示如下:

Linux環(huán)境下載安裝與上述類似
下載leptonica 和 tesseract兩個包,解壓安裝,配置環(huán)境變量即可。

三、使用命令行

1.tesseract + 圖片路徑 + 保存結果名 + -l 語言集

示列: tesseract 1606150081.png 1606150081 -l chi_sim

2.tesseract + 圖片路徑 +stdout -l +語言集

示列: tesseract D:\company\ruigushop\spring-2s\test.png stdout -l chi_sim

有了上述之后就可以完成web圖片識別程序的開發(fā)啦,廢話不多說,直接上代碼。

四、程序實現(Python)

程序設計思路:
上傳圖片 -> 保存 ->對上傳的圖片執(zhí)行tesseract指令->獲取識別結果
只有二十多行代碼就實現了,so easy,以后網上看到圖片識別程序再也不會感覺神奇了吧!

# coding=utf-8 from flask import Flask, request import os import datetime import timeapp = Flask(__name__)def get_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))return time_stamp@app.route('/image/extract', methods=['POST']) def pure_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 + " -l chi_sim"print(cmd)os.system(cmd)with open(ts+".txt", 'r+', encoding="utf-8") as f:result = f.read()return resultif __name__ == '__main__':app.run(debug=True)

五、程序實現(Java)

不需要任何引入第三方jar包,搭建一個簡單的 Springboot Web 項目就可以了,沒有其他額外的依賴。
Controller:

@RestController public class LiteralExtractController {@PostMapping("/image/extract")public String reg(@RequestParam("file")MultipartFile file) throws IOException {String result = "";String filename = file.getOriginalFilename();File save = new File(System.getProperty("user.dir")+"\\"+filename);if (!save.exists()){save.createNewFile();}file.transferTo(save);String cmd = String.format("tesseract %s stdout -l %s",System.getProperty("user.dir")+"\\"+filename,"chi_sim");result = cmd(cmd);return result;}public static String cmd(String cmd) {BufferedReader br = null;try {Process p = Runtime.getRuntime().exec(cmd);br = new BufferedReader(new InputStreamReader(p.getInputStream()));String line = null;StringBuilder sb = new StringBuilder();while ((line = br.readLine()) != null) {sb.append(line + "\n");}return sb.toString();} catch (Exception e) {e.printStackTrace();}finally{if (br != null){try {br.close();} catch (Exception e) {e.printStackTrace();}}}return null;} }

六、實驗測試

很簡單二十多行代碼就完成了,看看效果怎么樣吧。
測試一圖片:
測試一結果:

測試二圖片:

測試二結果:

perfect,識別的很準確,第二個測試全部是英文字符的時候我們采用了中文訓練的數據集,雖然也很好的識別了,但是速度會慢很多。

七、總結

圖片識別在當今網絡技術領域是非常熱門的一塊,而這次完成的這個程序完全是依賴別人開源框架來完成了這個技術實現,在應用層面這是成功的,但是本質上并沒有實際算法,技術核心上的東西,如果只關心應用層開發(fā)上述解決了我們計算機在規(guī)則字符識別上的問題。

上述代碼中基本沒有難點,直接復制即可使用。此外,tesseract作為一款優(yōu)秀的開源字符識別軟件,但它也不是萬能的,tesseract只能識別規(guī)則的字符,對于一些藝術字,抽象字它是無能為力的。

總結

以上是生活随笔為你收集整理的几行Java解决图片提取文字功能的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。