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

Python實(shí)現(xiàn)PDF轉(zhuǎn)換文本詳解

 更新時(shí)間:2021年10月11日 16:54:33   作者:幸福清風(fēng)  
這篇文章主要介紹了詳解用Python把PDF轉(zhuǎn)換為文本方法總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一、前言

對(duì)很多人來(lái)說(shuō),將PDF轉(zhuǎn)換為可編輯的文本是個(gè)剛需,卻苦于沒(méi)有簡(jiǎn)單的方法。發(fā)現(xiàn) pdf 幻燈片,效果還不錯(cuò)。

傳統(tǒng)的講座通常伴隨有很多pdf幻燈片。一般來(lái)說(shuō),想要對(duì)自己的講座做筆記,需要從pdf復(fù)制、補(bǔ)充大量?jī)?nèi)容。

最近,來(lái)自 K1 Digital 的高級(jí)機(jī)器工程師 Lucas Soares 一直在嘗試通過(guò)使用 CR(光學(xué)字符識(shí)別)自動(dòng) pdf 幻燈片,以便直接在 Markdown 文件中操作它們的內(nèi)容,從而避免手動(dòng)復(fù)制和粘貼 pdf 內(nèi)容,實(shí)現(xiàn)這個(gè)過(guò)程的自動(dòng)化。

圖片

圖為項(xiàng)目作者盧卡斯·蘇亞雷斯。

1.1、為什么不使用傳統(tǒng)的pdf 轉(zhuǎn)文本工具呢?

Lucas Soares 發(fā)現(xiàn)傳統(tǒng)工具往往會(huì)帶來(lái)更多的問(wèn)題,需要花時(shí)間解決。他曾嘗試使用傳統(tǒng)的 Python 軟件包,但遇到了很多問(wèn)題(例如必須使用復(fù)雜的正則表達(dá)式模式解析最終輸出等),因此決定嘗試使用目標(biāo)檢測(cè)和 OCR 來(lái)解決。

二、實(shí)現(xiàn)過(guò)程

基本過(guò)程可分為以下幾個(gè)步驟:

  • 將 pdf 轉(zhuǎn)換為圖片;
  • 檢測(cè)和識(shí)別圖像中的文本;
  • 展示示例輸出。

2.1、基于深度學(xué)習(xí)的 OCR 將 pdf 為文本

2.1.1、將 pdf 轉(zhuǎn)換為圖像

Soares 使用的 pdf 幻燈片來(lái)自于 David Silver 的增長(zhǎng)學(xué)習(xí)(參見(jiàn)以下 pdf 幻燈片地址)。使用「pdf2image」包將每張幻燈片轉(zhuǎn)換為 png 圖像格式。

圖片

pdf 幻燈片示例。

地址:https://www.davidsilver.uk/wp-content/uploads/2020/03/intro_RL.pdf

代碼如下:

from pdf2image import convert_from_path
from pdf2image.exceptions import (
 PDFInfoNotInstalledError,
 PDFPageCountError,
 PDFSyntaxError
)
pdf_path = "path/to/file/intro_RL_Lecture1.pdf"
images = convert_from_path(pdf_path)
for i, image in enumerate(images):
    fname = "image" + str(i) + ".png"
    image.save(fname, "PNG")

​​​​​經(jīng)過(guò)處理后,所有的pdf幻燈片都轉(zhuǎn)換成png格式的圖片:

圖片

2.1.2、檢測(cè)和識(shí)別圖像中的文本

為了檢測(cè)和識(shí)別png圖像中的文本,Soares使用ocr.pytorch庫(kù)中的文本檢測(cè)器。按照說(shuō)明下載模型保存模型保存在檢查點(diǎn)文件夾中。

ocr.pytorch 庫(kù)地址:https://github.com/courao/ocr.pytorch

代碼如下:

# adapted from this source: https://github.com/courao/ocr.pytorch
%load_ext autoreload
%autoreload 2
import os
from ocr import ocr
import time
import shutil
import numpy as np
import pathlib
from PIL import Image
from glob import glob
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
import pytesseract
def single_pic_proc(image_file):
    image = np.array(Image.open(image_file).convert('RGB'))
    result, image_framed = ocr(image)
    return result,image_framed
image_files = glob('./input_images/*.*')
result_dir = './output_images_with_boxes/'
# If the output folder exists we will remove it and redo it.
if os.path.exists(result_dir):
    shutil.rmtree(result_dir)
os.mkdir(result_dir)
for image_file in sorted(image_files):
    result, image_framed = single_pic_proc(image_file) # detecting and recognizing the text
    filename = pathlib.Path(image_file).name
    output_file = os.path.join(result_dir, image_file.split('/')[-1])
    txt_file = os.path.join(result_dir, image_file.split('/')[-1].split('.')[0]+'.txt')
    txt_f = open(txt_file, 'w')
    Image.fromarray(image_framed).save(output_file)
    for key in result:
        txt_f.write(result[key][1]+'\n')
    txt_f.close()

設(shè)置輸入和輸出文件夾,接著遍歷所有輸入圖像(轉(zhuǎn)換后的pdf幻燈片),然后通過(guò)single_pic_proc()函數(shù)運(yùn)行OCR模塊中的檢測(cè)和識(shí)別模型,最后將輸出保存到輸出文件夾。

從檢測(cè)繼承(inherit)了Pytorch CTPN,識(shí)別了Pytorch CRNN,模型都存在于OCR模塊中。

2.1.3、示例輸出

代碼如下:

