最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python3使用tesserocr識(shí)別字母數(shù)字驗(yàn)證碼的實(shí)現(xiàn)

 更新時(shí)間:2021年01月29日 10:11:57   作者:不知道取什么名的鬼鬼  
這篇文章主要介紹了Python3使用tesserocr識(shí)別字母數(shù)字驗(yàn)證碼的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一、背景

最近有個(gè)需求是從一個(gè)后臺(tái)的留言網(wǎng)站爬取留言數(shù)據(jù),后臺(tái)管理網(wǎng)站必然涉及到了登錄,登錄就有個(gè)驗(yàn)證碼的問(wèn)題必須得解決,由于驗(yàn)證碼是從后端生成的,并且不了解其生成規(guī)則,那就只能通過(guò)圖像識(shí)別技術(shù)來(lái)做驗(yàn)證碼識(shí)別了!通過(guò)查閱資料發(fā)現(xiàn)Python中的的tesserocr這個(gè)庫(kù)好像使用的比較多,所以對(duì)這個(gè)庫(kù)進(jìn)行了一番研究,并且實(shí)現(xiàn)了那個(gè)后臺(tái)網(wǎng)站驗(yàn)證碼的識(shí)別。

二、準(zhǔn)備工作

1. 安裝tesserocr

由于我使用的Python版本是python3.5,所以一下所有操作都是基于python3的,如果有python2的同學(xué),可以找找其他教程~~

首先需要下載tesseract,它為tesserocr提供底層支持。具體下載官方路徑:https://github.com/UB-Mannheim/tesseract/wiki,選擇對(duì)應(yīng)的系統(tǒng)版本,可以選擇一個(gè)相對(duì)不帶dev的穩(wěn)定版本下載,如:tesseract-ocr-setup-3.05.02-20180621.exe。然后一路安裝,唯一記得勾選Additional language data(download),勾選可能會(huì)用到的語(yǔ)言tessdata,如簡(jiǎn)體、繁體中文,數(shù)學(xué)模塊等,不需要全選,下載tessdata的時(shí)間會(huì)比較長(zhǎng)。

然后安裝python3對(duì)應(yīng)的tesserocr庫(kù),通常我們安裝庫(kù)的方法是使用命令pip install tesserocr,但是這里會(huì)報(bào)錯(cuò):“error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools",這個(gè)時(shí)候不宜直接去下載Microsoft Visual C++ Build Tools,而是使用原始的whl文件方式安裝。tesserocr 的whl官方文件下載路徑:https://github.com/simonflueckiger/tesserocr-windows_build/releases,下載本地環(huán)境對(duì)應(yīng)的whl文件,如我的是window64位系統(tǒng),python版本是3.5。下載完后,使用cd跳轉(zhuǎn)到whl文件所在目錄,然后 執(zhí)行 ”pip installtesserocr-2.2.2-cp35-cp35m-win_amd64.whl“,即可輕松完成安裝。

緊接著用例子驗(yàn)證如何使用:我們找到一個(gè)驗(yàn)證碼圖片:image.jpg,下載到本地磁盤,用代碼進(jìn)行驗(yàn)證:

import tesserocr
from PIL import Image
image=Image.open('image.jpg')
print(tesserocr.image_to_text(image))

不出意外,首次運(yùn)行總是不順利,相信我遇到的坑大多數(shù)人都會(huì)遇到,大抵錯(cuò)誤類似:

Traceback (most recent call last):
File "G:\pythonSources\my12306/obtain_message\test.py", line 4, in <module>
print(tesserocr.image_to_text(image))
File "tesserocr.pyx", line 2400, in tesserocr._tesserocr.image_to_text
RuntimeError: Failed to init API, possibly an invalid tessdata path: “本地某個(gè)路徑”

有個(gè)比較簡(jiǎn)單粗暴的解決方法是把安裝好的Tesseract-OCR下的tessdata文件夾整個(gè)拷貝到提示的那個(gè)路徑中,親測(cè)有效。

2. 安裝opencv

由于驗(yàn)證碼需要做一些優(yōu)化處理,方便更加容易被tesserocr識(shí)別,所以需要使用opencv來(lái)做一些特殊的處理,安裝opencv比較簡(jiǎn)單,直接pip install opencv-python即可。

