iOS之身份證識別

這段時間項目的需求,需要在注冊的時候進行身份證識別萍悴。就簡單的搞了一下岩齿。

身份證識別

項目的需求是通過攝像頭的采集獲取到身份證上面的一些數(shù)據(jù)太颤,比如身份證號碼、姓名等信息盹沈。
而不是簡單的知曉身份證號碼后來一波正則判斷龄章。

實現(xiàn)方案

  • 首先通過手機攝像頭獲取到手機的身份證的圖片,務(wù)必要背景簡單乞封,色調(diào)單一瓦堵,主要是在后面處理圖像的時候?qū)ψR別率的提升有幫助。
  • 通過openCV對原始圖片處理歌亲,把圖片變成灰度圖->二值化->腐蝕、膨脹->輪廓檢測->剪裁等處理澜驮,使得圖片成為我們想要的樣式陷揪。
  • 然后裁剪出合適的區(qū)域,如只要身份證的號碼的區(qū)域就只需要裁剪出身份證號碼即可杂穷。
  • 通過OCR對圖片進行識別悍缠,讓圖片中顯示的文字轉(zhuǎn)換成文字。
  • 識別好號碼后耐量,進行一波身份證號碼識別的預處理飞蚓,網(wǎng)上有很多的正則表達式,可以搜索下廊蜒。我的代碼中也會有體現(xiàn)的趴拧。
  • 通過身份證號碼就可以得知出生年月以及性別(18位身份證:第17位代表的是性別溅漾,奇數(shù)為男性,偶數(shù)為女性)

openCV相關(guān)

  • opencv的相關(guān)代碼是用C++寫的著榴,所以在引用這個opencv的頭文件的那個類添履,需要把.m文件修改為.mm文件。
  • 相關(guān)的類引用了opencv脑又,需要把引用的頭文件放在最前面暮胧,建議使用pch來引用,可以避免造成不必要的麻煩问麸。

下面弄個簡單的代碼演示下:

  • 原始圖片:女神 新垣結(jié)衣


    我女神往衷,新垣結(jié)衣
  • 處理后的圖片
還是我女神

opencv demo下載里面沒有opencv的framework,另行[下載](鏈接: https://pan.baidu.com/s/1o8LjSgi) 密碼: 7ubn严卖。

OCR相關(guān)

利用谷歌的tesseractOCR和tessdata的庫(其中有英文的庫和中文的庫)來識別處理完成后的圖片席舍。

  • 注意 : 其中tessdata拖入到工程中需要拖入一個真實的文件夾(藍色文件),而不是一個在工程中虛擬的文件夾妄田。

引入的依賴庫

依賴庫

處理圖片

#pragma mark - 處理圖片得到身份證號碼圖片
//掃描身份證圖片俺亮,并進行預處理,定位號碼區(qū)域圖片并返回
- (UIImage *)opencvScanCardWithNumber:(UIImage *)image {
    //將UIImage轉(zhuǎn)換成Mat
    cv::Mat resultImage;
    UIImageToMat(image, resultImage);
    //轉(zhuǎn)為灰度圖
    cvtColor(resultImage, resultImage, cv::COLOR_BGR2GRAY);
    //利用閾值二值化
    cv::threshold(resultImage, resultImage, 100, 255, CV_THRESH_BINARY);
    //腐蝕疟呐,填充(腐蝕是讓黑色點變大)
    cv::Mat erodeElement = getStructuringElement(cv::MORPH_RECT, cv::Size(27,27));
    cv::erode(resultImage, resultImage, erodeElement);
    //輪廊檢測
    std::vector<std::vector<cv::Point>> contours;//定義一個容器來存儲所有檢測到的輪廊
    cv::findContours(resultImage, contours, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, cvPoint(0, 0));
    //cv::drawContours(resultImage, contours, -1, cv::Scalar(255),4);
    //取出身份證號碼區(qū)域
    std::vector<cv::Rect> rects;
    cv::Rect numberRect = cv::Rect(0,0,0,0);
    std::vector<std::vector<cv::Point>>::const_iterator itContours = contours.begin();
    for ( ; itContours != contours.end(); ++itContours) {
        cv::Rect rect = cv::boundingRect(*itContours);
        rects.push_back(rect);
        //算法原理
        if (rect.width > numberRect.width && rect.width > rect.height * 5) {
            numberRect = rect;
        }
    }
    //身份證號碼定位失敗
    if (numberRect.width == 0 || numberRect.height == 0) {
        return nil;
    }
    //定位成功成功脚曾,去原圖截取身份證號碼區(qū)域,并轉(zhuǎn)換成灰度圖启具、進行二值化處理
    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轉(zhuǎn)換成UIImage
    UIImage *numberImage = MatToUIImage(resultImage);
    return numberImage;
}

識別已經(jīng)處理過的圖片

#pragma mark - 識別文字或者數(shù)字
//利用TesseractOCR識別文字
- (void)tesseractRecognizeImage:(UIImage *)image compleate:(CompleateBlock)compleate {
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
        G8Tesseract *tesseract = [[G8Tesseract alloc] initWithLanguage:@"chi_sim"];
//        tesseract.image = [image g8_blackAndWhite];
        if (image == nil) {
            NSLog(@"圖片沒有處理成功");
            return;
        }
        tesseract.image = image;
        // Start the recognition
        BOOL done = [tesseract recognize];
        //執(zhí)行回調(diào)
        compleate(tesseract.recognizedText);
    });
}

