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); });
}
}
是的,我认为是。所以我想和Vuforia一样。如何得到相同的看法。我想在xcode中获得它。 – ChokWah