前言
文字型pdf提取,python的庫(kù)一大堆,但是圖片型pdf和pdf掃描件提取,還是有些難度的,我們需要用到OCR(光學(xué)字符識(shí)別)功能。
一、準(zhǔn)備
1、安裝OCR(光學(xué)字符識(shí)別)支持庫(kù)
首先要安裝pytesseract
和Tesserac OCR
,Tesseract OCR是一種廣泛使用的OCR工具,它可以用于從圖像中提取文字。Tesseract OCR具有較高的識(shí)別精度和速度,同時(shí)支持多種語(yǔ)言。在Python中,可以使用pytesseract庫(kù)來(lái)調(diào)用Tesseract OCR。
(1)安裝pytesseract
庫(kù):
pip install pytesseract
(2)安裝Tesseract OCR
程序
下載安裝
github下載地址:https://github.com/tesseract-ocr/tesseract
國(guó)內(nèi)下載地址:https://digi.bib.uni-mannheim.de/tesseract/
如果要識(shí)別中文的話,要安裝3.0以上的版本,我這里以國(guó)內(nèi)下載地址為例,下載5.0版本,如圖:
下載完成之后,雙擊打開,一路next即可,自己選擇好安裝位置,后面要配置環(huán)境變量的。
配置環(huán)境變量
我的安裝位置如圖:
找到系統(tǒng)變量的path,點(diǎn)擊編輯,如圖:
新建一個(gè)環(huán)境變量,變量的值是tesseract的安裝位置,如圖:
點(diǎn)擊確定之后,在系統(tǒng)變量界面,點(diǎn)擊新建,新建一個(gè)系統(tǒng)變量,名稱為TESSDATA_PREFIX
,值為安裝目錄下的tessdata
目錄位置,如圖:
一路點(diǎn)擊確定即可。
下載中文包
軟件默認(rèn)使用的是英文包,只能識(shí)別英文,我們現(xiàn)在下載配置中文包,下載地址:
github:https://github.com/tesseract-ocr/tessdata
gitcode(國(guó)內(nèi)):https://gitcode.com/mirrors/tesseract-ocr/tessdata/tree/main?utm_source=csdn_github_accelerator&isLogin=1
建議選擇國(guó)內(nèi)地址,下載速度比較快,我們下載五個(gè)包,分別是:eng.traineddata、chi_sim.traineddata、chi_sim_vert.traineddata、chi_tra.traineddata、chi_tra_vert.traineddata,如圖:
第一個(gè)是英文包,后面四個(gè)是中文包,sim開頭是簡(jiǎn)體,tra開頭是繁體,點(diǎn)擊進(jìn)去,點(diǎn)擊右側(cè)的下載,將五個(gè)包下載下來(lái),如圖:
下載完成之后,復(fù)制到tesseract安裝目錄下的tessdata
文件夾下,如圖:
在命令行輸入tesseract -v,顯示tesseract的版本號(hào),就表示安裝完成了,如圖:
現(xiàn)在安裝工作就完成了。
測(cè)試圖片識(shí)別
測(cè)試圖片如下:
測(cè)試代碼:
import pytesseract
from PIL import Image
# (1)配置tesseract安裝路徑
pytesseract.pytesseract.tesseract_cmd = r'F:\tesseract\tesseract.exe'
text = pytesseract.image_to_string(Image.open(r'1-26.jpg'))
print(text)
結(jié)果如下:
如果我們不想每次代碼都去配置tesseract的安裝路徑的話,可以直接在源文件里面修改,我們找到如圖的文件,將框出來(lái)的地方修改成安裝路徑即可:
(2)安裝其他庫(kù)
pip install PyMuPDF PIL
二、正式提取圖片型pdf的文字
代碼如下:
# -*- coding: UTF-8 -*-
"""
@Date :2023/12/17
"""
import fitz
import pytesseract
from PIL import Image
import io
# (1)配置tesseract安裝路徑
pytesseract.pytesseract.tesseract_cmd = r'F:\tesseract\tesseract.exe'
# (2)打開pdf文件
pdf_file = fitz.open(r'一戶一宅.pdf')
# (3)遍歷pdf的每一頁(yè)
for page_num in range(len(pdf_file)):
# 獲取頁(yè)面
page = pdf_file[page_num]
# 提取頁(yè)面上的圖像
image_list = page.get_images(full=True)
for image_index, img in enumerate(image_list):
# 提取圖像
xref = img[0]
base_image = pdf_file.extract_image(xref)
image_bytes = base_image["image"]
# 將字節(jié)轉(zhuǎn)換為PIL圖像
image = Image.open(io.BytesIO(image_bytes))
# 使用pytesseract對(duì)圖像進(jìn)行ocr
text = pytesseract.image_to_string(image, lang='chi_sim')
# 打印結(jié)果
print(f"Page {page_num + 1}, Image {image_index + 1}:")
print(text)
# 關(guān)閉pdf文件
pdf_file.close()
結(jié)果如下:
總結(jié)
需要注意的是,Tesseract OCR對(duì)于一些復(fù)雜或低質(zhì)量的圖像可能識(shí)別效果不佳。
提示
對(duì)于文字型pdf的提取,可以看這幾篇文章:
https://blog.csdn.net/weixin_43856625/article/details/134705266
https://www.jianshu.com/p/8fbb662bd6f7文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-842773.html
https://blog.csdn.net/Achernar0208/article/details/129199937文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-842773.html
到了這里,關(guān)于python提取圖片型pdf中的文字(提取pdf掃描件文字)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!