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

Python利用cnocr庫實現(xiàn)pdf文件的文字識別

 更新時間:2024年12月12日 11:46:07   作者:yivifu  
很多pdf文件文字識別軟件都會收費,免費的網(wǎng)頁版可能會帶來信息泄露,所以本文為大家介紹了如何利用Python中的cnocr庫完成中文掃描pdf文件的文字識別,需要的可以參考下

很多pdf文件文字識別軟件都會收費,免費的網(wǎng)頁版可能會帶來信息泄露,還有一些類似于騰訊AI和百度AI的接口都有調(diào)用次數(shù)限制,因此,利用識別正確率極高且免費的cnocr庫來自己動手做個pdf文件文字識別程序就是一個很不錯的選擇。以下程序利用pymupdf打開pdf文件并將頁面圖像數(shù)據(jù)讀出,然后用numpy將pymupdf讀取的頁面圖像轉(zhuǎn)換為cnocr能夠接受的np.ndarray格式的圖像數(shù)據(jù),再由cnocr進行文字識別。numpy、pymupdf和cnocr庫的安裝都可以用pip install指令簡單完成,不多贅述。

import numpy as np
from cnocr import CnOcr
from pymupdf import pymupdf


def pdf2txt(input_file, output_file, start_page=0, page_count=-1):
    """
    將掃描的pdf文件中指定的頁面范圍內(nèi)的內(nèi)容轉(zhuǎn)換成文本文件
    :param input_file: 要識別的pdf文件的相對或絕對路徑,包含文件名的字符串
    :param output_file: 保存識別結果的txt文件的相對或絕對路徑
    :param start_page: 識別起始頁面,默認為第1頁
    :param page_count: 識別的頁數(shù),默認為所有頁面
    :return:
    """
    pdf = pymupdf.open(input_file)
    count = pdf.page_count

    if start_page < 0:
        start_page = 0
    if page_count < 0 or page_count + start_page > count:
        end_page = count
    else:
        end_page = page_count + start_page
    # 如CnOcr的識別模型尚未下載,以下語句執(zhí)行時CnOcr會自動下載模型并解壓到用戶目錄下的AppData\\Roaming\\cnocr\\cnocr版本號下
    # 也可以在初始化時指定rec_model_fp參數(shù)給出模型所在的相對路徑或絕對路徑指定識別模型,如以下示例(因以下路徑是我的電腦上的默認路徑,
    # 因此下面兩行代碼與ocr = CnOcr()完全等價
    ocr = CnOcr(rec_model_fp='C:\\Users\\asus\\AppData\\Roaming\\cnocr\\2.3\\densenet_lite_136-gru'
                             '\\cnocr-v2.3-densenet_lite_136-gru-epoch=004-ft-model.onnx')
    print(start_page, end_page)

    with open(output_file, 'w', encoding='utf-8') as f:
        for i in range(start_page, end_page):
            page = pdf[i]
            pix = page.get_pixmap()
            width = pix.width
            height = pix.height
            # pixmap轉(zhuǎn)換為nympy.ndarray,供CnOcr識別
            image = np.frombuffer(pix.samples, dtype=np.uint8).reshape(height, width, pix.n)
            res = ocr.ocr(image)
            string_list = []
            for val in res:
            	# 注意這是2.2版本以后的cnocr讀取識別結果的方式與2.1版本已經(jīng)不同
            	# 如果cnocr識別結果總是一些textscoreposition字符串,那就是用了老版的方式
                string_list.append(val['text'])

            ocr_result_string = '\n'.join(string_list)
            f.write(ocr_result_string)  # 這行代碼自帶文件關閉功能,不需要再寫 f.close()
            print(f'page{i + 1} finished.')

    pdf.close()


input_file = f'test.pdf'
output_file = 'test.txt'
pdf2txt(input_file, output_file, 500, 522)

需要注意的是,在讀取cnocr的識別結果時,如果安裝的cnocr版本低于2.2,那么

以上代碼中的

for val in res:
    string_list.append(val['text'])

