2016-11-03 1 views
-4

La question semble être un peu abstraite mais en général je dois développer une application de lecture de codes-barres capable de détecter plusieurs codes-barres (jusqu'à 3) en même temps temps. Quelqu'un sait-il un bon api pour la tâche? (Swift ou objectif C est OK). Toute aide est très appréciable! Merci. J'ai déjà une application avec Zxing API mais semble ne pas avoir une option pour détecter plusieurs codes à barres.API de lecture de codes à barres IOS capable de lire 3 codes à barres en même temps

Répondre

1

Vous avez besoin de AVFoundation! AVFoundation peut scanner les codes à barres.

Intérêt principal de cette fonction:

#pragma mark - AVCaptureMetadataOutputObjectsDelegate methods 
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection { 
//THIS YOU CAN USE ARRAY OF AVMetadataObjectType 
    NSString *supportedBarcodeType = AVMetadataObjectTypeCode128Code; 

    for (AVMetadataObject *barcodeMetadata in metadataObjects) { 
     if ([barcodeMetadata.type isEqualToString:supportedBarcodeType]) { 
      AVMetadataMachineReadableCodeObject *barcodeObject = (AVMetadataMachineReadableCodeObject *)[self.captureLayer transformedMetadataObjectForMetadataObject:barcodeMetadata]; 
     //barcode is FIND! 
      NSString *capturedBarcode = [barcodeObject stringValue]; 

      return; 
     } 
    } 
} 

Méthode de configuration:

static char * const metadataOutputQueue = "metadataOutputQueue"; 

- (void)configureSessionWithError:(NSError **)error {  

    self.captureSession = [[AVCaptureSession alloc] init]; 

    NSError *inputError = nil; 
    AVCaptureDevice *captureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 
    AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:captureDevice error:&inputError]; 

    if (nil != inputError || nil == input) { 
     *error = inputError; 
     return; 
    } 

    [self.captureSession addInput:input]; 

    AVCaptureMetadataOutput *captureMetadataOutput = [[AVCaptureMetadataOutput alloc] init]; 
    [self.captureSession addOutput:captureMetadataOutput]; 

    dispatch_queue_t dispatchQueue = dispatch_queue_create(metadataOutputQueue, NULL); 
    [captureMetadataOutput setMetadataObjectsDelegate:self queue:dispatchQueue]; 
//THIS YOU CAN ADD ARRAY OF AVMetadataObjectType FOR DETECTING BARCODES 
    [captureMetadataOutput setMetadataObjectTypes:@[AVMetadataObjectTypeCode128Code]]; 

    self.captureLayer = [AVCaptureVideoPreviewLayer layerWithSession:self.captureSession]; 
    [self.captureLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill]; 
    [self.captureLayer setFrame:self.cameraPreviewView.layer.bounds]; 

    [self.cameraPreviewView.layer addSublayer:self.captureLayer]; 

    self.sessionConfigured = YES; 
} 

Note technique this! Tutoriel vous pouvez trouver sur this site

+0

Merci beaucoup pour votre aide. Je lis le didacticiel et le code source. Mais 1 problème à résoudre est la capacité de lire plusieurs codes à barres en même temps (jusqu'à 3) (3 codes à barres sur 1 ligne). Y a-t-il un moyen d'y parvenir? –

+0

Dans captureOutput: didOutputMetadataObject: je pense que vous pouvez attraper 3 codes à barres. Mais vous devriez supprimer le retour; après le premier code à barres sera scanné. Et besoin de gérer d'autres scénarios pour d'autres codes à barres. –

+0

semble que le tutoriel ne peut attraper que QR. comment pouvons-nous attraper à la fois QR et Barcode? (1D et 2D ...)? –