照片中对象识别模型YOLOv3在iOS项目中的浅析与使用

news/2024/7/10 22:59:19 标签: YOLO, Core ML, ios

YOLOv3模型为苹果开发者官网提供的图形识别对象的CoreML模型,可识别80种对象,并给识别出的对象在图形中的位置和大小。

我们可以直接在官网下载该模型:

机器学习 - 模型 - Apple Developer

然后直接将模型拖入工程中(使用的是xcode14.3),xcode会自动根据模型生成对应的工具类YOLOv3,该类文件不可修改。在工程中我们可以查看模型的信息:

我们可以点击该浏览页面中的Model Class查看自动生成YOLOv3工具类。在浏览页面中我们看到下方有几个tab选择,重点的tab介绍:

General:模型的描述信息,重要的是Class Label,这个清单中列出了可识别的80种对象名称。

Preview:直接体验模型的预测效果,感兴趣可在该tab下拖入图片进行预览。

Prediction:描述了模型的输入输出信息。

接下来,我们可以在工程中使用该模型进行预测了,demo代码如下(YOLOv3类无需import):

do {
            let config:MLModelConfiguration = MLModelConfiguration()
            let model:YOLOv3! = try YOLOv3(configuration: config)
            
            if model != nil {
                //为了方便,我直接拿了asset中的照片
                let image:UIImage? = UIImage(named: "IMG_0096")
                
                if image != nil {
                    let input:YOLOv3Input = try YOLOv3Input(imageWith: image!.cgImage!)
                    let outPut:YOLOv3Output = try! model.prediction(input: input)
                    
                    print("识别成功")
                    print(outPut.coordinates.count)
                    
                }else{
                    print("图片读取失败")
                }
            }else{
                print("模型初始化失败")
            }
        }catch{
            print(error)
        }

代码中涉及三个类:

YOLOv3:模型类,其实例也可以理解为模型本身。

YOLOv3Input:输入对象。

YOLOv3Output:识别结果输出对象。

代码中,outPut对象包含了所有的识别数据,coordinates属性值代表识别出的物体对象的坐标和大小数据,confidence属性值代表识别出的物体对象的概率值。

coordinates:元素为包含4个double值的数组,每个double值依次代表识别出的物体在图片中的相对坐标和宽高:

  • x:识别对象的中心点距离图片左侧的像素相对图片宽度像素的比例;
  • y:识别对象的中心点距离图片顶部的像素相对图片宽度像素的比例;
  • w:识别对象的宽度相对图片宽度的比例;
  • h:识别对象的高度相对图片高度的比例;

confidence:元素为包含80个double值的数组,每个double值依次代表识别出的物体属于80种对象分类的概率。

在经过艰难的查找后,始终无法通过api获取80种对象分类名称的值,只能通过模型浏览看到,最后在控制台找到对应的属性,但是无法通过YOLOv3对象获取,控制台中打印出的80种对象分类名称:

 如果后续找到友好方式获取Class Label的方式再补上。


http://www.niftyadmin.cn/n/359318.html

相关文章

Few-Shot Knowledge Graph Completion

[1911.11298] Few-Shot Knowledge Graph Completion (arxiv.org) 目录 Background Model Encoding Heterogeneous Neighbors Aggregating Few-Shot Reference Set Matching Query and Reference Set Matching Query and Reference Set Background 以往的KGC认为每个关系…

feat:使用企业微信企业微信JS-SDK的onMenuShareAppMessage()实现点击转发自定义分享内容(TypeScript)

背景:企业微信应用使用企业微信JS-SDK的分享接口实现分享样式自定义 原生: 需要实现成: 企业微信JS-SDK 是企业微信面向网页开发者提供的 基于企业微信内 的网页开发工具包。 通过使用企业微信JS-SDK,网页开发者 可借助企业微信…

合创视觉科技学UI设计

第一阶段:手绘、软件基础   手绘   手绘的重点主要是培养学员的形体结构,光感、空间的关系,这算是一个审美培养的启蒙,时下最流行的矢量插画就和手绘密切相关。   1、PS、AI基础软件 ​   从零开始学习软件&…

Go语言 -- Web开发基础学习 net/http包

前言 Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。 Go语言最擅长的领域就是Web开发,此贴是本人入门完go语法基础后学习Web开发的学习笔记。 第一个Go Web 新建go文件hello_world.go 写入: package mainimport (&…

【代码随想录】刷题Day37

1.单调递增的数字 738. 单调递增的数字 解释一下题目:其实就是将小于输入的数n,并且该数从左到右非递减的最大符合这两条件的数返回。 贪心的思路:如果给出的n就是非递减的,那么最大的就是它本身。如果给的n不是非递减的&#xf…

【论文速递】ICLR2022 - 语言驱动的语义分割

【论文速递】ICLR2022 - 语言驱动的语义分割 【论文原文】:LANGUAGE-DRIVEN SEMANTIC SEGMENTATION 【作者信息】:Boyi Li Cornell University, Cornell Tech Kilian Q. Weinberger Cornell University Serge Belongie University of Copenhagen Vladl…

已经有MySQL了,干嘛还要学MongoDB?

三分钟的时间,通过本文你将学会 1.MongoDB主要特征 2.MongoDB优缺点,扬长避短 3.何时选择MongoDB?为啥要用它? 4.MongoDB与MySQL关键字对比 5.下载与安装MongoDB 6.Java整合MongoDB,实现增删改查 MongoDB和MySQ…

1123 Is It a Complete AVL Tree (PAT甲级)

这道题是看了柳婼的解法才搞定的。开始想着把height和parent放到结构体中去&#xff0c;很繁琐最后还搞不定…… #include <cstdio> #include <algorithm> #include <vector>struct node{int key;node* left nullptr;node* right nullptr; };int N, t, pi…