最近大神推荐一个新的东西,orc文字识别,是免费的,感觉特别不错,所以打算自己弄来玩玩。

首先要自己上百度申请一个账号https://cloud.baidu.com/product/ocr.html,登陆百度云,然后添加一个应用。创建好应用以后,就跟图片中一样,其中的API KEY 和 Secret Key 要记住,等会调用的时候要用到。

创建好应用以后,首先要调用登陆接口来获得access_token,这里要用到APIKEY 和 SECRET KEY,代码如下

host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=这里替换成你的APIKEY&client_secret=这里替换成你的Secret key'
request = urllib2.Request(host)
request.add_header('Content-Type', 'application/json; charset=UTF-8')
response = urllib2.urlopen(request)
content = response.read()
if (content):
  coco=json.loads(content)
  print(coco['access_token'])

获得access_token 以后就可以调用接口,接口文档在官网的技术文档里有,我这里就只示范一下通用版的api

如果你想要文字识别网络图片

url = 'https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic'
values = {
        'access_token':coco['access_token'],#这里是你之前获取的access_token
        'url':imgurl,#这里是你要识别的网络图片的地址
        'Content-Type':'application/x-www-form-urlencoded',
        'language_type':'ENG'  #这里我的语言设置成只识别英文
    }
data = urllib.urlencode(values)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
the_page = response.read()
result = json.loads(the_page)
print result['words_result']

尝试用来识别有些网站登陆时需要输入的验证码,感觉效果还不错,但是如果字母重叠了就会有误判。

此外,如果想要识别本地的图片,需要对图片进行base64编码。

with open("orc.png","rb") as f:  
        # b64encode是编码,b64decode是解码  
        imagedata = base64.b64encode(f.read())

url = 'https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic'
values = {
        'access_token':coco['access_token'],
        'image':imagedata,
        'Content-Type':'application/x-www-form-urlencoded',
        'language_type':'ENG'
    }
data = urllib.urlencode(values)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
the_page = response.read()
result = json.loads(the_page)
return result['words_result']

下面我打包了一个函数,输入参数是网络图片的地址,输出就是识别结果,小伙伴们可以直接复制过去调用

import urllib, urllib2, sys,json,base64
import ssl
def orcPic(imgurl):
    appkey = '你的appkey'
    secretkey= '你的secretkey'
    # client_id 为官网获取的AK, client_secret 为官网获取的SK
    host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id='+appkey+'&client_secret='+secretkey
    request = urllib2.Request(host)
    request.add_header('Content-Type', 'application/json; charset=UTF-8')
    response = urllib2.urlopen(request)
    content = response.read()
    if (content):
        coco=json.loads(content)

    url = 'https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic'
    values = {
        'access_token':coco['access_token'],
        'url':imgurl,
        'Content-Type':'application/x-www-form-urlencoded',
        'language_type':'ENG'
    }
    data = urllib.urlencode(values)
    req = urllib2.Request(url, data)
    response = urllib2.urlopen(req)
    the_page = response.read()
    result = json.loads(the_page)
    return result['words_result']