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 

用到了核心类: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:

你可能感兴趣的:(iOS 身份证识别之TesseractOCR简单实用)