香橙派AIpro做目标检测

使用香橙派AIpro做目标检测

文章目录

    • 使用香橙派AIpro做目标检测
      • 香橙派AIpro开发板介绍
      • 香橙派AIpro应用体验
        • 快速体验香橙派的AI功能
        • 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、最后我们就可以开始体验


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

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


快速体验香橙派的AI功能

我们先用ssh连接香橙派

image-20240704224913681

进入后,我们在进入目录 samples/notebooks/

 cd samples/notebooks/

编辑启动文件

 vim start_notebook.sh 
#这下面是内容
. /usr/local/Ascend/ascend-toolkit/set_env.sh
export PYTHONPATH=/usr/local/Ascend/thirdpart/aarch64/acllite:$PYTHONPATHif [ $# -eq 1 ];thenjupyter lab --ip $1 --allow-root --no-browser
elsejupyter lab --ip 0.0.0.0 --allow-root --no-browser
fi

需要设置 --ip 0.0.0.0 ,不然自己电脑上就没法进入到可视化界面了

可以看到香橙派给我们集成了很多基础开发软件

image-20240704225948268

快速体验了里面的语音自动识别

image-20240704230459522

在整个运行中,香橙派的响应速度还是比较快的,这一点很不错,能提升工程师的效率

下面我们将会重点讲解在香橙派AIpro中做目标检测。

YOLOV5s目标检测使用场景描述

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

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

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

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

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

图像目标检测

我们采用 YOLOv5s 目标检测算法来实现对叶子上的害虫进行识别

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

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

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

def load_model(weights_path, device_id):"""加载模型并返回模型对象"""device = select_device(device_id)model = attempt_load(weights_path, map_location=device)return modeldef process_image(img, model, names, img_size, stride):"""处理图像,进行目标检测,并返回标记后的图像"""img = torch.from_numpy(img).to(device).float() / 255.0img = 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_imgdef plot_one_box(xyxy, img, label, color, line_thickness):"""在图像上绘制检测框和标签"""x1, y1, x2, y2 = xyxycv2.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.namesdataset = 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)

我们运行main

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

image-20240704223541768

如果发现框住的害虫不够

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

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

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

# 原始的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)
视频目标检测

使用 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:breakdetect(frame, model, names, img_size, device)# 显示结果cv2.imshow('YOLOv5s Detection', frame)if cv2.waitKey(1) & 0xFF == ord('q'):  # 按'q'退出breakcap.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:breakdetect_frame(frame, model, img_size, device, names)# 显示结果cv2.imshow('YOLOv5s Detection', frame)if cv2.waitKey(1) & 0xFF == ord('q'):  # 按'q'退出breakcap.release()cv2.destroyAllWindows()
if __name__ == '__main__':weights = 'yolov5s.pt'main(weights)
YOLOv5s 目标检测的运行结果分析

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

采用 YOLOv5s 目标检测算法来识别叶子上的害虫具有重要的实际意义和应用价值,特别是在农业领域:

早期害虫检测:通过早期识别害虫,可以及时采取措施,减少作物损失。

精准农业:精准农业依赖于精确的数据,可以帮助农户识别和定位害虫,从而实现精准施药。


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

训练辅助:在训练中,自动识别球员可以帮助教练更好地了解球员的训练负荷和表现,从而进行个性化的训练计划。

自动化记录:自动识别技术可以减少人工记录球员数据的需求,提高记录的准确性和效率。

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

香橙派 AIpro 开发板在运行 YOLOv5s 目标检测任务时,展现出了出色的性能。

内存和CPU负载表现都还不错,在最开始运行的时候会稍微高一点,会到70%左右,运行之后就会稳定一些,基本稳定在50%左右。

在负载方面,同时处理多个任务时,开发板能够较好地应对,但是对于一些比较大的任务时,会出现一定程度的性能下降,一般情况,内存和CPU使用占比低于85%,都还是能较为流畅的处理。

在散热方面,散热方面表现还是比较出色,开发板有散热风扇,长时间运行后,开发板的温度也并不是很高,在可接受范围内,关于风扇的噪音:在刚开启开发板时,风扇的声音会稍微大一点,但是系统启动后,噪音快速消失。

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

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

image-20240704222420628

image-20240704224653777

香橙派AIpro AI应用场景

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

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

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

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

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

总结

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git杂记

git 安装: 在 Windows 上安装 Git 也有几种安装方法。 官方版本可以在 Git 官方网站下载。 打开 https://git-scm.com/download/win,下载会自动开始。 要注意这是一个名为 Git for Windows 的项目(也叫做 msysGit),和…

基于Java+SpringMvc+Vue技术的实验室管理系统设计与实现

博主介绍:硕士研究生,专注于信息化技术领域开发与管理,会使用java、标准c/c等开发语言,以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年,拥有近12年的管理工作经验,拥有较丰富的技术架…

SUSAN

1995年英国牛津大学的S.M.Smith提出了一种新的图像边缘检测算法SUSAN算法,不同于以前经典边缘检测算法,SUSAN算法基于灰度相似性比较,采用圆形模板,对图像进行灰度差统计,无需计算方向导数,而且具备积分特性,它简单而且有效,适用于图像中边缘和角点的检测,可以去除图像…

土豆炒肉做法

菜单:土豆、葱、铁辣子、纯瘦肉、淀粉、生抽、酱油、刀、案板、十三香、盐巴、擦板 流程: 洗土豆,削皮,擦成条,用凉水过滤两遍淀粉,顺便放个燥里洗肉,切成条,按照生抽、酱油、淀粉、…

js好用的动态分页插件

js好用的动态分页插件是一款简单的分页样式插件,支持样式类型,当前页,每页显示数量,按钮数量,总条数,上一页文字,下一页文字,输入框跳转等功能。 js好用的动态分页插件

通过IDEA生成webapp及web.xml配置文件

1、选择File->Project Structure 2、选择Modules-> + -> Web 有的springboot工程选择是war工程,这个web可能已经存在了。 如果不存在,就手动创建,创建后,需要修改pom.xml中的配置 <packaging>war</packaging> 3、创建webapp根目录 这步重点就是创建…

介绍一款Java开发的商业开源MES系统

介绍一款Java开发的开源MES系统&#xff0c;万界星空科技开源的MES系统。该系统基于Java开发&#xff0c;具有广泛的适用性和高度的可定制性&#xff0c;能够满足不同行业、不同规模企业的智能制造需求。 一、系统概述 万界星空科技开源的MES系统是一款面向制造企业车间执行层…

昇思25天学习打卡营第19天 | CycleGAN图像风格迁移互换

内容介绍&#xff1a; CycleGAN(Cycle Generative Adversarial Network) 即循环对抗生成网络&#xff0c;该模型实现了一种在没有配对示例的情况下学习将图像从源域 X 转换到目标域 Y 的方法。 该模型一个重要应用领域是域迁移(Domain Adaptation)&#xff0c;可以通俗地理解…

Java中获取Class对象的三种方式

Java中获取Class对象的三种方式 1、对象调用getClass()方法2、类名.class的方式3、通过Class.forName()静态方法4、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java中&#xff0c;Class对象是一个非常重要的概念&#xff0c;它代…

JVM原理(二十):JVM虚拟机内存的三特性详解

1. 原子性、可进行、有序性 1.1. 原子性 Java内存模型围绕着在并发过程中如何处理原子性、可见性和有序性这三个特征来建立的。 Java内存模型来直接保证的原子性变量操作包括read、load、assign、use、store和write这六个。我们大致可以认为&#xff0c;基本数据类型的访问、…

科普新能源充电桩

充电桩是新能源电动车的配套基础设施&#xff0c;为电动车提供充电服务&#xff0c;与我们的生活也是息息相关&#xff0c;本篇文章来科普一下充电桩基础知识。 充电桩的分类 按照供电方式分类 交流充电桩&#xff1a;特点是小电流、桩体较小、安装灵活&#xff1b;直流充电…

