首页 > 其他分享 >使用 Swift 进行物体检测

使用 Swift 进行物体检测

时间:2024-12-03 11:55:51浏览次数:4  
标签:YOLOv3 检测 物体 let 图像 boundingBox Swift

本教程将展示如何使用 Swift 和 CoreML 框架加载预训练的 YOLOv3 模型并在图像中进行物体检测。YOLOv3 是一种高效的实时目标检测模型,它能够快速且准确地识别图像中的多个物体。

环境准备
安装 Xcode
Swift 是 iOS 开发的主流语言,我们需要安装 Xcode 开发环境。可以通过 Apple 官方网站 下载和安装最新版本的 Xcode。

安装 CoreML 模型
我们将使用一个 YOLOv3 模型,可以从 YOLO 官网 下载。然后,使用 CoreML 将 YOLOv3 转换为可以在 iOS 上运行的格式。

项目设置
创建一个新的 iOS 项目,并确保启用了 CoreML 和 Vision 框架。你可以通过 Xcode 的“Link Binary With Libraries”选项来添加这些库。

Swift 代码实现
加载和准备 YOLOv3 模型
首先,将转换好的 YOLOv3 模型添加到你的 Xcode 项目中,并确保它的扩展名为 .mlmodel。CoreML 会自动生成一个适配 Swift 的模型类。

swift

import UIKit
import Vision
import CoreML

class ViewController: UIViewController {

var model: VNCoreMLModel?

override func viewDidLoad() {
    super.viewDidLoad()

    // 加载 YOLOv3 CoreML 模型
    do {
        let yoloModel = try YOLOv3(configuration: MLModelConfiguration())
        model = try VNCoreMLModel(for: yoloModel.model)
    } catch {
        print("模型加载失败: \(error.localizedDescription)")
    }
}

}
处理图像并进行物体检测
接下来,我们将从图像中提取出物体,并在图像上绘制框来标识物体的位置。

swift

func detectObjects(in image: UIImage) {
guard let model = model else { return }

// 将UIImage转换为CIImage
guard let ciImage = CIImage(image: image) else {
    print("无法转换图像")
    return
}

// 创建请求
let request = VNCoreMLRequest(model: model) { request, error in
    guard let observations = request.results as? [VNRecognizedObjectObservation] else {
        print("没有识别结果: \(error?.localizedDescription ?? "未知错误")")
        return
    }
    
    // 遍历每个检测到的物体
    for observation in observations {
        let boundingBox = observation.boundingBox
        let label = observation.labels.first?.identifier ?? "未知"
        let confidence = observation.labels.first?.confidence ?? 0.0
        
        // 打印检测到的信息
        print("检测到物体: \(label) 置信度: \(confidence)")
        print("位置: \(boundingBox)")
        
        // 在图像上绘制框
        drawBoundingBox(boundingBox, label: label)
    }
}

// 创建请求处理器
let handler = VNImageRequestHandler(ciImage: ciImage, options: [:])

do {
    try handler.perform([request])
} catch {
    print("请求失败: \(error.localizedDescription)")
}

}

func drawBoundingBox(_ boundingBox: CGRect, label: String) {
// 将boundingBox转换为视图坐标系
let width = self.view.bounds.width
let height = self.view.bounds.height
let rect = CGRect(x: boundingBox.origin.x * width,
y: (1 - boundingBox.origin.y - boundingBox.height) * height,
width: boundingBox.width * width,
height: boundingBox.height * height)

// 创建一个 UILabel 显示物体标签
let labelView = UILabel(frame: rect)
labelView.text = label
labelView.textColor = .white
labelView.backgroundColor = .black
labelView.textAlignment = .center
labelView.font = UIFont.boldSystemFont(ofSize: 12)

// 在视图上添加标签
self.view.addSubview(labelView)

// 创建一个边框
let border = UIView(frame: rect)
border.layer.borderColor = UIColor.red.cgColor
border.layer.borderWidth = 2
self.view.addSubview(border)

}更多内容访问ttocr.com或联系1436423940
调用物体检测功能
在 viewDidLoad 或其他适当的地方调用物体检测功能并传入图像。

swift

func loadImageAndDetect() {
if let image = UIImage(named: "test_image.jpg") {
detectObjects(in: image)
}
}
测试和运行
运行应用程序
通过 Xcode 运行该应用程序,你可以选择将图像加载到应用中进行物体检测。通过 VNCoreMLRequest,YOLOv3 模型将对图像进行分析,并检测图像中的物体。

