ocr學習第一篇:java通過tesseract-ocr實現圖像文字識別

參考資料:

安裝包下載地址:https://blog.csdn.net/qq_43317529/article/details/83340739
語言包下載地址:  https://blog.csdn.net/SpuerCheng/article/details/79323620
環境變量配置: https://blog.csdn.net/p312011150/article/details/82624567
jTessBoxEditor下載地址: https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/

訓練過程參考地址:
https://www.cnblogs.com/wangkevin5626/p/9640165.html

https://www.cnblogs.com/zgq123456/p/9804000.html
https://blog.csdn.net/sylsjane/article/details/83751297
https://www.cnblogs.com/wj-1314/p/9454656.html

資料下載路徑:

鏈接:https://pan.baidu.com/s/1ttCDK5SQAYNNSnbJZLph7Q
提取碼:ogg7

1. tesseract-ocr安裝地址:

2. 環境變量配置:

 

3. 測試tesseract-ocr安裝是否成功

打開cmd,切換到圖片所在目錄,執行如圖所示代碼:

4. 下載語言包,拷貝到如圖所示位置:

5. 語言訓練過程,先下載jTessBoxEditor工具,直接解壓縮即可使用:

此處我把他解壓在瞭如圖所示路徑下:

雙擊如圖所示jar文件,出現圖示彈窗,即安裝成功:

6. 開始訓練

 a.找幾張圖片轉換成tiff或者tif類型

b.點擊tools工具選擇merge:

b.選中tif文件點擊打開

c. 添加文件名num.font.exp0.tif,點擊保存,即可看到在tif文件目錄下生成了一份行的tif文件如圖所示:

d.拷貝新生成的num.font.exp0.tif到一個路徑下準備進行矯正訓練,此處我是直接放在ocr下自己新建了一個tif文件夾如圖所示:

 

e. 生成BOX文件

打開命令行並切換至num.font.exp0.tif所在目錄,輸入,生成文件名爲num.font.exp0.box

tesseract num.font.exp0.tif num.font.exp0 batch.nochop makebox

【語法】:tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] batch.nochop makebox  

lang爲語言名稱,fontname爲字體名稱,num爲序號;在tesseract中,一定要注意格式。

生成的文件如圖所示:

 

定義字符配置文件

在目標文件夾內生成一個名爲font_properties的文本文件,內容爲

font 0 0 0 0 0  

【語法】:<fontname> <italic> <bold> <fixed> <serif> <fraktur>  

fontname爲字體名稱,italic爲斜體,bold爲黑體字,fixed爲默認字體,serif爲襯線字體,fraktur德文黑字體,1和0代表有和無,精細區分時可使用。

 

字符矯正

打開jTessBoxEditor,BOX Editor -> Open,打開num.font.exp0.tif;矯正<Char>上的字符,記得<Page>有好多頁噢!

修改完成後點擊保存。

f. 自己寫一個批處理文件,此處我寫的是num.bat,雙擊執行,可以看到生成一些文件,如圖示:

rem 執行改批處理前先要目錄下創建font_properties文件 

echo Run Tesseract for Training.. 
tesseract.exe num.font.exp0.tif num.font.exp0 nobatch box.train 
 
echo Compute the Character Set.. 
unicharset_extractor.exe num.font.exp0.box 
mftraining -F font_properties -U unicharset -O num.unicharset num.font.exp0.tr 


echo Clustering.. 
cntraining.exe num.font.exp0.tr 

echo Rename Files.. 
rename normproto num.normproto 
rename inttemp num.inttemp 
rename pffmtable num.pffmtable 
rename shapetable num.shapetable  

echo Create Tessdata.. 
combine_tessdata.exe num. 

echo. & pause

g. 拷貝此語言包到ocr路徑下:

h.打開cmd,執行命令,查看識別結果:

至此一個完整的訓練過程結束。

7. 通過java代碼執行cmd命令,進行調用工具,生成識別結果:

package com.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
/**
 * 參考地址:https://blog.csdn.net/fangquan1980/article/details/80296002
 * @author edz
 *
 */
public class test {

	/**
	 * java執行cmd命令
	 * 可以使用 && 來連接兩條命令,示例:  String cmd = “cmd /c D: && cd D:\\img && dir /b”;
	 */
	public static void main(String[] args) {
		/**
		 * 操作過程:切換到待識別圖片所在目錄c盤的test目錄下,執行ocr命令,識別圖片內容保存到4.txt文件中
		 */
		// Java調用 dos命令,跳轉到c:test目錄下,執行 tesseract 1.png 4 -l chi_sim命令
		String cmd = "cmd /c c: && cd /test && tesseract 1.png 4 -l num";
		try {
			Process process = Runtime.getRuntime().exec(cmd);
			InputStream is = process.getInputStream();
			InputStreamReader isr = new InputStreamReader(is);
			BufferedReader br = new BufferedReader(isr);
			String content = br.readLine();
			while (content != null) {
				System.out.println(content);
				content = br.readLine();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

ocr簡單學習過程結束。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章