网易首页 > 网易号 > 正文 申请入驻

告别「复制+粘贴」,基于深度学习的OCR,实现PDF转文本

0
分享至

选自Towardsdatascience

作者:Lucas Soares

机器之心编译

编辑:陈萍

对很多人来说,将 PDF 转换为可编辑的文本是个刚需,却苦于没有简单方法。在本文介绍的项目中,来自 K1 Digital 的高级机器学习工程师 Lucas Soares,尝试使用 OCR(光学字符识别)自动转录 pdf 幻灯片,转录效果还不错。

传统的讲座通常伴随着一组 pdf 幻灯片。一般来说,想要对此类讲座做笔记,需要从 pdf 复制、粘贴很多内容。

最近,来自 K1 Digital 的高级机器学习工程师 Lucas Soares 一直在尝试通过使用 OCR(光学字符识别)自动转录 pdf 幻灯片,以便直接在 markdown 文件中操作它们的内容,从而避免手动复制和粘贴 pdf 内容,实现这一过程的自动化。

左为项目作者 Lucas Soares。

项目地址:https://github.com/EnkrateiaLucca/ocr_for_transcribing_pdf_slides

为什么不使用传统的 pdf 转文本工具呢?

Lucas Soares 发现传统工具往往会带来更多的问题,需要花时间解决。他曾经尝试使用传统的 Python 软件包,但是遇到了很多问题(例如必须使用复杂的正则表达式模式解析最终输出等),因此决定尝试使用目标检测和 OCR 来解决。

基本过程可分为以下步骤:

  • 将 pdf 转换为图片;
  • 检测和识别图像中的文本;
  • 展示示例输出。

基于深度学习的 OCR 将 pdf 转录为文本

将 pdf 转换为图像

Soares 使用的 pdf 幻灯片来自于 David Silver 的增强学习(参见以下 pdf 幻灯片地址)。使用「pdf2image」包将每张幻灯片转换为 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")

经过处理后,所有的 pdf 幻灯片都转换成 png 格式的图像:

检测和识别图像中的文本

为了检测和识别 png 图像中的文本,Soares 使用 ocr.pytorch 库中的文本检测器。按照说明下载模型并将模型保存在 checkpoints 文件夹中。

ocr.pytorch 库地址: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()

设置输入和输出文件夹,接着遍历所有输入图像(转换后的 pdf 幻灯片),然后通过 single_pic_proc() 函数运行 OCR 模块中的检测和识别模型,最后将输出保存到输出文件夹。

其中检测继承(inherit)了 Pytorch CTPN 模型,识别继承了 Pytorch CRNN 模型,两者都存在于 OCR 模块中。

示例输出

代码如下:

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 幻灯片,图右为转录后的输出文本,转录后的准确率非常高。

文本识别输出如下:

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

通过上述方法,最终你可以得到一个非常强大的工具来转录各种文档,从检测和识别手写笔记到检测和识别照片中的随机文本。拥有自己的 OCR 工具来处理一些文本内容,这比依赖外部软件来转录文档要好的多。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
闹大了!交大学生因言论不当被京东开了,网友:不冤,为幼稚买单

闹大了!交大学生因言论不当被京东开了,网友:不冤,为幼稚买单

鬼谷子思维
2024-05-30 15:39:02
郎平换新发型堪比换脸!穿刺绣裙年轻10岁,63岁美出新高度

郎平换新发型堪比换脸!穿刺绣裙年轻10岁,63岁美出新高度

时髦范
2024-06-02 12:15:35
出轨大瓜,曝光网红果果老公大尺度聊天记录,好恶心

出轨大瓜,曝光网红果果老公大尺度聊天记录,好恶心

户外阿崭
2024-06-02 19:25:03
被曝光后才知道的真相:地方财政吃紧的原因,钱都是这样子花掉的

被曝光后才知道的真相:地方财政吃紧的原因,钱都是这样子花掉的

boss外传
2024-04-28 18:20:03
周深演唱会到处送票没人看,开场大片空座,座位上放荧光棒撑场面

周深演唱会到处送票没人看,开场大片空座,座位上放荧光棒撑场面

鑫鑫说说
2024-06-02 15:36:06
太尴尬!黄圣依直播时走光!隐私一览无余,杨子在旁边也不提醒

