Ios13 在iOS 13中跟踪多个对象

Ios13 在iOS 13中跟踪多个对象,ios13,vision,video-tracking,Ios13,Vision,Video Tracking,我的应用程序使用苹果公司的示例代码,使用Vision跟踪视频中的多个对象(在我的例子中,它跟踪举重练习期间杠铃的路径),但更新到iOS 13后,视频无法正确显示。不再像以前那样填满屏幕,现在视频被裁剪,你只能看到一小部分。我已经和苹果的技术支持人员谈过了,他们承认这个错误,但他们的计划中没有修复 最让我头疼的是,a)横向视频正常工作,但不是纵向视频;b)错误只发生在真实设备中,而不是模拟器中。请参阅随附的代码部分,该部分用于根据视频的比例(横向或纵向)显示视频 private func scal

我的应用程序使用苹果公司的示例代码,使用Vision跟踪视频中的多个对象(在我的例子中,它跟踪举重练习期间杠铃的路径),但更新到iOS 13后,视频无法正确显示。不再像以前那样填满屏幕,现在视频被裁剪,你只能看到一小部分。我已经和苹果的技术支持人员谈过了,他们承认这个错误,但他们的计划中没有修复

最让我头疼的是,a)横向视频正常工作,但不是纵向视频;b)错误只发生在真实设备中,而不是模拟器中。请参阅随附的代码部分,该部分用于根据视频的比例(横向或纵向)显示视频

private func scaleImage(到viewSize:CGSize)->UIImage?{
保护self.image!=nil&&self.image.size!=CGSize.zero其他{
归零
}
self.imageAreaRect=CGRect.zero
//有两种可能的情况可以将self.image完全安装到ImageTrackingView区域中:

//选项1)image.width=view.width==>image.height image.width在跟踪苹果技术支持几周后,他们想出了一个非常简单的解决方法。基本上,你只需要通过CGImage进行转换,而不是直接从CIImage转换到UIImage

这是旧代码(正如您在苹果文档的当前示例中所看到的)

这就是更正

if let frame = frame {
            let ciImage = CIImage(cvPixelBuffer: frame).transformed(by: transform)
            guard let cgImage = CIContext.init().createCGImage(ciImage, from: ciImage.extent) else {
                return
            }
            let uiImage = UIImage(cgImage: cgImage)
            self.trackingView.image = uiImage
        }

希望这有帮助!

在跟踪苹果技术支持几周后,他们想出了一个非常简单的解决办法。基本上,你只需要通过CGImage进行转换,而不是直接从CIImage转换到UIImage

这是旧代码(正如您在苹果文档的当前示例中所看到的)

这就是更正

if let frame = frame {
            let ciImage = CIImage(cvPixelBuffer: frame).transformed(by: transform)
            guard let cgImage = CIContext.init().createCGImage(ciImage, from: ciImage.extent) else {
                return
            }
            let uiImage = UIImage(cgImage: cgImage)
            self.trackingView.image = uiImage
        }

希望这能有所帮助!

顺便说一句,我发现iOS 13中的对象跟踪功能几乎坏了……几乎无法正常工作。对于我在iOS 12中实现的功能,我一直获得0.8-0.99的跟踪置信度,而在iOS 13上,置信度从未超过0.15。谢谢你的反馈,安迪。我没有遇到过这个问题:我的应用程序基本上可以像以前一样跟踪所有东西。如果你像我一样使用苹果的示例代码,你有没有尝试过我在自我回答中提供的解决方法?作为补充,我发现iOS 13中的对象跟踪功能几乎被破坏了……几乎无法工作。对于我在iOS 12中实现的功能,我的跟踪信心为0.8-0.99 constanThy,iOS 13上的置信度从未超过0.15。谢谢你的反馈,安迪。我没有遇到过这个问题:我的应用程序基本上像以前一样跟踪所有内容。如果你像我一样使用苹果的示例代码,你是否尝试过我在自我回答中提供的解决方法?
if let frame = frame {
            let ciImage = CIImage(cvPixelBuffer: frame).transformed(by: transform)
            guard let cgImage = CIContext.init().createCGImage(ciImage, from: ciImage.extent) else {
                return
            }
            let uiImage = UIImage(cgImage: cgImage)
            self.trackingView.image = uiImage
        }