最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2025年04月21日 09:49:29   作者:阿友不錯哦  
這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)pdf轉(zhuǎn)圖片再進(jìn)行OCR識別功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(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 進(jìn)行 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é)點(diǎn)是某個關(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.知識補(bǔ)充

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

1、PaddleOCR:

基于百度飛槳框架開發(fā),模型豐富,支持多語言識別,包括中文、英文等。性能強(qiáng)大,適合復(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è)置:默認(rèn)情況下,RapidOCR 支持中英文混合識別。如果需要識別其他語言,可以參考文檔進(jìn)行配置。
  • 環(huán)境要求:確保 Python 版本為 3.6 或更高。

3、EasyOCR

特點(diǎn):易于使用,支持多種語言(包括中文、英文等),基于深度學(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

特點(diǎn):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

特點(diǎn):專注于文檔分析和表格識別,能夠提取文檔中的結(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

特點(diǎn):封裝了多個 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。

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

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

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

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

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

相關(guān)文章

  • Django 解決由save方法引發(fā)的錯誤

    Django 解決由save方法引發(fā)的錯誤

    這篇文章主要介紹了Django 解決由save方法引發(fā)的錯誤,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • 利用Python連接Oracle數(shù)據(jù)庫的基本操作指南

    利用Python連接Oracle數(shù)據(jù)庫的基本操作指南

    由于之前的在職的公司沒有機(jī)會接觸到Oralce數(shù)據(jù)庫,所以就沒有用python連接過Oralce,之前大多集中在連接mysql和sql server,最近在做一下web自動化的工作,所以簡單的記錄一下,下面這篇文章主要給大家介紹了關(guān)于利用Python連接Oracle數(shù)據(jù)庫的基本操作,需要的朋友可以參考下
    2022-06-06
  • Python 惰性導(dǎo)入的項目實(shí)踐

    Python 惰性導(dǎo)入的項目實(shí)踐

    Python3.15引入了lazyimports特性,允許在導(dǎo)入模塊時延遲執(zhí)行,從而避免啟動階段的高成本導(dǎo)入,本文就來詳細(xì)的介紹一下惰性導(dǎo)入的項目實(shí)踐,感興趣的可以了解一下
    2026-04-04
  • Django 后臺獲取文件列表 InMemoryUploadedFile的例子

    Django 后臺獲取文件列表 InMemoryUploadedFile的例子

    今天小編就為大家分享一篇Django 后臺獲取文件列表 InMemoryUploadedFile的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python內(nèi)存優(yōu)化之如何創(chuàng)建大量實(shí)例時節(jié)省內(nèi)存

    Python內(nèi)存優(yōu)化之如何創(chuàng)建大量實(shí)例時節(jié)省內(nèi)存

    在Python開發(fā)中,??內(nèi)存消耗??是一個經(jīng)常被忽視但至關(guān)重要的問題,本文將深入探討Python中各種內(nèi)存優(yōu)化技術(shù),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-10-10
  • Python控制鼠標(biāo)鍵盤代碼實(shí)例

    Python控制鼠標(biāo)鍵盤代碼實(shí)例

    這篇文章主要介紹了Python控制鼠標(biāo)鍵盤代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-12-12
  • 從基礎(chǔ)到高級詳解Python中HTTP請求處理實(shí)戰(zhàn)指南

    從基礎(chǔ)到高級詳解Python中HTTP請求處理實(shí)戰(zhàn)指南

    HTTP 是互聯(lián)網(wǎng)數(shù)據(jù)通信的基石,它定義了客戶端(如瀏覽器或 Python 腳本)如何與服務(wù)器進(jìn)行交互,下面小編就帶大家深入了解一下Python中HTTP請求處理的相關(guān)知識吧
    2026-02-02
  • Django中使用Celery的方法示例

    Django中使用Celery的方法示例

    這篇文章主要介紹了Django中使用Celery的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • Python檢驗用戶輸入密碼的復(fù)雜度

    Python檢驗用戶輸入密碼的復(fù)雜度

    這篇文章主要介紹了Python檢驗用戶輸入密碼的復(fù)雜度,在用戶設(shè)置密碼的時候檢測輸入的密碼大小寫數(shù)字等,需要的朋友可以參考下
    2023-04-04
  • Python學(xué)習(xí)之線程池與GIL全局鎖詳解

    Python學(xué)習(xí)之線程池與GIL全局鎖詳解

    本文我們將學(xué)習(xí)線程池的創(chuàng)建與全局鎖。線程池的創(chuàng)建于進(jìn)程池的原理是相同的;關(guān)于GIL全局鎖,暫時沒有代碼上的練習(xí),而是對其概念進(jìn)行一個簡單的啟蒙,感興趣的可以了解一下
    2022-04-04

最新評論

双牌县| 延寿县| 长海县| 石阡县| 临汾市| 兴山县| 莒南县| 周宁县| 宣武区| 全州县| 灵璧县| 漠河县| 临高县| 全椒县| 九龙城区| 新密市| 河间市| 小金县| 小金县| 恭城| 营口市| 马龙县| 开阳县| 青浦区| 伊通| 长子县| 钟山县| 青阳县| 钟祥市| 三河市| 临夏县| 章丘市| 福贡县| 娄烦县| 休宁县| 桐庐县| 安图县| 楚雄市| 清河县| 普格县| 阿克陶县|