欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Python實現(xiàn)pdf轉(zhuǎn)圖片再進行OCR識別

 更新時間:2025年04月21日 09:49:29   作者:阿友不錯哦  
這篇文章主要為大家詳細介紹了如何使用Python實現(xiàn)pdf轉(zhuǎn)圖片再進行OCR識別功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

1.先pdf轉(zhuǎn)圖片

示例代碼

import os
from pdf2image import convert_from_path

# PDF文件路徑
pdf_path = '/Users/xxx/2022.pdf'
# 輸出圖片的文件夾
output_folder = './output_images2022'
# 輸出圖片的命名格式
output_name = 'page'

# 如果輸出文件夾不存在,創(chuàng)建它
if not os.path.exists(output_folder):
    os.makedirs(output_folder)

# 將PDF轉(zhuǎn)換為圖像列表,設(shè)置分辨率為300 DPI
images = convert_from_path(pdf_path, dpi=300)

# 保存每一頁為PNG圖片
for i, image in enumerate(images):
    image.save(f'{output_folder}/{output_name}_{i+1}.png', 'PNG')

2.OCR識別

示例代碼

from PIL import ImageEnhance
import pytesseract
from PIL import Image
from openpyxl import Workbook

# 配置 Tesseract 的路徑(如果需要)
# pytesseract.pytesseract.tesseract_cmd = r'/usr/local/bin/tesseract'  # Mac 的路徑
# pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'  # Windows 的路徑

# 打開圖片
# image_path = "/Users/xxx/page_3.png"  # 替換為你的圖片路徑


def enhance_image(img):
    img = img.convert('L')  # 轉(zhuǎn)灰度
    img = ImageEnhance.Contrast(img).enhance(2.0)
    return img


def allimngs(image_path):

    image = Image.open(image_path)

    image = enhance_image(image)

    # 使用 pytesseract 進行 OCR
    text = pytesseract.image_to_string(image, lang="chi_sim")  # 中文

    # # 打印提取的文本
    # print("提取的文本:")
    # print(text.replace(' ', ''))

    return text.replace(' ', '')


# 統(tǒng)計子字符串出現(xiàn)次數(shù)

class TrieNode:
    def __init__(self):
        self.children = {}
        self.keywords = []


class Trie:
    def __init__(self):
        self.root = TrieNode()

    def insert(self, keyword):
        node = self.root
        for char in keyword:
            if char not in node.children:
                node.children[char] = TrieNode()
            node = node.children[char]
        node.keywords.append(keyword)


def count_keywords(text, keywords):
    # 去重關(guān)鍵詞以確保唯一性
    keywords = list(set(keywords))

    # 構(gòu)建Trie樹
    trie = Trie()
    for kw in keywords:
        trie.insert(kw)

    # 初始化計數(shù)器
    counters = {kw: 0 for kw in keywords}
    i = 0
    n = len(text)

    while i < n:
        current_node = trie.root
        max_len = 0
        current_len = 0
        end_pos = i

        # 尋找從當(dāng)前位置開始的最長匹配關(guān)鍵詞
        for j in range(i, n):
            char = text[j]
            if char in current_node.children:
                current_node = current_node.children[char]
                current_len += 1
                if current_node.keywords:  # 當(dāng)前節(jié)點是某個關(guān)鍵詞的結(jié)尾
                    max_len = current_len
                    end_pos = j + 1  # 更新結(jié)束位置為當(dāng)前字符的下一個位置
            else:
                break  # 無后續(xù)匹配,退出循環(huán)

        if max_len > 0:
            # 更新所有匹配的關(guān)鍵詞計數(shù)器
            for kw in current_node.keywords:
                counters[kw] += 1
            i = end_pos  # 跳躍到已匹配部分的末尾
        else:
            i += 1  # 無匹配,移動到下一個字符

    return counters


if __name__ == "__main__":
    keywords = ['矮小',
                '安于現(xiàn)狀',
                '暗藏',
                '暗淡',
                '暗黑']
    all_text = ''
    workbook = Workbook()
    sheet = workbook.active

    for i in range(108):
        i = i+1
        image_path = f"/Users/xxx/output_images2022/page_{i}.png"
        all_text = all_text + allimngs(image_path)

    all_text = all_text.replace(' ', '').replace('\n', '')

    result = count_keywords(all_text, keywords)

    num = 1

    for k, v in result.items():
        sheet[f'A{num}'] = k
        sheet[f'B{num}'] = v
        print(k, v, num)
        num = num + 1

    workbook.save(filename='2022.xlsx')

