上一篇文章是爬取了12306的車(chē)次信息,那么還有登錄,購(gòu)票等等。
這里一步一步的文章來(lái)學(xué)習(xí)登錄,圖片識(shí)別,驗(yàn)證碼等技術(shù)。不斷學(xué)習(xí)中。最近太忙,都沒(méi)有搞py,有時(shí)間就弄一下,歡迎簡(jiǎn)書(shū)交流。
1. 安裝py庫(kù)
pytesseract,詳細(xì)使用說(shuō)明
pytesseract 0.1.7
PIL圖片常用庫(kù)
安裝
pip install pytesseract
pip install pillow
查看安裝之后的庫(kù)
pip freeze
2. 使用pytesseract庫(kù)
首先進(jìn)入pytesseract網(wǎng)頁(yè)查看說(shuō)明和使用例子.

pytesseract截圖
在使用例子中,做了詳細(xì)說(shuō)明:
- 需要使用一個(gè)Tesseract-OCR Engine的東西來(lái)做識(shí)別(第一個(gè)紅圈)。
- 需要找到Tesseract-OCR Engine來(lái)做識(shí)別(第一個(gè)方框)
- 需要識(shí)別的文字語(yǔ)言包(第二個(gè)方框)
3. 安裝Tesseract-OCR Engine,語(yǔ)言包
- 點(diǎn)擊上圖紅圈中的Google's Tesseract-OCR Engine進(jìn)入pytesseract的github中,向下翻找到installing Tesseract
tesseract github.png - Install Tesseract via pre-built binary package 進(jìn)入,該頁(yè)面詳細(xì)記錄了安裝linux ,mac os ,window的安裝包或者源碼。對(duì)應(yīng)下載安裝即可。
-
我使用window系統(tǒng),所以下載即可。在下圖中說(shuō)明了下載位置,語(yǔ)言包等,最重要的是需要配置環(huán)境變量。但是發(fā)現(xiàn)配置了環(huán)境變量成功,但是在使用過(guò)程中還是指定了tesseract引擎的位置。不然就報(bào)錯(cuò)。
window系統(tǒng)說(shuō)明,下載位置 - 在w中就是下一步安裝即可,此次安裝語(yǔ)言包我是在安裝的時(shí)候下載,選擇簡(jiǎn)體中文就可以咯。
4. 代碼實(shí)戰(zhàn)
到了這里,所有的準(zhǔn)備工作和代碼其實(shí)都可以說(shuō)是編寫(xiě)完成了的,因?yàn)樵趐ytesseract的樣例中就已經(jīng)寫(xiě)的很清楚了。下面我貼上我的代碼就行。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
__author__ = "雷洪飛"
"""
利用google pytesseract做文字識(shí)別,目的是為了做12306的圖片校驗(yàn)。
"""
try:
import Image
import ImageEnhance
except ImportError:
from PIL import Image, ImageEnhance
import pytesseract
import requests
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
def get_title_pic():
# 讀取圖片
image = Image.open("image/code.png")
# image.convert("L")
box = (116, 0, 180, 30)
t = image.crop(box)
t.save("image/temp_title.png")
def get_title_text():
base_img_url = "image/temp_title.png"
image = Image.open(base_img_url)
ImageEnhance.Contrast(image).enhance(3.0).convert("L").save(base_img_url)
really_image = Image.open(base_img_url)
# 配置tesseract 引擎位置
pytesseract.pytesseract.tesseract_cmd = 'K:\Program Files\Tesseract-OCR\\tesseract.exe'
# 配置語(yǔ)言包
tessdata_dir_config = '--tessdata-dir "K:\\Program Files\\Tesseract-OCR\\tessdata"'
# 使用pytesseract文字識(shí)別
return pytesseract.image_to_string(really_image, lang='chi_sim', config=tessdata_dir_config)
def get_picture(url):
headers = {
"User-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"}
response = requests.get(url, headers=headers, verify=False)
response.encoding = 'utf-8'
if response.status_code == 200:
with open("./image/code.png", "wb") as f:
f.write(response.content)
print("圖片下載成功")
return True
else:
get_picture(url)
if __name__ == "__main__":
url = "https://kyfw.12306.cn/passport/captcha/captcha-image?login_site=E&module=login&rand=sjrand&0.6523880813900003"
# 下載圖片
get_picture(url)
# 得到圖片的標(biāo)題
get_title_pic()
# 獲取標(biāo)題文字
text = get_title_text()
print("識(shí)別結(jié)果:" + text)
6. 結(jié)果展示
對(duì)于識(shí)別12306的標(biāo)題,我是很不滿(mǎn)意的,只能識(shí)別很簡(jiǎn)單的字,復(fù)雜的,字體很傾斜的都基本認(rèn)不出來(lái),效率太低了。

12306驗(yàn)證碼圖片

識(shí)別結(jié)果
這種識(shí)別率太低,而且還很多都不能識(shí)別。
我也不知道這個(gè)到底行不行了。
各位要是有好的識(shí)別方法,歡迎下方留言交流。希望找出一種識(shí)別率很高的出來(lái)。不然這個(gè)驗(yàn)證碼基本就gg了。

