Python處理驗證碼第一篇(pytesser初探及報錯處理)


(原文鏈接:http://blog.csdn.net/Bone_ACE/article/details/50436587

前言:

春節期間,無法全身心投入地去寫爬蟲,那就玩玩驗證碼吧,應該比較有趣!

首次接觸驗證碼識別,用pytesser接觸一下最簡單的驗證碼先,代碼參照:使用python以及工具包進行簡單的驗證碼識別。具體細節可以參見原文,里面安裝和報錯處理沒有詳細記錄,我在此處主要記錄一下自己的安裝及處理過程。 

 

 

效果:

可識別以下類型的驗證碼: 
這里寫圖片描述 這里寫圖片描述 這里寫圖片描述 這里寫圖片描述 

 

 

正文:

代碼:

# encoding=utf-8 from PIL import Image from pytesser import * img = Image.open('驗證碼.jpg') img_grey = img.convert('L') threshold = 140 table = [] for i in range(256): if i < threshold: table.append(0) else: table.append(1) img_out = img_grey.point(table, '1') text = image_to_string(img_grey) # 將圖片轉成字符串 print text 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

 

 

 

安裝包:

需要安裝的包主要有兩個: PIL 和 pytesser 。 
我的環境:64位win8系統、python2.7

PIL模塊的安裝:

PIL 全稱 “Python Imaging Library”。 
下載地址:傳送門

我下載了這里寫圖片描述

運行報錯:Python version 2.7 required, which was not found in the registry. 
Python version 2.7 required, which was not found in the registry.

網上找出原因:這個 PIL 安裝資源是給32位操作系統,32位和64位操作系統下的python在注冊表中的路徑是不一樣的: 
64位檢查注冊表的位置是: HKLM|HKCU\SOFTWARE\ 
32位檢查注冊表的位置是: HKLM|HKCU\SOFTWARE\wow6432node\ 
所以在64位系統中自然檢查不出有Python。

解決方案: 
官方沒有提供64位的PIL庫,但非官方有:傳送門。 
下載里面的pillow庫: 
64位PIL
然后在命令行安裝該模塊: 
pip install G:/For_Life/360download/Pillow-3.1.1-cp27-none-win_amd64.whl

注意:在 pillow 下載頁中有一行 “Use ‘from PIL import Image’ instead of ‘import Image’” ,所以一般方法安裝的 PIL 要導入 Image 模塊使用 “import Image” ,而此方法安裝的 PIL 要使用 “from PIL import Image” 。 
更多請見:Windows安裝Python圖像處理庫:PIL模塊

 

 

 

pytesser模塊的安裝:

下載地址:傳送門。(此網址有時候會加載失敗,我將自己下載的放在微盤上了:傳送門 密碼:DPHE)

下載后得到 “pytesser_v0.0.1.zip”,是一個壓縮文件,使用方法: 
1、在 “D:\For_Software\others\Python_PyDev\Python\Lib\site-packages” 路徑下新建一個文件夾,命名 “pytesser” 。把 “pytesser_v0.0.1.zip” 里的文件解壓到該目錄: 
pytesser模塊的安裝

2、將 “pytesser.py” 改名為 “__init__.py”。

3、打開 “__init__.py” 文件,將 “tesseract_exe_name” 變量的值改為 “‘D:/For_Software/others/Python_PyDev/Python/Lib/site-packages/pytesser/tesseract’”(原值為 “‘tesseract’”)。

4、pytesser 模塊依賴於 PIL 模塊,如果是按照上面的方法安裝 PIL 的話,需要把 “init.py” 文件里的 “import Image” 改成 “from PIL import Image” 。 
(注意以上的路徑要改成自己的路徑,不要原搬照抄,應該不會這么笨吧)

如果報錯:WindowsError: [Error 2] 
pytesser WindowsError:[Error 2] 
可能的原因:python找不到 “tesseract.exe”,執行步驟3給python指定一個絕對路徑就可以了。

如果報錯:ImportError: No module named Image 
pytesser ImportError: No module named Image 
可能的原因:在 pytesser 中的 “__init__.py” ,導入 Image 的方式不對,見步驟4。 

 

 

總結:

其實這只是處理最簡單的驗證碼而已,代碼也很簡單,主要做兩個工作而已。第一個是將彩色圖片轉成灰度圖片並除噪,第二個是使用 pytesser.image_to_string() 將圖片中的字符提取出來。

處理的圖片也是非常有限的圖片上的數字或字母必須沒有變形(即使是沒有變形的情況下還會出現數字跟字母混淆的情況),驗證碼的背景不能太復雜,允許字體加上一些顏色。 
這么簡單的驗證碼估計很少見,不常用。所以這么簡單的處理方法,我們看一看也就可以了,如果實際使用的話技術還有待深入。

 

 


轉載請注明出處,謝謝!(原文鏈接:http://blog.csdn.net/Bone_ACE/article/details/50436587


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM