香橙派AIpro做目标检测

使用香橙派AIpro做目标检测

文章目录

    • 使用香橙派AIpro做目标检测
      • 香橙派AIpro开发板介绍
      • 香橙派AIpro应用体验
        • YOLOV5s目标检测使用场景描述
        • 图像目标检测
        • 视频目标检测
        • 摄像头目标检测
        • YOLOv5s 目标检测的运行结果分析
        • 香橙派 AIpro 在运行过程中的表现
      • 香橙派AIpro AI应用场景
      • 总结

香橙派AIpro开发板介绍

OrangePi AIpro(8-12T)作为一款集成昇腾 AI 技术的开发板,其搭载了 4 核 64 位 CPU 与 AI 处理器,并配备图形 GPU,具备 8 - 12TOPS 的 AI 计算能力。它支持 8GB 或 16GB 的 LPDDR4X 内存,且可扩展至不同容量的 eMMC 模块。此外,该开发板具备双 4K 视频输出能力。

​ 在接口方面,OrangePi AIpro 提供了丰富多样的选择,涵盖双 HDMI、GPIO、Type-C 电源、M.2 插槽(兼容 SATA/NVMe SSD)、TF 卡槽、千兆以太网、USB3.0、USB Type-C、Micro USB(串口功能)、MIPI 摄像头和显示屏接口,以及电池接口预留。

该开发板在 AI 计算、深度学习、视频分析、自然语言处理、智能机器人、无人机、云计算、AR/VR、智能安防和家居等众多 AIoT 领域均具有广泛的适用性。它支持 Ubuntu 和 openEuler 操作系统,适宜于 AI 算法原型和应用的开发。


接下来让我们一同领略开发板的外观

image-20240702233840611

如需获取更多香橙派 AIpro的详细信息,可前往官网查阅

香橙派AIpro官网

香橙派AIpro应用体验

好的,下面我们开启体验之旅


  • 前期准备
    • 开发板及数据线(购买时随附)
    • HDMI 转接口与显示幕(亦可通过 VNC 连接)
    • 网线(可采用共享网络的方式)

我收到的开发板:

d090dee28041f1ae031e339ee04cd583_720

1、插上电源后,我们的屏幕上就会出现登录界面

2、我们输入账户和密码(账户会给你默认写好)

默认账户名:HwHiAiUser

默认密码:Mind@123

输入后我们就可以进入桌面

3、我们可以点击右上角连接WiFi

4、最后我们就可以开始体验

我这里快速体验了下Python环境

6e472d0bd3c6249d227e9b1b5e6a2e32


香橙派 AIpro支持多种编程语言和软件开发环境,例如 Python、Jupyter、C 等,这使得开发者能够依据自身需求选取适宜的操作系统和开发工具。

下面我体验了香橙派 AIpro的 AI 支持功能。


YOLOV5s目标检测使用场景描述

YOLOv5s 目标检测模型在众多领域都有着广泛的应用。

在安防监控中,能够迅速识别出异常行为或可疑人员,保障公共安全。

在交通领域,可用于实时监测道路上的车辆、行人及交通标志,为智能交通系统提供关键信息。

在工业生产线上,能对产品进行质量检测,提高生产效率和产品质量。

在农业领域,可用于监测农作物的生长状况和病虫害情况。

图像目标检测

我们采用 YOLOv5s 目标检测算法来实现对正在跑操人员的识别。

我们依循以下几个步骤进行处理:

  • 加载模型
  • 处理输入图像
  • 执行检测
  • 绘制检测结果并显示或保存结果

以下为参考代码,您可根据自身需求进行修改:

def load_model(weights_path, device_id):
    """加载模型并返回模型对象"""
    device = select_device(device_id)
    model = attempt_load(weights_path, map_location=device)
    return model

def process_image(img, model, names, img_size, stride):
    """处理图像,进行目标检测,并返回标记后的图像"""
    img = torch.from_numpy(img).to(device).float() / 255.0
    img = img.unsqueeze(0)  # 增加批次维度
    pred = model(img)[0]
    pred = non_max_suppression(pred, 0.4, 0.5, classes=None, agnostic=False)
    annotated_img = img.copy()  # 复制原始图像以进行标注
    for *xyxy, conf, cls in reversed(pred):  # 遍历检测结果
        label = f'{names[int(cls)]} {conf:.2f}'
        plot_one_box(xyxy, annotated_img, label=label, color=(255, 0, 0), line_thickness=3)
    return annotated_img

