python识别图像数字诊断模块_opencv+python 机读卡识别
長按上圖識別二維碼報名濟南源創會
摘要: 通過隨意一張機讀卡的照片,識別其中選擇題題號,選項,以及相關數字識別。這個系列的解決方案不止一種,調參的方法也是各種各樣,反正能夠滿足需求就極好了
1.預處理
這次的機讀卡識別項目來源暑期培訓,主要包括內容一張手機拍攝的機讀卡位置定位,識別其中選擇題模塊及少量數字識別,給出樣例圖片:
預處理目的:
對于這個識別問題而言,把圖像變成二值圖應該是最簡單粗暴的方法了。為了找準邊界,才能良好切割。而對于邊緣檢測的函數也只能傳入灰度圖……
1.1.環境配置
環境是python3.5的,大體部分需要配置的是numpy+mlk版本,scipy,來支持opencv,另外輔助以imutils,這個包里面含有4點變換函數以及matplotlib來輔助繪圖
1.2.圖片預處理?為了方便找出圖片的4個頂點,所以需要一次自適應二值化,為了使圖片效果更好,所以在二值化之前還加了一層高斯濾波
2.圖像切割
圖像切割的目的是將圖像定個便于識別的樣子。比如這里四角變換結束以后會吧圖像變為2400*2800的大小,無論是什么樣的案例圖片,都是這個格式,這樣最后在局部分割,如選擇題答案的識別和數字區域的確定這套程序才能有較好的通用性
2.1.邊緣檢測
預處理得到二值圖像就很容易做邊緣檢測了,找出4個點,方便之后的4點變換
頂點坐標的存放形式為3維數組,所以若想演示最大的4個頂點應做如下操作:
2.2.四點變換
四點變換直接調用大佬寫好放在imutils中的函數就好了。這里存了兩個,一個原圖一個灰度圖,原圖用來配合展示,灰度圖用來支配
3.對選擇題識別
3.1.對選擇題圖像部分預處理
經過四點變換后的圖像需要經過重新轉換標準長寬,以便對選擇題部分標定題號及答案。這里的圖像定義為2400*2800 。選擇題部分最大的特點是需要將黑塊突出,以及過濾掉沒填涂的選項,以便確認。預處理方法選擇均值濾波及二進制二值化的方法。
3.2.尋找結果中黑塊坐標
這里尋找坐標的目的是為了確定黑塊所代表的題號及選項,用輪廓中心來進行描述
3.3.計算選擇題題號及答案
比較繞,主要還是根據取余和倍數關系
輸出運算結果:
至此完成選擇題部分
4.數字識別,調用百度api
數字識別經過測試總的感覺還是可以。需要注意的地方是要對數字板塊需要切割出來這樣給機器會好認點,但也不能單個字拿出來。最好能有一串,同時也需要注意圖片尺寸
4.1.對數字圖像部分進行處理
預處理部分同樣需要,步驟與選擇題模塊相似,但目的不同,文字部分主要將數字變粗,便于識別。其實也就是和選擇題模塊相比變了幾個參數
4.2.調用百度ocr api
試過多種檢測方式,還是用別人家現成的好http://apistore.baidu.com/百度api使用方法: 首先需要注冊一個百度云賬號,這樣在個人中心里就會看到apikey。這個就是和百度進行交流的鑰匙。然后找到百度ocr的入口找到接口地址。雖然這里給出了但還是可以看下文檔,里面有些細節,比如圖片想免費就要300k以內。上面給的python示例代碼是py2的,這里給出py3的方式(http://apis.baidu.com/idl_baidu/baiduocrpay/idlocrpaid)
4.3.切割圖片
根據具體情況需要切割圖片才能讓百度api識別,具體限制因素還是圖片大小,切割方式,這里只給出示例
之后調用,若識別為英文需要轉化,比如可能將0識別為D,這時轉換即可,如:
效果如圖展示
當然若是能想辦法去掉答題卡外圍邊框效果應該會更好……
更多干貨請前往公眾號菜單欄“讀我”->“干貨分享”查看。
總結
以上是生活随笔為你收集整理的python识别图像数字诊断模块_opencv+python 机读卡识别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为nova 11来了!”捅破天“技术卫
- 下一篇: 格力空调服务热线号码