python使用tesseract-ocr識(shí)別認(rèn)證碼



我自己的理解

有可能繞過認(rèn)證碼盡量選擇繞過去,請(qǐng)多嘗試乘综,繞過去爬取效率高不少憎账;

先不考慮那些一天一套認(rèn)證碼的網(wǎng)站,百度“Python 認(rèn)證碼識(shí)別”卡辰,搜索得到的結(jié)果一般都是tersserocr胞皱、pytesser這幾個(gè)邪意;簡(jiǎn)單的說就是在你電腦上安裝tesseract-ocr;然后使用Python中的subprocess.Popen執(zhí)行對(duì)應(yīng)的語(yǔ)句反砌,捕捉終端雾鬼、文件中顯示的結(jié)果;所以不局限于語(yǔ)言宴树;

強(qiáng)烈建議用cnn等策菜,比較明確算法,準(zhǔn)確率也高酒贬;現(xiàn)在的tf要不錯(cuò)比較好用又憨;teaseract識(shí)別規(guī)范的還好,cnn看有時(shí)間再寫吧锭吨;



簡(jiǎn)要步驟:


1蠢莺、安裝tesseract-ocr:

2、安裝pytesser耐齐;

3浪秘、訓(xùn)練tesseract蒋情;

4埠况、使用




詳細(xì)的步驟:


##1、安裝tesseract-ocr:

window

直接網(wǎng)上搜索就有了棵癣,exe很方便辕翰,也可以使用包;

Linux

我的虛擬機(jī)是archlinux狈谊,pacman -S tesseract-ocr喜命;

如果是ubuntu,請(qǐng)安裝下面的一堆東西(這個(gè)我沒有認(rèn)證河劝。壁榕。。):

sudo apt-get install autoconf automake libtool

sudo apt-get install libpng12-dev

sudo apt-get install libjpeg62-dev

sudo apt-get install libtiff4-dev

sudo apt-get install zlib1g-dev

sudo apt-get install libleptonica # install leptonica

sudo apt-get install gcc

sudo apt-get install g++

sudo apt-get install automake

tar zxvf tesseract-3.00.tar.gz

cd tesseract-3.00 && ./configure && make && sudo make install

總的來說赎瞎,缺什么補(bǔ)什么



##2牌里、安裝pytesser;

pytersser的做法是务甥,你輸入圖片之后牡辽,使用tersseract識(shí)別得到一個(gè)文件,這個(gè)文件名被固定了敞临,再去讀取文件得到識(shí)別結(jié)果态辛;所以對(duì)于多線程需自己動(dòng)手修改下;Python要使用pytesser得安依賴包PIL挺尿;

優(yōu)先使用Python的pip安裝奏黑,若出現(xiàn)問題則挽起袖子手動(dòng)安裝(這折騰也是無奈炊邦,只是自己手賤不知道動(dòng)了py哪里,安裝的時(shí)候出現(xiàn)ssl問題攀涵。铣耘。。)以故;

window

如果你的機(jī)器是32位蜗细,恭喜,網(wǎng)上一堆32位系統(tǒng)的安裝包怒详;

64位系統(tǒng)的請(qǐng)到這里下載炉媒,都是編譯好的:http://www.lfd.uci.edu/~gohlke/pythonlibs/

Linux

默認(rèn)安裝路勁:/usr/local/lib 安裝libjpeg:

$ tar zxvf jpegsrc.v7.tar.gz

$ cd jpeg-7

$ ./configure --enable-shared --enable-static

$ make

$ sudo make install

安裝zlib:

$ tar zxvf zlib-1.2.8.tar.gz

$ cd zlib-1.2.8

$ ./configure

$ make

$ sudo make install

安裝freetype

$ tar zxf freetype-2.6.1.tar.gz

$ cd freetype-2.6.1

$ ./configure

$ make

$ sudo make install

安裝PIL unzip Imaging-1.1.7.zip cd Imaging-1.1.7 修改setup.py文件,修改配置文件路徑 JPEG_ROOT = "/usr/local/include" ZLIB_ROOT = "/usr/local/include" FREETYPE_ROOT = "/usr/local/include"

bash-3.2$ python setup.py build_ext -i

c)測(cè)試編譯: python selftest.py d)安裝: python setup.py install

安裝pytersser 方法很多:pip昆烁,github下載吊骤;


常見的錯(cuò)誤提示


AttributeError: 'NoneType' object has no attribute 'bands'

修改nano /usr/lib/python2.7/site-packages/PIL/Image.py

1496 行添加:self.load()

def split(self):

? ? "Split image into bands"

? ? ?self.load()

? ? ?if self.im.bands == 1:

? ? ? ? ? ims = [self.copy()]

? ? else:

? ? ? ? ?ims = []

? ? ?self.load()

? ? ?for i in range(self.im.bands):

? ? ? ? ? ?ims.append(self._new(self.im.getband(i)))

? ? return tuple(ims)


OSError: [Errno 2] No such file or directory

原因可能很多:沒有安裝 tesseract-ocr;Python引用問題静尼;圖片不存在等白粉;


使用Image_to_string時(shí)出現(xiàn)的問題:

Traceback (most recent call last):

File "C:\Users\TF-2016\Desktop\spider\ruijie\ruijie.py", line 33, in

print image_file_to_string('11.png', graceful_errors=True)

File "C:\Python27\lib\site-packages\pytesser\pytesser.py", line 48, in image_file_to_string

call_tesseract(filename, scratch_text_name_root)

File "C:\Python27\lib\site-packages\pytesser\pytesser.py", line 23, in call_tesseract

proc = subprocess.Popen(args)

File "C:\Python27\lib\subprocess.py", line 710, in __init__

errread, errwrite)