獲取攝像頭的權(quán)限后本讥,開啟攝像頭,在其代理中實現(xiàn)

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info;

得到號碼后鲁冯,可以對性別進行判斷

#pragma mark - 判斷性別
- (NSString *)judgeGenderWithIdNumber:(NSString *)idNumber {
    NSInteger genderNumber = [[idNumber substringWithRange:NSMakeRange(16, 1)] integerValue];
    if (genderNumber % 2 == 0) {
        return [NSString stringWithFormat:@"性別:%@", @"女"];
    } else {
        return [NSString stringWithFormat:@"性別:%@", @"男"];
    }
}

具體的代碼

相關(guān)的[依賴文件]鏈接: https://pan.baidu.com/s/1gfkSXWn 密碼: kan7拷沸。直接拖入到工程中就可以了(opencv、tesseractOCR以及tessdata)薯演。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末撞芍,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子跨扮,更是在濱河造成了極大的恐慌序无,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衡创,死亡現(xiàn)場離奇詭異帝嗡,居然都是意外死亡,警方通過查閱死者的電腦和手機璃氢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門哟玷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人一也,你說我怎么就攤上這事巢寡『聿保” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵讼渊,是天一觀的道長动看。 經(jīng)常有香客問我,道長爪幻,這世上最難降的妖魔是什么菱皆? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮挨稿,結(jié)果婚禮上仇轻,老公的妹妹穿的比我還像新娘。我一直安慰自己奶甘,他們只是感情好篷店,可當我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著臭家,像睡著了一般疲陕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上钉赁,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天蹄殃,我揣著相機與錄音,去河邊找鬼你踩。 笑死诅岩,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的带膜。 我是一名探鬼主播吩谦,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼膝藕!你這毒婦竟也來了式廷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤芭挽,失蹤者是張志新(化名)和其女友劉穎滑废,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體览绿,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年穗慕,在試婚紗的時候發(fā)現(xiàn)自己被綠了饿敲。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡逛绵,死狀恐怖怀各,靈堂內(nèi)的尸體忽然破棺而出倔韭,到底是詐尸還是另有隱情,我是刑警寧澤瓢对,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布寿酌,位于F島的核電站,受9級特大地震影響硕蛹,放射性物質(zhì)發(fā)生泄漏醇疼。R本人自食惡果不足惜乙濒,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一甘有、第九天 我趴在偏房一處隱蔽的房頂上張望梧疲。 院中可真熱鬧胁澳,春花似錦宇智、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春拔恰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背河爹。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工媳维, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓墓毒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親亲怠。 傳聞我的和親對象是個殘疾皇子所计,可洞房花燭夜當晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)自:http://www.reibang.com/p/ac4c4536ca3e# 一、前言??身份證識別团秽,又稱O...
    ZhangCc_閱讀 1,492評論 1 11
  • 最近不少簡友說git上下載下來的代碼報各種問題主胧,因為包含的庫都比較大钾腺,所以大家在pod的時候耐心等待,另外我已經(jīng)將...
    peaktan閱讀 38,248評論 158 327
  • 身份證識別讥裤,又稱OCR技術(shù)。OCR技術(shù)是光學字符識別的縮寫姻报,是通過掃描等光學輸入方式將各種票據(jù)己英、報刊、書籍吴旋、文稿及...
    SunshineAutumn閱讀 6,370評論 12 16
  • 感謝 http://www.reibang.com/p/ac4c4536ca3e 很早就想做的一個demo 寫在前...
    NateLam閱讀 1,543評論 1 6
  • 最近损肛,公司的項目中用到了圖像識別技術(shù),通過拍照來識別身份證號荣瑟,之前沒有做過治拿,經(jīng)過一番的研究,總算是搞定了笆焰,下面就將...
    沐澤sunshine閱讀 8,834評論 1 27