import cv2 as cv
output_dir = pathlib.Path("./output_images_with_boxes")
# image = cv.imread(str(np.random.choice(list(output_dir.iterdir()),1)[0]))
image = cv.imread(f"{output_dir}/image7.png")
size_reshaped = (int(image.shape[1]),int(image.shape[0]))
image = cv.resize(image, size_reshaped)
cv.imshow("image", image)
cv.waitKey(0)
cv.destroyAllWindows()

下圖左為原始pdf 幻燈片,圖右為腦后的輸出文本,準(zhǔn)確率非常高。

圖片

文本識(shí)別輸出如下:

filename = f"{output_dir}/image7.txt"
with open(filename, "r") as text:
    for line in text.readlines():
        print(line.strip("\n"))

通過(guò)上述方法,最終可以得到一個(gè)非常強(qiáng)大的工具來(lái)討論文檔,從檢測(cè)和識(shí)別手寫(xiě)筆記到檢測(cè)和識(shí)別照片中的隨機(jī)。

擁有文本的 OCR 工具來(lái)處理一些文本內(nèi)容,這比依賴外部軟件來(lái)說(shuō)明文檔要好得多。

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • 基于Python編寫(xiě)微信清理工具的示例代碼

    基于Python編寫(xiě)微信清理工具的示例代碼

    這篇文章主要和大家分享一個(gè)用Python語(yǔ)言編寫(xiě)的微信清理小工具的示例代碼,而且該工具不會(huì)刪除文字的聊天記錄,感興趣的可以了解一下
    2022-05-05
  • PyQt5 QLineEdit輸入的子網(wǎng)字符串校驗(yàn)QRegExp實(shí)現(xiàn)

    PyQt5 QLineEdit輸入的子網(wǎng)字符串校驗(yàn)QRegExp實(shí)現(xiàn)

    這篇文章主要介紹了PyQt5 QLineEdit輸入的子網(wǎng)字符串校驗(yàn)QRegExp實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Ubuntu中配置TensorFlow使用環(huán)境的方法

    Ubuntu中配置TensorFlow使用環(huán)境的方法

    這篇文章主要介紹了Ubuntu中配置TensorFlow使用環(huán)境的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • python爬蟲(chóng)獲取淘寶天貓商品詳細(xì)參數(shù)

    python爬蟲(chóng)獲取淘寶天貓商品詳細(xì)參數(shù)

    這篇文章主要為大家詳細(xì)介紹了python爬蟲(chóng)獲取淘寶天貓商品詳細(xì)參數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • python基礎(chǔ)教程之lambda表達(dá)式使用方法

    python基礎(chǔ)教程之lambda表達(dá)式使用方法

    lambda表達(dá)式相當(dāng)于函數(shù)體為單個(gè)return語(yǔ)句的普通函數(shù)的匿名函數(shù),本文主要介紹lambda表達(dá)式使用方法
    2014-02-02
  • Python?Enum枚舉類的定義及使用場(chǎng)景最佳實(shí)踐

    Python?Enum枚舉類的定義及使用場(chǎng)景最佳實(shí)踐

    枚舉(Enum)是一種有助于提高代碼可讀性和可維護(hù)性的數(shù)據(jù)類型,允許我們?yōu)橐唤M相關(guān)的常量賦予有意義的名字,在Python中,枚舉類(Enum)提供了一種簡(jiǎn)潔而強(qiáng)大的方式來(lái)定義和使用枚舉
    2023-11-11
  • python中g(shù)lobal與nonlocal比較

    python中g(shù)lobal與nonlocal比較

    這篇文章主要介紹了python中g(shù)lobal與nonlocal比較,global關(guān)鍵字用來(lái)在函數(shù)或其他局部作用域中使用全局變量,nonlocal關(guān)鍵字用來(lái)在函數(shù)或其他作用域中使用外層(非全局)變量,需要的朋友可以參考下
    2014-11-11
  • Django連接數(shù)據(jù)庫(kù)并實(shí)現(xiàn)讀寫(xiě)分離過(guò)程解析

    Django連接數(shù)據(jù)庫(kù)并實(shí)現(xiàn)讀寫(xiě)分離過(guò)程解析

    這篇文章主要介紹了Django連接數(shù)據(jù)庫(kù)并實(shí)現(xiàn)讀寫(xiě)分離過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 基于Python編寫(xiě)一個(gè)自動(dòng)關(guān)機(jī)程序

    基于Python編寫(xiě)一個(gè)自動(dòng)關(guān)機(jī)程序

    這篇文章主要介紹了基于Python編寫(xiě)的一個(gè)自動(dòng)關(guān)機(jī)程序,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定的幫助,感興趣的同學(xué)可以學(xué)習(xí)一下
    2022-01-01
  • python pyinstaller打包exe報(bào)錯(cuò)的解決方法

    python pyinstaller打包exe報(bào)錯(cuò)的解決方法

    這篇文章主要給大家介紹了關(guān)于python pyinstaller打包exe報(bào)錯(cuò)的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11

最新評(píng)論

金塔县| 浑源县| 奉贤区| 金昌市| 金昌市| 嫩江县| 拜城县| 乌拉特前旗| 乌拉特后旗| 中宁县| 中宁县| 襄垣县| 哈尔滨市| 海晏县| 长寿区| 伽师县| 翁牛特旗| 阳西县| 荥经县| 泾川县| 贵定县| 寿阳县| 元氏县| 柏乡县| 黎平县| 定结县| 武乡县| 清新县| 潜山县| 玛沁县| 凌云县| 祁阳县| 通州市| 鲁甸县| 垣曲县| 屏山县| 吴川市| 晋城| 潍坊市| 都兰县| 乳山市|