Python3.x 實(shí)現(xiàn)12306登錄之利用pytesseract文字識(shí)別

上一篇文章是爬取了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ō)明:

  1. 需要使用一個(gè)Tesseract-OCR Engine的東西來(lái)做識(shí)別(第一個(gè)紅圈)。
  2. 需要找到Tesseract-OCR Engine來(lái)做識(shí)別(第一個(gè)方框)
  3. 需要識(shí)別的文字語(yǔ)言包(第二個(gè)方框)

3. 安裝Tesseract-OCR Engine,語(yǔ)言包

  1. 點(diǎn)擊上圖紅圈中的Google's Tesseract-OCR Engine進(jìn)入pytesseract的github中,向下翻找到installing Tesseract
    tesseract github.png
  2. Install Tesseract via pre-built binary package 進(jìn)入,該頁(yè)面詳細(xì)記錄了安裝linux ,mac os ,window的安裝包或者源碼。對(duì)應(yīng)下載安裝即可。
  3. 我使用window系統(tǒng),所以下載即可。在下圖中說(shuō)明了下載位置,語(yǔ)言包等,最重要的是需要配置環(huán)境變量。但是發(fā)現(xiàn)配置了環(huán)境變量成功,但是在使用過(guò)程中還是指定了tesseract引擎的位置。不然就報(bào)錯(cuò)。


    window系統(tǒng)說(shuō)明,下載位置
  4. 在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了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 引 最近要倒騰一下文字識(shí)別,直接上手iOS的識(shí)別遇到了一些困難,于是決定先在Mac上做一做,會(huì)比較簡(jiǎn)單。 有一個(gè)經(jīng)...
    Cloudox_閱讀 5,421評(píng)論 1 3
  • Tesseract官方文檔頁(yè)面 https://github.com/tesseract-ocr/tesserac...
    毛毛卷彎彎閱讀 19,021評(píng)論 14 12
  • 前言 經(jīng)常大家在做自動(dòng)化測(cè)試或者做網(wǎng)絡(luò)爬蟲(chóng)的時(shí)候,都很容易遇到驗(yàn)證碼。今天,我們就簡(jiǎn)單的說(shuō)下,怎么用python來(lái)...
    浪晉閱讀 1,985評(píng)論 0 6
  • 【日精進(jìn)打卡第22天】 姓名:趙福緣 公司:青檸養(yǎng)車(chē) 【知~學(xué)習(xí)】 【行~實(shí)踐】 一、修身: 二、努力: 1、體現(xiàn)...
    夜勿憂閱讀 181評(píng)論 0 0
  • 今天公司年會(huì),到家已經(jīng)九點(diǎn)多了,閨女已經(jīng)睡著了。聽(tīng)到我的聲音,又醒了,因?yàn)橹缷寢尳o她帶零食回來(lái)了,她自己說(shuō)她是一...
    我們的親子時(shí)光閱讀 120評(píng)論 0 0

友情鏈接更多精彩內(nèi)容