iOS使用CoreML运用小型深度神经网络架构对图像进行解析

查找一个图片选择器

我用的是ImagePicker

项目有点老了,需要做一些改造,下面是新的仓库

platform :ios, '16.0'

use_frameworks!

target 'learnings' do
  source 'https://github.com/CocoaPods/Specs.git'

  pod 'ImagePicker', :git => 'https://github.com/KevinSnoopy/ImagePicker.git'
  
end

接下来就是使用图片选择器输出图片了

    func wrapperDidPress(_ imagePicker: ImagePicker.ImagePickerController, images: [UIImage]) {
        
    }
    
    func doneButtonDidPress(_ imagePicker: ImagePicker.ImagePickerController, images: [UIImage]) {
        if !images.isEmpty, let _ = images.first {
            /**
             在这里输出图片,可以调用模型进行解析
             */
        }
    }
    
    func cancelButtonDidPress(_ imagePicker: ImagePicker.ImagePickerController) {
        imagePicker.dismiss(animated: true)
    }

当前我使用了几个公开的模型

FCRN:

/**
     深度估计
     根据一幅图像来预测深度。
     */
    func fcrnDepthPrediction(image: UIImage?) {
        let config = MLModelConfiguration()
        config.computeUnits = .all
        if let img = image?.cgImage, let fcrn = try? FCRN(contentsOf: FCRN.urlOfModelInThisBundle, configuration: config) {
            if let input = try? FCRNInput(imageWith: img), let output = try? fcrn.prediction(input: input) {
                print(output.depthmapShapedArray)
            }
        }
    }

MNISTClassifier:

/**
     涂鸦分类
     对单个手写数字进行分类 (支持数字 0-9)。
     */
    func mnistClassifier(image: UIImage?) {
        if let img = image?.cgImage, let mnist = try? MNISTClassifier(contentsOf: MNISTClassifier.urlOfModelInThisBundle, configuration: MLModelConfiguration()) {
            if let input = try? MNISTClassifierInput(imageWith: img), let output = try? mnist.prediction(input: input) {
                print(output.classLabel)
                print(output.labelProbabilities)
            }
        }
    }

UpdatableDrawingClassifier:

/**
     涂鸦分类
     基于 K-最近邻算法(KNN)模型来学习识别新涂鸦的涂鸦分类器。
     */
    func updatableDrawingClassifier(image: UIImage?) {
        if let img = image?.cgImage, let updatable = try? UpdatableDrawingClassifier(contentsOf: UpdatableDrawingClassifier.urlOfModelInThisBundle, configuration: MLModelConfiguration()) {
            if let input = try? UpdatableDrawingClassifierInput(drawingWith: img), let output = try? updatable.prediction(input: input) {
                print(output.label)
                print(output.labelProbs)
            }
        }
    }

MobileNetV2:

/**
     图像分类
     MobileNetv2 架构经过训练,可对相机取景框内或图像中的主要对象进行分类。
     */
    func mobileNetV2(image: UIImage?) {
        if let img = image?.cgImage, let netv2 = try? MobileNetV2(contentsOf: MobileNetV2.urlOfModelInThisBundle, configuration: MLModelConfiguration()) {
            if let input = try? MobileNetV2Input(imageWith: img), let output = try? netv2.prediction(input: input) {
                print(output.classLabel)
                print(output.classLabelProbs)
            }
        }
    }

Resnet50:

/**
     图像分类
     一种残差神经网络,它能对相机取景框内或图像中的主要对象进行分类。
     */
    func resnet50(image: UIImage?) {
        if let img = image?.cgImage, let resnet = try? Resnet50(contentsOf: Resnet50.urlOfModelInThisBundle, configuration: MLModelConfiguration()) {
            if let input = try? Resnet50Input(imageWith: img), let output = try? resnet.prediction(input: input) {
                print(output.classLabel)
                print(output.classLabelProbs)
            }
        }
    }

SqueezeNet:

/**
     图像分类
     一种小型深度神经网络架构,它能对相机取景框内或图像中的主要对象进行分类。
     */
    func squeezeNet(image: UIImage?) {
        if let img = image?.cgImage, let net = try? SqueezeNet(contentsOf: SqueezeNet.urlOfModelInThisBundle, configuration: MLModelConfiguration()) {
            if let input = try? SqueezeNetInput(imageWith: img), let output = try? net.prediction(input: input) {
                print(output.classLabel)
                print(output.classLabelProbs)
            }
        }
    }
相关推荐
千天夜5 分钟前
激活函数解析:神经网络背后的“驱动力”
人工智能·深度学习·神经网络
大数据面试宝典6 分钟前
用AI来写SQL:让ChatGPT成为你的数据库助手
数据库·人工智能·chatgpt
封步宇AIGC11 分钟前
量化交易系统开发-实时行情自动化交易-3.4.1.2.A股交易数据
人工智能·python·机器学习·数据挖掘
m0_5236742112 分钟前
技术前沿:从强化学习到Prompt Engineering,业务流程管理的创新之路
人工智能·深度学习·目标检测·机器学习·语言模型·自然语言处理·数据挖掘
HappyAcmen22 分钟前
IDEA部署AI代写插件
java·人工智能·intellij-idea
噜噜噜噜鲁先森43 分钟前
看懂本文,入门神经网络Neural Network
人工智能
InheritGuo1 小时前
It’s All About Your Sketch: Democratising Sketch Control in Diffusion Models
人工智能·计算机视觉·sketch
weixin_307779132 小时前
证明存在常数c, C > 0,使得在一系列特定条件下,某个特定投资时刻出现的概率与天数的对数成反比
人工智能·算法·机器学习
封步宇AIGC2 小时前
量化交易系统开发-实时行情自动化交易-3.4.1.6.A股宏观经济数据
人工智能·python·机器学习·数据挖掘
Jack黄从零学c++2 小时前
opencv(c++)图像的灰度转换
c++·人工智能·opencv