Python輕松實(shí)現(xiàn)圖片文字提取的高效技巧分享
1. OCR技術(shù)簡(jiǎn)介
1.1 什么是OCR?
OCR(Optical Character Recognition,光學(xué)字符識(shí)別)是一種將圖片中的文字轉(zhuǎn)換為可編輯文本的技術(shù)。其核心目標(biāo)是通過算法自動(dòng)識(shí)別圖像中的字符,并將其轉(zhuǎn)換為計(jì)算機(jī)可處理的文本格式。
應(yīng)用場(chǎng)景:
- 文檔數(shù)字化(掃描件轉(zhuǎn)Word/Excel)
- 車牌識(shí)別(交通監(jiān)控系統(tǒng))
- 發(fā)票處理(自動(dòng)錄入財(cái)務(wù)系統(tǒng))
1.2 OCR的工作原理
OCR技術(shù)通常分為以下三個(gè)階段:
圖像預(yù)處理:
- 去噪:消除圖片中的干擾像素(如高斯模糊)。
- 二值化:將圖像轉(zhuǎn)為黑白兩色,突出文本(如Otsu算法)。
- 邊緣檢測(cè):定位文字區(qū)域(如Canny算法)。
文本檢測(cè):
- 使用輪廓檢測(cè)(OpenCV)或深度學(xué)習(xí)模型(如EAST)定位文字位置。
字符識(shí)別:
- 傳統(tǒng)方法:特征匹配(Tesseract早期版本)。
- 深度學(xué)習(xí)方法:CNN+RNN(如CRNN模型)。
1.3 為什么選擇Python實(shí)現(xiàn)OCR?
- 庫(kù)支持豐富:Tesseract、EasyOCR等主流工具均有Python接口。
- 圖像處理靈活:OpenCV、Pillow等庫(kù)提供強(qiáng)大的預(yù)處理能力。
- 社區(qū)活躍:易于找到解決方案和優(yōu)化建議。
2. 常用Python OCR工具對(duì)比
2.1 Tesseract OCR
- 簡(jiǎn)介:Google開源OCR引擎,支持100+種語(yǔ)言。
- 優(yōu)點(diǎn):
- 成熟穩(wěn)定,適合打印體識(shí)別。
- 支持自定義訓(xùn)練(如
tesstrain工具)。 - 缺點(diǎn):
- 對(duì)模糊、傾斜或復(fù)雜背景圖片效果較差。
2.2 EasyOCR
簡(jiǎn)介:基于PyTorch的OCR庫(kù),支持80+種語(yǔ)言。
- 優(yōu)點(diǎn):
- 開箱即用,API簡(jiǎn)潔(僅需2行代碼)。
- 對(duì)自然場(chǎng)景文字(如廣告牌)識(shí)別效果好。
- 缺點(diǎn):
- 模型體積大(依賴GPU加速)。
2.3 PaddleOCR
- 簡(jiǎn)介:百度開源OCR工具,支持中英文優(yōu)先場(chǎng)景。
- 優(yōu)點(diǎn):
- 高精度(尤其中文識(shí)別)。
- 提供端到端訓(xùn)練工具。
- 缺點(diǎn):
- 配置復(fù)雜(需安裝PaddlePaddle框架)。
3. 實(shí)戰(zhàn):使用Tesseract提取圖片文字
3.1 環(huán)境配置
pip install pytesseract pillow opencv-python # 需額外安裝Tesseract引擎(Windows:下載安裝包;Linux:apt install tesseract-ocr)
3.2 基礎(chǔ)代碼實(shí)現(xiàn)
import pytesseract
from PIL import Image
# 示例:識(shí)別簡(jiǎn)體中文
image = Image.open('invoice.jpg')
text = pytesseract.image_to_string(image, lang='chi_sim+eng') # 混合中英文
print(text)
3.3 圖像預(yù)處理優(yōu)化
import cv2
# 灰度化+二值化
img = cv2.imread('invoice.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
# 保存預(yù)處理后圖片
cv2.imwrite('processed.jpg', thresh)
4. 進(jìn)階技巧與優(yōu)化
4.1 提升識(shí)別準(zhǔn)確率
自定義訓(xùn)練:
tesseract --psm 6 --oem 3 input.tif output batch.nochop makebox
參數(shù)調(diào)整:
--psm 11:密集文本模式。--oem 1:LSTM引擎優(yōu)先。
4.2 處理復(fù)雜場(chǎng)景
多語(yǔ)言混合識(shí)別:
text = pytesseract.image_to_string(image, lang='chi_sim+eng')
4.3 性能優(yōu)化
批量處理圖片:
from concurrent.futures import ThreadPoolExecutor
def ocr_process(image_path):
return pytesseract.image_to_string(Image.open(image_path))
with ThreadPoolExecutor() as executor:
results = list(executor.map(ocr_process, ['1.jpg', '2.jpg']))
5. 實(shí)際應(yīng)用案例
5.1 發(fā)票信息提取
關(guān)鍵步驟:
- 使用OpenCV定位金額、日期區(qū)域(模板匹配或坐標(biāo)裁剪)。
- 正則表達(dá)式提取關(guān)鍵數(shù)據(jù)(如
r'\d{4}-\d{2}-\d{2}'匹配日期)。
5.2 車牌識(shí)別系統(tǒng)
# 示例:車牌檢測(cè)(偽代碼)
plate_cascade = cv2.CascadeClassifier('haarcascade_plate.xml')
plates = plate_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5)
for (x,y,w,h) in plates:
plate_img = gray[y:y+h, x:x+w]
print(pytesseract.image_to_string(plate_img))
6. 常見問題與解決方案
6.1 識(shí)別率低
- 檢查項(xiàng):
- 圖片DPI是否≥300?
- 是否嘗試過
--psm參數(shù)調(diào)整?
6.2 多語(yǔ)言支持
解決方案:
sudo apt install tesseract-ocr-chi-sim # 安裝中文包
7. 總結(jié)
- 核心工具:Tesseract適合基礎(chǔ)場(chǎng)景,EasyOCR/PaddleOCR適合復(fù)雜場(chǎng)景。
- 關(guān)鍵優(yōu)化:預(yù)處理(二值化)+參數(shù)調(diào)整(
--psm)。 - 擴(kuò)展方向:結(jié)合YOLO實(shí)現(xiàn)端到端文本檢測(cè)與識(shí)別。
以上就是Python輕松實(shí)現(xiàn)圖片文字提取的高效技巧分享的詳細(xì)內(nèi)容,更多關(guān)于Python圖片文字提取技巧的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python實(shí)現(xiàn)批量圖片格式轉(zhuǎn)換
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)批量圖片格式轉(zhuǎn)換的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06
余弦相似性計(jì)算及python代碼實(shí)現(xiàn)過程解析
這篇文章主要介紹了余弦相似性計(jì)算及python代碼實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
Python接口自動(dòng)化淺析logging日志原理及模塊操作流程
這篇文章主要為大家介紹了Python接口自動(dòng)化系列文章淺析logging日志原理及模塊操作流程,文中詳細(xì)說明了為什么需要日志?日志是什么?以及日志用途等基本的原理2021-08-08
Python灰度變換中的分段線性函數(shù)專項(xiàng)分析實(shí)現(xiàn)
灰度變換是指根據(jù)某種目標(biāo)條件按一定變換關(guān)系逐點(diǎn)改變?cè)磮D像中每個(gè)像素灰度值的方法。目的是改善畫質(zhì),使圖像顯示效果更加清晰。圖像的灰度變換處理是圖像增強(qiáng)處理技術(shù)中的一種非?;A(chǔ)、直接的空間域圖像處理方法,也是圖像數(shù)字化軟件和圖像顯示軟件的一個(gè)重要組成部分2022-10-10
ubuntu?20.04系統(tǒng)下如何切換gcc/g++/python的版本
這篇文章主要給大家介紹了關(guān)于ubuntu?20.04系統(tǒng)下如何切換gcc/g++/python版本的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用ubuntu具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-12-12
Python3 XML 獲取雅虎天氣的實(shí)現(xiàn)方法
下面小編就為大家分享一篇Python3 XML 獲取雅虎天氣的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-02-02
使用pycharm設(shè)置控制臺(tái)不換行的操作方法
今天小編就為大家分享一篇使用pycharm設(shè)置控制臺(tái)不換行的操作方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-01-01

