2017-08-29 10 views
0

QRコードから検出されたデータを表示したアプリケーションを開発していますが、QRコードが検出されないという問題があります。私はこのコードを使用しました:QRイメージがCIDetectorによって検出されない

NSDictionary *detectorOptions = @{ CIDetectorAccuracy : CIDetectorAccuracyHigh }; 
       CIDetector *faceDetector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:nil options:detectorOptions]; 
       NSArray *features = [faceDetector featuresInImage:chosenImage.CIImage]; 
       CIQRCodeFeature *faceFeature; 
       for(faceFeature in features) 
       { 
        qrcodedetected = YES; 
        self.decodedstr = [NSString stringWithFormat:@"%@",faceFeature.messageString]; 
        break; 
       } 

私は多くを検索しましたが、成功しませんでした。私はAppleのデフォルトフォームからこのコードを使用しました。毎回結果が得られない。誰かがこれに関する解決策を持っている場合は、私と共有してください。それは高く評価されるだろう。前もって感謝します。

+0

なぜQRコード読み取りにAVCaptureDevice.defaultDeviceとAVCaptureSessionを使用しないのですか? – ObranS

+0

@ ObranS:私はそれをする方法を知らない。これに関するコードはありますか?お疲れ様でした。 – Vishal

+0

以下に、あなたが助けてくれることを願っています – ObranS

答えて

0
// initialize   
AVCaptureDevice *captureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 
AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:captureDevice error:&error]; 

// create session 
AVCaptureMetadataOutput *captureMetadataOutput = [[AVCaptureMetadataOutput alloc] init]; 
dispatch_queue_t dispatchQueue = dispatch_queue_create("QRCodeQueue", NULL); 
[captureMetadataOutput setMetadataObjectsDelegate:self queue:dispatchQueue]; 
[captureMetadataOutput setMetadataObjectTypes:[captureMetadataOutput availableMetadataObjectTypes]]; 
[self.captureSession addOutput:captureMetadataOutput]; 

// add camera view layer 
AVCaptureVideoPreviewLayer *captureLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:self.captureSession]; 
[captureLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill]; 
[captureLayer setFrame:self.view.layer.bounds]; 
[self.view.layer addSublayer:captureLayer]; 

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

    // Specify the barcodes you want to read here: 
    NSArray *supportedBarcodeTypes = @[AVMetadataObjectTypeUPCECode, AVMetadataObjectTypeCode39Code, AVMetadataObjectTypeCode39Mod43Code, AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode93Code, AVMetadataObjectTypeCode128Code, AVMetadataObjectTypePDF417Code, AVMetadataObjectTypeQRCode, AVMetadataObjectTypeAztecCode]; 

    for (AVMetadataObject *barcodeMetadata in metadataObjects) { 
     for (NSString *supportedBarcode in supportedBarcodeTypes) { 
     if ([supportedBarcode isEqualToString:barcodeMetadata.type]) { 
      // get barcode object AVMetadataMachineReadableCodeObject 
      AVMetadataMachineReadableCodeObject *barcodeObject = (AVMetadataMachineReadableCodeObject *)[self.captureLayer transformedMetadataObjectForMetadataObject:barcodeMetadata]; 
      NSString *capturedBarcode = [barcodeObject stringValue]; 
      // do what you want... 
     } 
     } 
    } 
} 
+0

ギャラリーから取得した画像はどこに渡しますか?お疲れ様でした。 – Vishal

+0

ギャラリーからQRコードイメージを選んで、その情報をデコードしようとしました。 – Vishal

関連する問題