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)
            }
        }
    }
相关推荐
风象南3 小时前
我把大脑开源给了AI
人工智能·后端
Johny_Zhao5 小时前
OpenClaw安装部署教程
linux·人工智能·ai·云计算·系统运维·openclaw
飞哥数智坊5 小时前
我帮你读《一人公司(OPC)发展研究》
人工智能
冬奇Lab9 小时前
OpenClaw 源码精读(3):Agent 执行引擎——AI 如何「思考」并与真实世界交互?
人工智能·aigc
没事勤琢磨11 小时前
如何让 OpenClaw 控制使用浏览器:让 AI 像真人一样操控你的浏览器
人工智能
用户51914958484511 小时前
CrushFTP 认证绕过漏洞利用工具 (CVE-2024-4040)
人工智能·aigc
开心就好202511 小时前
UniApp开发应用多平台上架全流程:H5小程序iOS和Android
后端·ios
牛马摆渡人52811 小时前
OpenClaw实战--Day1: 本地化
人工智能
前端小豆11 小时前
玩转 OpenClaw:打造你的私有 AI 助手网关
人工智能
BugShare11 小时前
写一个你自己的Agent Skills
人工智能·程序员