要改成下面這樣:

for i in range(len(res)):
    for j in res[i]:
        string_list.append(j)

但是2.2版本以后的cnocr如果仍然用以上方式,那么取出的識別結果將是一串“textscoreposition”。

下面是以上程序識別曹植集校注中一頁的結果:

(本冥指隱蔽偏鮮之處。此言卡太后即使在獨處之時也很謹慎,在隱
游之處電依禮行。
5〔誠(juon))潔也?!菜])進獻?!踩┡?、羊、豬,指祭
品。此吉請凈地進獻祭品。(視)條配時主持條禮之人。
3〔宜享斯祜]應該享受知此之服。精:棋。宋本作“”?!裁?br />社〕即受桶。(肉特)鍋獎。(勉)月“免。即超免
四〔會街盡禮)條祀折特時湖盡禮數(shù)。篤)厚,指調(diào)情加重。
[密)痊愈。(終)指生命到終點。
等〔遺州)南植自指。(在收)指在優(yōu)傷久病之中。(部)指下太
后去世的內(nèi)信?!矕|藩)洛陽東面的藩國。曹植時時東阿王。東阿在洛
陽東。[郊甸)郊野。丁本:《藝文類聚》作“晗。”家本亦作“除”。
哈指田地里的小路、與籌義同。(中原)原野之中。
中(皇址]望號。[遷)肉去。[峽復) 經(jīng)常來看我。
等〔歲字)空貌,即人去限空。(巡省階除)在宮中的小道上巡視。
(仿佛碳軒在窗戶間仿佛著見了下太行的身影容艦。銀軒:窗戶。
就【韓梨)指下太后的居室。(兒益)兒席。座席?!残Ч剩└淖?br />原承的樣子。
2〔酷指您傷全做。斯)如此。(墻)。(魏部)指鄴。曹操
界于都,下太后的是權專運到部與曹操合養(yǎng)。(日包)指鄴?!菜恚?amp;
道?!财?《藝文類聚》、宋本俱作“將”。
3(嘆息露興)嘆息之氣粥如霧氣興起,形容送師人之多?!卜?br />(r而))靈車。
容車飾駕,以合北展®
0丁本:“《文選》顏廷年《宋元泉后哀策文》李注引《上宜后請
&》.
-469.

原始掃描頁面100%縮放圖像如下:

可見準確率也還勉強可以接受。如果將圖像做個對比度增強并適當放大再識別,還可以進一步提高準確率。下面是使用OpenCV將圖片放大2倍后的識別結果,對比可以看出準確率有所提高:

(本冥〕指隱蔽偏解之處。此言卡太后即使在獨處之時也很謹慎,在隱
游之處也依禮間行。
S(磚(juon))潔也?!菜]〕進獻。(三牲〕牛、羊、豬.指祭
品。此言潔凈地進獻祭品。(?!臣漓霑r主持祭禮之人。
3(宜享斯祜)應該享受知此之福。精:攝、宋本作“豬”?!裁?br />社〕即受福?!矁淳?禍火?!裁悖┰?ldquo;免”.即避免。
四〔云傳盡禮)條祀祈傳時湖盡禮數(shù)。篤)厚,指病情加重。
(瘡)經(jīng)。〔終)指生命到終點。
多〔逸弧)曹植自指。(在款)指在優(yōu)傷久病之中。(諱)指下太
后去世的內(nèi)信?!矕|洛)洛陽東面的等國。、曹植時村東阿王。東阿在洛
陽東。(郊甸)郊野。丁本:《藝文類聚》作“峰。”宋本亦作“時”。
哈指田地里的小路。與年義同。(中原)原野之中。
9(皇址)皇號。[遷〕肉去。[峽復〕經(jīng)常來看我。
0〔歲凱)空貌,即人去屋空?!惭彩‰A涂)在宮中的小道上巡視。
(仿佛候軒)在窗戶間仿佛看見了卡太后的身影容顏。領軒:窗戶。
就〔韓蟹)指下太后的店室。〔兒流)兒席。座席?!矤C故)改變
原來的樣子。
心〔酷)指悲傷至極?!菜?如此。(秦)到?!参憾?指鄴。曹操
養(yǎng)于郎,下太后的是框要運到第與曹操合養(yǎng)。(舊色)指鄴。(能)眾
道?!财?《藝文類聚》、宋木供作“將”。
3(嘆息露興)嘆息之氣宛如霧氣興起,形容送葬人之多?!卜?br />(r而))靈車。
容車飾駕,以合北辰®
0丁本:“《文選》顏廷年《宋元皇后哀策文》李注引《上宣后請
表.”
.469.

