打印机扫描件.tif格式转化为.jpg后,使用文字识别接口对非手写文字提取(python代码)

import glob
from PIL import Image
import requests
import base64
import os


def PDF_OCR():
    # 图片来源与储存地址,根据项目地址进行修改
    source_dir = "C:\\Users\\****"
    save_dir = "C:\\Users\\****"
    

    # 如果保存目录不存在的话,进行目录新建
    if not os.path.exists(save_dir):
        os.makedirs(save_dir)

    # 得到源数据的tif文件
    files = glob.glob(source_dir + "*.tif")

    # 更换图片.tif格式到.jpg(为了可以用AI接口识别)
    for file in files:
        image_name = save_dir + file[len(source_dir):-4] + '.jpg'  
            rgb_im = f.convert('RGB')
            rgb_im.save(image_name, quality=95, subsampling=0)  # 压缩比设置合适,提高准确性,subsampling常规值为0足够使用

    # 调用通用文字识别接口(百度AI)功能识别非手写jpg图片里的文字,官网找合适自己项目的
    # 输入请求接口
    url = "https://aip.baidu******"
    # 使用二进制打开jpg文件
    jpg_files = glob.glob(save_dir + "*.jpg")

    num = 1  # 对多图一样的情况都想保存
    for file in jpg_files:
        binary_file = open(file, 'rb')
        binary_image = base64.b64encode(binary_file.read())
        params = {
            "image": binary_image
        }
        # access_token鉴权接口获取token
        access_token = '************'

        request_url = url + "?access_token=" + access_token
        headers = {
            'content-type': 'application/x-www-form-urlencoded'
        }
        response = requests.post(request_url, data=params, headers=headers)
        if response:
            msg = response.json()
            # response.json()是字典的形式, 需要的字段在'words_result'里面,其value不唯一,我们进行提取工作
            for i in msg["words_result"]:
                if 'Cutting Voucher:' in i.get('words'):
                    print("获取Cutting Voucher成功")
                    print(i.get('words'))
                    new_pic_name = i.get('words')
                    break
            # 由长度对要获取的名字进行验证,长度不正确或者包含特殊字符,修改图片名字为error
            if len(new_pic_name) > 10 and new_pic_name[-10:-7] == "CUT" and new_pic_name[-7:].isdigit():
                new_name = new_pic_name[-10:] + ".jpg"
                # binary_file打开了文件,对文件重命名的话,会报错进程错误,故而先对文件关闭释放
                binary_file.close()
                if os.path.isfile(save_dir + new_name) is False:  # 判断绝对路径下的文件是否存在,没有首次命名
                    os.rename(os.path.join(save_dir, file[len(save_dir):-4] + ".jpg"), os.path.join(save_dir, new_name))
                    print("success")
                else:
                    os.rename(os.path.join(save_dir, file[len(save_dir):-4] + ".jpg"),
                              os.path.join(save_dir, new_pic_name[-10:] + "-" + f"{num}" + ".jpg"))
                    num = num + 1
                    print("muti-success")
            else:
                binary_file.close()
                os.rename(os.path.join(save_dir, file[len(save_dir):-4] + ".jpg"),
                          os.path.join(save_dir, 'error_' + file[len(save_dir):-4] + ".jpg"))
                print("fail to rename")


if __name__ == '__main__':
    PDF_OCR()

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值