如何为iOS AVFoundation定义自定义检测器?
问题描述:
我想从使用iPhone的相机输入中检测一些三角形图案。我发现了一些可以使用AVFoundation检测QR /条码的示例代码。主要部分似乎是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应该不是很难)。如果这种方法不可行,任何人都可以提出实现上述目标的替代方法吗?
非常感谢!
答
AVMetadataObject
没有提供执行这样的事情的钩子,除了AVAssetResourceLoader
,AVFoundation
不允许太多的扩展。
我认为你应该将你的算法转录成swift,并将其与AVCaptureVideoDataOutput
使用的捕获的CMSampleBuffer
图像进行比较。
感谢节奏快速的回应。我现在看看'CMSampleBuffer'。 – waterworld