def plot_one_box(xyxy, img, label, color, line_thickness):
    """在图像上绘制检测框和标签"""
    x1, y1, x2, y2 = xyxy
    cv2.rectangle(img, (x1, y1), (x2, y2), color, line_thickness)
    cv2.putText(img, label, (x1, y1 - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, line_thickness)

def main(weights_path, source_path, device_id='cpu'):
    """主函数,用于加载模型、处理视频或图像流,并显示结果"""
    model = load_model(weights_path, device_id)
    stride = int(model.stride.max())
    imgsz = check_img_size(640, s=stride)
    names = model.module.names if hasattr(model, 'module') else model.names
    dataset = LoadStreams(source_path, img_size=imgsz, stride=stride)

    for path, img, im0s, vid_cap in dataset:
        try:
            annotated_img = process_image(img, model, names, imgsz, stride)
            cv2.imshow('Object Detection', annotated_img)
            cv2.waitKey(1)  # 1ms延迟
        except Exception as e:
            print(f"Error processing frame {path}: {e}")

    cv2.destroyAllWindows()

if __name__ == '__main__':
    # 替换为你的模型权重文件路径和视频或图像文件路径
    weights_path = 'path_to_your_yolov5s_weights.pt'
    source_path = 'path_to_your_video_or_image'
    main(weights_path, source_path)

我们先上传一张原图到香橙派上

image-20240703232707917

我们运行main

稍等片刻,运行结果便会呈现

image-20240703233127011

我们会发现其实框选住的人并不多

造成这一现象的原因可能在于:

  • 置信度阈值设置得太高
  • 模型训练数据不足
  • 非极大值抑制
  • 等等

存在此类问题的朋友,可参考以下代码片段尝试解决:

# 原始的non_max_suppression调用
pred = non_max_suppression(pred, conf_thres=0.5, iou_thres=0.4, classes=None, agnostic=False)

# 调整置信度阈值和NMS阈值
conf_thres = 0.3  # 降低置信度阈值
iou_thres = 0.3   # 降低NMS阈值
pred = non_max_suppression(pred, conf_thres=conf_thres, iou_thres=iou_thres, classes=None, agnostic=False)

经过微调之后,效果有了显著的提升

image-20240703233741945

视频目标检测

使用 YOLOv5s 算法识别视频中正在打篮球的人员

我们依照如下步骤进行处理:

  • 加载 YOLOv5s 模型
  • 读取视频流
  • 处理视频帧
  • 绘制检测框
  • 显示或保存结果

以下为参考代码,您可根据自身需求进行修改:


# 函数定义
def detect(frame, model, names, img_size, device):
    # 模型输入处理
    img = torch.from_numpy(cv2.resize(frame, (img_size, img_size))).to(device).float()  # 调整大小并转换为模型需要的格式
    img /= 255.0  # 归一化
    img = img.unsqueeze(0)  # 增加批次维度

    # 模型推理
    pred = model(img)[0]
    pred = non_max_suppression(pred, 0.4, 0.5)  # 应用NMS

    # 绘制检测框
    for det in pred:
        det[:, :4] = scale_coords(img.shape[2:], det[:, :4], frame.shape).round()  # 将坐标映射回原图
        for *xyxy, conf, cls in reversed(det):
            label = f"{names[int(cls)]} {conf:.2f}"
            cv2.rectangle(frame, (int(xyxy[0]), int(xyxy[1])), (int(xyxy[2]), int(xyxy[3])), (255, 0, 0), 2)
            cv2.putText(frame, label, (int(xyxy[0]), int(xyxy[1])), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 2)

# 主函数
def main(weights, source, img_size=640, conf_thres=0.4, iou_thres=0.5):
    # 加载模型
    device = select_device('')
    model = attempt_load(weights, map_location=device)  # 加载模型
    names = model.module.names if hasattr(model, 'module') else model.names  # 获取类别名称

    # 检查图像大小
    img_size = check_img_size(img_size, s=model.stride.max())  # 确保图像大小符合模型要求

    # 读取视频
    cap = LoadStreams(source, img_size=img_size)

    # 处理视频帧
    while cap.isOpened():
        frame = cap.read()
        if frame is None:
            break

        detect(frame, model, names, img_size, device)

        # 显示结果
        cv2.imshow('YOLOv5s Detection', frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):  # 按'q'退出
            break

    cap.release()
    cv2.destroyAllWindows()

# 入口点
if __name__ == '__main__':
    # 替换为你的模型权重文件路径和视频源
    weights = 'yolov5s.pt'
    source = 0 
    main(weights, source)

程序会处理单帧图像,进行目标检测然后绘制检测框,返回标注后的图像

image-20240704001401592

image-20240704001408593

摄像头目标检测

还可以通过摄像头录入的画面进行实时处理,由于我此处暂时未配备摄像头,故未进行演示,现可为您提供代码以供参考:

def detect_frame(frame, model, img_size, device, names):
    # 调整图像大小并转换为模型需要的格式
    frame = cv2.resize(frame, (img_size, img_size))
    img = torch.from_numpy(frame).to(device).float()  # 转换为模型需要的格式
    img /= 255.0  # 归一化
    img = img.unsqueeze(0)  # 增加批次维度
    # 模型推理
    with torch.no_grad():
        pred = model(img)[0]
        pred = non_max_suppression(pred, 0.4, 0.5)  # 应用NMS
    # 绘制检测框
    for det in pred:
        x1, y1, x2, y2, conf, cls = det.cpu()
        label = f"{names[int(cls)]} {conf:.2f}"
        plot_one_box(frame, x1, y1, x2, y2, label, color=(255, 0, 0), line_thickness=2)
def plot_one_box(frame, x1, y1, x2, y2, label, color, line_thickness):
    """在图像上绘制检测框和标签"""
    cv2.rectangle(frame, (x1, y1), (x2, y2), color, line_thickness)
    cv2.putText(frame, label, (x1, y1 - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, line_thickness)
def main(weights, img_size=640, source=0):
    # 加载模型
    device = select_device('')
    model = attempt_load(weights, map_location=device).eval()
    names = model.module.names if hasattr(model, 'module') else model.names
    # 检查图像大小
    img_size = check_img_size(img_size)

    # 读取视频流
    cap = cv2.VideoCapture(source)

    while True:
        ret, frame = cap.read()
        if not ret:
            break
        detect_frame(frame, model, img_size, device, names)
        # 显示结果
        cv2.imshow('YOLOv5s Detection', frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):  # 按'q'退出
            break
    cap.release()
    cv2.destroyAllWindows()
if __name__ == '__main__':
    weights = 'yolov5s.pt'
    main(weights)
YOLOv5s 目标检测的运行结果分析

通过对这些结果的分析,可以评估模型的准确性和可靠性,如果检测框的位置准确且置信度较高,说明模型对目标的识别效果较好。如果出现漏检或误检的情况,可能需要进一步调整模型参数、增加训练数据或改进训练方法。

在识别跑操人的图像检测结果中,最初框选住的人不多,排查下来的原因是:过高的置信度阈值,适当调低一点就能保障结果。

在识别打篮球的视频检测中,通过正确的步骤处理,包括加载模型、读取视频流和处理视频帧等,能够较为准确地检测出目标。

香橙派 AIpro 在运行过程中的表现

香橙派 AIpro 开发板在运行 YOLOv5s 目标检测任务时,展现出了出色的性能,内存和CPU负载表现都还不错,在最开始运行的时候会稍微高一点,会到70%左右,运行之后就会稳定一些,基本稳定在50%左右。

香橙派强大的计算能力(8-12TOPS)能够保证模型的快速推理,减少处理时间,实现了实时检测的需求。

在处理高分辨率图像和视频时,依靠其强大的CPU和GPU,依然能够保持稳定的帧率,提供了流畅的体验。

image-20240704174945208

香橙派AIpro AI应用场景

香橙派AIpro开发板因其集成的华为Ascend系列AI处理器和强大的计算能力,适用于多种AI应用场景

目标检测:使用如YOLOv5s这样的轻量级网络模型,可以在边缘设备上进行实时目标检测,适用于智能监控、工业自动化等领域

图像分类:AIpro可以部署图像分类模型,用于场景识别、物体识别等任务,这在内容审核、社交媒体分析等方面有广泛应用

视频图像分析:在视频流分析中,AIpro可以进行实时视频处理,用于人流统计、行为识别等,适用于零售分析、公共安全等场景

深度学习模型推理:AIpro支持深度学习模型的快速推理,适用于需要快速响应的AI应用,如自动驾驶辅助系统、机器人视觉等

总结

​ 能够较快运行处结果得益于香橙派AIpro集成的软件环境,其中包括Python编程语言、Jupyter Notebook等交互式开发工具,以及功能强大的OpenCV图像处理库,这些工具的集成为深度学习模型的构建和实施提供了坚实的基础。同时,香橙派AIpro配备了高性能的处理器,这确保了其在处理复杂算法和处理大量数据时的优越计算能力,进而显著提高了目标检测任务的执行效率

​ 特别值得一提的是,香橙派AIpro拥有详尽的国产中文文档支持,大大降低了学习和使用的门槛,使得国内开发者能够更加顺畅地进行项目开发。而且,系统的图形化界面设计美观,提升了用户体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/771173.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

leetCode-hot100-动态规划专题

动态规划 动态规划定义动态规划的核心思想动态规划的基本特征动态规划的基本思路例题322.零钱兑换53.最大子数组和72.编辑距离139.单词拆分62.不同路径63.不同路径Ⅱ64.最小路径和70.爬楼梯121.买卖股票的最佳时机152.乘积最大子数组 动态规划定义 动态规划(Dynami…

Python 项目依赖离线管理 pip + requirements.txt

背景 项目研发环境不支持联网,无法通过常规 pip install 来安装依赖,此时需要在联网设备下载依赖,然后拷贝到离线设备进行本地安装。 两台设备的操作系统、Python 版本尽可能一致。 离线安装依赖 # 在联网设备上安装项目所需的依赖 # -d …

香港即将“放松”加密货币监管!加密牌照制度备受批评!全球主力军无法进入香港市场?动摇了香港Web3的信心!

2024年7月3日,香港金融服务及库务局局长许正宇在立法会会议上表示,香港金融管理局(HKMA)和证券及期货事务监察委员会(SFC)将根据市场发展情况,适时检讨虚拟资产相关活动的监管要求。 这一表态引发了人们对香港加密货币监管框架可能进行调整的…

AI智能音箱用2×15W立体声功放芯片NTP8918

智能音箱是近年来非常受欢迎的智能家居产品之一,它集成了人工智能技术和音频技术,能够为用户提供语音助手、音乐播放、智能家居控制等多种功能。其中,音频输出是智能音箱的核心功能之一,而功放芯片则是实现音频放大的关键组成部分…

尽量不写一行if...elseif...写出高质量可持续迭代的项目代码

背景 无论是前端代码还是后端代码,都存在着定位困难,不好抽离,改造困难的问题,造成代码开发越来越慢,此外因为代码耦合较高,总是出现改了一处地方,然后影响其他地方,要么就是要修改…

Liunx网络配置

文章目录 一、查看网络配置永久修改网卡临时修改网卡 二、查看主机名称 hostname三、查看路由表条目 route四、查看网络连接情况netstat五、获取socket统计信息ss六、查看当前系统中打开的文件和进程的工具lsof七、测试网络连通性ping八、跟踪数据包 traceroute九、域名解析 ns…

适合金融行业的国产传输软件应该是怎样的?

对于金融行业来说,正常业务开展离不开文件传输场景,一般来说,金融行业常用的文件传输工具有IM通讯、邮件、自建文件传输系统、FTP应用、U盘等,这些传输工具可以基础实现金融机构的文件传输需求,但也存在如下问题&#…

ONNXRuntime与CUDA所对应的版本

官方链接: NVIDIA - CUDA | onnxruntime

软信天成:您的数据仓库真的“达标”了吗?

在复杂多变的数据环境中,您的数据仓库是否真的“达标”了?本文将深入探讨数据仓库的定义、合格标准及其与数据库的区别,帮助您全面审视并优化您的数据仓库。 一、什么是数据仓库? 数据仓库是一个面向主题的、集成的、相对稳定的、…

Django任意URL跳转漏洞(CVE-2018-14574)

目录 Django介绍 URL跳转漏洞介绍 Django任意URL跳转漏洞介绍 环境搭建 防御方法 前段时间在面试时,问到了URL跳转漏洞,我没有回答好,下午把URL跳转漏洞学习了,发现也不难,看来还需要学习的东西很多呀&#xff0c…

AI 芯片之战:开启智能新时代的关键角逐

在科技发展的浪潮中,一场围绕 AI 芯片的激烈竞争正在全球范围内如火如荼地展开。多家巨头纷纷投身其中,使得这场混战已然进入白热化阶段。 AI 芯片,作为推动人工智能发展的核心硬件,其作用举足轻重。它能够高效地处理海量的数据&a…

# Kafka_深入探秘者(9):kafka 集群管理

Kafka_深入探秘者(9):kafka 集群管理 一、kafka 集群概述 1、kafka 集群概述: 集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,他们可…

Webpack: 并行构建

概述 受限于 Node.js 的单线程架构,原生 Webpack 对所有资源文件做的所有解析、转译、合并操作本质上都是在同一个线程内串行执行,CPU 利用率极低,因此,理所当然地,社区出现了一些以多进程方式运行 Webpack&#xff0…

SQL Server详细使用教程(包含启动SQL server服务、建立数据库、建表的详细操作) 非常适合初学者

文章目录 目录 前言 一、启动SQL server服务的三种方法 1.不启动SQL server服务的影响 2.方法一:利用cmd启动SQL server服务 3.方法二:利用SQL Server配置管理器启动SQL server服务 4.方法三:在服务管理器中启动SQL server服务 二、建立数据库…

数据结构 —— 图的遍历

数据结构 —— 图的遍历 BFS(广度遍历)一道美团题DFS(深度遍历) 我们今天来看图的遍历,其实都是之前在二叉树中提过的方法,深度和广度遍历。 在这之前,我们先用一个邻接矩阵来表示一个图&#…

【Python新手入门指南】pip安装失败、下载慢、pip换源

文章目录 前言一、换源的基本命令是什么?二、如何从官方来换源总结 前言 对于Python新手而言,使用pip安装包就会成为一个问题,因为国内下载慢,甚至可能下载不成功,课程要安装库,但是连库都安装不成功&…

20240705 每日AI必读资讯

📚Retool 刚刚发布了最新2024上半年《人工智能现状报告》 - 收集了约750名技术人员的意见 - 包括开发者、数据团队和各行业的领导者,了解如何利用人工智能产生真正的影响。 🔗 2024上半年《人工智能现状报告》Retool刚刚发布了最新-CSDN b…

瑞数信息:智能防护新时代,看AI如何筑起网络防线

AI时代,网络安全危与机并行。 尤其是近年来大火的大模型,对于网络安全行业的影响与其他行业有所不同,一方面,AI能够通过大幅降低了安全攻击的门槛,网络威胁的复杂性和多样性不断增加,如自动化攻击、零日漏…

记录问题:解决vscode找不到Python自定义模块,报错No module named ‘xxx‘

1. 背景 我非要用vscode,不用pycharm,哼! 2. 问题 由于 import xx 自定义的模块, python run 的时候会报错 No module named ‘xxx‘ 报错信息: Traceback (most recent call last):File "d:\work\sf_financ…

原创作品 —(金融行业)年金系统交互和视觉设计

金融行业软件交互设计要点:“简化操作流程,确保流畅易用,同时注重交易环境的安全可靠,通过个性化体验提升用户满意度,并及时收集反馈以持续优化。” 2.UI设计要点:“注重视觉效果与用户体验的平衡&#xff…