最近專案用到身份證識別,在github上搜了一堆demo,在google上找了一堆**,有能識別出證件照的,但是都是打包成.a的靜態庫,沒有原始碼,我努力吃了幾天書,有了一點研究成果,現在貼出來與大家分享,要是有更好的方法,希望大神指正,共同**解決方案。(以下**本人親測可用,正在進一步探索智慧型識別,如有興趣,**入)
這裡用到了兩個開源庫:opencv、tesseractocrios,兩個語言包chi_sim、eng。身份證識別的流程主要有:灰度化,閥值二值化,腐蝕,輪廓檢測,取出身份證號碼區域,tesseractocr識別文字。
身份證識別核心原始碼:
uiimage * image = [uiimage imagenamed:@「abc.png」];
//將uiimage轉換成matcv::mat resultimage;
uiimagetomat(image, resultimage);
//轉為灰度圖
cvtcolor(resultimage, resultimage, 6);
//利用閾值二值化
cv::threshold(resultimage, resultimage, 100, 255, cv_thresh_binary);
//腐蝕,填充(腐蝕是讓黑色點變大)
cv::mat erodeelement = getstructuringelement(cv::morph_rect, cv::size(140,140));
cv::erode(resultimage, resultimage, erodeelement);
//輪廊檢測std::vector> contours;
//定義乙個容器來儲存所有檢測到的輪廊
//取出身份證號碼區域
std::vectorrects;cv::rect numberrect = cv::rect(0,0,0,0); std::vector>::const_iterator itcontours = contours.begin();
for ( ; itcontours != contours.end(); ++itcontours) //定位成功成功,去原圖擷取身份證號碼區域,並轉換成灰度圖、進行二值化處理
cv::mat matimage;
uiimagetomat(image, matimage);
resultimage = matimage(numberrect);
cvtcolor(resultimage, resultimage, cv::color_bgr2gray);
cv::threshold(resultimage, resultimage, 80, 255, cv_thresh_binary);
//將mat轉換成uiimage
身份證OCR識別
本文章 於自己的學習影象處理以及識別過程中的一些經驗,開發了乙個ocr識別身份證程式,此程式雖不夠完美但有一定的參考價值,csdn上本人也將提供源 對身份證ocr識別整個過程的乙個梳理。程式依賴庫,opencv3.20 tesseract ocr識別。大致過程 1,修剪統一化影象 900 600 或...
OCR身份證識別功能
我們來理解下這個類函式的運作機制,藉此聯想下tesseract引擎的實現原理。機制如下 1.呼叫init 方法,即對引擎初始化 2.呼叫setimage 方法,設定圖形流的資訊 3.通過getutf8text 方法獲得text資訊 4.呼叫recognizedtext類,判斷text的正確性,然後輸...
身份證識別OCR行業技術
某近日去了一趟國家圖書館,體驗了一把身份證識別。話說來也是很巧,自動辦讀書卡的地方人很多,我想蒙混進到圖書室內,怎麼也是漫無目的的看書唄。自信滿滿地就進去了,果斷地被攔住了 刷卡!沒有怎麼辦,刷臉行不?現在不也流行人臉識別嗎!刷身份證!恰巧帶了身份證,放在他那個身份證讀卡器上,滴滴兩聲,進去吧!可以...