2017-03-29 28 views
0

vuforia时读取QR码这代码读取QR码的iOS AVFoundation使用AVCaptureDeviceInput

- (instancetype)init { 
    if (self = [super init]) { 

     if (self.session == nil) 
      self.session = [[AVCaptureSession alloc] init]; 

     //device 
     if (self.device == nil) 
      self.device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 

     //output 
     if (self.output == nil) 
      self.output = [[AVCaptureMetadataOutput alloc] init]; 
    } 
    return self; 
} 

- (void)creatScanQR{ 

    NSError *error = nil; 
    //input 
    if (self.input == nil) 
     self.input = [AVCaptureDeviceInput deviceInputWithDevice:self.device error:&error]; 

    if(self.input) { 
     [self.session addInput:self.input]; 
    } else { 
     NSLog(@"%@", error); 
     return; 
    } 

    [self.session addOutput:self.output]; 
    [self.output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]]; 
    [self.output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()]; 
    [self.session startRunning]; 
} 

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection { 

    for (AVMetadataMachineReadableCodeObject *metadata in metadataObjects) { 
     if ([metadata.type isEqualToString:AVMetadataObjectTypeQRCode]) { 

      NSLog(@"======%@=======",metadata.stringValue); 
     } 
    } 
} 

它工作在本机应用程序。但我的应用程序是由Unity构建的,它使用了Vuforia,当我使用AVCapture阅读QRcode时,vuforia是黑屏。因为相机只有Voforia使用的相机。我如何使用AVCaptureInput来读取QR码和vuforia仍在工作?

我的planB得到vuforia视图,用vuforia视图写一个图片,用iOS CIDetector读取qrcode,但是我得到了一个nil image.why?

UIView *view = UnityGetGLView(); 
    UIGraphicsBeginImageContext(view.bounds.size); 
    [view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *image= UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    NSData *imageData = UIImagePNGRepresentation(image); 
    CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:[CIContext contextWithOptions:nil] options:@{CIDetectorAccuracy:CIDetectorAccuracyLow}]; 
    NSArray *features = [detector featuresInImage:[CIImage imageWithData:imageData]]; 
    for (CIFeature *feature in features) { 
     NSLog(@"%@",feature.type); 
     if ([feature isKindOfClass:[CIQRCodeFeature class]]) { 
      NSLog(@"?????? %@ ????? ", ((CIQRCodeFeature *)feature).messageString); 
      dispatch_sync(queue, ^{ dispatch_suspend(timer); }); 
     } 
    } 

回答

0

听起来像你的问题是由使用相机的竞争造成的。唯一的解决方案可能是在vuforia和QRCode阅读中使用完全相同的视图,即解决竞争问题,并在vuforia和QRCode阅读之间共享相机图像。

+0

是的,我认为是。所以我想和Vuforia一样。如何得到相同的看法。我想在xcode中获得它。 – ChokWah

0

我为B计划 使用GCD定时器一些变化每秒钟得到rootview形象,快照视图的方法是再

- (BOOL)drawViewHierarchyInRect:(CGRect)rect afterScreenUpdates:(BOOL)afterUpdates NS_AVAILABLE_IOS(7_0); 

。然后CIDetector读取QR码,从image.It works.It外观好。

我不知道它有多少错误,但是没有办法。如果我不使用计划b,老板推我。他希望Vuforia可以在同一时间读取qrcode,并且很快就不会缓慢。所以问题暂时解决了。如果你有更好的主意,爱听。