结果展示
当模型成功检测到物体时,它将在图像中显示一个边框并标注物体类别(例如“person”、“car”)以及置信度。

标签:YOLOv3,检测,物体,let,图像,boundingBox,Swift
From: https://www.cnblogs.com/ocr12/p/18583781

相关文章

  • 使用 Rust 和 OpenCV 进行物体检测
    我们将利用Rust的opencv库来封装OpenCV的功能,加载YOLOv3模型并进行图像的物体检测。YOLO(YouOnlyLookOnce)是一个非常高效的实时目标检测模型,能够在图片中快速定位出物体并标注出边界框。环境准备安装Rust如果你还没有安装Rust,可以使用下面的命令进行安装:bashcu......
  • 使用 Go 语言与 OpenCV 进行物体检测
    GoCV是一个Go语言绑定的OpenCV库,我们可以用它来处理图像、视频并进行物体检测。通过GoCV,我们能够加载预训练的YOLO模型,并在实时视频流中进行物体检测。环境准备安装GoCV库首先,我们需要安装GoCV。GoCV是Go语言的OpenCV绑定,可以通过以下命令安装:bash安装GoC......
  • 【深度学习】售卖机饮料检测【附完整资源】
    概述自助售卖机通过自动化系统为消费者提供便捷的购物体验。消费者通过触摸屏选择饮料,机器完成付款和取货的过程。实时监测饮料的数量,运营商可以及时补货,避免缺货现象,确保顾客能够购买到所需的产品。检测技术通过安装在自助售卖机上的摄像头,并利用深度学习算法分析图像......
  • 用js写一个绑定事件检测窗口大小
    functionhandleResize(){constwidth=window.innerWidth;constheight=window.innerHeight;//在这里执行你想要的操作,例如更新布局或显示不同的内容console.log(`窗口宽度:${width}px,窗口高度:${height}px`);//一些例子://if(width<768){///......
  • yolo --- 对视频进行目标检测,实时可视化预测结果,保存预测视频
     importosimportcv2fromultralyticsimportYOLOdefdetect_objects_in_video(best_pt_path,video_path,output_video_name):output_video_path=video_path.rsplit('.',1)[0]+'_'+output_video_name+'.mp4'mo......
  • 员工出入更衣室穿戴规范识别检测系统
    员工出入更衣室穿戴规范识别检测系统能够通过安装在更衣室入口的摄像机,员工出入更衣室穿戴规范识别检测系统实时检测员工的穿戴情况。系统的工作流程如下:当员工进入更衣室时,摄像机捕捉到图像,算法迅速识别图像中的人员,并检测他们是否穿戴了规定的防护服、护目镜、口罩和手套等防护......
  • 使用 C 语言实现物体检测(YOLO)
    物体检测是计算机视觉中的核心任务之一。在这篇文章中,我们将使用C语言结合OpenCV和YOLO模型,展示如何在图像中检测物体的位置。YOLO(YouOnlyLookOnce)是一种高效的深度学习模型,广泛应用于物体检测任务。虽然C语言本身不具备深度学习库,但OpenCV提供了足够的支持来加载、......
  • 用 PHP 与深度学习模型进行物体检测
    物体检测是计算机视觉中的一个重要任务,涉及识别和定位图像中的多个物体。在本篇文章中,我们将探讨如何在PHP环境中实现物体检测的简单功能,尽管PHP不是深度学习的主流编程语言,我们将通过调用外部Python脚本与深度学习框架(如YOLO)进行集成,实现物体检测。环境准备PHP7.4或更......
  • 利用Grounding DINO进行自动标注——目标检测任务——YOLO格式
    关于GroundingDINO的环境搭建可以参考我的以前的博客,链接如下所示如何在Linux上离线部署GroundingDINO-CSDN博客这个博客主要来介绍如何利用GroundingDINO这个项目去进行目标检测的自动化标注。并且给出了相关的代码已经实验验证。1.数据集准备   2.开始实验2.1......
  • MemTest86 Pro 和 MemTest86+ 是两款广泛使用的内存测试工具,虽然它们的核心功能相似,都
    MemTest86Pro和MemTest86+是两款广泛使用的内存测试工具,虽然它们的核心功能相似,都是用于检测系统内存的错误,但在功能、性能、支持等方面存在一些差异。以下是它们的对比,表格化展示:特性/版本MemTest86ProMemTest86+开发公司PassMarkSoftwareOpen-sourcecommuni......