【TB作品】51单片机 Proteus仿真 超声波LCD1602ADC0832 身高体重测量仪

00024 超声波LCD1602ADC0832 实验报告&#xff1a;基于51单片机的身高体重测量仪设计 背景介绍 本实验设计并实现了一个基于51单片机的身高体重测量仪。该系统利用超声波传感器测量高度&#xff0c;通过ADC0832模数转换芯片获取重量数据&#xff0c;并使用LCD1602显示屏显示…

Alt与Tab切换窗口时将Edge多个标签页作为一个整体参与切换的方法

本文介绍在Windows电脑中&#xff0c;使用Alt与Tab切换窗口时&#xff0c;将Edge浏览器作为一个整体参与切换&#xff0c;而不是其中若干个页面参与切换的方法。 最近&#xff0c;需要将主要使用的浏览器由原本的Chrome换为Edge&#xff1b;但是&#xff0c;在更换后发现&#…

桌面快充插线板+伸缩数据线,轻松实现1+1>2

手机、平板、笔记本等电子设备已成为我们日常工作和学习的必备工具。然而,随着设备数量的增加,充电问题也日益凸显。桌面空间有限,多个快充头不仅显得杂乱无章,而且效率低下,无法满足我们高效办公的需求。 在这样的背景下,倍思Nomos氮化镓100W桌面充电站凭借其创新的设计和强大…

SpringBoot新手快速入门系列教程七:基于一个低配centoos服务器,如何通过宝塔面板部署一个SpringBoot项目

1&#xff0c;如何打包一个项目 通过IDEA自带的命令行&#xff0c;执行 ./gradlew clean build 2&#xff0c;检查生成的JAR文件 进入 build/libs 目录&#xff0c;你应该会看到一个类似 helloredis-0.0.1-SNAPSHOT.jar 的文件。 3&#xff1a;运行生成的JAR文件 你可以在…

ESP32-C3-Arduino-uart

引脚图 2实现串口发送接收 1默认值初始化串口&#xff08;默认是uart0&#xff09; Serial.begin(UART_BAUD); 参数是波特率 2自定义其他串口 2-1创建实例 HardwareSerial SerialUART(0); //数值指的是uart0 1为uart1.。。。。 2-2初始化 SerialUART.begin(UART_BAU…

Docker运行MSSQL2022

安装地址: https://hub.docker.com/r/microsoft/mssql-server 拉取mssql容器镜像 docker pull mcr.microsoft.com/mssql/server 拉取成功 运行mssql镜像 docker run -e "ACCEPT_EULAY" -e "MSSQL_SA_PASSWORDAa123456" -p 1433:1433 -d mcr.microsof…

人工智能系列-Python面向对象编程

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 面向对象编程和面向过程编程 在使用计算机语言进行代码编写时&#xff0c;常见的两种思路是面向对象编程和面向过程编程。 面向过程&#xff1a;根据业务逻辑从上到下写代码。…

异常组成、作用、处理方式(3种)、异常方法、自定义异常

目录 异常的组成&#xff1a;运行异常与编译异常 两者区别&#xff1a;编译异常用来提醒程序员&#xff0c;运行异常大部分是由于参数传递错误导致 异常作用&#xff1a; 作用1&#xff1a;就是平时的报错&#xff0c;方便我们找到报错的来源 作用2&#xff1a;在方法内部…

一.2.(2)基本共射放大电路组成、工作原理;

1.基本共射放大电路组成 共什么取决于输入输出&#xff0c;共剩下的那一极 2.工作原理 输入信号ui通过电容C1加到三极管的基 极&#xff0c;引起基极电流iB的变化&#xff0c;iB的变化又使集电极电流ic发生变 化&#xff0c;且ic的变化量是iB变化量的β倍。由于有集电极电压&…