美文网首页iOS精选OpenCV开发实战iOS杂技
iOS 身份证识别之TesseractOCR简单实用

iOS 身份证识别之TesseractOCR简单实用

作者: 小Ju | 来源:发表于2017-03-18 11:36 被阅读1199次

    最近上对从图像里识别出文字比较感兴趣, 用专业点的语言描述就是(OCR光学字符识别窥探)非常牛X的名字, 就想弄一个小玩意来练练(识别身份证上的号码).
    网上搜一下这东西的难点, 其实在于识别的准确度, 如果想要很叼的准确率还是给钱用别人的SDK, 这里只是练练手罢了.
    OCR光学字符识别窥探简称:OCR, 是通过扫描等光学输入方式将各种票据、报刊、书籍、文稿及其它印刷品的文字转化为图像信息,再利用文字识别技术将图像信息转化为可以使用的计算机输入技术..... 算了这个解释可以看这里:写的非常好: http://www.jianshu.com/p/ac4c4536ca3e
    我也是打算使用openVC和TesseractOCR这两个开源框架来完成身份证识别, TesseractOCR来识别图像的文字, openVC来对照片做处理, 今天先将TesseractOCR的简单使用, 先用起来再说.
    TesseractOCR是什么, 就是用来识别图像里的文字的- - !.先创建一个xcode工程, 然后在工程里导入TesseractOCR(可以直接在github里下载https://github.com/tesseract-ocr/tesseract, 也可以使用pod来导入: pod 'TesseractOCRiOS', '~> 4.0.0')

    • 这里需要注意:因为TesseractOCR这东西是用C++写的所以,你直接运行会报错


      1.png

      *解决:在工程->TARGETS->Build Setting-> Enable Bitcode设置为NO

    • 另外在使用TesseractOCR的时候还要记得导入语言包 下载地址https://github.com/tesseract-ocr/tessdata我的demo里就只有英文的, 一定要放到文件命为tessdata的文件夹中, 拖到工程里的时候, 不要勾选Create groups, 记得拖到工程里的是蓝色文件夹, 不是黄色啊!!!!

    现在开始写代码了:导入头文件

    #import <TesseractOCR/TesseractOCR.h>
    

    用到了核心类:G8Tesseract 核心代码:

    - (void)tesseractRecogniceWithImage:(UIImage *)image compleate:(void(^)  (NSString *text))compleate {
         G8Tesseract *tesseract = [[G8Tesseract alloc]initWithLanguage:@"eng"];
         //模式
         tesseract.engineMode = G8OCREngineModeTesseractOnly;
         tesseract.maximumRecognitionTime = 10;
         tesseract.pageSegmentationMode = G8PageSegmentationModeAuto;
         tesseract.image = [image g8_blackAndWhite];
     
         [tesseract recognize];
         compleate(tesseract.recognizedText);
    }
    

    上面的是TesseractOCR的简单使用, 前面我们只需要通过手机的摄像头来获取一张image就可以了, 需要注意的是在使用手机的摄像头的时候要在info.plist加入Privacy - Camera Usage Description来请求权限:


    屏幕快照 2017-03-18 上午11.20.57.png
    • 最后要注意的是: 我们通过摄像头获取的image要将image缩放到一定的大小限制, 如果不是可能会崩溃或者识别不出来:写一个image的分来来缩放就好了
    • (UIImage *)scaleImageWithImage:(UIImage *)image dimension:(CGFloat)dimension{
      CGSize size = CGSizeMake(dimension, dimension);
      CGFloat scaleFaclor;
      if (image.size.width > image.size.height) {
      scaleFaclor = image.size.height / image.size.width;
      size.width = dimension;
      size.height = scaleFaclor * size.width;
      }else{
      scaleFaclor = image.size.width / image.size.height;
      size.height = dimension;
      size.width = scaleFaclor * size.height;
      }
      UIGraphicsBeginImageContext(size);
      [image drawInRect:CGRectMake(0, 0, size.width, size.height)];
      UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext();
      UIGraphicsEndImageContext();
      return resultImage;
      }
    这个只是简单的TesseractOCR库使用来识别图像文字, 如果要识别身份证, 还要对图像处理这里就要使用到openVC了, 之后再弄吧! 还有提高识别率的再研究吧!
    最后附上demo:<https://github.com/xiaojuye/regonic>

    相关文章

      网友评论

      • 薛定谔的黑猫警长:识别效果不是很好怎么处理?
      • 5988a918ae53:OCR识别服务 联系:一五零,一零一五,二零三六
      • 萧城x:这个可以实现那种 视屏模式下 自动识别那种吗
        小Ju:这个,我就不太清楚了:cold_sweat:
      • hee678::unamused: 项目更新一下pod后可以运行,就是识别不了文字。
        hee678:@hee678 顺便帮助一下有需要的人,找了那么多demo,发现这一个是免费的识别率最高https://github.com/mxl123/IDAndBankCard,有两个静态库,里面不知道干了些什么,用它有可能会信息泄露,慎用。
        还有一个要付费的:http://www.code4app.com/thread-11746-1-1.html
        hee678:@小Ju 恩,可以好好研究一下。
        小Ju:这个思路是有的, 但是不太准, 要那种黑白的, 比较大的字体才好识别, 现在公司的项目很多东西搞, 没时间研究了!你有兴趣可以去可以看看http://www.opencv.org.cn这里的论坛, 希望对你有帮助!

      本文标题:iOS 身份证识别之TesseractOCR简单实用

      本文链接:https://www.haomeiwen.com/subject/htjunttx.html