三、識(shí)別過(guò)程

1. 將圖片變成黑白圖片

我需要爬取數(shù)據(jù)的這個(gè)后臺(tái)網(wǎng)站驗(yàn)證碼是黃底白字的,這種色差較小的tesserocr識(shí)別起來(lái)比較困難,稍微試了一下,基本上沒(méi)怎么識(shí)別對(duì)過(guò)。。。所以我們需要先將圖片變成色差最大的黑白圖片。初始圖片見下圖:

首先,將圖片變成灰色,并將灰色圖片保存起來(lái)方便后續(xù)做對(duì)比,變成灰色以后的圖片如下:

變成灰色后,通過(guò)像素點(diǎn)的顏色值將灰色部分的背景變成白色,白色的具體內(nèi)容變成黑色,這樣白底黑字的黑白圖片就有了:

處理成黑白圖片的實(shí)現(xiàn)代碼如下:

img = Image.open(self.code_path)
# 將圖片變成灰色
img_gray = img.convert('L')
img_gray.save('../images/code_gray.png')
# 轉(zhuǎn)成黑白圖片
img_black_white = img_gray.point(lambda x: 0 if x > 200 else 255)
img_black_white.save('../images/code_black_white.png')

2. 去除圖片噪點(diǎn)

圖片轉(zhuǎn)成黑白以后,一些雜點(diǎn)也隨著我們的主體內(nèi)容變成了黑色的點(diǎn),這樣對(duì)識(shí)別的效果也有較大的影響,所以需要想辦法將這些干擾點(diǎn)去掉。這里就需要借助opencv的功能了,在使用opencv去除噪點(diǎn)之前,需要先將圖片做灰值化以及二值化處理,具體代碼如下所示:

# opencv處理
img_cv = cv2.imread('../images/code_black_white.png')
# 灰值化
im = cv2.cvtColor(img_cv, cv2.COLOR_BGR2GRAY)
# 二值化
cv2.adaptiveThreshold(im, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 21, 1)

基本處理之后,就需要消除噪點(diǎn)了,消除噪點(diǎn)的原理也比較簡(jiǎn)單,就是遍歷圖片的每一個(gè)像素點(diǎn),找到其上下左右四個(gè)像素點(diǎn)位置的顏色,如果這四個(gè)點(diǎn)中白色點(diǎn)的數(shù)量大于2則說(shuō)明這個(gè)點(diǎn)是噪點(diǎn),需要將該點(diǎn)的顏色直接置為白色點(diǎn),在邊框位置的像素點(diǎn)也直接置為白色,因?yàn)橹饕獌?nèi)容一般都是在圖片中間的。以下為處理噪點(diǎn)的代碼:

# 噪點(diǎn)處理
def interference_point(img):
  filename = '../images/code_result.png'
  h, w = img.shape[:2]
  # 遍歷像素點(diǎn)進(jìn)行處理
  for y in range(0, w):
    for x in range(0, h):
      # 去掉邊框上的點(diǎn)
      if y == 0 or y == w - 1 or x == 0 or x == h - 1:
        img[x, y] = 255
        continue
      count = 0
      if img[x, y - 1] == 255:
        count += 1
      if img[x, y + 1] == 255:
        count += 1
      if img[x - 1, y] == 255:
        count += 1
      if img[x + 1, y] == 255:
        count += 1
      if count > 2:
        img[x, y] = 255
  cv2.imwrite(filename, img)
  return img, filename

噪點(diǎn)處理完畢之后,就是一張非常清晰的圖片了:

這個(gè)時(shí)候就可以直接使用tesserocr來(lái)識(shí)別了,具體識(shí)別的方式如下:

tesserocr.image_to_text(img_result)

識(shí)別測(cè)試結(jié)果如下:

經(jīng)過(guò)多次識(shí)別驗(yàn)證測(cè)試,另外也由于這個(gè)驗(yàn)證碼的字體相對(duì)比較規(guī)范,所以成功率是相當(dāng)?shù)母吡?,即使偶爾的一次失敗,我們也是可以進(jìn)行重試就又成功了。哈哈, 差不多就是這個(gè)樣子啦,歡迎大家指正文中的問(wèn)題~~不多說(shuō)了,我要去使用新學(xué)的技術(shù)去做“壞事”了!

