iOS小技能:iOS13 证件扫描 & 文字识别API

简介: 1. 应用场景:证件扫描、文字识别2. 原理:利用iOS13 VNDocumentCameraViewController的证件扫描和VNRecognizeTextRequest文字识别功能进行实现

2000元阿里云代金券免费领取,2核4G云服务器仅664元/3年,新老用户都有优惠,立即抢购>>>


阿里云采购季(云主机223元/3年)活动入口:请点击进入>>>,


阿里云学生服务器(9.5元/月)购买入口:请点击进入>>>,

引言

从CSDN下载Demo源码:https://download.csdn.net/download/u011018979/19262418

  1. 应用场景:证件扫描、文字识别
  2. 原理:利用iOS13 VNDocumentCameraViewController的证件扫描和VNRecognizeTextRequest文字识别功能进行实现
  3. 原理文章:https://kunnan.blog.csdn.net/article/details/117414243

在这里插入图片描述

I 、 iOS13 证件扫描API

VisionKit的VNDocumentCameraViewController

API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(macos, tvos, watchos)
@interface VNDocumentCameraViewController : UIViewController

II、iOS13 文字识别API

Vision的 VNRecognizeTextRequest

API_AVAILABLE(macos(10.15), ios(13.0), tvos(13.0))
@interface VNRecognizeTextRequest : VNImageBasedRequest <VNRequestProgressProviding>

效果图:

III 案例


#import "ViewController.h"

@interface ViewController ()

@end



@implementation ViewController

NSArray<VNRequest *> *requests;
dispatch_queue_t textRecognitionWorkQueue;

NSString *resultingText;

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    
    // Parar e esconder o Indicador de atividade do OCR
    [self->activityIndicator stopAnimating];
    self->activityIndicator.hidden = YES;
    
    // Solicitar que o Vision seja executado em cada página do documento digitalizado.
    requests = [[NSArray<VNRequest *> alloc] init];
    
    // Cria a fila de expedi??o para executar solicita??es do Vision.
    dispatch_queue_attr_t qos = dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, QOS_CLASS_USER_INITIATED, -1);
    textRecognitionWorkQueue = dispatch_queue_create("TextRecognitionQueue", qos);
    
    resultingText = @"";
    
    
    
    [self setupVision];
}

// Solicita o Setup do Vision, pois a solicita??o pode ser reutilizada
- (void)setupVision {
    VNRecognizeTextRequest *textRecognitionRequest = [[VNRecognizeTextRequest alloc] initWithCompletionHandler:^(VNRequest * _Nonnull request, NSError * _Nullable error) {
        
        NSMutableArray *observations;
        @try {
            observations  = [[NSMutableArray alloc] init];
            for (VNRecognizedTextObservation *obs in request.results) {
                [observations addObject:(VNRecognizedTextObservation *)obs];
            }
        }
        @catch (NSException *exception) {
            NSLog(@"As observa??es s?o de um tipo inesperado.");
        }
        @finally {
            //NSLog(@"Condi??o final");
        }
        
        // Concatena o texto reconhecido de todas as observa??es.
        NSInteger maximumCandidates = 1;
        for (VNRecognizedTextObservation *observation in observations) {
            VNRecognizedText *candidate = [observation topCandidates:maximumCandidates].firstObject;
            resultingText = [NSString stringWithFormat:@"%@%@",
                             resultingText,
                             candidate.string];
        }
    }];
    // Especifica o nível de reconhecimento
    textRecognitionRequest.recognitionLevel = VNRequestTextRecognitionLevelAccurate;
    requests = @[textRecognitionRequest];
}

- (IBAction)scanReceipts:(id)sender {
    //Cria uma instancia da Classe de Leitura de Docs da Vision, e abre ela
    VNDocumentCameraViewController *documentCameraViewController = [[VNDocumentCameraViewController alloc] init];
    documentCameraViewController.delegate = self;
    
    [self presentModalViewController:documentCameraViewController animated:YES];
}


// MARK: VNDocumentCameraViewControllerDelegate


