【Python】利用python和百度通用OCR文字识别模型处理pdf文件(有水印且加密)

pdf文件是办公中非常常见的文件,而且为了保密,常常加水印并且加密,你无法直接复制内容出来。

直接复制出来的效果如图所示。

贯,署,纵,川(:)2022 。一、工作思路2022 “”。:“、聚焦”“1 2333”,绕,“41 2”

通常情况下pdf转word可以直接用word打开pdf文件,另存为word来解决。

import win32com.client as win32
import os
 
word = win32.gencache.EnsureDispatch('Word.Application')
# 是否显示。如果这里是True,桌面上会展示打开word再关掉的过程。
# 是False的话这个过程不会显示出来
word.Visible =False
output = word.Documents.Add()   
output.Application.Selection.InsertFile('111.pdf')
output.SaveAs('111.docx') 
output.Close()

然而强如微软出来的依然是乱码:

2dba82e7759282dd3721d15432019f0a.png

普通的pdf转word的python工具包同样无效。

from pdf2docx import Converter
pdf_file = 'demo.pdf'
docx_file = 'demo.docx'
cv = Converter(pdf_file)
cv.convert(docx_file, start=0, end=None)
cv.close()

他的效果是将pdf每一页作为图片全部粘贴到word内,你同样达不到复制文字的效果。

这里我们唯一的办法就是利用python去掉水印并生成图片,再利用百度的ocr人工智能服务将图片精确转化为文字。

我们资料的水印如图所示。

b88bead1a45166f3a6f024d04f91ef55.png

我们用前面讲过的方法先把水印干掉再说。

资料有水印?不存在的,马上python表演消失术

from PIL import Image
from itertools import product
import fitz
import os


def remove_pdf():
    page_num = 0
    pdf_file = input("请输入 pdf 地址:")
    pdf = fitz.open(pdf_file);
    for page in pdf:
        pixmap = page.get_pixmap()
        for pos in product(range(pixmap.width), range(pixmap.height)):
            rgb = pixmap.pixel(pos[0], pos[1])
            if(sum(rgb) >= 520):
                pixmap.set_pixel(pos[0], pos[1], (255, 255, 255))
        pixmap.pil_save(f"pdf_images/{page_num}.jpg",quality=100,dpi=(1800,1800))
        print(f"第{page_num}水印去除完成")
        page_num = page_num + 1


remove_pdf()

因为pdf转图片的时候,如果不设置参数,会非常的模糊,利用quality和dpi参数我们尽量把图片质量进行优化。经过实测,如果不优化,就连百度ocr有时候识别也犯迷糊。

此时我们得到了去除水印的高清图片,一共95页。

fc5388d0e03267fd432dad54f25ff51d.png

得到图片后,我们只需要一张张送入百度OCR模型进行识别,将输出的文字进行拼接,最后生成我们想要的txt或word就拿到了我们想要的文字。

首先进入自己的百度智能云后台,点击免费尝鲜把能领的api全部领了,这个api你不领,只会优惠越来越少。

148c0f6b2cf1d65d79b292c47b1c103a.png

在后台可以按照提示进行开发,首先领(白嫖)额度,创建应用,调用服务。

c0082bf3739319447318db9db3b8500e.png

以前还可以免费领通用OCR场景和增值税发票的免费额度,现在都没有了,所以赶快领,不要有任何的迟疑。

afe80bd729bcd7bd5a3b1f3b6446871e.png

通过查看api文件来领悟如何调用api。

388a63408ef38fac73cd4d98ba800b86.png

通过此段代码来拿到access_token。

# encoding:utf-8
import requests


# client_id 为官网获取的AK, client_secret 为官网获取的SK
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=你的ak(创建应用后看得到)&client_secret=你的sk(创建应用后看得到)'
response = requests.get(host)
if response:
    print(response.json())

22b1995662c5627e177c5916c915c4f2.png

拿到access_token后就可以利用循环调用api识别95次,再把文字拼接起来就完成我们pdf转文字的任务了。

# encoding:utf-8


import requests
import base64


page_num=0
words = []


for i in range(96):


    request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic"


    # 二进制方式打开图片文件
    f = open(f"pdf_images/{page_num}.jpg", 'rb')
    img = base64.b64encode(f.read())


    params = {"image": img}


    access_token = '[刚才拿到的access_token复制到这里]'
    request_url = request_url + "?access_token=" + access_token
    headers = {'content-type': 'application/x-www-form-urlencoded'}
    response = requests.post(request_url, data=params, headers=headers)
    # if response:
    #     print(response.json())


    words_result = response.json()['words_result']


    for i in range(len(words_result)):
        words.append(words_result[i]['words'])


    page_num+=1


print(''.join(words))


with open("test.txt","w") as f:
    f.write(''.join(words))

运行完程序后,我们就将一个带水印且加密了的pdf完全转换成txt纯文本了,经测试,只要你图片质量高,那识别率就是100%。

只要你看懂了这个例子,你就可以利用百度智能云上面的免费api为所欲为了。

看懂的一键三连,没看懂的收藏后慢慢看。

 
 
 
 
 
 
 
 
 
 
往期精彩回顾




适合初学者入门人工智能的路线及资料下载(图文+视频)机器学习入门系列下载中国大学慕课《机器学习》(黄海广主讲)机器学习及深度学习笔记等资料打印《统计学习方法》的代码复现专辑机器学习交流qq群955171419,加入微信群请扫码

c4a6d69c1e1bb3ac08d8c85469156e43.png

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值