上一篇寫(xiě)的,OCR調(diào)用是失敗的
后來(lái)仔細(xì)研究過(guò),用base64編碼,最后成功了.
另外一個(gè)問(wèn)題,百度原來(lái)提供兩種方式傳遞原圖片,但是只有第一種,即圖片base64編碼后上傳才有效,第二種上傳原文件,怎么都不成功.后來(lái)想到把在線的圖片讀到緩存再base64編碼,用第一種方式傳遞圖片,結(jié)果可行.
另 安裝 simplejson
,然后 import simplejson as json
也直接可用 ,而且,.decode()
都可以不需要.比原本的json
好用.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#@Author : BigBro
#@DateTime : 2015-11-21 16:41:31
#@Filename : baidu_ocr_ver1.0.py
#@Description : 百度 圖像 ocr
import sys, urllib, json
import urllib.request
import urllib.parse
import base64
url = 'http://apis.baidu.com/apistore/idlocr/ocr'
data = {}
data['fromdevice'] = "pc"
data['clientip'] = "10.10.10.0"
data['detecttype'] = "LocateRecognize"
data['languagetype'] = "CHN_ENG"
data['imagetype'] = "1"
#圖片在本地
with open(r'C:\Users\bigbrolee\Desktop\abc.jpg',mode = 'rb') as f:
img = f.read()
#圖片在網(wǎng)絡(luò)
# img_url = 'https://pic4.zhimg.com/b8189c1ac3a2d5b790d8bc9bf97f41d7_l.jpg'
# try:
# resp_img=urllib.request.urlopen(img_url, timeout=5)
# img=resp_img.read()
# except socket.timeout:
# raise socket.timeout
data['image'] =base64.b64encode(img)
decoded_data = urllib.parse.urlencode(data)
decoded_data = decoded_data.encode('utf-8')
# #print(decoded_data)
req = urllib.request.Request(url,decoded_data)
req.add_header("Content-Type", "application/x-www-form-urlencoded")
req.add_header("apikey", "f46299494a15949102e3d040fdbd5bbc") #a63fd60067141f18cffa9af6a1563b4e
resp = urllib.request.urlopen(req)#, data = decoded_data)
content = resp.read()
if(content):
content = json.loads(content.decode())
print(content)