Ios iphonex真深度图像分析与CoreML

Ios iphonex真深度图像分析与CoreML,ios,neural-network,iphone-x,coreml,Ios,Neural Network,Iphone X,Coreml,我知道我的问题与编程本身没有直接关系,看起来更像是研究。但也许有人可以在这里提出建议 我有一个应用程序的想法,当用户拍摄一张照片时,应用程序将分析它并剪切除所需对象(例如一件衣服)以外的所有东西,并将其保存在单独的图像中。昨天,这是一项非常困难的任务,因为开发人员应该创建相当好的神经网络并对其进行教育。但在苹果发布了带有真深度摄像头的iPhoneX之后,一半的问题都可以解决。据我所知,开发人员可以更容易地删除背景,因为iPhone将知道背景的位置 所以只剩下几个问题: I.iPhone X使用真

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

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

所以只剩下几个问题:

I.iPhone X使用真深度相机拍摄的照片的格式是什么?有没有可能创建一个神经网络,能够利用图片中的深度信息

二,。我读过关于CoreML的书,尝试过一些例子,但我仍然不清楚-如何通过导入CoreML的外部神经网络实现以下行为:

  • 神经网络获取图像作为输入数据

  • NN分析它,在图像上找到所需的对象

  • NN不仅返回确定的对象类型,还返回裁剪对象本身或应裁剪区域的坐标/像素数组

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


  • 任何建议都将不胜感激。

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

    Ad I.格式是,但您可以通过iOS API访问图像数据(如果您开发iPhone应用程序),因此您可以通过
    CVPixelBuffer
    轻松获取位图信息

    公元二年。 1.神经网络获取图像作为输入数据

    如上所述,您希望首先获取位图,因此创建一个
    CVPixelBuffer
    。看看这个例子。然后使用coremlapi。您想使用协议。符合的对象是将矢量数据放在您选择的关键字名称下(如“pixelData”)

    请记住在执行此操作之前裁剪/缩放图像,以便为网络提供适当大小的矢量

  • NN分析它,在图像上找到所需的对象
  • 在CoreML模型上使用
    prediction
    函数

    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
    }
    
  • NN不仅返回确定的对象类型,还返回裁剪对象本身或应裁剪区域的坐标/像素数组
  • 这取决于您的模型以及您是否正确导入了它。在您这样做的假设下,您可以通过检查返回的
    MLFeatureProvider
    (记住这是一个协议,因此您必须实现另一个类似于我在步骤1中为您创建的协议,smth类似于
    YourOutputFeatureProvider
    )来访问输出数据,在那里您有一个位图和NN输出的其余数据

  • 应用程序从NN获取所有必需的信息,并执行必要的操作来裁剪图像并将其保存到另一个文件或其他任何文件中
  • 只需颠倒步骤1,从
    MLFeatureValue
    ->
    CVPixelBuffer
    ->
    UIImage
    。关于这个问题有很多问题,所以我不会重复回答

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


    除了CoreML(可能您发现您的模型太复杂,无法将其移植到CoreML)之外,请查看(关于将模型移植到iOS的不同方法的非常好的资源)。他也在附近,对这门学科了解很多。

    你好。是的,我是初学者。非常感谢!非常感谢你的解释!所以现在我不仅有了想法,还有一个听起来像计划的东西。但是真正的深度相机只在正面有哦。。。不知道我怎么会错过它。。谢谢
    let imageFeatureValue = MLFeatureValue(pixelBuffer: yourPixelBuffer)
    let featureProvider = YourImageFeatureProvider(imageFeatureValue: imageFeatureValue)
    
    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
    }