如何在XCode中应用DeepLab V3进行实时分割



实际上我是Swift和DeepLab V3的初学者。我从字面上不知道如何在Xcode上集成DeepLab。我只想在iOS中使用受张量训练的示例模型进行语义分割。

https://github.com/cainxx/image-sementer-ios-ios

遍历上述链接,该链接实现了用于分割的Coreml模型。使用标准转换工具将TensorFlow模型转换为Coreml模型。我们已经测试过一次。而且足够自信以至于可以工作。

苹果在其官方网站中提供了.mlmodel格式的DeepLab V3。u可以通过拖放轻松地将其集成到ur xcode中。我发现的唯一问题是输出格式是Multiarray,我不知道如何将结果显示为图像。这是DeepLab mlmodel的链接https://docs-assets.developer.apple.com/coreml/models/image/image/imagesegration/deeplabv3/deeplabv3/deeplabv3.mlmlmodel

要从多拍摄的图像转换为您必须使用CG栅格化数据的图像。这是将多个数组中每个非零值的alpha设置为1的示例。因此,在Multiarray中认识到的所有内容都具有完整的Alpha。您也可以从数组中解释不同的值。

            guard let mlMultiArray = observations.first?.featureValue.multiArrayValue else {
            
                return
            }
            let aWidth = CGFloat(mlMultiArray.shape[0].intValue)
            let aHeight = CGFloat(mlMultiArray.shape[1].intValue)
            UIGraphicsBeginImageContext(
                CGSize(width: aWidth, height: aHeight))
            if let ctx = UIGraphicsGetCurrentContext() {
                ctx.clear(CGRect(x: 0.0, y: 0.0, width: Double(aWidth), height: Double(aHeight)));
                for j in 0..<Int(aHeight) {
                    for i in 0..<Int(aWidth) {
                        let aValue =
                            (mlMultiArray[j * Int(aHeight) + i].floatValue > 0.0) ?
                                1.0 : 0.0
                        let aRect = CGRect(
                            x: CGFloat(i),
                            y: CGFloat(j),
                            width: 1.0,
                            height: 1.0)
                        let aColor: UIColor = UIColor(
                            displayP3Red: 0.0,
                            green: 0.0,
                            blue: 0.0,
                            alpha: CGFloat(aValue))
                        aColor.setFill()
                        UIRectFill(aRect)
                    }
                }
                
                let anImage = UIGraphicsGetImageFromCurrentImageContext()
                self.segmentationImage = anImage
                UIGraphicsEndImageContext()
            }

相关内容

  • 没有找到相关文章

最新更新