Python實(shí)現(xiàn)識(shí)別圖片和掃描PDF中的文字
在處理掃描的PDF和圖片時(shí),文字信息往往無(wú)法直接編輯、搜索或復(fù)制,這給信息提取和分析帶來(lái)了諸多不便。手動(dòng)錄入信息不僅耗時(shí)費(fèi)力,還容易出錯(cuò)。光學(xué)字符識(shí)別(OCR)技術(shù)能夠?qū)D片中的文字轉(zhuǎn)換為可編輯文本,使信息提取和處理更加高效。如今,OCR已廣泛應(yīng)用于掃描文件的轉(zhuǎn)換、數(shù)字化文檔的整理、以及自動(dòng)化數(shù)據(jù)輸入等領(lǐng)域。本文將介紹如何使用Python及相關(guān)OCR庫(kù),實(shí)現(xiàn)對(duì)圖片和掃描PDF中文字的識(shí)別。
工具與設(shè)置
要在Python中實(shí)現(xiàn)從圖片和掃描PDF中提取文本,我們需要選擇一個(gè)適當(dāng)?shù)腛CR庫(kù)。本文所選擇的庫(kù)是Spire.OCR for Python。該庫(kù)支持多種語(yǔ)言,包括英語(yǔ)、法語(yǔ)、德語(yǔ)、簡(jiǎn)體中文、繁體中文、日語(yǔ)、韓語(yǔ)等。在使用該庫(kù)之前,我們需要完成以下兩個(gè)步驟:
步驟1:安裝Spire.OCR for Python
在終端中運(yùn)行以下命令安裝Spire.OCR for Python:
pip install Spire.OCR
步驟2:下載OCR模型
Spire.OCR for Python提供了支持Windows(64位)、Linux(64位)和MacOS(10.15及以上)操作系統(tǒng)的三種模型。我們需要根據(jù)自己的系統(tǒng)下載適合的模型:
下載完成后,將它解壓并保存到特定的目錄下。
完成以上兩個(gè)步驟后,我們就可以使用該庫(kù)實(shí)現(xiàn)識(shí)別圖片和掃描PDF中的文字。
Python 識(shí)別圖片中的文字
從圖片中提取文本的過(guò)程比較簡(jiǎn)單。首先,需要配置 OCR 掃描器的相關(guān)設(shè)置(例如:文本識(shí)別語(yǔ)言和OCR模型的路徑);然后對(duì)圖片進(jìn)行掃描;最后將識(shí)別的文字保存為文本文件。
以下是從圖片中提取文本的關(guān)鍵步驟:
- 初始化 OCR 掃描器:創(chuàng)建 OcrScanner 對(duì)象。
- 配置 OCR 設(shè)置:通過(guò) OcrScanner 對(duì)象的 ConfigureDependencies 方法,設(shè)置 OCR 模型的路徑和文本識(shí)別語(yǔ)言。
- 掃描圖片:使用 OcrScanner 對(duì)象的 Scan() 方法,從圖片中識(shí)別文本。
- 保存文本:獲取識(shí)別出的文本并保存為文本文件。
實(shí)現(xiàn)代碼:
from spire.ocr import * # 初始化OcrScanner對(duì)象 scanner = OcrScanner() # 配置OCR設(shè)置(文本識(shí)別語(yǔ)言和OCR模型路徑) # 支持的語(yǔ)言包括英語(yǔ)、法語(yǔ)、德語(yǔ)、日語(yǔ)、韓語(yǔ)、簡(jiǎn)體中文、繁體中文等 configureOptions = ConfigureOptions() configureOptions.ModelPath = r'D:\OCR\win-x64' configureOptions.Language = 'Chinese' scanner.ConfigureDependencies(configureOptions) # 掃描圖片 scanner.Scan(r'測(cè)試.png') # 獲取識(shí)別的文本 text = scanner.Text.ToString() + '\n' # 將文本保存到文本文件 with open('輸出.txt', 'a', encoding='utf-8') as file: file.write(text + '\n')
原始圖片和識(shí)別結(jié)果:
Python 識(shí)別圖片中的文字及其坐標(biāo)位置
有時(shí)除了識(shí)別文本外,還需要獲取文本在圖片中的坐標(biāo)位置。Spire.OCR也支持提取這些信息。
以下是從圖片中識(shí)別文本并獲取其坐標(biāo)位置的關(guān)鍵步驟:
- 初始化OCR掃描器:創(chuàng)建OcrScanner對(duì)象。
- 配置OCR設(shè)置:通過(guò)OcrScanner對(duì)象的ConfigureDependencies方法設(shè)置OCR模型的路徑和文本識(shí)別語(yǔ)言。
- 掃描圖片:使用OcrScanner 對(duì)象的Scan() 方法從圖片中識(shí)別文本。
- 獲取邊框坐標(biāo):遍歷識(shí)別的文本中的文本塊,獲取每個(gè)文本塊的邊框信息(x, y坐標(biāo)及其寬度和高度)。
- 保存文本和坐標(biāo):將文本及其坐標(biāo)保存到文本文件中。
實(shí)現(xiàn)代碼:
from spire.ocr import * # 初始化OcrScanner對(duì)象 scanner = OcrScanner() # 配置OCR設(shè)置(文本識(shí)別語(yǔ)言和OCR模型路徑) # 支持的語(yǔ)言包括英語(yǔ)、法語(yǔ)、德語(yǔ)、日語(yǔ)、韓語(yǔ)、簡(jiǎn)體中文、繁體中文等 configureOptions = ConfigureOptions() configureOptions.ModelPath = r'D:\OCR\win-x64' configureOptions.Language = 'Chinese' scanner.ConfigureDependencies(configureOptions) # 掃描圖片 scanner.Scan(r'測(cè)試.png') # 遍歷識(shí)別的文本中的文本塊,提取每個(gè)文本塊的文本和坐標(biāo)位置等信息 text = '' for block in scanner.Text.Blocks: rectangle = block.Box positions = f'{block.Text} -> x: {rectangle.X}, y: {rectangle.Y}, w: {rectangle.Width}, h: {rectangle.Height}' text += positions + '\n' # 將文本和坐標(biāo)保存到文本文件 with open('圖片文字及坐標(biāo).txt', 'a', encoding='utf-8') as file: file.write(text + '\n')
Python 識(shí)別掃描PDF中的文字
對(duì)于掃描的PDF文檔,需先將每一頁(yè)轉(zhuǎn)換為圖片格式??梢越柚?a target="_blank">Spire.PDF for Python庫(kù)來(lái)實(shí)現(xiàn)這一點(diǎn)。將PDF頁(yè)面轉(zhuǎn)換為圖片后,即可對(duì)每張圖片執(zhí)行 OCR 處理。
在使用以下代碼之前,請(qǐng)先通過(guò)以下命令安裝Spire.PDF:
pip install Spire.PDF
以下是從掃描PDF中提取文本的關(guān)鍵步驟:
- 將PDF頁(yè)面轉(zhuǎn)換為圖片:使用Spire.PDF加載掃描的PDF文檔,然后使用PdfDocument.SaveAsImage()方法將文檔的每一頁(yè)保存為圖片。
- 執(zhí)行OCR:使用Spire.OCR識(shí)別每張圖片中的文本。
- 保存識(shí)別的文本:將識(shí)別的文本保存到文本文件中。
實(shí)現(xiàn)代碼:
from spire.pdf import * from spire.ocr import * import io # 將PDF頁(yè)面轉(zhuǎn)換為圖片 def convert_pdf_page_to_image(pdf, page_index): return pdf.SaveAsImage(page_index) # 從圖片中識(shí)別文本 def recognize_text_from_image(imgName, language, model_path): # 初始化OCR掃描器并配置OCR模型的路徑和文本識(shí)別語(yǔ)言 scanner = OcrScanner() configure_options = ConfigureOptions() configure_options.Language = language configure_options.ModelPath = model_path scanner.ConfigureDependencies(configure_options) # 執(zhí)行OCR并返回識(shí)別的文本 scanner.Scan(imgName) data = scanner.Text.ToString() return data # 加載掃描PDF文檔 pdf = PdfDocument() pdf.LoadFromFile('掃描.pdf') # 創(chuàng)建文本文件以保存提取的文本 with open('掃描PDF.txt', 'a', encoding='utf-8') as writer: for page_index in range(pdf.Pages.Count): # 將PDF頁(yè)面轉(zhuǎn)換為圖片 image = convert_pdf_page_to_image(pdf, page_index) imgName="toImage_"+str(page_index)+".png" image.Save(imgName) # 從圖片中識(shí)別文本 recognized_text = recognize_text_from_image(imgName, 'Chinese', r'D:\OCR\win-x64') # 將識(shí)別的文本寫(xiě)入文本文件 writer.write(f'Page {page_index + 1}:\n') writer.write(recognized_text) writer.write('\n\n') # 在頁(yè)面之間添加兩個(gè)換行符 print('文本已成功保存到"掃描PDF.txt"。')
注意事項(xiàng)
OCR的準(zhǔn)確性很大程度上受到圖片質(zhì)量的影響。使用清晰、對(duì)比度良好,不模糊、傾斜的圖片,可以提高識(shí)別結(jié)果的準(zhǔn)確性。不同OCR庫(kù)可能對(duì)不同語(yǔ)言和字體的支持程度不同,一些特定語(yǔ)言或字體可能識(shí)別效果較差。因此在識(shí)別完成后,最好再人工校對(duì)一遍。
到此這篇關(guān)于Python實(shí)現(xiàn)識(shí)別圖片和掃描PDF中的文字的文章就介紹到這了,更多相關(guān)Python識(shí)別圖片和PDF內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python線程安全及多進(jìn)程多線程實(shí)現(xiàn)方法詳解
這篇文章主要介紹了python線程安全及多進(jìn)程多線程實(shí)現(xiàn)方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09Pytorch反向求導(dǎo)更新網(wǎng)絡(luò)參數(shù)的方法
今天小編就為大家分享一篇Pytorch反向求導(dǎo)更新網(wǎng)絡(luò)參數(shù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08Python實(shí)現(xiàn)破解12306圖片驗(yàn)證碼的方法分析
這篇文章主要介紹了Python實(shí)現(xiàn)破解12306圖片驗(yàn)證碼的方法,涉及Python圖片截取、調(diào)用百度識(shí)圖及正則截取等相關(guān)操作技巧,需要的朋友可以參考下2017-12-12Python的Django框架下管理站點(diǎn)的基本方法
這篇文章主要介紹了Python的Django框架下管理站點(diǎn)的基本方法,需是Django站點(diǎn)部署的基礎(chǔ),要的朋友可以參考下2015-07-07Python的Tkinter點(diǎn)擊按鈕觸發(fā)事件的例子
今天小編就為大家分享一篇Python的Tkinter點(diǎn)擊按鈕觸發(fā)事件的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07兩個(gè)命令把 Vim 打造成 Python IDE的方法
這篇文章主要介紹了兩個(gè)命令把 Vim 打造成 Python IDE,需要的朋友可以參考下2016-03-03python實(shí)戰(zhàn)之用emoji表情生成文字
這篇文章主要介紹了python實(shí)戰(zhàn)之用emoji表情生成文字,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有很好地幫助,需要的朋友可以參考下2021-05-05