3.知識補充

Python中圖片與pdf識別文本的OCR方法

1、PaddleOCR:

基于百度飛槳框架開發(fā),模型豐富,支持多語言識別,包括中文、英文等。性能強大,適合復(fù)雜場景的文字識別

安裝 PaddleOCR 庫:

pip install paddleocr

示例代碼

from paddleocr import PaddleOCR, draw_ocr
from PIL import Image
 
# 初始化 PaddleOCR
# 參數(shù)解釋:
# `lang`:指定語言模型,如 'en'(英文)、'ch'(中文)等。
# `use_angle_cls`:是否啟用文字方向分類器。
ocr = PaddleOCR(use_angle_cls=True, lang='en')  # 也可以設(shè)置為 'ch' 用于中文[^28^]
 
# 指定圖片路徑
img_path = 'example.jpg'  # 替換為你的圖片路徑
 
# 執(zhí)行 OCR 識別
result = ocr.ocr(img_path, cls=True)  # `cls=True` 表示啟用方向分類器
 
# 打印識別結(jié)果
for line in result:
    print(line)
 
# 可選:繪制識別結(jié)果并保存
if result:
    image = Image.open(img_path).convert('RGB')
    boxes = [line[0] for line in result]  # 提取文字框
    txts = [line[1][0] for line in result]  # 提取文字內(nèi)容
    scores = [line[1][1] for line in result]  # 提取置信度
 
    # 繪制結(jié)果
    im_show = draw_ocr(image, boxes, txts, scores, font_path='path/to/PaddleOCR/doc/fonts/simfang.ttf')
    im_show = Image.fromarray(im_show)
    im_show.save('result.jpg')  # 保存繪制后的圖片[^28^]

2、RapidOCR

首先,確保安裝了 RapidOCR 的 ONNXRuntime 版本,這是一個輕量級且高效的推理引擎:

pip install rapidocr_onnxruntime

示例代碼:識別數(shù)字和字母

以下代碼展示了如何使用 RapidOCR 識別圖片中的數(shù)字和字母,并僅打印識別結(jié)果:

from rapidocr_onnxruntime import RapidOCR
 
# 初始化 OCR 引擎
ocr = RapidOCR()
 
# 指定圖片路徑
img_path = 'example.jpg'  # 替換為你的圖片路徑
 
# 執(zhí)行識別
result, _ = ocr(img_path)
 
# 提取并打印識別結(jié)果(僅數(shù)字和字母)
if result:
    for line in result:
        text = line[1]  # 提取文字內(nèi)容
        # 篩選只包含數(shù)字和字母的文本
        if text.isalnum():
            print(text)
else:
    print("未識別到文字")

注意事項

  • 圖片路徑:確保 img_path 指向的圖片包含數(shù)字或字母。
  • 語言設(shè)置:默認情況下,RapidOCR 支持中英文混合識別。如果需要識別其他語言,可以參考文檔進行配置。
  • 環(huán)境要求:確保 Python 版本為 3.6 或更高。

3、EasyOCR

特點:易于使用,支持多種語言(包括中文、英文等),基于深度學(xué)習(xí)技術(shù),適合初學(xué)者和快速集成。

安裝方法:

pip install easyocr

使用示例:

import easyocr
 
reader = easyocr.Reader(['en', 'ch_sim'])  # 支持多語言
img_path = 'example.jpg'
result = reader.readtext(img_path)
for line in result:
    print(line[1])  # 打印識別結(jié)果

4、Pytesseract

特點:Tesseract 的 Python 封裝,支持多種語言,使用簡單,適合傳統(tǒng) OCR 任務(wù)。

安裝方法:

pip install pytesseract

需要先安裝 Tesseract OCR,可以從 Tesseract 官網(wǎng) 下載。

使用示例:

from PIL import Image
import pytesseract
 
img_path = 'example.jpg'
text = pytesseract.image_to_string(Image.open(img_path), lang='eng')
print(text)  # 打印識別結(jié)果

5、DocTR

特點:專注于文檔分析和表格識別,能夠提取文檔中的結(jié)構(gòu)化信息,適合處理復(fù)雜布局的文檔。

安裝方法:

pip install python-doctr

使用示例:

from doctr.models import ocr_predictor
from doctr.io import DocumentFile
 