到此這篇關(guān)于Python3使用tesserocr識(shí)別字母數(shù)字驗(yàn)證碼的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Python3 tesserocr識(shí)別字母數(shù)字驗(yàn)證碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 簡(jiǎn)單講解Python中的數(shù)字類型及基本的數(shù)學(xué)計(jì)算

    簡(jiǎn)單講解Python中的數(shù)字類型及基本的數(shù)學(xué)計(jì)算

    這篇文章主要介紹了Python中的數(shù)字類型及基本的數(shù)學(xué)計(jì)算,與其他語(yǔ)言一樣,除法相對(duì)復(fù)雜些,不過(guò)本文并未就此深入,需要的朋友可以參考下
    2016-03-03
  • 使用Python求解帶約束的最優(yōu)化問(wèn)題詳解

    使用Python求解帶約束的最優(yōu)化問(wèn)題詳解

    今天小編就為大家分享一篇使用Python求解帶約束的最優(yōu)化問(wèn)題詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • Python 類的魔法屬性用法實(shí)例分析

    Python 類的魔法屬性用法實(shí)例分析

    這篇文章主要介紹了Python 類的魔法屬性用法,結(jié)合實(shí)例形式分析了Python類的魔法屬性功能與相關(guān)使用技巧,需要的朋友可以參考下
    2019-11-11
  • Python中enumerate函數(shù)代碼解析

    Python中enumerate函數(shù)代碼解析

    這篇文章主要介紹了Python中enumerate函數(shù)代碼解析,涉及函數(shù)說(shuō)明以及相關(guān)示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • Python?assert斷言聲明,遇到錯(cuò)誤則立即返回問(wèn)題

    Python?assert斷言聲明,遇到錯(cuò)誤則立即返回問(wèn)題

    這篇文章主要介紹了Python?assert斷言聲明,遇到錯(cuò)誤則立即返回問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 實(shí)例講解python讀取各種文件的方法

    實(shí)例講解python讀取各種文件的方法

    這篇文章主要為大家詳細(xì)介紹了python讀取各種文件的方法,,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • Pytorch實(shí)現(xiàn)簡(jiǎn)單自定義網(wǎng)絡(luò)層的方法

    Pytorch實(shí)現(xiàn)簡(jiǎn)單自定義網(wǎng)絡(luò)層的方法

    這篇文章主要給大家介紹了關(guān)于Pytorch實(shí)現(xiàn)簡(jiǎn)單自定義網(wǎng)絡(luò)層的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-05-05
  • 解決Python requests庫(kù)編碼 socks5代理的問(wèn)題

    解決Python requests庫(kù)編碼 socks5代理的問(wèn)題

    今天小編就為大家分享一篇解決Python requests庫(kù)編碼 socks5代理的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • 基于Python實(shí)現(xiàn)傻瓜式GIF制作工具

    基于Python實(shí)現(xiàn)傻瓜式GIF制作工具

    有沒(méi)有什么內(nèi)容形式,比小視頻更小,比普通圖片更豐富?有,GIF動(dòng)態(tài)圖就是其中一種形式。本文將為大家介紹如何通過(guò)Python實(shí)現(xiàn)一個(gè)傻瓜式的gif生成工具,感興趣的可以了解一下
    2021-12-12
  • Python實(shí)現(xiàn)自動(dòng)化發(fā)送郵件

    Python實(shí)現(xiàn)自動(dòng)化發(fā)送郵件

    大家好,本篇文章主要講的是Python實(shí)現(xiàn)自動(dòng)化發(fā)送郵件,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01

最新評(píng)論

聊城市| 麦盖提县| 弥渡县| 安顺市| 富平县| 阳信县| 涞水县| 天长市| 新巴尔虎左旗| 旅游| 岳普湖县| 泗阳县| 新闻| 静海县| 二手房| 绥江县| 盐边县| 神农架林区| 罗城| 南郑县| 张家港市| 西平县| 缙云县| 临海市| 盐源县| 德令哈市| 本溪| 河间市| 突泉县| 宝山区| 米脂县| 项城市| 巴林右旗| 镇安县| 阜康市| 凭祥市| 惠来县| 山阴县| 瓮安县| 大荔县| 黄龙县|