说道OCR图文识别,其实python也有在自己的库(以下是我了解,应该还有很多):
第一个 tesserocr:个人感觉不好用,精确度不高,实例代码如下:
import tesserocr
from PIL import Image
#coding=utf-8
image = Image.open('img.jpg')
result = tesserocr.image_to_text(image)
print(result)
第二个 cn识别库,虽然比前者好一点,但还是差强人意,附上实例代码,记得先安装库:
from cnstd import CnStd
from cnocr import CnOcr
std = CnStd()
cn_ocr = CnOcr()
box_info_list = std.detect('01.jpg')#图片文件
for box_info in box_info_list:
cropped_img = box_info['cropped_img'] # 检测出的文本框
ocr_res = cn_ocr.ocr_for_single_line(cropped_img)
print('ocr result: %s' % ''.join(ocr_res))
在这些情况都不行的情况下,我想着能不能接入第三方接口,那样效果会不会更好一点,所以我最后选择了百度智能云的OCR接口,免费次数给的多,不用白不用。
首先你得创建账号,这个就不说了,
创建应用登陆首页 点击管理控制台=》产品服务=》文字识别=》创建应用,接着填写一下就完成了
最后到这个界面:
获得重要的参数AppID,API Key,Secret Key后面做准备。
记得安装一下模块:
pip install baidu-aip
账号密码登陆,也可以说是高精确度版本的,看一下他给的python相关代码:
说实话,有的我也看不懂,我就按照我的理解写一下:
import os
from aip import AipOcr
""" 你的 APPID AK SK """
APP_ID = ''#填入你的AppID
API_KEY = ''#填入你的API Key
SECRET_KEY = ''#填入你的Secret Key
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
""" 读取图片 """
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
with open('03.jpg', 'rb') as f:
image = f.read()
dict = client.basicAccurate(image)#结果是字典,包含一些日志
print(dict)
第二种方式精确度不高,但是免费次数很多,通常我都用这个
也给了代码示例,按照我的理解,代码如下:
import requests
import base64
import io
import sys
import os
import json
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf8')
'''
通用文字识别
'''
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=API Key&client_secret=Secret Key'#鉴权使用的Access_token必须通过API Key和Secret Key获取,对应你的API Key,Secret Key填入host种
response1 = requests.get(host).text
jsonData = json.loads(response1)
access_token = jsonData["access_token"]#获取access_token中内容
#获取图片网址信息
url = "https://………….jpg"#图片网址
request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic"
imgData = requests.get(url).content
img_data = base64.b64encode(imgData)
params = {"image": img_data}
request_url = request_url + "?access_token=" + access_token
headers = {'content-type': 'application/x-www-form-urlencoded'}
response2 = requests.post(request_url, data=params, headers=headers)
if response2:
dict = response2.json()
words = dict["words_result"]#取出识别内容
word_list = []
for word in words:
word_list.append(word["words"])
list1 = [str(i) for i in word_list]
for i in list1:
print(i)
ocr识别还是很有作用的,如有不足的,一起交流学习!