我认为我的问题与编程本身没有直接关系,看起来更像是研究。但也许有人能在这里提出建议。
我有一个应用程序的想法,当用户拍摄一张照片,应用程序将分析它,并削减除所需的对象(例如一个小片),并将它保存在一个单独的图像。昨天这是一项非常困难的任务,因为开发人员应该创建相当好的神经网络并对其进行教育。但是在苹果公司发布了带有真正深度相机的iPhone X之后,其中一半的问题就可以解决了。根据我的理解,开发人员可以更容易地移除背景,因为iPhone将知道背景位置。
因此,只剩下几个问题:
iPhone X用真正的深度相机拍摄的照片的格式是什么?是否有可能建立神经网络来利用图片中关于深度的信息?
我读过关于CoreML的文章,尝试过一些例子,但对我来说还不清楚--如何用导入CoreML的外部神经网络来实现以下行为:
如有任何建议,将不胜感激。
发布于 2017-11-03 13:18:43
好的,您的问题实际上与编程直接相关:)
Ad格式是HEIF,但是您可以通过iOS app访问图像的数据(如果您开发了iOS应用程序),因此您可以轻松地获得位图作为CVPixelBuffer的信息。
广告II. 1.神经网络获取图像作为输入数据。
如前所述,您希望首先获得位图,因此创建一个CVPixelBuffer。例如,查看这个帖子。然后使用CoreML API。您想要使用MLFeatureProvider协议。一个符合的对象是将带有MLFeatureValue的向量数据放在您选择的密钥名下(比如"pixelData")。
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上创建。
let imageFeatureValue = MLFeatureValue(pixelBuffer: yourPixelBuffer)
let featureProvider = YourImageFeatureProvider(imageFeatureValue: imageFeatureValue)请记住,在此操作之前,要裁剪/缩放图像,以便您的网络得到一个适当大小的向量。
在您的prediction模型上使用CoreML函数。
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
}这取决于您的模型以及您是否正确导入它。在这样的假设下,您可以通过检查返回的MLFeatureProvider来访问输出数据(请记住,这是一个协议,因此您必须实现另一个类似于我在步骤1中为您创建的类似于YourOutputFeatureProvider的输出数据),在那里您有一个位图和您的NN输出的其余数据。
只需反转步骤1,即从MLFeatureValue -> CVPixelBuffer -> UIImage。关于这方面有很多问题,所以我不会重复回答。
如果你是初学者,不要指望一夜之间就会有结果,但这条路就在这里。对于一个有经验的开发人员,我估计这项工作需要几个小时才能完成(加上模型学习时间并将其移植到CoreML)。
除了CoreML (也许您发现您的模型太复杂了,它无法将其移植到CoreML)之外,还可以查看马特希斯霍勒曼人‘github (关于将模型移植到iOS的不同方法的非常好的资源)。他也在这附近,在这个问题上知道很多。
https://stackoverflow.com/questions/47089297
复制相似问题