Dan*_*iel 5 macos image-processing vision ios
在 iOS 16 中,您可以从图像中提升主体或通过移除背景来隔离主体。
您可以在这里看到它的实际效果:https://developer.apple.com/wwdc22/101?time =1101
我想知道这个功能是否也可供开发者在自己的应用程序中使用。人们或许可以训练一种机器学习模型并将其与视觉框架一起使用。
这里有一个关于如何实现这一点的例子,但是苹果的解决方案已经很好了,我不想在有捷径的情况下花时间重新发明轮子。
Apple\xe2\x80\x99sCoreML库和DeepLabV3图像分割模型就是您正在寻找的东西。
该DeepLabV3模型经过训练可以识别和分割这些项目:
VNCoreMLRequest是要使用的API CoreML。它接受一个回调函数,用于获取图像的特征,即对象VNCoreMLFeatureValueObservation。
该VNCoreMLFeatureValueObservation对象给出了图片的分割图,这正是您正在寻找的。删除背景就是掩盖这些片段之一。
这里有一份完整的、写得很好的分步指南。
\n从该链接的主要部分如下:
\n\n// use DeepLabV3\nfunc runVisionRequest() {\n \n guard let model = try? VNCoreMLModel(for: DeepLabV3(configuration: .init()).model)\n else { return }\n \n let request = VNCoreMLRequest(model: model, completionHandler: visionRequestDidComplete)\n request.imageCropAndScaleOption = .scaleFill\n DispatchQueue.global().async {\n\n let handler = VNImageRequestHandler(cgImage: inputImage.cgImage!, options: [:])\n \n do {\n try handler.perform([request])\n }catch {\n print(error)\n }\n }\n }\n\n// extract the segmentation map and convert to an image using a third party library\n\nfunc visionRequestDidComplete(request: VNRequest, error: Error?) {\n DispatchQueue.main.async {\n if let observations = request.results as? [VNCoreMLFeatureValueObservation],\n let segmentationmap = observations.first?.featureValue.multiArrayValue {\n \n let segmentationMask = segmentationmap.image(min: 0, max: 1)\n\n self.outputImage = segmentationMask!.resizedImage(for: self.inputImage.size)!\n\n maskInputImage()\n }\n }\n }\n\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1594 次 |
| 最近记录: |