目录
前言:
昨天一个朋友需要将手机拍摄的excel表(人员花名册)内容识别出来重新变成电子档excel需求,朋友下了多个OCR软件,效果都不理想。我网上找了几个大厂的OCR在线API接口,大多需购买,但百度很良心(非广告),于是搬用“拿来主义”试一试。将操作过程博文记录。
一、效果图
二、百度OCR API申请
入口链接:https://cloud.baidu.com/product/ocr/general?_=1616566711496
操作教程:https://cloud.baidu.com/doc/OCR/s/dk3iqnq51
注册登录后,根据需要创建文字识别应用,填入必填信息,记住AppID、API Key、Secret Key。
三、源码
百度OCR API文档:https://cloud.baidu.com/doc/OCR/index.html
如下是python版代码:
from aip import AipOcr
import re
""" 你的 APPID AK SK """
APP_ID = 'XXXXXX'
API_KEY = 'XXXXXX'
SECRET_KEY = 'XXXXXX'
# """ 调用表格文字识别 """
# client.tableRecognitionAsync(image)
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
def is_number(s):
try:
float(s)
return True
except ValueError:
pass
try:
import unicodedata
unicodedata.numeric(s)
return True
except (TypeError, ValueError):
pass
return False
def main():
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
# 识别参数
options = {}
options["language_type"] = "CHN_ENG"
options["detect_direction"] = "true"
options["detect_language"] = "true"
options["probability"] = "false"
# 本地图片识别
image = get_file_content('test.png')
result = client.basicGeneral(image, options)
# 网络图片识别
#url = "http://www.xxxxxx.com/download.jpg"
#result = client.basicGeneralUrl(url, options)
print('**********原始内容:\n')
print(result['words_result'])
print('\n\n**********格式化处理后内容(去掉words关键字,如果遇到纯数字换行处理):\n')
info = result['words_result']
for item in info:
for k, v in item.items():
print('内容: ', v)
if is_number(v):
print('\n')
if __name__ == '__main__':
main()
四、注意点
因朋友花名册信息敏感,本博文测试图片为网络截取一段话,识别效果不错。但昨天测试的拍摄图片识别效果不甚理想,记录如下:
1、表格信息内容识别结果经常截断不全。
2、有的列合并在了一起,如花名册为7列的表格,有的行记录识别后变成了4列,有的行记录变成了6列,毫无规律,但因为最后一列数据为手机号,所以代码中处理到纯数字时会换行,与其他行信息区分开。
3、图片的大小有要求。开始识别准确率不是很好,发现朋友发过来原图只有几百K,重新拍摄高清图(4M大小左右)后,API无法识别。需注意对图片的要求,如下图:
五、总结
OCR对于标准类信息(如身份证、车牌或某些票据类)识别准确率高,但对于个性化需求,识别效果不是很理想。