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