img_path = 'example.jpg'
doc = DocumentFile.from_images(img_path)
model = ocr_predictor(pretrained=True)
result = model(doc)
for block in result.pages[0].blocks:
    for line in block.lines:
        for word in line.words:
            print(word.value)  # 打印識別結(jié)果

6、PyOCR

特點:封裝了多個 OCR 引擎(如 Tesseract、Cuneiform 等),提供了統(tǒng)一的接口。

安裝方法:

pip install pyocr

使用示例:

import pyocr
from PIL import Image
 
tools = pyocr.get_available_tools()
ocr_tool = tools[0]
img_path = 'example.jpg'
text = ocr_tool.image_to_string(Image.open(img_path), lang='eng')
print(text)  # 打印識別結(jié)果

選擇建議:

速度優(yōu)先:推薦使用 RapidOCR 或 EasyOCR。

準確性優(yōu)先:推薦使用 PaddleOCR。

易用性優(yōu)先:推薦使用 EasyOCR。

文檔分析優(yōu)先:推薦使用 docTR。

注意:根據(jù)你的具體需求(如語言支持、應(yīng)用場景、性能要求等),可以選擇最適合的 OCR 庫。

到此這篇關(guān)于使用Python實現(xiàn)pdf轉(zhuǎn)圖片再進行OCR識別的文章就介紹到這了,更多相關(guān)Python pdf轉(zhuǎn)圖片內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python腳本實現(xiàn)下載合并SAE日志

    Python腳本實現(xiàn)下載合并SAE日志

    這篇文章主要介紹了Python腳本實現(xiàn)下載合并SAE日志,本文講解了代碼編寫過程,然后給出了完整代碼,需要的朋友可以參考下
    2015-02-02
  • Python實現(xiàn)自定義包的實例詳解

    Python實現(xiàn)自定義包的實例詳解

    這篇文章主要介紹了實現(xiàn)自定義包的方法,本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • python處理 yaml 時保持輸入輸出格式一致的問題記錄

    python處理 yaml 時保持輸入輸出格式一致的問題記錄

    這篇文章主要介紹了python處理 yaml 時保持輸入輸出格式一致的問題記錄,要想保持順序不變在dump時添加sort_keys=False,使yaml格式保持原來的排序,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2024-06-06
  • python十進制和二進制的轉(zhuǎn)換方法(含浮點數(shù))

    python十進制和二進制的轉(zhuǎn)換方法(含浮點數(shù))

    這篇文章主要介紹了python十進制和二進制的轉(zhuǎn)換方法(含浮點數(shù)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • pip如何用pipdeptree查看包依賴

    pip如何用pipdeptree查看包依賴

    這篇文章主要介紹了pip如何用pipdeptree查看包依賴問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Python web如何在IIS發(fā)布應(yīng)用過程解析

    Python web如何在IIS發(fā)布應(yīng)用過程解析

    這篇文章主要介紹了Python web如何在IIS發(fā)布應(yīng)用過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • 詳解Python中的文件操作

    詳解Python中的文件操作

    這篇文章主要介紹了Python中文件操作的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2021-01-01
  • Python使用sax模塊解析XML文件示例

    Python使用sax模塊解析XML文件示例

    這篇文章主要介紹了Python使用sax模塊解析XML文件,結(jié)合實例形勢分析了Python使用sax模塊針對xml文件進行讀取、解析、內(nèi)容處理等相關(guān)操作技巧,需要的朋友可以參考下
    2019-04-04
  • Python必備shelve與dbm本地持久化存儲數(shù)據(jù)的兩個強大工具

    Python必備shelve與dbm本地持久化存儲數(shù)據(jù)的兩個強大工具

    當(dāng)涉及存儲大量數(shù)據(jù)并且需要高效訪問時,shelve和dbm模塊是Python中用于本地持久化存儲數(shù)據(jù)的兩個強大工具,它們允許開發(fā)人員以鍵值對的形式存儲數(shù)據(jù),并支持快速的檢索和更新操作,在本文將深入探討這兩個模塊,展示它們的優(yōu)勢和應(yīng)用場景
    2024-01-01
  • Python利用模板生成Word的三種方法小結(jié)

    Python利用模板生成Word的三種方法小結(jié)

    模板是預(yù)先設(shè)計好格式和布局的文檔,這篇文章主要為大家介紹了Python中依據(jù)模板生成word文檔的三種方法,希望對大家有一定的幫助
    2025-03-03

最新評論