以上就是Python利用cnocr庫實現(xiàn)pdf文件的文字識別的詳細內(nèi)容,更多關于Python cnocr pdf文字識別的資料請關注腳本之家其它相關文章!

相關文章

  • 使用python構建一個自己的聊天室

    使用python構建一個自己的聊天室

    這篇文章主要介紹了使用python構建一個自己的聊天室,有助于幫助小伙伴們理解掌握Python的socket編程,需要的朋友可以參考下
    2023-04-04
  • python中的decimal類型轉(zhuǎn)換實例詳解

    python中的decimal類型轉(zhuǎn)換實例詳解

    decimal 模塊實現(xiàn)了定點和浮點算術運算符,使用的是大多數(shù)人所熟悉的模型,而不是程序員熟悉的模型,即大多數(shù)計算機硬件實現(xiàn)的 IEEE 浮點數(shù)運算。這篇文章主要介紹了python里的decimal類型轉(zhuǎn)換,需要的朋友可以參考下
    2019-06-06
  • python多線程高級鎖condition簡單用法示例

    python多線程高級鎖condition簡單用法示例

    這篇文章主要介紹了python多線程高級鎖condition簡單用法,結合實例形式分析了condition對象常用方法及相關使用技巧,需要的朋友可以參考下
    2019-11-11
  • windows10下python3.5 pip3安裝圖文教程

    windows10下python3.5 pip3安裝圖文教程

    這篇文章主要為大家詳細介紹了windows10下python3.5 pip3安裝圖文教程,注意區(qū)分python 2.x和python 3.x的相關命令,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Python字符串拼接的幾種方法整理

    Python字符串拼接的幾種方法整理

    這篇文章主要介紹了Python字符串拼接的幾種方法整理的相關資料,這里提供了五種方法及實現(xiàn),需要的朋友可以參考下
    2017-08-08
  • 解決pycharm下os.system執(zhí)行命令返回有中文亂碼的問題

    解決pycharm下os.system執(zhí)行命令返回有中文亂碼的問題

    今天小編就為大家分享一篇解決pycharm下os.system執(zhí)行命令返回有中文亂碼的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • 人臉識別實戰(zhàn)之Opencv+SVM實現(xiàn)人臉識別

    人臉識別實戰(zhàn)之Opencv+SVM實現(xiàn)人臉識別

    這篇文章主要介紹了通過Opencv+SVM實現(xiàn)人臉識別功能,文中的示例代碼介紹詳細,對于我們學習人臉識別和OpenCV都有一定的幫助,感興趣的小伙伴可以學習一下
    2021-12-12
  • python一行輸入多值的實現(xiàn)詳解

    python一行輸入多值的實現(xiàn)詳解

    開發(fā)人員通常想要用戶在一行中輸入多個值或者輸入。在python中有兩種方式讓用戶在一行中輸入多個值或者輸入,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-09-09
  • python輸出結果刷新及進度條的實現(xiàn)操作

    python輸出結果刷新及進度條的實現(xiàn)操作

    這篇文章主要介紹了python輸出結果刷新及進度條的實現(xiàn)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Python?使用csv庫處理CSV文件的方法

    Python?使用csv庫處理CSV文件的方法

    Python中集成了專用于處理csv文件的庫,名為:csv,本文給大家介紹了Python使用csv庫處理CSV文件的方法及csv庫中4個常用的對象,結合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-06-06

最新評論