想写个纸质文件管理的玩意儿,因为纸质文件和电子版不一定完全一致,有时候还是要翻纸件但是又慢又要人陪同,所以打算搞一个内网文件管理,拍照放在目录里就自动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])
代码前后风格不一致的地方说明是我抄的嘻嘻
我们单位不能联网,也不能装管理员不认识的免费软件……
你们涉密啊,没法子
不能联网可以理解,要求用免费正版也可以理解。但要管理员认识就有点神经病
不认识的多不安全!