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

最近上对从图像里识别出文字比较感兴趣, 用专业点的语言描述就是(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>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转自:http://www.jianshu.com/p/ac4c4536ca3e# 一、前言  身份证识别,又称O...
    ZhangCc_阅读 1,515评论 1 11
  • 技术要点分析:此次项目中主要的技术划分为身份证号码区域提取和光学字符识别。身份证号码区域的提取涉及有:图像灰度化阀...
    HoFie阅读 9,163评论 12 34
  • image_op函数使用。 一、图像的读取及保存 二、尺寸调整 三、色彩模式调整 四 其它 Note that i...
    华夏意匠阅读 4,193评论 0 0
  • 在英国的曼彻斯特城,英格兰超级足球联赛第18 轮的一场比赛在埃弗顿队与西汉姆联队之间进行。比赛只剩下最后一分钟时,...
    沅沨阅读 865评论 0 0
  • 今天看见曾经很喜欢的人,没有认出来。 莫名其妙的寒暄和亲切,好像消失的那几年都不存在,感觉很扯。 全程在想对方的名...
    无所谓的涵宝阅读 217评论 1 0