opencv+python机读卡识别(四)百度API进行数字识别
2019獨角獸企業重金招聘Python工程師標準>>>
第一部分預處理:https://my.oschina.net/u/3268732/blog/1236298
第二部分圖像切割:https://my.oschina.net/u/3268732/blog/1236344
第三部分選擇題識別:https://my.oschina.net/u/3268732/blog/1237819
1.對數字圖像部分進行處理 預處理部分同樣需要,步驟與選擇題模塊相似,但目的不同,文字部分主要將數字變粗,便于識別。其實也就是和選擇題模塊相比變了幾個參數
NumImg=cv2.blur(thresh,(15,15)) NumImg=cv2.threshold(NumImg, 170, 255, cv2.THRESH_BINARY)[1]2.調用百度ocr api 試過多種檢測方式,還是用別人家現成的好http://apistore.baidu.com/ 百度api使用方法: 首先需要注冊一個百度云賬號,這樣在個人中心里就會看到apikey。這個就是和百度進行交流的鑰匙。然后找到百度ocr的入口找到接口地址。雖然這里給出了但還是可以看下文檔,里面有些細節,比如圖片想免費就要300k以內。上面給的python示例代碼是py2的,這里給出py3的方式(http://apis.baidu.com/idl_baidu/baiduocrpay/idlocrpaid)
import sys, urllib, json import urllib.request import urllib.parse import base64 url = 'http://apis.baidu.com/idl_baidu/ocridcard/ocridcard'data = {} data['fromdevice'] = "pc" data['clientip'] = "10.10.10.0" data['detecttype'] = "LocateRecognize" data['languagetype'] = "ENG"#英文模式 data['imagetype'] = "1" #圖片在本地file_object = open('T.png','rb') try:img = file_object.read( ) finally:file_object.close( ) data['image'] =base64.b64encode(img)decoded_data = urllib.parse.urlencode(data) decoded_data = decoded_data.encode('utf-8')req = urllib.request.Request(url,decoded_data)req.add_header("Content-Type", "application/x-www-form-urlencoded") req.add_header("apikey", "這里填入個人中心的apikey") resp = urllib.request.urlopen(req) content = resp.read() if(content):content = json.loads(content.decode())print(content)3.切割圖片 根據具體情況需要切割圖片才能讓百度api識別,具體限制因素還是圖片大小,切割方式,這里只給出示例
#切割具體位置[起始y:終止y,起始x:終止y] tempimg1=img[240:461,213:939] #圖片切割,width,height分別填入目標寬高 tempimg1 = cv2.resize(tempimg1, (width, height), cv2.INTER_LANCZOS4) #圖片保存,png,jpg格式均可cv2.imwrite("T.png", tempimg1)之后調用,若識別為英文需要轉化,比如可能將0識別為D,這時轉換即可,如:
def temp(char):if(char=='D'):return '0'效果如圖展示 當然若是能想辦法去掉答題卡外圍邊框效果應該會更好……
轉載于:https://my.oschina.net/DDigimon/blog/1239954
總結
以上是生活随笔為你收集整理的opencv+python机读卡识别(四)百度API进行数字识别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Scrum联盟发布《2016年度Scru
- 下一篇: Python按行输出文件内容具体解释及延