IpadOS 17.4: делегат AVCaptureMetadataOutput не вызывается (qrscanner)IOS

Программируем под IOS
Ответить
Гость
 IpadOS 17.4: делегат AVCaptureMetadataOutput не вызывается (qrscanner)

Сообщение Гость »


У меня возникла проблема со сканером QR-кода на моем iPad 7-го поколения под управлением ipadOS 17.4. Хотя сканер работает нормально на последнем iPad 10-го поколения (также на ipadOS 17.4), он вообще не работает на iPad 7-го поколения (ipadOS 17.4) на моем устройстве.
Это не так. Возможно, эта проблема затрагивает другие модели iPad, но на данный момент я протестировал только эти две модели.
Кто-нибудь еще сталкивался с подобными проблемами со сканером QR-кода? Мы будем очень признательны за любые предложения по устранению неполадок или потенциальному исправлению.
Список опробованных устройств:
  • ipad 6Gen: КО
  • ipad 7Gen: KO
  • iPad 10Gen: ОК
  • iPhone 15: ОК
Небольшое обновление
Я пытался загрузить проект AVCam из официальной документации Apple, и я подтверждаю, что это не работает даже в их Swift проекте. Но распознавание лиц работает
MetadataOutput

Код: Выделить всё

captureObject = [[AVCaptureMetadataOutput alloc]init];
objectQueue =       dispatch_queue_create("VideoDataOutputQueue", NULL);//dispatch_queue_create("newQueue", NULL);
[captureObject setMetadataObjectsDelegate:self queue:objectQueue];

Я пытался использовать main_queue для создания диспетчерской_очереди, но не
делегирования:

Код: Выделить всё

objectQueue =       dispatch_queue_create("VideoDataOutputQueue", NULL);//dispatch_queue_create("newQueue", dispatch_get_main_queue());
Проблема в том, что метод не делегируется и не запускается:

Код: Выделить всё

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

if (metadataObjects != nil && metadataObjects.count > 0) {

NSLog(@"%@", [metadataObjects objectAtIndex:0]);

}
}
}
ВРЕМЕННОЕ РЕШЕНИЕ
На данный момент не существует решения, но я использовал обходное решение, используя AVCaptureVideoDataOutputSampleBufferDelegate.
Затем используйте следующий вывод:

Код: Выделить всё

self.videoDataOutput = [[AVCaptureVideoDataOutput alloc] init];
[self.videoDataOutput setSampleBufferDelegate:self queue:dispatchQueue];
if ([_captureSession canAddOutput:self.videoDataOutput]) {
[_captureSession addOutput:self.videoDataOutput];
}
Затем используя метод делегата:

Код: Выделить всё

- (void)captureOutput:(AVCaptureOutput *)output didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection {
CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
if (imageBuffer == NULL) {
return;
}
CIImage *ciImage = [CIImage imageWithCVImageBuffer:imageBuffer];
[self detectQRCode:ciImage];
}

-(void)detectQRCode:(CIImage *)image {
NSDictionary* options;
CIContext* context = [CIContext context];
options = @{ CIDetectorAccuracy : CIDetectorAccuracyHigh };
CIDetector* qrDetector = [CIDetector detectorOfType:CIDetectorTypeQRCode
context:context
options:options];
//    if ([[image properties] valueForKey:(NSString*) kCGImagePropertyOrientation] == nil) {
//        options = @{ CIDetectorImageOrientation : @1};
//    } else {
//        options = @{ CIDetectorImageOrientation : [[image properties] valueForKey:(NSString*) kCGImagePropertyOrientation]};
//    }

NSArray * features = [qrDetector featuresInImage:image options:options];

if (features == nil || [features count] == 0) {
return;
}
CIQRCodeFeature *metadataObj = [features firstObject];
NSString *qrString = [NSString  stringWithString:metadataObj.messageString];
NSLog(@"feature: %@",qrString);
}

Current solution : In the meantime, as a precaution, we recommend that users do not upgrade to iOS 17.4.


Источник: https://stackoverflow.com/questions/781 ... -qrscanner
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»