File "C:\Python27\lib\subprocess.py", line 958, in _execute_child

startupinfo)

WindowsError: [Error 2]

將需要運(yùn)行的文件,直接放在pytesser的包下 或者

>>> import os

>>> os.chdir('C:\Python27\Lib\site-packages\pytesser')



3鼠渺、訓(xùn)練tesseract

《Python網(wǎng)絡(luò)數(shù)據(jù)采集》中也有介紹鸭巴;這里是使用jTessBoxEditor完成的,一個(gè)現(xiàn)成的工具拦盹;

如果采用默認(rèn)的eng來識(shí)別認(rèn)證碼鹃祖,基本不靠譜,各種雜數(shù)據(jù)普舆;自己訓(xùn)練下數(shù)據(jù)好很多恬口;

安裝Tesseract-OCR之后就訓(xùn)練自己的識(shí)別庫(kù):


1、創(chuàng)建diff:

jTessBoxEditor--tool---merge tiff--shift select more image

diff 文件命名格式:[lang].[fontname].exp[num].tif

exp:num.font.exp0.tif


2沼侣、創(chuàng)建好tiff之后創(chuàng)建.box

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


3祖能、文字矯正:

jTessBoxEditor--open--num.font.exp0.tif

簡(jiǎn)單描述一下: 打開tif之后默認(rèn)已經(jīng)進(jìn)行了一次識(shí)別,需要做的是調(diào)整識(shí)別結(jié)果蛾洛;可以調(diào)節(jié)識(shí)別框位置大小养铸、識(shí)別結(jié)果;調(diào)整完畢后記得回車或者點(diǎn)擊一下設(shè)置按鈕雅潭;


4揭厚、定義字體特征文件:

創(chuàng)建font_properties文件,文件內(nèi)容為:font 0 0 0 0 0

exp:font 0 0 0 0 0扶供;表示字體不是粗體筛圆、斜體


5、生成traineddata文件

樣本圖片路勁下執(zhí)行這些:也可以創(chuàng)建bat一次性執(zhí)行完

tesseract.exe num.font.exp0.tif num.font.exp0 nobatch box.train

unicharset_extractor.exe num.font.exp0.box

mftraining -F font_properties -U unicharset -O num.unicharset num.font.exp0.tr

cntraining.exe num.font.exp0.tr

rename normproto num.normproto

rename inttemp num.inttemp

rename pffmtable num.pffmtable

rename shapetable num.shapetable

combine_tessdata.exe num.

確認(rèn)打印結(jié)果中的Offset 1椿浓、3太援、4闽晦、5、13這些項(xiàng)不是-1就行了提岔。


6仙蛉、拷貝

最后將traineddata拷貝到:Tesseract-OCR--tessdata


7、測(cè)試

tesseract.exe pin.png result-eng -l eng

tesseract.exe pin.png result-num -l num



4碱蒙、使用

import pytesser

from PIL import Image

im = Image.open('./pin.png')

im.show()

print pytesser.image_to_string(im)

目前識(shí)別率還是不理想荠瘪,但已經(jīng)可以用來跑數(shù)據(jù)了~~(折騰的是微博(weibo.com)的認(rèn)證碼;如果是weibo.cn的認(rèn)證碼赛惩,我表示我自己輸入十幾次沒一次通過哀墓,囧),考慮試試卷積~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末喷兼,一起剝皮案震驚了整個(gè)濱河市篮绰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌季惯,老刑警劉巖吠各,帶你破解...
    沈念sama閱讀 216,744評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異勉抓,居然都是意外死亡贾漏,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門琳状,熙熙樓的掌柜王于貴愁眉苦臉地迎上來磕瓷,“玉大人盒齿,你說我怎么就攤上這事念逞。” “怎么了边翁?”我有些...
    開封第一講書人閱讀 163,105評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵翎承,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我符匾,道長(zhǎng)叨咖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,242評(píng)論 1 292
  • 正文 為了忘掉前任啊胶,我火速辦了婚禮甸各,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘焰坪。我一直安慰自己趣倾,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評(píng)論 6 389
  • 文/花漫 我一把揭開白布某饰。 她就那樣靜靜地躺著儒恋,像睡著了一般善绎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上诫尽,一...
    開封第一講書人閱讀 51,215評(píng)論 1 299
  • 那天禀酱,我揣著相機(jī)與錄音,去河邊找鬼牧嫉。 笑死剂跟,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的酣藻。 我是一名探鬼主播浩聋,決...
    沈念sama閱讀 40,096評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼臊恋!你這毒婦竟也來了衣洁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,939評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤抖仅,失蹤者是張志新(化名)和其女友劉穎坊夫,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撤卢,經(jīng)...
    沈念sama閱讀 45,354評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡环凿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了放吩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片智听。...
    茶點(diǎn)故事閱讀 39,745評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖渡紫,靈堂內(nèi)的尸體忽然破棺而出到推,到底是詐尸還是另有隱情,我是刑警寧澤惕澎,帶...
    沈念sama閱讀 35,448評(píng)論 5 344
  • 正文 年R本政府宣布莉测,位于F島的核電站,受9級(jí)特大地震影響唧喉,放射性物質(zhì)發(fā)生泄漏捣卤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評(píng)論 3 327
  • 文/蒙蒙 一八孝、第九天 我趴在偏房一處隱蔽的房頂上張望董朝。 院中可真熱鬧,春花似錦干跛、人聲如沸子姜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)闲询。三九已至久免,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間扭弧,已是汗流浹背阎姥。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鸽捻,地道東北人呼巴。 一個(gè)月前我還...
    沈念sama閱讀 47,776評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像御蒲,于是被迫代替她去往敵國(guó)和親衣赶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容