一、tesserocr簡介
tesserocr是一個基於Tesseract OCR引擎的Python封裝庫,能夠對圖片進行OCR(光學字符識別)操作,將圖片上的文字提取出來並轉化為可編輯文字。tesserocr提供簡單易用的接口,支持多語言OCR識別,並且能夠處理多種格式的圖片文件。
二、tesserocr的安裝和使用
tesserocr支持Python2和Python3,可以通過pip安裝:$ pip install tesserocr。安裝好tesserocr後,可以使用下面的代碼來進行簡單的OCR操作:
import tesserocr
from PIL import Image
image = Image.open('test.png')
result = tesserocr.image_to_text(image)
print(result.strip())
以上代碼首先打開圖片,然後使用tesserocr.image_to_text()函數進行OCR操作,最後將識別結果打印輸出。可以看到,tesserocr使用非常簡單方便。同時,tesserocr還支持對修改後的圖片進行OCR操作,示例如下:
import tesserocr
from PIL import Image, ImageOps
image = Image.open('test.png')
gray_image = ImageOps.grayscale(image)
result = tesserocr.image_to_text(gray_image)
print(result.strip())
以上代碼實現了對圖片進行灰度處理後再進行OCR操作。需要注意的是,tesserocr對圖片的處理能力可能會受到圖像分辨率、圖像質量和背景噪聲等因素的影響,因此可能會影響最終的OCR識別效果。
三、tesserocr的高級應用
1. 支持多語言OCR識別
tesserocr支持多語言OCR識別,通過設置tesserocr.PyTessBaseAPI()類的語言參數,可以識別多種語言的文本。例如,以下代碼可以識別中文和英文文本:
import tesserocr
from PIL import Image
image = Image.open('test.png')
with tesserocr.PyTessBaseAPI(lang='chi_sim+eng') as api:
api.SetImage(image)
result = api.GetUTF8Text()
print(result.strip())
以上代碼使用chi_sim+eng作為語言參數,表示同時識別中文和英文。如果需要識別其他語言,可以將lang參數設置為其他支持的語言代碼。tesserocr支持的語言代碼可以在官方文檔中查詢。
2. 圖片預處理和後處理
tesserocr支持對圖片進行預處理和後處理,提高OCR識別的準確率。以下代碼演示了如何使用tesserocr進行圖片預處理和後處理,示例代碼中使用了二值化處理和模糊處理,提高了OCR識別的準確率:
import tesserocr
from PIL import Image, ImageOps, ImageFilter
image = Image.open('test.png')
gray_image = ImageOps.grayscale(image)
binary_image = gray_image.point(lambda x: 0 if x < 200 else 255)
blurred_image = binary_image.filter(ImageFilter.GaussianBlur(3))
result = tesserocr.image_to_text(blurred_image)
print(result.strip())
以上代碼實現了灰度處理、二值化處理和模糊處理。需要注意的是,在進行預處理和後處理時,tesserocr提供了多種函數和方法,需要根據具體需求進行選擇和調整,以提高識別準確率。
3. 自定義字典
tesserocr還支持自定義詞典,通過設置tesserocr.PyTessBaseAPI()類的變量參數,可以將自定義詞典加載到OCR識別過程中。以下代碼演示了如何自定義詞典:
import tesserocr
from PIL import Image
image = Image.open('test.png')
with tesserocr.PyTessBaseAPI() as api:
api.SetImage(image)
api.SetVariable('tessedit_char_whitelist', '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')
api.SetVariable('user_words_suffix', 'user-words')
api.Recognize()
result = api.GetUTF8Text()
print(result.strip())
以上代碼使用user-words文件作為自定義詞典,user-words文件中包含需要識別的單詞,識別結果會將自定義詞典中的單詞作為首選結果返回。
4. OCR識別率的限制
雖然OCR技術越來越成熟,但是其識別精度仍然受到圖像清晰度、光照條件等因素的影響。因此,在實際使用中,需要根據具體需求和場景來控制OCR識別的精度和限制識別結果的內容。以下代碼演示了如何使用tesserocr進行OCR識別限制:
import tesserocr
from PIL import Image
image = Image.open('test.png')
with tesserocr.PyTessBaseAPI() as api:
api.SetImage(image)
api.SetVariable('tessedit_char_whitelist', '0123456789')
api.SetVariable('load_system_dawg', 'F')
api.SetVariable('load_freq_dawg', 'F')
api.Recognize()
result = api.GetUTF8Text()
print(result.strip())
以上代碼通過設置tessedit_char_whitelist變量,限制識別結果僅包含數字。同時,通過設置load_system_dawg和load_freq_dawg變量,關閉了字典和詞頻的加載,避免干擾結果的準確性。
四、總結
tesserocr是一個強大的OCR識別庫,能夠便捷地對多語言文字進行OCR識別,並且提供了豐富的預處理和後處理方法,可以大大提高識別精度。在實際應用中,需要根據具體需求選擇合適數量的預處理和後處理方法,並且限制OCR識別結果的內容和精度,以達到最佳識別效果。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/239753.html
微信掃一掃
支付寶掃一掃