python爬蟲學習筆記 3.9 (瞭解參考:訓練Tesseract)
參考閱讀:訓練Tesseract
要使用 Tesseract 的功能,比如後面的示例中訓練程序識別字母,要先在系統中設置一 個新的環境變量 $TESSDATA_PREFIX,讓 Tesseract 知道訓練的數據文件存儲在哪裏,然後搞一份tessdata數據文件,放到Tesseract目錄下。
-
在大多數 Linux 系統和 Mac OS X 系統上,你可以這麼設置: $export TESSDATA_PREFIX=/usr/local/share/Tesseract
-
在 Windows 系統上也類似,你可以通過下面這行命令設置環境變量: #setx TESSDATA_PREFIX C:\Program Files\Tesseract OCR\Tesseract
大多數其他的驗證碼都是比較簡單的。例如,流行的 PHP 內容管理系統 Drupal 有一個著名的驗證碼模塊 https://www.drupal.org/project/captcha,可以生成不同難度的驗證碼。
舉個例子:
那麼與其他驗證碼相比,爲什麼這個驗證碼更容易被人類和機器讀懂呢?
-
字母沒有相互疊加在一起,在水平方向上也沒有彼此交叉。也就是說,可以在每一個字 母外面畫一個方框,而不會重疊在一起。
-
圖片沒有背景色、線條或其他對 OCR 程序產生干擾的噪點。
-
雖然不能因一個圖片下定論,但是這個驗證碼用的字體種類很少,而且用的是 sans-serif 字體(像“4”和“M”)和一種手寫形式的字體(像“m”“C”和“3”)。
-
白色背景色與深色字母之間的對比度很高。
這個驗證碼只做了一點點改變,就讓 OCR 程序很難識別。 -
字母和數據都使用了,這會增加待搜索字符的數量。
-
字母隨機的傾斜程度會迷惑 OCR 軟件,但是人類還是很容易識別的。
-
那個比較陌生的手寫字體很有挑戰性,在“C”和“3”裏面還有額外的線條。
-
另外這個非常小的小寫“m”,計算機需要進行額外的訓練才能識別。
用下面的代碼運行 Tesseract 識別圖片:
tesseract captchaExample.png output
我們得到的結果 output.txt 是: 4N\,,,C<3
創建樣本庫訓練Tesseract
要訓練 Tesseract 識別一種文字,無論是晦澀難懂的字體還是驗證碼,你都需要向 Tesseract 提供每個字符不同形式的樣本。
首先要收集大量的驗證碼樣本,樣本的數量和複雜程度,會決定訓練的效果。第二步是準確地告訴 Tesseract 一張圖片中的每個字符是什麼,以及每個字符的具體位置。
這裏需要創建一些矩形定位文件(box file),一個驗證碼圖片生成一個矩形定位文件,也可以通過jTessBoxEditor軟件來修改矩形的定位。
一個圖片的矩形定位文件如下所示:
4 15 26 33 55 0
M 38 13 67 45 0
m 79 15 101 26 0
C 111 33 136 60 0
3 147 17 176 45 0
第一列符號是圖片中的每個字符,後面的 4 個數字分別是包圍這個字符的最小矩形的座標 (圖片左下角是原點 (0,0),4 個數字分別對應每個字符的左下角 x 座標、左下角 y 座標、右上角 x 座標和右上角 y 座標),最後一個數字“0”表示圖片樣本的編號。
矩形定位文件必須保存在一個 .box 後綴的文本文件中,(例如 4MmC3.box)。
博客園的一篇不錯的訓練教程:http://www.cnblogs.com/mjorcen/p/3800739.html?utm_source=tuicool&utm_medium=referral
前面的內容只是對 Tesseract 庫的字體訓練和識別能力的一個簡略概述。如果你對 Tesseract 的其他訓練方法感興趣,甚至打算建立自己的驗證碼訓練文件庫,推薦閱讀 Tesseract 官方文檔:https://github.com/tesseract-ocr/tesseract/wiki
,加油!