python爬蟲學習筆記 3.9 (瞭解參考:訓練Tesseract)

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
,加油!

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