日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

使用Python,OpenCV进行Tesseract-OCR绑定及识别

發布時間:2023/11/27 生活经验 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Python,OpenCV进行Tesseract-OCR绑定及识别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用Python,OpenCV進行Tesseract-OCR綁定及識別

    • 1. 效果圖
    • 2. 安裝Tesseract+Python“綁定”及識別
    • 3. 源碼
    • 參考

上一篇博客介紹了Windows上Tesseract-OCR的安裝,并使用命令行參數進行了OCR數字和字母的識別。這一篇將介紹如何使用Python應用Tesseract-OCR綁定,并進行圖像上字符的識別。當前景文本與背景進行(非常)清晰的分割時,Tesseract-OCR將獲得好的效果。

  • 最大的缺點是Tesseract本身的局限性。當前景文本與背景之間有非常清晰的分割時,Tesseract效果最佳。

  • 這些分割需要盡可能高的分辨率(DPI),并且分割后輸入圖像中的字符不能出現“像素化”。如果字符確實出現像素化,那么Tesseract將難以正確識別文本。

  • 將OCR應用于真實世界的無約束圖像時,仍有挑戰。深度學習和卷積神經網絡(CNN)將能夠獲得更高的精度

  • 在將OCR應用于項目時,建議首先嘗試Tesseract,如果結果不理想,可使用Google 在線API。

  • 如果Tesseract和Google Vision API都沒有獲得合理的準確度,則需要重新評估數據集,并決定是否要培訓自定義字符分類器。

1. 效果圖

原始圖如下:

命令行Tesseract-OCR結果如圖:

tesseract版本 v5.0.0,可以看到高于v4,使用的是長短時記憶(LSTM)OCR模型,該模型比Tesseract的早期版本精確得多!
Python+Tessearct-OCR綁定識別,預處理(閾值化)后的效果圖如下:

可以看到閾值化后的圖像相當清晰,分辨率也很高,因此成功識別。

Python+Tessearct-OCR綁定識別,預處理(中值模糊)后的效果圖如下:
可以看到成功識別~

效果圖2——原始圖VS 閾值化后的圖像:

噪音更多一些的Tesseract-OCR命令行也能成功識別:

python+Tesseract-OCR預處理(閾值化后)識別效果圖如下:

python+Tesseract-OCR預處理(中值模糊后)識別效果圖如下:
可以看到中值模糊后有不少噪音,依然成功識別~

更多的文本也可以成功識別,Python+Tesseract-OCR效果圖如下:

2. 安裝Tesseract+Python“綁定”及識別

  • 安裝pillow,它是一個對Python更友好的PIL(一個依賴項)端口
  • 安裝tesseract

pip install pillow
pip install pytesseract

pytesseract 不提供真正的Python綁定。相反,它只是提供了一個到tesseract的調用映射接口。然后調用tesseract二進制文件,并捕獲結果輸出。

可以使用Tesseract for OCR獲得良好或可接受的結果,但最好的準確度將來自對實際圖像中出現的特定字體集的自定義字符分類器進行訓練。

通過升級Tesseract版本來提高OCR準確性。

如果在輸出中看到Tesseract v4或更高版本,則使用的是長短時記憶(LSTM)OCR模型,該模型比Tesseract的早期版本精確得多!
如果看到任何低于v4的版本,則應升級Tesseract安裝-使用Tesseract v4 LSTM引擎將獲得更準確的OCR結果。

3. 源碼

# 使用pytesseract調用tesseract-ocr進行OCR識別
# 命令行ocr
# tesseract D:\deepLearning\py-demo\20210822\images\example_01.png stdout# USAGE
# python ocr.py --image images/example_01.png
# python ocr.py --image images/example_01.png --preprocess blur# 導入必要的包
from PIL import Image  #以PIL格式加載磁盤圖像
import pytesseract
import argparse
import cv2
import os# 構建命令行參數及解析
# --image 輸入圖像路徑
# --preprocess:預處理類型,thresh或blur
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True,help="path to input image to be OCR'd")
ap.add_argument("-p", "--preprocess", type=str, default="thresh",help="type of preprocessing to be done")
args = vars(ap.parse_args())# 加載圖像并轉換為灰度圖
image = cv2.imread(args["image"])
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 預處理以便將前景與背景分割開來
# 檢測是該用閾值還是模糊預處理步驟
if args["preprocess"] == "thresh":gray = cv2.threshold(gray, 0, 255,cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]
# 檢測是否應該用中值模糊
# 應用中值模糊有助于減少椒鹽噪聲,使Tesseract更容易正確地對圖像進行OCR。
elif args["preprocess"] == "blur":gray = cv2.medianBlur(gray, 3)# 將灰度圖臨時寫入磁盤以調用OCR識別
filename = "{}.png".format(os.getpid())
cv2.imwrite(filename, gray)# 以PIL(pillow)格式加載圖像,應用OCR,刪除臨時文件
# 將圖像的內容轉換為所需的字符串文本
text = pytesseract.image_to_string(Image.open(filename))
os.remove(filename)
# 輸出識別的文本值
print(text)# 展示原始圖像和預處理圖像
cv2.imshow("Image", image)
cv2.imshow("Output", gray)
cv2.waitKey(0)

參考

  • eng.traineddata,chi_sm.traineddata語言訓練包下載
  • https://www.pyimagesearch.com/2017/07/10/using-tesseract-ocr-python/
  • https://github.com/UB-Mannheim/tesseract/wiki

總結

以上是生活随笔為你收集整理的使用Python,OpenCV进行Tesseract-OCR绑定及识别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。