如何使用 CoreML 处理来自相机的非方形帧?

Posted

技术标签:

【中文标题】如何使用 CoreML 处理来自相机的非方形帧?【英文标题】:How to process non-square frames from camera with CoreML? 【发布时间】:2019-06-30 18:21:28 【问题描述】:

我在 Keras 中训练了一个神经网络来检测图像上的关键点。网络需要形状 (224, 224, 3) 的图像。我希望能够使用 CoreML 在 Swift 中检测图像上的关键点,但不确定如何在需要方形图像的神经网络中使用非方形形状。关于适当的预处理步骤的任何想法? Vision API 中是否内置了一些东西来帮助解决这个问题?我可以将图像压缩成正方形,但我想这会与预测的 (X,y) 关键点对混淆。

【问题讨论】:

【参考方案1】:

这取决于。原始模型是如何训练的?如果它还接受了压缩图像的训练,那么在推理过程中压缩它们就可以了。

如果不是,并且您想保留图像的纵横比,您可能需要将VNCoreMLRequest 对象中的imageCropAndScaleOption 设置为其他模式之一。

无论如何,您都必须将预测的关键点坐标转换回您正在显示图像的任何尺寸。当图像被压扁时这是最简单的(只需乘以宽度和高度),但在使用时会有点棘手其他imageCropAndScaleOptions。

【讨论】:

谢谢,马蒂斯。该网络在裁剪图像上进行了训练,因此听起来我将不得不使用 imageCropAndScaleOption。有什么方法可以在模型处理裁剪的图像之前查看它,以便我可以对关键点的缩放过程进行逆向工程? 您可以创建一个简单的 Core ML 模型,它只输出输入图像。这让您可以看到不同 imageCropAndScaleOption 设置和任何其他预处理选项的效果。这是一个执行此操作的示例项目(来自我的 Core ML 书):github.com/hollance/coreml-survival-guide/tree/master/… 非常聪明。谢谢!

以上是关于如何使用 CoreML 处理来自相机的非方形帧?的主要内容,如果未能解决你的问题,请参考以下文章

iOS:按钮的非方形点击区域

如何在使用 Android 移动视觉库时处理单个相机帧

如何对相机胶卷中的照片进行方形切割?

在 iOS 相机中启动定期任务以使用帧数据的最佳方法是啥?

使用平台通道/CoreML 在实时摄像机预览的每一帧上运行计算机视觉模型?

使用 AVAssetWriter 和 CoreML 的相机上的 FPS 不一致