同目录jpg批量百度ocr

想写个纸质文件管理的玩意儿,因为纸质文件和电子版不一定完全一致,有时候还是要翻纸件但是又慢又要人陪同,所以打算搞一个内网文件管理,拍照放在目录里就自动ocr(简略)可以大概检索一下关键字提高人工效率。目前用摸鱼时间做了第一步就是同目录jpg文件批量ocr,用的是百度的API,每天免费500张图,肯定够用了。

很简单没啥好说的,直接贴代码就

import requests
import base64
import os
import json

ocr_host = 'https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic'
token_url = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&'
API_key = 百度给的key
Secret_key = 百度给的key

def gettoken(): #获取token
    f = requests.get(token_url + 'client_id=' + API_key + '&client_secret=' + Secret_key)
    if f.status_code == 200:
        result = f.json()
        token = result['access_token']
        print('token get')
        return token
    else:
        print('获取失败')
        return None


def loadimg(img_path): #读取图片信息
    f = None
    f = open(img_path, 'rb')
    img = base64.b64encode(f.read())
    print('load img')
    return img


def ocrstart(img_path): #ocr并且创建同名txt文件
    params = {"image": loadimg(img_path)}
    request_url = ocr_host + "?access_token=" + gettoken()
    headers = {'content-type': 'application/x-www-form-urlencoded'}
    response = requests.post(request_url, data=params, headers=headers)
    if response:
        filename = img_path[:-4]
        txtfilename = filename + '_ocr.txt'
        txtfile = open(txtfilename, 'w', encoding='utf-8')
        if 'words_result' in response.json():
            resnum = response.json()["words_result_num"]
            resword = response.json()["words_result"]
            for i in range(0, resnum):
                txtfile.write(eval(json.dumps(resword[i]['words'], ensure_ascii=False)))
                txtfile.write('\n')
                print(resword[i]['words'])
        elif 'error_msg' in response.json():
            print('img ocr fail:{}'.format(response.json()["error_msg"]))
    else:
        print('cannot open img')


def getimglist(): #读取同目录下jpg文件列表
    fs = []
    for root, dirs, files in os.walk(".", topdown=True):
        for name in files:
            _, ending = os.path.splitext(name)
            if ending == ".jpg":
                fs.append(os.path.join(name))
    return fs


if __name__ == '__main__':
    imgnum = len(getimglist())
    for i in range(0, imgnum):
        ocrstart(img_path=getimglist()[i])

代码前后风格不一致的地方说明是我抄的嘻嘻

同目录jpg批量百度ocr》有4个想法

      1. Loki

        不能联网可以理解,要求用免费正版也可以理解。但要管理员认识就有点神经病

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据