香橙派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),和…

深入解析目标检测中的尺度变化问题及其解决方案

摘要 目标检测是计算机视觉领域的核心任务之一,旨在识别图像中的目标对象并确定其位置。尺度变化问题是目标检测中的一个关键挑战,它涉及目标在不同图像中的大小差异。本文将深入探讨尺度变化问题的原因、影响以及解决策略,并提供一些代码示…

dify-on-wechat中的entrypoint.sh脚本

注解:因为ntwork类库不支持Linux环境,所以企业微信就放弃了容器部署。 通过dockerfile启动容器: cd dify-on-wechat/docker # 进入docker目录 docker compose up -d # 启动docker容器 docker logs -f dify-on-wechat # 查…

XML Schema 属性

XML Schema 属性 XML Schema 是一种用于定义 XML 文档结构和内容的语言。它提供了一种强大的方式来描述 XML 文档中的元素、属性和数据类型。在 XML Schema 中,属性是用于提供有关元素的额外信息的标记,它们可以增强元素的功能和表达能力。本文将详细介绍 XML Schema 中的属…

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

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

游戏开发面试题4

局部变量全局变量 全局变量是定义在函数外部的变量,它可以在函数的内外部的任何地方被访问和使用。全局变量通常定义在程序的开头,在整个程序运行期间都是可用的。局部变量是定义在函数内部的变量,它只能在函数的内部被访问和使用。局部变量…

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系统是一款面向制造企业车间执行层…

第五十章 Web Service URL 汇总

文章目录 第五十章 Web Service URL 汇总Web 服务 URLWeb 服务的端点WSDL 使用受密码保护的 WSDL URL 第五十章 Web Service URL 汇总 本主题总结了与 IRIS 数据平台 Web 服务相关的 URL。 Web 服务 URL 与 IRIS Web 服务相关的 URL 如下&#xff1a; Web 服务的端点 http…

昇思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;基本数据类型的访问、…

呼叫中心被DDOS攻击怎么办?

呼叫中心作为企业与客户沟通的重要桥梁&#xff0c;其稳定性和安全性直接关系到企业的运营效率和客户满意度。然而&#xff0c;面对日益猖獗的DDoS&#xff08;分布式拒绝服务&#xff09;攻击&#xff0c;如何保障呼叫中心的稳定运行成为了每一家企业都不得不面对的问题。 遭…

科普新能源充电桩

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

Vuetify3:v-data-table增加下拉筛选

我们在做列表显示的时候为了让用户快速找到自己想要的数据&#xff0c;都会提供快捷筛选&#xff0c;我们就需要在 v-data-table 表头中提供下拉选择&#xff0c;我们可以参考v-data-table Headers 插槽 &#xff0c;扩展很强&#xff0c;我们可以自定义&#xff0c;代码&…

算法整理——【动态规划练习(2)01背包】

一、背包问题简述以及01背包解题思路 背包问题包括01背包、完全背包、多重背包等。其中基础和重点就是01背包和完全背包&#xff0c;所以我们现在就背包问题中的01背包和完全背包问题进行学习&#xff0c;使用动态规划解决背包问题。 01背包是其他背包的基础&#xff0c;我们…

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

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