如何在ios11上使用视觉框架的Object tracking API?

Posted

技术标签:

【中文标题】如何在ios11上使用视觉框架的Object tracking API?【英文标题】:How can i use the Object tracking API of vision framework on ios11? 【发布时间】:2017-11-10 01:30:15 【问题描述】:
// init bounding
CGRect rect = CGRectMake(0, 0, 0.3, 0.3);
VNSequenceRequestHandler* reqImages = [[VNSequenceRequestHandler alloc] init];
VNRectangleObservation* ObserveRect = [VNRectangleObservation observationWithBoundingBox:rect];
VNTrackRectangleRequest* reqRect = [[VNTrackRectangleRequest alloc] initWithRectangleObservation:ObserveRect];
NSArray<VNRequest *>* requests = [NSArray arrayWithObjects:reqRect, nil];
BOOL bsucc = [reqImages performRequests:requests onCGImage:img.CGImage error:&error];

// get tracking bounding
VNDetectRectanglesRequest* reqRectTrack = [VNDetectRectanglesRequest new];
NSArray<VNRequest *>* requestsTrack = [NSArray arrayWithObjects:reqRectTrack, nil];
[reqImages performRequests:requestsTrack onCGImage:img.CGImage error:&error];

VNRectangleObservation* Observe = [reqRectTrack.results firstObject];
CGRect boundingBox = Observe.boundingBox;

为什么boundingBox的值不正确?

如何找到ios11的vision.framework的demo?

【问题讨论】:

我遇到了和你一样的问题,我找到了 Vision Keynote 中使用的示例,他们确实调整了 boundingBox 值的大小。但不是在我这边工作。这是示例:developer.apple.com/sample-code/wwdc/2017/… 如果您找到解决方案,请告诉我 我在 Keynote 中也找到了演示, ' // 创建请求处理程序 let requestHandler = VNSequenceRequestHandler() // 从观察开始跟踪 let观察 = detectionRequest.results as! [VNDetectedObjectObservation] let objectsToTrack =observations.map VNTrackObjectRequest(detectedObjectObservation: $0) // 运行请求 requestHandler.perform(objectsToTrack, on: pixelBuffer) // 让我们在 objectsToTrack 中查看 request 的结果,以便在 request.results 中观察! [VNDetectedObjectObservation] ' 但它不起作用。 @Alberl 你有什么从静态图像中检测物体的解决方案吗,我在将点从一个坐标系转换到另一个坐标系时遇到问题。 【参考方案1】:

这是我使用 Vision 框架的简单示例:https://github.com/artemnovichkov/iOS-11-by-Examples。我猜你对不同的坐标系有问题。注意rect转换:

cameraLayer.metadataOutputRectConverted(fromLayerRect: originalRect)

cameraLayer.layerRectConverted(fromMetadataOutputRect: transformedRect)

【讨论】:

感谢 Artem,你太棒了! :) 是否可以检测图像中的对象并将其跟踪到另一组图像中? 很遗憾,没有。 @ArtemNovichkov 感谢您的回复。我们可以通过其他方式实现本地视频,因为我无法找到将感兴趣的矩形转换为特定坐标空间的方法。 @TheiCoder 你在本地视频上找到任何对象跟踪的例子吗?【参考方案2】:

Vision Framework 跟踪对象,可在此链接中找到此演示:

https://github.com/jeffreybergier/Blog-Getting-Started-with-Vision

Blogger 在这里详细介绍了如何使演示工作,并有一个 gif 显示工作构建。

希望这就是你所追求的。

【讨论】:

谢谢卢克,你太棒了! :)

以上是关于如何在ios11上使用视觉框架的Object tracking API?的主要内容,如果未能解决你的问题,请参考以下文章

视觉上改进 iOS 11leadingSwipeActions 的异步操作

视觉框架坐标系如何转化为ARKit?

如何在 iOS 中为正在运行的视频添加动态视觉效果?

我们如何在 iOS 11 中使用 CoreML 框架进行手写检测

如何在swift中使用视觉框架从其特征点中提取外唇

如何使用 Ionic Cordova 框架和自签名证书绕过 iOS 11 中的 SSL 检查