2016-09-01 4 views
1

Я хочу обнаружить некоторые шаблоны треугольника с помощью ввода с iPhone. Я нашел пример кода, который может обнаружить QR/штрих-код с помощью AVFoundation. Основная часть - это класс AVMetadataMachineReadableCodeObject. Вот некоторые примеры кода из AppCoda:Как определить индивидуальный детектор для IOS AVFoundation?

func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) { 

// Check if the metadataObjects array is not nil and it contains at least one object. 
if metadataObjects == nil || metadataObjects.count == 0 { 
    qrCodeFrameView?.frame = CGRectZero 
    messageLabel.text = "No barcode/QR code is detected" 
    return 
} 

// Get the metadata object. 
let metadataObj = metadataObjects[0] as! AVMetadataMachineReadableCodeObject 

// Here we use filter method to check if the type of metadataObj is supported 
// Instead of hardcoding the AVMetadataObjectTypeQRCode, we check if the type 
// can be found in the array of supported bar codes. 
if supportedBarCodes.contains(metadataObj.type) { 
    // if metadataObj.type == AVMetadataObjectTypeQRCode { 
    // If the found metadata is equal to the QR code metadata then update the status label's text and set the bounds 
    let barCodeObject = videoPreviewLayer?.transformedMetadataObjectForMetadataObject(metadataObj) 
    qrCodeFrameView?.frame = barCodeObject!.bounds 

    if metadataObj.stringValue != nil { 
     messageLabel.text = metadataObj.stringValue 
    } 
} 

В приведенном выше коде, как только QR-код обнаружен, граничная коробка будет нарисована и текстовое поле будет обновляться. Аналогично, класс AVMetadataFaceObject используется в приложениях обнаружения лиц. Я видел из ссылки, что оба класса являются подклассами AVMetadataObject.

Мне интересно, можно ли настроить детектор треугольников, написав подкласс AVMetadataObject, скажем, мы вызываем подкласс AVMetadataTriangleObject. (У меня есть доступный алгоритм обнаружения и есть код, написанный в Matlab. Транскрипция его в swift не должна быть жесткой.) Если такой подход невозможен, может ли кто-нибудь предложить альтернативный путь для достижения вышеуказанной цели?

Большое вам спасибо!

ответ

0

AVMetadataObject не содержит крючков для реализации такой вещи, и кроме AVAssetResourceLoader, AVFoundation не допускает большого расширения.

Я думаю, что вы должны расшифровать свой алгоритм быстро и запустить его против захваченных изображений CMSampleBuffer, которые вы получаете при захвате с использованием AVCaptureVideoDataOutput.

+0

Спасибо, Ритмичный за быстрый ответ. Теперь я рассмотрю 'CMSampleBuffer'. – waterworld