首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IPhone X真深度图像分析与CoreML

IPhone X真深度图像分析与CoreML
EN

Stack Overflow用户
提问于 2017-11-03 05:54:10
回答 1查看 1.1K关注 0票数 2

我认为我的问题与编程本身没有直接关系,看起来更像是研究。但也许有人能在这里提出建议。

我有一个应用程序的想法,当用户拍摄一张照片,应用程序将分析它,并削减除所需的对象(例如一个小片),并将它保存在一个单独的图像。昨天这是一项非常困难的任务,因为开发人员应该创建相当好的神经网络并对其进行教育。但是在苹果公司发布了带有真正深度相机的iPhone X之后,其中一半的问题就可以解决了。根据我的理解,开发人员可以更容易地移除背景,因为iPhone将知道背景位置。

因此,只剩下几个问题:

iPhone X用真正的深度相机拍摄的照片的格式是什么?是否有可能建立神经网络来利用图片中关于深度的信息?

我读过关于CoreML的文章,尝试过一些例子,但对我来说还不清楚--如何用导入CoreML的外部神经网络来实现以下行为:

  1. 神经网络获取图像作为输入数据。
  2. NN对其进行分析,在图像上找到所需的对象。
  3. NN不仅返回确定的对象类型,还返回裁剪的对象本身或应该裁剪的区域的坐标/像素数组。
  4. 应用程序从NN获取所有必需的信息,并执行必要的操作来裁剪图像并将其保存到其他文件或其他文件中。

如有任何建议,将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-03 13:18:43

好的,您的问题实际上与编程直接相关:)

Ad格式是HEIF,但是您可以通过iOS app访问图像的数据(如果您开发了iOS应用程序),因此您可以轻松地获得位图作为CVPixelBuffer的信息。

广告II. 1.神经网络获取图像作为输入数据。

如前所述,您希望首先获得位图,因此创建一个CVPixelBuffer。例如,查看这个帖子。然后使用CoreML API。您想要使用MLFeatureProvider协议。一个符合的对象是将带有MLFeatureValue的向量数据放在您选择的密钥名下(比如"pixelData")。

代码语言:javascript
复制
import CoreML

class YourImageFeatureProvider: MLFeatureProvider {

    let imageFeatureValue: MLFeatureValue
    var featureNames: Set<String> = []

    init(with imageFeatureValue: MLFeatureValue) {
        featureNames.insert("pixelData")
        self.imageFeatureValue = imageFeatureValue
    }

    func featureValue(for featureName: String) -> MLFeatureValue? {
        guard featureName == "pixelData" else {
            return nil
        }
        return imageFeatureValue
    }
}

然后像这样使用它,特性值将使用initWithPixelBuffer初始化器在MLFeatureValue上创建。

代码语言:javascript
复制
let imageFeatureValue = MLFeatureValue(pixelBuffer: yourPixelBuffer)
let featureProvider = YourImageFeatureProvider(imageFeatureValue: imageFeatureValue)

请记住,在此操作之前,要裁剪/缩放图像,以便您的网络得到一个适当大小的向量。

  1. NN对其进行分析,在图像上找到所需的对象。

在您的prediction模型上使用CoreML函数。

代码语言:javascript
复制
do {

    let outputFeatureProvider = try yourModel.prediction(from: featureProvider)

    //success! your output feature provider has your data
} catch {

    //your model failed to predict, check the error
}
  1. NN不仅返回确定的对象类型,还返回裁剪的对象本身或应该裁剪的区域的坐标/像素数组。

这取决于您的模型以及您是否正确导入它。在这样的假设下,您可以通过检查返回的MLFeatureProvider来访问输出数据(请记住,这是一个协议,因此您必须实现另一个类似于我在步骤1中为您创建的类似于YourOutputFeatureProvider的输出数据),在那里您有一个位图和您的NN输出的其余数据。

  1. 应用程序从NN获取所有必需的信息,并执行必要的操作来裁剪图像并将其保存到其他文件或其他文件中。

只需反转步骤1,即从MLFeatureValue -> CVPixelBuffer -> UIImage。关于这方面有很多问题,所以我不会重复回答。

如果你是初学者,不要指望一夜之间就会有结果,但这条路就在这里。对于一个有经验的开发人员,我估计这项工作需要几个小时才能完成(加上模型学习时间并将其移植到CoreML)。

除了CoreML (也许您发现您的模型太复杂了,它无法将其移植到CoreML)之外,还可以查看马特希斯霍勒曼人github (关于将模型移植到iOS的不同方法的非常好的资源)。他也在这附近,在这个问题上知道很多。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47089297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档