python3使用Pillow、tesseract-ocr與pytesseract模組的圖片識別的方法

ckxllf發表於2020-03-13

  1.安裝Pillow

  pip install Pillow

  2.安裝tesseract-ocr

  github下載

  windows:

  The latest installer can be downloaded here:  tesseract-ocr-setup-3.05.01.exe and tesseract-ocr-setup-4.00.00dev.exe  (experimental).

  ubuntu:

  sudo apt-get install tesseract-ocr

  traineddata檔案路徑: /usr/share/tesseract-ocr/tessdata/

  3.安裝pytesseract

  pip install pytesseract

  如不能使用pip直接安裝可取搜尋模組檔案直接安裝

  遇到問題及解決:

  1.FileNotFoundError: [WinError 2] 系統找不到指定的檔案

  解決辦法:

  方法1[推薦]: 將tesseract.exe新增到環境變數PATH中,

  例如: D:\Tesseract-OCR,預設路徑為C:\Program Files (x86)\Tesseract-OCR

  注意: 為了使環境變數生效,需要關閉cmd視窗或是關閉pycharm等ide重新啟動

  方法2: 修改pytesseract.py檔案,指定tesseract.exe安裝路徑

  # CHANGE THIS IF TESSERACT IS NOT IN YOUR PATH, OR IS NAMED DIFFERENTLY

  tesseract_cmd = 'C:\\Program Files (x86)\\Tesseract-OCR\\tesseract.exe‘

  方法3: 在實際執行程式碼中指定

  pytesseract.pytesseract.tesseract_cmd =  'D:\\Tesseract-OCR\\tesseract.exe'

  2.pytesseract.pytesseract.TesseractError: (1, ‘Error opening data file  \Tesseract-OCR\tessdata/eng.traineddata’)

  解決方法:

  方法1[推薦]:

  將tessdata目錄的上級目錄所在路徑(預設為tesseract-ocr安裝目錄)新增至TESSDATA_PREFIX環境變數中

  例如: C:\Program Files (x86)\Tesseract-OCR

  Please make sure the TESSDATA_PREFIX environment variable is set to the  parent directory of your “tessdata” directory.

  方法2: 在.py檔案配置中指定tessdata-dir

  tessdata_dir_config = '--tessdata-dir "D:\\Tesseract-OCR\\tessdata"'

  # tessdata_dir_config = '--tessdata-dir "'C:\\Program Files  (x86)\\Tesseract-OCR\\tessdata"'

  pytesseract.image_to_string(image, config=tessdata_dir_config)

  示例: 鄭州哪個醫院做人流好

  # -*-coding:utf-8-*-

  from PIL import Image

  import sys

  import os

  import pytesseract

  from selenium import webdriver

  sys.path.append('C:\Python27\Lib\site-packages\pytesser')

  import pytesser

  url='http://192.168.24.189/system/code?0.6824490785056669'

  driver = webdriver.Firefox()

  driver.maximize_window() #將瀏覽器最大化

  driver.get(url)

  imgelement = driver.find_element_by_id('codeImg') #定位驗證碼

  location = imgelement.location #獲取驗證碼x,y軸座標

  size=imgelement.size #獲取驗證碼的長寬

  rangle=(int(location['x']),int(location['y']),int(location['x']+size['width']),int(location['y']+size['height']))  #寫成我們需要擷取的位置座標

  name="code.jpg"

  driver.find_element_by_id("codeImg").click()

  driver.save_screenshot(name) #擷取當前網頁,該網頁有我們需要的驗證碼

  aa=Image.open(name) #開啟截圖

  frame4=aa.crop(rangle) #使用Image的crop函式,從截圖中再次擷取我們需要的區域

  frame4.save(name)

  im = Image.open(name)

  #轉化到灰度圖

  imgry = im.convert('L')

  #儲存影像

  imgry.save('g'+name)

  #二值化,採用閾值分割法,threshold為分割點

  threshold = 140

  table = []

  for j in range(256):

  if j < threshold:

  table.append(0)

  else:

  table.append(1)

  out = imgry.point(table, '1')

  out.save('b'+name)

  #識別

  text = pytesseract.image_to_string(out)

  #識別對嗎

  text = text.strip()

  text = text.upper();

  print (text)

  text = pytesseract.image_to_string(Image.open('code.png'),)

  print(text)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945560/viewspace-2680038/,如需轉載,請註明出處,否則將追究法律責任。

相關文章