OCR識別掃描版PDF文件(Python版)
概述
掃描版PDF文字識別
Tesseract OCR實現pdf文本識別
tesseract-ocr安裝與測試
python實現基於tesseract的pdf文本識別
百度 OCR實現pdf文本識別
準備
python實現基於百度OCR的pdf文本識別
參考
掃描版PDF文字識別
Tesseract OCR實現pdf文本識別
tesseract-ocr安裝與測試
python實現基於tesseract的pdf文本識別
百度 OCR實現pdf文本識別
準備
python實現基於百度OCR的pdf文本識別
參考
概述
本文基於OCR識別掃描版PDF文件(不是文字版)。若要處理文字版OCR,百度pdfminer或pdfplumder等使用即可。
依賴:
- 應用程序tesseract-ocr //digi.bib.uni-mannheim.de/tesseract/
- python庫pytesseract、pdf2image
基本思路:
- 使用pdf2image.convert_from_path將pdf文件轉化為png格式圖片;
- 通過pytesseract鏈接tesseract-ocr,使用pytesseract.image_to_string識別圖像中的文字。
掃描版PDF文字識別
Tesseract OCR實現pdf文本識別
tesseract-ocr安裝與測試
- tesseract-ocr安裝完成後,配置環境變量,即將tesseract的安裝路徑添加到『path』系統變量;
- 配置完成後,在cmd窗口輸入
tesseract -v
會顯示配置成功信息。
- 配置完成後,在cmd窗口輸入
- 識別簡體中文需要下載chi_sim.traindata字庫//github.com/tesseract-ocr/tessdata,注意,該字庫僅支持Tesseract 4.0.0及更高版本;
- 將下載好的字庫放到Tesseract-OCR安裝目錄下的tessdata文件夾里;
- cmd中進入需要識別圖片目錄,執行
tesseract *.png result -l eng
將圖片’*.png’的OCR結果保存至’result.txt’文件夾。-l
參數為OCR識別語言,默認英語eng。
- 中文的識別效果不太理想,需要自己訓練下。
python實現基於tesseract的pdf文本識別
import pytesseract
from pdf2image import convert_from_path
import os
os.chdir(os.getcwd())
def tess_ocr(fname, lang):
# 將pdf轉換為png後,保存在dirname文件夾
dirname = fname.rsplit('.', 1)[0]
if not os.path.exists(dirname):
os.mkdir(dirname)
images = convert_from_path(fname, fmt='png', output_folder=dirname)
text = ''
for img in images:
text += pytesseract.image_to_string(img, lang=lang)
with open('result.txt', 'w', encoding='utf-8') as f:
f.write(text)
return text
fname = 'test.pdf'
text = tess_ocr(fname, lang='chi_sim')
百度 OCR實現pdf文本識別
由於直接使用tesseract識別效果並不理想,嘗試百度OCR。
準備
-
安裝python庫baidu-aip,
pip install baidu-aip
; -
在百度智能雲創建文本識別應用,獲得’APP_ID’ 、’API_KEY’ 和’SECRET_KEY’ 字段;
-
標準版文字識別『5000次/天免費』,一般是足夠的。
python實現基於百度OCR的pdf文本識別
from pdf2image import convert_from_path
from aip import AipOcr
import os
APP_ID = '***'
API_KEY = '***'
SECRET_KEY = '***'
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
def baidu_ocr(fname):
f = open('result.txt', 'w', encoding='utf-8')
dirname = fname.rsplit('.', 1)[0]
if not os.path.exists(dirname):
os.mkdir(dirname)
images = convert_from_path(fname, fmt='png', output_folder=dirname)
for img in images:
with open(img.filename, 'rb') as fimg:
img = fimg.read() # 根據'PIL.PngImagePlugin.PngImageFile'對象的filename屬性讀取圖片為二進制
msg = client.basicGeneral(img)
for i in msg.get('words_result'):
f.write('{}\n'.format(i.get('words')))
f.write('\f\n')
f.close()
baidu_ocr('1.pdf')