在 iOS 16 中,您可以从图像中提升主体或通过删除背景来隔离主体。
您可以在这里看到它的实际效果:https://developer.apple.com/wwdc22/101?time=1101
我想知道这个功能是否也可供开发者在自己的应用程序中使用。人们可能可以训练机器学习模型并将其与Vision框架一起使用。
CoreML
库和
DeepLabV3
图像分割模型就是您正在寻找的东西。
DeepLabV3
模型经过训练可以识别和分割这些项目:
VNCoreMLRequest
是从
CoreML
使用的 API。它接受一个回调函数,用于获取图像的特征,即
VNCoreMLFeatureValueObservation
对象。
VNCoreMLFeatureValueObservation
对象给出了图片的分割图,这就是您正在寻找的。删除背景会掩盖这些片段之一。该链接的主要部分如下:
// use DeepLabV3
func runVisionRequest() {
guard let model = try? VNCoreMLModel(for: DeepLabV3(configuration: .init()).model)
else { return }
let request = VNCoreMLRequest(model: model, completionHandler: visionRequestDidComplete)
request.imageCropAndScaleOption = .scaleFill
DispatchQueue.global().async {
let handler = VNImageRequestHandler(cgImage: inputImage.cgImage!, options: [:])
do {
try handler.perform([request])
}catch {
print(error)
}
}
}
// extract the segmentation map and convert to an image using a third party library
func visionRequestDidComplete(request: VNRequest, error: Error?) {
DispatchQueue.main.async {
if let observations = request.results as? [VNCoreMLFeatureValueObservation],
let segmentationmap = observations.first?.featureValue.multiArrayValue {
let segmentationMask = segmentationmap.image(min: 0, max: 1)
self.outputImage = segmentationMask!.resizedImage(for: self.inputImage.size)!
maskInputImage()
}
}
}
在Apple Developer方面,有CreateML和CoreML项目。
https://developer.apple.com/machine-learning/
您可以从这里下载训练数据。或者您可以根据细分要求创建自己的数据或更新其中之一。这里是示例数据:
https://developer.apple.com/machine-learning/models/#text
开发者可以通过API连接到经过训练的数据(你是对的),但由于数据会非常大,大约400亿,所以建议编写一个ML项目。
还有: WWDC 示例:https://github.com/vincentspitale/SSC2022
CoreML 示例: https://blog.devgenius.io/foreground-background-separation-using-core-ml-82efbe7e7fc8