美文网首页
iOS扫一扫,人脸识别的坑

iOS扫一扫,人脸识别的坑

作者: 你飞跃俊杰 | 来源:发表于2023-09-20 11:39 被阅读0次

    一、没有打开权限,直接打开导致闪退
    判断权限
    `
    AVAuthorizationStatus videoAuthStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];

    **switch** (videoAuthStatus) {
    
        // 已授权
    
        **case** AVAuthorizationStatusAuthorized:
    
        {
    
            **if**(permissionGranted){
    
                permissionGranted(**YES**);
    
            }
    
        }
    
            **break**;
    
        // 未询问用户是否授权
    
        **case** AVAuthorizationStatusNotDetermined:
    
        {
    
            // 提示用户授权
    
            [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(**BOOL** granted) {
    
                **if**(permissionGranted){
    
                    permissionGranted(granted);
    
                }
    
            }];
    
        }
    
            **break**;
    
        // 用户拒绝授权或权限受限
    
        **case** AVAuthorizationStatusRestricted:
    
            
    
        **case** AVAuthorizationStatusDenied:
    
        {
    
            UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"提示" message:@"请在”设置-隐私-相机”选项中,允许访问你的相机" preferredStyle:UIAlertControllerStyleAlert];
    
            UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:**nil**];
    
            UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"设置" style:UIAlertActionStyleDefault handler:^(UIAlertAction * **_Nonnull** action) {
    
                UIApplication *app = [UIApplication sharedApplication];
    
                NSURL *settingURL = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
    
                    **if** ([app canOpenURL:settingURL]) {
    
                        [app openURL:settingURL];
    
                    }
    
    
    
    
            }];
    
            [alertController addAction:cancelAction];
    
            [alertController addAction:okAction];
    
            [controller presentViewController:alertController animated:**YES** completion:**nil**];
    
            **if**(permissionGranted){
    
                permissionGranted(**NO**);
    
            }
    
        }
    
            **break**;
    
        **default**:
    
            **break**;
    
    }
    

    `

    二、手机坏了拍不了照
    `
    if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {

        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"提示" message:@"该设备不支持拍照" preferredStyle:UIAlertControllerStyleAlert];
    
               UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleCancel handler:**nil**];
    
               [alertController addAction:cancelAction];
    
            [controller presentViewController:alertController animated:**YES** completion:**nil**];
    
        **if**(permissionGranted){
    
            permissionGranted(**NO**);
    
        }
    
            **return**;
    
    }
    

    `

    三、不支持扫码或人脸识别
    为了统一,我把可支持的类型都丢进去了(最好按需加入)
    `
    NSArray *availableMetadataObjectTypes = metadataOutput.availableMetadataObjectTypes.mutableCopy;

    **if**(![availableMetadataObjectTypes isKindOfClass:NSArray.class] || availableMetadataObjectTypes.count<1 || ![availableMetadataObjectTypes containsObject:AVMetadataObjectTypeQRCode]){
    
        [SDRCommonToolManager_SAAS showInfoWithStatus:@"该手机不支持二维码扫描"];
    
        **return**;
    
    }
    

    `

    四、你要扫码区返回人脸,你要人脸却放回扫码
    判断放回类型

    `

    • (void)captureOutput:(AVCaptureOutput *)output didOutputMetadataObjects:(NSArray< __kindof AVMetadataObject *> *)metadataObjects fromConnection:(AVCaptureConnection *)connection {
    // 获取扫一扫结果
    
    **if** (metadataObjects && metadataObjects.count > 0) {
    
        
    
        [**self** pauseScanning];
    
    
    
        NSString *stringValue = **nil**;
    
        //处理扫描结果
    
        **for** (AVMetadataMachineReadableCodeObject *metadataObject **in** metadataObjects) {
    
            **if**([metadataObject isKindOfClass:AVMetadataMachineReadableCodeObject.class]){//二维码
    
                stringValue = metadataObject.stringValue;
    
            }**else** **if** ([metadataObject isKindOfClass:AVMetadataFaceObject.class]){//人脸
    
                
    
            }
    
        }
    
        
    
        **if**(stringValue){
    
            **if** (**self**.manager.scanDelegate) {
    
                [**self**.manager.scanDelegate ly_QRCodeScanResultText:stringValue];
    
            }
    
            [**self** popBack];
    
        }
    
    }
    

    }
    `

    相关文章

      网友评论

          本文标题:iOS扫一扫,人脸识别的坑

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