利用百度api进行文字识别
文章目录
- 利用百度api进行文字识别
- 前言
- 一、百度文字识别?
- 二、使用方法
- 1.参考官方文档自己写
- 2.我自己的代码记录
- 三.使用情况
- 当然也有一些问题:
- 四.总结
- 注意
前言
最近在做文字录入工作,有的名字很难打,之前搞验证码识别的时候用过百度文字识别试了试,发现验证码无法使用,不过文字识别确实挺准确,就改了改当时的代码
一、百度文字识别?
文字识别是百度智能云的一项产品,免费使用。基础版免费50000次/天,超了就要花钱了,不过对于个人使用,5w次绝对够了。
二、使用方法
1.参考官方文档自己写
百度有专门的技术文档,代码也不长,还有事例。
推荐自己写
2.我自己的代码记录
其实也是用的百度的,但既然是记录性质的,不记代码记录什么
识别单张图片的:
代码如下(示例):
import requests
import base64
import os
'''
要识别的图片需保存在程序同文件夹的photo文件下,也就是说,此程序与photo文件夹在同一个文件夹下,
图片保存在photo中
'''
def api_exp(path):
""" 你的 APPID AK SK """
APP_ID = 'xxxxx'
API_KEY = 'xxxxxx'
SECRET_KEY = 'xxxxxx'
request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic"
# 二进制方式打开图片文件
f = open(path, 'rb')
img = base64.b64encode(f.read())
params = {"image": img}
access_token = '24.b279bb7be34f1d5cda564922387c23fb.2592000.1621763376.282335-24006625'
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)
# photo_name = os.listdir('./photo')
if response:
# print(response.json()['words_result'])
# pass
with open('1.txt', 'w+', encoding='utf-8') as fp:
for i in response.json()['words_result']:
print(i['words'])
k = str.encode(i['words'])
# print(type(k))
fp.write(i['words'])
fp.write('\n')
#
#
# with open(str(l)+'txt', 'w+', encoding='utf-8') as fp2:
# for i in response.json()['words_result']:
# print(i['words'])
# k = str.encode(i['words'])
# # print(type(k))
# fp2.write(i['words'])
# fp2.write('\n')
if __name__ == '__main__':
photo_name = os.listdir('./photo')
api_exp('./photo/'+str(photo_name[0]))
识别多张图片的:
import requests
import base64
import os
def api_exp(path, l):
""" 你的 APPID AK SK """
APP_ID = '24006625'
API_KEY = 'LPraRMKWBFlq8uZvCflVp3uz'
SECRET_KEY = 'U9GtmHON6iUtHrlzyROCy4dpyHiUr0SH'
request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic"
# 二进制方式打开图片文件
f = open(path, 'rb')
img = base64.b64encode(f.read())
params = {"image": img}
access_token = '24.b279bb7be34f1d5cda564922387c23fb.2592000.1621763376.282335-24006625'
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)
# photo_name = os.listdir('./photo')
if response:
# print(response.json()['words_result'])
# pass
with open(str(l)+'.txt', 'w+', encoding='utf-8') as fp:
for i in response.json()['words_result']:
print(i['words'])
k = str.encode(i['words'])
# print(type(k))
fp.write(i['words'])
fp.write('\n')
if __name__ == "__main__":
# api_exp()
photo_name = os.listdir('./photo')
m = './photo/'+str(photo_name[0])
for l in range(len(photo_name)):
path = './photo/' + str(photo_name[l])
api_exp(path, l)
三.使用情况
百度api简单易用,免费次数还挺多,不得不说,百度nb
我自己用着识别率还是挺高的,有些复杂的字,不认识的字都能识别出来,举个例子:
识别结果:
吴鸿堃
当然也有一些问题:
1.表格中的两个名字间隔已经很大了,但是有的会回车间隔行,有的直接没有空格
2.有的时候抽风,识别不出来文字,图片稍微裁剪一下才能识别
3.文字方向必须对,横过来就无法识别。
四.总结
不得不说,百度确实挺良心,如果不是之前砍了一回除标准版以外所有方法的免费次数,我吹爆百度!!!
第一篇文章完成,希望以后养成写文章的好习惯。
惊艳到我的协议镇楼:
注意
前几天才注意到我的程序突然不能用了,查了查才发现是 SECRET_KEY的问题,貌似这个是有时间限制的,隔一段时间需要重新申请一次。
如果要长期使用,建议加个检测 SECRET_KEY的语句,出现xx错误就自动申请。