太尴尬!黄圣依直播时走光!隐私一览无余,杨子在旁边也不提醒

阿芒娱乐说
2024-05-28 00:08:00
艾森豪威尔舰长:面包烤着,小狗看着,谁说我的航母被炸了

艾森豪威尔舰长:面包烤着,小狗看着,谁说我的航母被炸了

杂谈天下式
2024-06-01 19:17:55
微胖才是王道

微胖才是王道

解说阿洎
2024-06-02 16:06:36
又是文明冲突论?公方彬称俄乌战争说明:顺文明则昌,逆文明则亡

又是文明冲突论?公方彬称俄乌战争说明:顺文明则昌,逆文明则亡

瑜说还休
2024-05-31 17:10:45
马来西亚人民公正党副主席努鲁伊莎·安瓦尔:马来西亚和中国之间有“共鸣”与“知己之情”

马来西亚人民公正党副主席努鲁伊莎·安瓦尔:马来西亚和中国之间有“共鸣”与“知己之情”

国际在线
2024-06-02 20:41:34
把中国“光刻机”变成“废铁”?ASML正式表态,人民日报说得很对

把中国“光刻机”变成“废铁”?ASML正式表态,人民日报说得很对

田间农人阿馋
2024-06-01 22:12:00
中国女排与日本女排第三周世联赛赛程:中国女排迎来超越日本机会

中国女排与日本女排第三周世联赛赛程:中国女排迎来超越日本机会

室内设计师阿喇
2024-06-02 08:23:54
足球报:若国足没进18强伊万会下课,国家队管理模式也会大变

足球报:若国足没进18强伊万会下课,国家队管理模式也会大变

懂球帝
2024-06-03 09:58:18
谁都不要和刘诗诗合影,刘浩存就是最好的例子。

谁都不要和刘诗诗合影,刘浩存就是最好的例子。

98追影者A
2024-05-31 14:17:41
粉发染回黑发原因?韦世豪:国家队不让染头发,明确说不能染

粉发染回黑发原因?韦世豪:国家队不让染头发,明确说不能染

直播吧
2024-06-01 21:54:07
高考临近,张雪峰赚麻了,11999元梦想卡和17999元圆梦卡被抢购空

高考临近,张雪峰赚麻了,11999元梦想卡和17999元圆梦卡被抢购空

鬼谷子思维
2024-06-01 17:15:22
沉默的中国制造2025

沉默的中国制造2025

华山穹剑
2024-06-01 23:31:48
为什么说5公里慢跑,是拯救中年人的一剂良药?

为什么说5公里慢跑,是拯救中年人的一剂良药?

健身狂人
2024-06-01 22:00:56
新华社消息|世卫大会修订国际卫生条例 加强大流行病应对能力

新华社消息|世卫大会修订国际卫生条例 加强大流行病应对能力

新华社
2024-06-02 15:28:13
如今,最不能干的职业,一是警察;二是消防;三是医生;四是护士

如今,最不能干的职业,一是警察;二是消防;三是医生;四是护士

叒女紫121
2024-06-02 11:30:36
2024-06-03 10:52:49
机器之心Pro
机器之心Pro
专业的人工智能媒体
9040文章数 141935关注度
往期回顾 全部

科技要闻

2万字演讲|黄仁勋剧透 未来3年新品有这些

头条要闻

岛内舆论批赖清德上任后像"斗鸡" 表现比蔡英文还差

头条要闻

岛内舆论批赖清德上任后像"斗鸡" 表现比蔡英文还差

体育要闻

万人空巷!皇马举行欧冠夺冠庆典

娱乐要闻

白玉兰提名:胡歌、范伟争视帝

财经要闻

黄仁勋的计划:涉及新AI平台 HBM4 机器人

汽车要闻

搭载华为HiCAR 传祺M6 MAX售14.58万元

态度原创

健康
教育
亲子
游戏
手机

晚餐不吃or吃七分饱,哪种更减肥?

教育要闻

成都市三原外国语学校发布2024年秋季小学一年级新生招生简章

亲子要闻

弟弟哭到停不下来 哥哥帮忙扶下巴

顽皮狗:我们不会变成《最后的生还者》工作室

手机要闻

小米 SU7 车机现身安兔兔:骁龙 8295 加持,流畅度位于第一梯队

无障碍浏览 进入关怀版