IOS自带的OCR识别功能

这篇具有很好参考价值的文章主要介绍了IOS自带的OCR识别功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、识别身份证

@interface IDCardScanViewController () <AVCaptureMetadataOutputObjectsDelegate>

@property (nonatomic, strong) AVCaptureSession *captureSession;

@end

@implementation IDCardScanViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 创建视频预览层
    AVCaptureVideoPreviewLayer *previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:self.captureSession];
    previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
    previewLayer.frame = self.scanView.bounds;
    [self.scanView.layer addSublayer:previewLayer];
    
    // 创建数据输出
    AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc] init];
    [self.captureSession addOutput:output];
    [output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
    
    // 设置扫描支持的码类型
    if ([output.availableMetadataObjectTypes containsObject:AVMetadataObjectTypeIDCard]) {
        output.metadataObjectTypes = @[AVMetadataObjectTypeIDCard];
    }
    
    // 启动扫描
    [self.captureSession startRunning];
}

- (AVCaptureSession *)captureSession {
    if (!_captureSession) {
        _captureSession = [[AVCaptureSession alloc] init];
        
        // 配置摄像头输入
        AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
        AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
        [_captureSession addInput:input];
    }
    return _captureSession;
}

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray<__kindof AVMetadataObject *> *)metadataObjects fromConnection:(AVCaptureConnection *)connection {
    for (AVMetadataObject *metadata in metadataObjects) {
        if ([metadata isKindOfClass:[AVMetadataMachineReadableCodeObject class]]) {
            AVMetadataMachineReadableCodeObject *code = (AVMetadataMachineReadableCodeObject *)metadata;
            if ([code.type isEqualToString:AVMetadataObjectTypeIDCard]) {
                NSString *result = code.stringValue;
                
                // 对扫描结果进行处理
                NSLog(@"扫描结果:%@", result);
            }
        }
    }
}

下面的方法需要iOS13以上才能支持

#import <Vision/Vision.h>
#import <VisionKit/VisionKit.h>

@interface ViewController () <VNDocumentCameraViewControllerDelegate>

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 在需要的地方调用此方法启动身份证扫描
    [self startDocumentCapture];
}

- (void)startDocumentCapture {
    VNDocumentCameraViewController *documentCameraViewController = [[VNDocumentCameraViewController alloc] init];
    documentCameraViewController.delegate = self;
    [self presentViewController:documentCameraViewController animated:YES completion:nil];
}

#pragma mark - VNDocumentCameraViewControllerDelegate

- (void)documentCameraViewController:(VNDocumentCameraViewController *)controller didFinishWithScan:(VNDocumentCameraScan *)scan {
    // 遍历扫描结果
    for (NSUInteger pageIndex = 0; pageIndex < scan.pageCount; pageIndex++) {
        VNPage *page = [scan pageAtIndex:pageIndex];
        
        // 检查扫描结果是否为身份证
        if ([self isIdentityCard:page]) {
            // 获取身份证号码和姓名
            NSString *number = [self identityCardNumberFromPage:page];
            NSString *name = [self identityCardNameFromPage:page];
            
            NSLog(@"身份证号码:%@", number);
            NSLog(@"姓名:%@", name);
            
            // 在这里进行身份证识别后的处理
        }
    }
    
    // 关闭扫描视图控制器
    [controller dismissViewControllerAnimated:YES completion:nil];
}

- (void)documentCameraViewControllerDidCancel:(VNDocumentCameraViewController *)controller {
    // 用户取消了扫描,关闭扫描视图控制器
    [controller dismissViewControllerAnimated:YES completion:nil];
}

- (void)documentCameraViewController:(VNDocumentCameraViewController *)controller didFailWithError:(NSError *)error {
    // 扫描失败,处理错误信息
    NSLog(@"扫描身份证发生错误:%@", error);
    [controller dismissViewControllerAnimated:YES completion:nil];
}

#pragma mark - Helper Methods

