1. 程式人生 > >深入學習使用ocr算法識別圖片中文字的方法

深入學習使用ocr算法識別圖片中文字的方法

() 圖片文字 圖像增強 ota lan 必須 動態 index rar

  公司有個需求,簡單點說需要從一張圖片中識別出中文,通過python來實現,當然其他程序也行,只要能實現,而小編主要學習python,所以就提了python。一個小白在網上遨遊了一天,終於找到一絲絲思緒,特意在此分享,希望大神提出寶貴的意見。

  今天還是在學習OCR算法中,但是好像自己摸索確實比較難一點,而且python實現圖片中文識別的方法還是不多,所以我打算記錄一下自己學習的過程。今天看到一個菜鳥都可以用的開源項目,那就是OCR開源項目tesseract,可能對於還是菜鳥的我來說,最好不過了,可以試試此項目,還可以看看源碼,何樂而不為呢!

  OCR開源項目很多,給大家一個鏈接,這個鏈接列出了現有的比較出名的OCR開源項目,鏈接如下:

https://en.wikipedia.org/wiki/Comparison_of_optical_character_recognition_software

  從上面的排名可以看到,Tesseract是排在第一名的!所以下面就認真學習一下Tesseract。首先介紹一下Tesseract,然後安裝,測試,了解其不足等等。

     Tesseract的OCR引擎目前已作為開源項目發布在Google Project,
其項目主頁在這裏查看https://github.com/tesseract-ocr, 

    它支持中文OCR,並提供了一個命令行工具。python中對應的包是
pytesseract. 通過這個工具我們可以識別圖片上的文字。

一 Tesseract的安裝測試使用

1.1 小編的開發環境如下:

  • windows 7
  • python 3.6
  • pycharm

1.2 下載安裝包

  首先下載Tesseract在Windows下的安裝版。(因為在國外訪問不了谷歌,所以別人FQ下載了下來,這裏給大家百度網盤鏈接)

http://pan.baidu.com/s/1i56Uxlr

  根據https://github.com/tesseract-ocr/tesseract/wiki,找到非官方的安裝包,好像只看到64位的安裝包    http://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-setup-4.00.00dev.exe,下載後直接安裝即可,但是要記得你的安裝目錄,我們等會配置環境變量要用。

  如果不是做英文的圖文識別,還需要下載其他語言的識別包https://github.com/tesseract-ocr/tesseract/wiki/Data-Files。

  簡體字識別包:https://raw.githubusercontent.com/tesseract-ocr/tessdata/4.00/chi_sim.traineddata

  繁體字識別包:https://github.com/tesseract-ocr/tessdata/raw/4.0/chi_tra.traineddata

安裝python對應的包:pytesseract

pip install pytesseract

1.3 安裝Tesseract

  下載下來之後一路Next安裝好,然後在開始菜單找到其控制臺引導程序,如下圖所示:

使用Tesseract ocr有兩種方式:
    動態庫方式 libtesseract和執行程序方式 tesseract.exe

    小編使用的是第二個方式,也方便Python調用(主要是小編比較菜)。

  

技術分享圖片

1.4 測試英文字符識別

  上面的安裝包裏自帶了已經訓練好的英文-拉丁文識別數據~所以我們先來測試一下英文字符的識別吧~識別圖像如下:

1.4.1 把上面的圖片放到Tesseract的安裝目錄下,如下圖所示:

技術分享圖片

1.4.2 打開上面提到的控制臺窗口,如下圖所示:

技術分享圖片

1.4.3 在窗口中輸入命令:“tesseract.exe 0.jpg 1”,並回車,如下圖所示:

01.jpg代表待識別的源文件,1代表輸出文件名,默認輸出格式是txt文件格式!

註意,上面的 lang之前是-l 而不是-1!

技術分享圖片

1.4.4 讓我們先查看一下01.jpg照片,如下圖:

技術分享圖片

1.4.5 在安裝目錄下生成了1.txt文件,識別結果如下圖所示:

技術分享圖片

  既然安裝好了,測試也可以了,我們就進行實戰,做圖像識別。

二 python用tesseract-ocr做圖像識別

  雖然說一行代碼可以搞定識別圖片,但是我們需要導入兩個庫,這是別人寫好的封裝好的庫文件。只有導入人家庫,我們才能識別一行代碼實現圖片文字。

  • 這裏我們需要用到兩個庫:pytesseract和PIL
  • 同時我們還需要安裝識別引擎tesseract-ocr

2.1 pytesseract和PIL的安裝

  安裝這兩個包可以借助pip

- 1,命令行安裝 
pip install PIL 
pip install pytesseract 

- 2,如果你用的pycharm編輯器,就可以直接借助pycharm實現快速安裝。 