- (void)documentCameraViewController:(VNDocumentCameraViewController *)controller didFinishWithScan:(VNDocumentCameraScan *)scan {
    // Limpe qualquer texto existente.
    self->textView.text = @"";
    // Descartar a c?mera de documentos
    [controller dismissModalViewControllerAnimated:YES];
    
    self->activityIndicator.hidden = NO;
    [self->activityIndicator startAnimating];
    
    dispatch_async(textRecognitionWorkQueue, ^{
        resultingText = @"";
        for (int pageIndex=0; pageIndex<scan.pageCount; pageIndex++) {
            struct CGImage *image = [scan imageOfPageAtIndex:pageIndex].CGImage;
            NSDictionary *d = [[NSDictionary alloc] init];
            VNImageRequestHandler *requestHandler = [[VNImageRequestHandler alloc] initWithCGImage:image options:d];
            NSError *error = nil;
            @try {
                [requestHandler performRequests:requests error:&error];
            }
            @catch (NSException *exception) {
                NSLog(@"%@", exception);
            }
            @finally {
                NSLog(@"Condi??o final");
            }
        }
        dispatch_async(dispatch_get_main_queue(), ^{
            self->textView.text = resultingText;
            [self->activityIndicator stopAnimating];
            self->activityIndicator.hidden = YES;
        });
    });
}


@end

see also

iOS13扫描证件&银行卡信息识别;身份证识别 (正反) ;矩形边缘识别 ;自定义证件相机 (含demo源码)

————————————————
版权声明:本文为CSDN博主「#公众号:iOS逆向」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:[ https://blog.csdn.net/z929118967/article/details/111197419]( https://blog.csdn.net/z929118967/article/details/111197419
)
目录
相关文章
|
3天前
|
文字识别 算法 Java
印刷文字识别产品使用合集之证件规格不统一,可以用全文识别吗
印刷文字识别(Optical Character Recognition, OCR)技术能够将图片、扫描文档或 PDF 中的印刷文字转化为可编辑和可搜索的数据。这项技术广泛应用于多个领域,以提高工作效率、促进信息数字化。以下是一些印刷文字识别产品使用的典型场景合集。
7 0
|
4天前
|
文字识别 API 开发工具
印刷文字识别产品使用合集之API接口无法调用如何解决
印刷文字识别(Optical Character Recognition, OCR)技术能够将图片、扫描文档或 PDF 中的印刷文字转化为可编辑和可搜索的数据。这项技术广泛应用于多个领域,以提高工作效率、促进信息数字化。以下是一些印刷文字识别产品使用的典型场景合集。
25 6
|
4天前
|
JSON 文字识别 算法
C# 通过阿里云 API 实现企业营业执照OCR识别
C# 通过阿里云 API 实现企业营业执照OCR识别
|
4天前
|
文字识别 安全 API
阿里云文字识别OCR的发票凭证识别功能可以通过API接口的形式进行调用
【2月更文挑战第5天】阿里云文字识别OCR的发票凭证识别功能可以通过API接口的形式进行调用
108 5
|
4天前
|
JSON 文字识别 API
文字识别OCR服务通常提供了一种API接口
【2月更文挑战第5天】文字识别OCR服务通常提供了一种API接口
48 4
|
4天前
|
缓存 JSON API
IOS网络编程:什么是 RESTful API?如何使用 RESTful 风格设计 API?
IOS网络编程:什么是 RESTful API?如何使用 RESTful 风格设计 API?
56 3
|
10月前
|
文字识别 API 语音技术
百度语音技术:文字识别转化为语音在线API和PHP-SDK开发文档的学习
百度语音技术:文字识别转化为语音在线API和PHP-SDK开发文档的学习
66 0
|
4天前
|
文字识别 JavaScript API
Vue实现:Ctrl+V粘贴文字图片截图,调用第三方API文字识别OCR内容并进行内容分割识别填充。
Vue实现:Ctrl+V粘贴文字图片截图,调用第三方API文字识别OCR内容并进行内容分割识别填充。
Vue实现:Ctrl+V粘贴文字图片截图,调用第三方API文字识别OCR内容并进行内容分割识别填充。
|
8月前
|
API
15-iOS之Runtime常用API以及使用
15-iOS之Runtime常用API以及使用
56 0
|
10月前
|
存储 SQL 关系型数据库
PG通过表访问方法API如何执行顺序扫描
PG通过表访问方法API如何执行顺序扫描
93 0

热门文章

最新文章

http://www.vxiaotou.com