- (BOOL)isIdentityCard:(VNPage *)page {
    // 获取页面文本内容
    NSString *text = page.recognizedText.string;
    
    // 判断是否包含“公民身份号码”和“姓名”关键字
    if ([text containsString:@"公民身份号码"] && [text containsString:@"姓名"]) {
        return YES;
    }
    
    return NO;
}

- (NSString *)identityCardNumberFromPage:(VNPage *)page {
    // 获取页面文本内容
    NSString *text = page.recognizedText.string;
    
    // 查找身份证号码
    NSRange range = [text rangeOfString:@"公民身份号码"];
    if (range.location != NSNotFound) {
        NSString *number = [text substringFromIndex:range.location + range.length];
        number = [number stringByReplacingOccurrencesOfString:@" " withString:@""];
        
        return number;
    }
    
    return nil;
}

- (NSString *)identityCardNameFromPage:(VNPage *)page {
    // 获取页面文本内容
    NSString *text = page.recognizedText.string;
    
    // 查找姓名
    NSRange range = [text rangeOfString:@"姓名"];
    if (range.location != NSNotFound) {
        NSString *name = [text substringFromIndex:range.location + range.length];
        name = [name stringByReplacingOccurrencesOfString:@" " withString:@""];
        
        return name;
    }
    
    return nil;
}

@end

二、识别图片上的文字

#import <Vision/Vision.h>

@interface ViewController ()

@end文章来源地址https://www.toymoban.com/news/detail-745446.html

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    UIImage *image = [UIImage imageNamed:@"test_image.jpg"];
    [self recognizeTextInImage:image];
}

- (void)recognizeTextInImage:(UIImage *)image {
    // 创建VNImageRequestHandler对象
    VNImageRequestHandler *requestHandler = [[VNImageRequestHandler alloc] initWithCGImage:image.CGImage options:@{}];
    
    // 创建VNRecognizeTextRequest对象
    VNRecognizeTextRequest *textRequest = [[VNRecognizeTextRequest alloc] initWithCompletionHandler:^(VNRequest * _Nonnull request, NSError * _Nullable error) {
        // 处理识别结果
        if (error == nil) {
            NSArray *results = request.results;
            NSMutableString *recognizedText = [NSMutableString string];
            for (VNRecognizedTextObservation *observation in results) {
                for (VNRecognizedText *text in observation.topCandidates(1)) {
                    [recognizedText appendString:text.string];
                    [recognizedText appendString:@"\n"];
                }
            }
            
            NSLog(@"识别结果:%@", recognizedText);
            
            // 在这里进行识别后的处理
        } else {
            NSLog(@"识别出错:%@", error);
        }
    }];
    
    // 设置识别方式和语种
    textRequest.recognitionLevel = VNRequestTextRecognitionLevelAccurate;
    textRequest.usesLanguageCorrection = YES;
    
    // 发送识别请求
    NSError *requestError = nil;
    [requestHandler performRequests:@[textRequest] error:&requestError];
    if (requestError != nil) {
        NSLog(@"发送识别请求出错:%@", requestError);
    }
}

@end

