自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

開發(fā) 后端
近日瀏覽網(wǎng)上一些圖片提取文字的網(wǎng)站,覺得甚是有趣,花費半日也做了個在線圖片識別程序,完成了兩個技術(shù)方案的選擇。

[[422621]]

 近日瀏覽網(wǎng)上一些圖片提取文字的網(wǎng)站,覺得甚是有趣,花費半日也做了個在線圖片識別程序,完成了兩個技術(shù)方案的選擇,一是 tesseract + Python flask的方案實現(xiàn),二是 tesseract + Spring web 的技術(shù)解決方案,并簡作論述,與君共勉。

一、tesseract-ocr介紹

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

官方的tesseract定義:

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

即tesseract包括一個視覺字符識別引擎libtesseract和命令行程序tesseract。

當(dāng)前最新穩(wěn)定版本是4.x.x基于LSTM,源碼可從找到tesseract的GitHub: tesseract.找到。

關(guān)于tesseract的工作模式如上圖所示。假設(shè)現(xiàn)在有一個圖片輸入,整個執(zhí)行流程為:

  1.  輸入(一張圖片)
  2.  有用信息提取(比如一個圖片上只有一個字,那其他留白的是無用,這個字上每個色素是有效的并且相關(guān))
  3.  找出文字/線條
  4.  字符分類集
  5.  輸入與分類集對比找出最接近的
  6.  輸出識別結(jié)果

二、安裝tesseract

第一步下載

下載合適的exe安裝文件:

網(wǎng)址:https://digi.bib.uni-mannheim.de/tesseract/,下載完成后后裝即可

第二步環(huán)境變量配置

在path變量中加入tesseract-ocr的安裝路徑

第三步安裝成功檢測

使用tesseract指令,顯示如下:

Linux環(huán)境下載安裝與上述類似

下載leptonica 和 tesseract兩個包,解壓安裝,配置環(huán)境變量即可。網(wǎng)上很容易找到該安裝包。

三、使用命令行

1.tesseract + 圖片路徑 + 保存結(jié)果名 + -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ā)啦,廢話不多說,直接上代碼。

四、程序?qū)崿F(xiàn)(Python)

程序設(shè)計思路:

上傳圖片 -> 保存 ->對上傳的圖片執(zhí)行tesseract指令->獲取識別結(jié)果

只有二十多行代碼就實現(xiàn)了,so easy,以后網(wǎng)上看到圖片識別程序再也不會感覺神奇了吧! 

  1. coding=utf-8  
  2. from flask import Flask, request  
  3. import os  
  4. import datetime  
  5. import time  
  6. app = Flask(__name__) 
  7. def get_time_stamp():  
  8.     times = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')  
  9.     array = time.strptime(times, "%Y-%m-%d %H:%M:%S")  
  10.     time_stamp = int(time.mktime(array))  
  11.     return time_stamp  
  12. @app.route('/image/extract', methods=['POST'])  
  13. def pure_rec():  
  14.     file = request.files.get('file')  
  15.     ts = str(get_time_stamp())  
  16.     up_path = os.path.join(ts + file.filename)  
  17.     file.save(up_path)  
  18.     cmd = "tesseract "+up_path+" " + ts + " -l chi_sim"  
  19.     print(cmd)  
  20.     os.system(cmd)  
  21.     with open(ts+".txt", 'r+', encoding="utf-8") as f: 
  22.         result = f.read()  
  23.         return result   
  24. if __name__ == '__main__':  
  25.     app.run(debug=True

五、程序?qū)崿F(xiàn)(Java)

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

Controller: 

  1. @RestController  
  2. public class LiteralExtractController {  
  3.     @PostMapping("/image/extract")  
  4.     public String reg(@RequestParam("file")MultipartFile file) throws IOException {  
  5.         String result = "" 
  6.         String filefilename = file.getOriginalFilename();  
  7.         File save = new File(System.getProperty("user.dir")+"\\"+filename);  
  8.         if (!save.exists()){  
  9.             save.createNewFile();  
  10.         }  
  11.         file.transferTo(save);  
  12.         String cmd = String.format("tesseract %s stdout -l %s",System.getProperty("user.dir")+"\\"+filename,"chi_sim");  
  13.         result = cmd(cmd);  
  14.         return result;  
  15.     }  
  16.     public static String cmd(String cmd) {  
  17.         BufferedReader br = null 
  18.         try {  
  19.             Process p = Runtime.getRuntime().exec(cmd);  
  20.             br = new BufferedReader(new InputStreamReader(p.getInputStream()));  
  21.             String line = null 
  22.             StringBuilder sb = new StringBuilder();  
  23.             while ((line = br.readLine()) != null) {  
  24.                 sb.append(line + "\n");  
  25.             }  
  26.             return sb.toString();  
  27.         } catch (Exception e) {  
  28.             e.printStackTrace();  
  29.         }  
  30.         finally  
  31.         {  
  32.             if (br != null)  
  33.             {  
  34.                 try {  
  35.                     br.close();  
  36.                 } catch (Exception e) {  
  37.                     e.printStackTrace();  
  38.                 }  
  39.             }  
  40.         }  
  41.         return null;  
  42.     }  

六、實驗測試

很簡單二十多行代碼就完成了,看看效果怎么樣吧。

測試一圖片:

測試一結(jié)果:

測試二圖片:

測試二結(jié)果:

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

七、總結(jié)

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

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

 

責(zé)任編輯:龐桂玉 來源: java版web項目
相關(guān)推薦

2020-09-29 10:09:43

Python文字識別編程語言

2020-04-17 14:48:30

代碼機器學(xué)習(xí)Python

2021-06-30 10:43:35

云系統(tǒng)架構(gòu)代碼

2020-03-01 18:39:51

手機QQQQ騰訊

2024-11-12 13:41:49

2020-12-30 10:55:01

代碼Java二維碼

2022-09-21 14:17:58

Umi-OCR軟件

2021-05-10 06:02:44

CSS 文字動畫技巧

2022-05-09 13:59:41

Python提取PPTword文檔

2022-08-14 16:15:52

Python機器學(xué)習(xí)大數(shù)據(jù)

2023-11-01 10:36:19

2022-06-29 08:37:11

授權(quán)碼模式底層

2016-09-06 21:09:35

Phpgd庫圖片水印

2023-10-27 11:38:09

PythonWord

2024-01-10 14:45:46

Redis數(shù)據(jù)庫存儲

2023-12-24 22:52:26

PythonPPT代碼

2020-08-10 06:36:21

強化學(xué)習(xí)代碼深度學(xué)習(xí)

2022-09-16 08:04:25

阿里云權(quán)限網(wǎng)絡(luò)

2021-12-12 18:18:15

代碼元宇宙Python
點贊
收藏

51CTO技術(shù)棧公眾號