2.2 大概介紹下相關模塊的概念

  Python-tesseract 是光學字符識別Tesseract OCR引擎的Python封裝類。能夠讀取任何常規的圖片文件(JPG, GIF ,PNG , TIFF等)並解碼成可讀的語言。在OCR處理期間不會創建任何臨文件

  PIL (Python Imaging Library)是 Python 中最常用的圖像處理庫,目前版本為 1.1.7,我們可以 在這裏 下載學習和查找資料。

  Image 類是 PIL 庫中一個非常重要的類,通過這個類來創建實例可以有直接載入圖像文件,讀取處理過的圖像和通過抓取的方法得到的圖像這三種方法。

  python對圖像的處理比較常見的是用pytesseract識別驗證碼,要安裝pytesseract庫,必須先安裝其依賴的PIL及tesseract-ocr,其中PIL為圖像處理庫,而後面的tesseract-ocr則為google的ocr識別引擎。

    下載鏈接:http://www.waitalone.cn/python-php-ocr.html   

    該鏈接文檔描述了如何配置相關環境,以及識別驗證碼的python代碼,
總結起來就三步:    安裝PIL.exe;
                           安裝tesseract-ocr-setup.exe;
                           安裝pip install pytesseract    

2.3 解決python2.X中PIL在Python3.X中不能使用

  目前PIL的官方最新版本為1.1.7,支持的版本為python 2.5, 2.6, 2.7,並不支持python3,經查詢python3.X用pillow代替,進入DOS命令行窗口,敲入以下代碼

pip install pillow

  提示安裝成功,再運行程序沒有問題。

2.4 正式識別圖片中的文字(包括簡單的英文和復雜的英文)

2.4.1 下面進入正題,我們識別下面的東西,看圖(兩種情況):

技術分享圖片

技術分享圖片

2.4.2 python代碼如下:  

import pytesseract
from PIL import Image

#打開驗證碼圖片
image = Image.open(‘02.jpg‘)
#加載一下圖片防止報錯,此處可以省略
image.load()
#調用show來展示圖片,調試用此處可以省略
image.show()
text = pytesseract.image_to_string(Image.open(‘02.jpg‘))
print(text)

2.4.3 查看運行結果,運行後,結果如下:

技術分享圖片

技術分享圖片

2.4.5 總結

  從上面我們可以發現,運行代碼後的結果, 簡單的圖片識別率還是可以的,但是復雜的話 就...,所以希望自己繼續學習,繼續尋找有用的庫。

三 Image模塊的用法介紹(轉)

3.1 簡介

圖像處理是一門應用非常廣的技術,而擁有非常豐富第三方擴展庫的 Python 當然不會錯過這一門盛宴。PIL (Python Imaging Library)是 Python 中最常用的圖像處理庫,目前版本為 1.1.7,我們可以 在這裏 下載學習和查找資料。

Image 類是 PIL 庫中一個非常重要的類,通過這個類來創建實例可以有直接載入圖像文件,讀取處理過的圖像和通過抓取的方法得到的圖像這三種方法。

3.2 使用

導入 Image 模塊。然後通過 Image 類中的 open 方法即可載入一個圖像文件。如果載入文件失敗,則會引起一個 IOError ;若無返回錯誤,則 open 函數返回一個 Image 對象。現在,我們可以通過一些對象屬性來檢查文件內容,即:

1 >>> import Image
2  >>> im = Image.open("j.jpg")
3  >>> print im.format, im.size, im.mode
4 JPEG (440, 330) RGB

  

這裏有三個屬性,我們逐一了解。

format : 識別圖像的源格式,如果該文件不是從文件中讀取的,則被置為 None 值。

size : 返回的一個元組,有兩個元素,其值為象素意義上的寬和高。

mode : RGB(true color image),此外還有,L(luminance),CMTK(pre-press image)。

3.3 簡單的幾何變化

色彩空間變換。

convert() : 該函數可以用來將圖像轉換為不同色彩模式。

圖像增強。

 Filters : 在 ImageFilter 模塊中可以使用 filter 函數來使用模塊中
一系列預定義的增強濾鏡。

>>>out = im.resize((128, 128))                     

 >>>out = im.rotate(45)                             #逆時針旋轉 45 度角。

 >>>out = im.transpose(Image.FLIP_LEFT_RIGHT)       #左右對換。

 >>>out = im.transpose(Image.FLIP_TOP_BOTTOM)       #上下對換。

 >>>out = im.transpose(Image.ROTATE_90)             #旋轉 90 度角。

 >>>out = im.transpose(Image.ROTATE_180)            #旋轉 180 度角。

>>>out = im.transpose(Image.ROTATE_270)            #旋轉 270 度角。

  

深入學習使用ocr算法識別圖片中文字的方法