python3學習--安裝OCR識別庫tesserocr


目錄

OCR簡介

OCR,即Optical Character Recognition,光學字符識別,是指通過掃描字符,然后通過其形狀將其翻譯成電子文本的過程,對應圖形驗證碼來說,它們都是一些不規則的字符,這些字符是由字符稍加扭曲變換得到的內容,我們可以使用OCR技術來講其轉化為電子文本,然后將結果提取交給服務器,便可以達到自動識別驗證碼的過程。

window環境

環境材料准備

  1. Window10
  2. Python-3.7.3.tgz
  3. tesserocr安裝包

安裝tesserocr

1、打開鏈接,https://digi.bib.uni-mannheim.de/tesseract/,見下圖。
在這里插入圖片描述
下載最新版的tesseract-ocr-w64-setup-v5.0.0.20190623.exe,然后安裝,本人直接安裝在C盤目錄下。安裝完畢后,如下圖。
在這里插入圖片描述
配置環境變量,有兩個步驟。
在系統變量里,修改path,如下圖。
在這里插入圖片描述
在系統變量里,創建一個新的變量名為:TESSDATA_PREFIX,值為:C:\Program Files\Tesseract-OCR\tessdata(根據自己安裝的tesserocr安裝路徑為准),如下圖。
在這里插入圖片描述
檢查Tesseract-OCR是否安裝完成,如下圖。
在這里插入圖片描述

Python3.7加載tesserocr

1、安裝Python的OCR識別庫

pip install Pillow
pip install pytesseract

2、python加載Window的tesserocr應用,要修改pytesseract三方庫的pytesseract.py腳本。
在這里插入圖片描述
打開pytesseract.py,將Window的tesserocr應用的tesserocr.exe綁定好。
在這里插入圖片描述
3、到這里Python的綁定window的tesserocr應用已經完成。

讀取驗證碼圖片

在這里插入圖片描述

from PIL import Image
import pytesseract


def read_text(text_path):
    """
    傳入文本(jpg、png)的絕對路徑,讀取文本
    :param text_path:
    :return: 文本內容
    """
    # 驗證碼圖片轉字符串
    im = Image.open(text_path)
    # 轉化為8bit的黑白圖片
    imgry = im.convert('L')
    # 二值化,采用閾值分割算法,threshold為分割點
    threshold = 140
    table = []
    for j in range(256):
        if j < threshold:
            table.append(0)
        else:
            table.append(1)
    out = imgry.point(table, '1')
    # 識別文本
    text = pytesseract.image_to_string(out, lang="eng", config='--psm 6')
    return text


if __name__ == '__main__':
    print(read_text("d://v3.png"))


輸出:在這里插入圖片描述

讀取中文文本圖片

1、因為OCR讀取不同語言需要加載語言包,因此需要下載簡體中文語言包。
從這個鏈接下載:https://github.com/tesseract-ocr/tessdata,下載紅圈的簡體中文包。然后將此文件放置window的安裝目錄下。如下兩個圖。
在這里插入圖片描述
在這里插入圖片描述
現在,我們來讀取如下圖片的中文文本內容。
在這里插入圖片描述
代碼如下:

from PIL import Image
import pytesseract


def read_text(text_path):
    """
    傳入文本(jpg、png)的絕對路徑,讀取文本
    :param text_path:
    :return: 文本內容
    """
    # 驗證碼圖片轉字符串
    im = Image.open(text_path)
    # 轉化為8bit的黑白圖片
    imgry = im.convert('L')
    # 二值化,采用閾值分割算法,threshold為分割點
    threshold = 140
    table = []
    for j in range(256):
        if j < threshold:
            table.append(0)
        else:
            table.append(1)
    out = imgry.point(table, '1')
    # 識別文本,lang參數改為chi_sim,其他代碼與上面的讀取驗證碼代碼一致。
    text = pytesseract.image_to_string(out, lang="chi_sim", config='--psm 6')
    return text


if __name__ == '__main__':
    print(read_text("d://v7.png"))


在這里插入圖片描述

 

 原文:https://blog.csdn.net/lanxianghua/article/details/100516187?depth_1-
 


免責聲明!

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



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