到了这里,关于IOS自带的OCR识别功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uniapp-微信小程序关于禁止ios自带的下拉上拉(橡皮筋回弹)

    先说出现的问题,如下图所示,下拉出现空白,上拉也会出现一段空白。 要求:这个页面不能拉动,并且保证 如果内容超出,可以正常滑动,内容不超出也禁止ios自带的拉动    解决办法:分两步 第一步 :在pages.json里添加这行代码,如下图所示, 但是 如果你的页面内容很

    2024年02月12日
    浏览(58)
  • ComPDFKit 转档SDK OCR表格识别功能

    我们非常高兴地宣布,适用于 Windows、iOS、Android 和服务器的 ComPDFKit 转档SDK 1.8.0 现已发布!在该版本中,OCR 功能支持了表格识别,优化了OCR文字识别率。PDF to HTML 优化了html 文件结构,使转换后的 HTML 文件容量大幅减少。 OCR 表格识别: Windows: CPDFConvertWordOptions wordOptions = n

    2024年02月15日
    浏览(38)
  • Umi-OCR:开源、免费、离线、多功能的 OCR 图片文字识别软件

    官方版本说明 不同版本仅OCR引擎插件不同,其它功能完全一致。 均支持 win7 x64 及以上的系统,附带多国语言识别库。 .7z.exe 为自解压包,可以用压缩软件打开,也可以在没有安装压缩软件的电脑上直接双击解压。 Paddle 引擎插件版 (性能好,速度快,占用率高,适合高配机

    2024年01月19日
    浏览(92)
  • uniapp - 安卓|苹果App软件实现调用百度人脸识别接口服务及人脸活体认证功能,uniapp苹果ios、安卓Android手机app平台,人脸认证、活体检测、身份证与人脸验证(示例代码,一键复制

    在uniapp手机App开发中(安卓Android|苹果ios系统),利用百度人脸识别api接口对接uniapp APP进行人脸识别、人脸检测、活体验证、人脸对比、人脸搜索、身份证信息是否与人脸匹配,支持离线SDK集成、离线无网络正常使用功能、自定义人脸识别框附近的页面样式和大小等。 提供详

    2024年04月11日
    浏览(68)
  • 记录--如何在H5中实现OCR拍照识别身份证功能

    由于当前项目中需要实现身份证拍照识别的功能,如果是小程序可以使用微信提供的 ocr-navigator 插件实现,但是在企业微信的H5中没有提供该插件,所以需要手动实现该功能。 众所周知,前端H5中浏览器打开相机打开的是原生相机,无法在相机的界面上覆盖自定义的元素,比如

    2024年02月06日
    浏览(43)
  • iOS SFSpeechRecognizer 语音识别

    SFSpeechRecognizer 属于 Speech 框架,在 iOS 10 首次出现,并在 iOS13 中进行了比较重大的更新,在 iOS 13 上支持离线语音识别以及语音分析。WWDC2019 展示了其在 AI 领域的进步,其中 iOS 13 设备内置语音识别就是一项比较不错功能。 移动端上的离线语音识别模型,减少用户泄露风险,

    2024年02月07日
    浏览(31)
  • 【合合TextIn】OCR身份证 / 银行卡识别功能适配鸿蒙系统

    目录 一、 鸿蒙系统与信创国产化的背景 二、两款产品的兼容性升级详情 三、身份证产品介绍 四、银行卡识别产品 五、承诺与展望 一、 鸿蒙系统与信创国产化的背景 自鸿蒙系统推出以来,其不仅成为了华为在软件领域的重要里程碑,更是国产操作系统的一面旗帜,也是国

    2024年04月10日
    浏览(55)
  • 浏览器原生JavaScript离线文字转语音TTS播放,支持Windows自带TTS语音和移动端(安卓、IOS)

    JS已经可以实现语音合成(文字转语音)和语音识别(语音转文字),各个浏览器支持列表如下所示: 语音识别支持列表: 因此,浏览器上面使用语音合成非常简单。 页面效果示例: 1、支持速度,音调设置 2、支持下拉选择语音模板 3、文字转语音 该文件可直接保存成htm

    2024年02月04日
    浏览(58)
  • 媒体捕捉-iOS中的人脸识别

    在如今的移动应用和直播场景中,我们常常能体验到一种颇具趣味与互动性的功能:无论是美颜相机中的萌趣贴纸精准附着于人脸关键点上,还是主播们在直播时实时戴上可爱的虚拟动物耳朵或动态装饰物,这些令人眼前一亮的效果背后,都离不开人脸识别技术的支持。自

    2024年02月01日
    浏览(31)
  • 【iOS】——基于Vision Kit框架实现图片文字识别

    根据苹果的官方文档,Vision可以执行面部检测、文本检测、条形码识别、图像注册和一般功能跟踪。Vision还允许将自定义Core ML模型用于分类或对象检测等任务。下面只是对文本识别的一个学习。 Vision的文本识别分为两种方式。 第一种是 快速路径(fast) ,它使用框架的字符

    2024年01月19日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包