当前位置: 首页 > news >正文

香橙派AIpro部署YOLOv5:探索强悍开发板的高效目标检测能力

香橙派AIpro部署YOLOv5:探索强悍开发板的高效目标检测能力

一、香橙派AIpro开箱使用体验

1.1香橙派AIpro开箱

拿到板子后第一件事情就是开箱:

开箱后可以看见一个橘子的标识,也就是香橙派了,并且还有四个大字:为AI而生,从这四个字可以看出来这款开发板的性能非常好,可以跑AI的开发板性能肯定是比较强悍的。在这里插入图片描述

接下来就来体验一下这款开发板的性能和具体使用吧。

1.2香橙派板载资源介绍

开发板的体积的话是比较小的,但是它搭载的外设资源是比较丰富的,主控制板是4核64位处理器+AI处理器,并且支持千兆网口,无线wifi,还有两个USB3.0口,可以方便用户接入鼠标和键盘等外设。并且还支持接入音频线,HDMI高清接口可以让开发板作为一个小型的主机来使用。
在这里插入图片描述

在背面的话可以看到开发板支持eMMC、Flash、TF卡槽等内存,方便用户自主扩展内存使用。

在这里插入图片描述

1.3香橙派启动方式介绍

香橙派的启动方式有多种,方便用户根据自己的情况来进行选择只需要操作拨码开关即可切换启动方式,支持SATA SSD、NVME SSD、eMMC、TF卡等方式来启动:

在这里插入图片描述

二、启动香橙派!

2.1烧写系统搭建环境

首先进入香橙派官网将资料下载好:

将用户手册、原理图、Ubuntu镜像下载下来:

香橙派官网
在这里插入图片描述

将这些资料下载好后就可以开始烧写ubuntu镜像了,这个时候需要有读卡器和内存卡,因为这个镜像会支持桌面系统,所以占用的内存是比较大的,那么这个时候就需要选择一张大一点的内存卡了,最好是32G或者以上的。

下载用于烧录 Linux 镜像的软件——balenaEtcher

烧录工具

选择从文件中烧录
在这里插入图片描述

选择解压好的镜像文件并且选择目标磁盘进行烧写镜像

在这里插入图片描述

等待镜像烧录完成

在这里插入图片描述

烧录完成镜像后将TF卡取下安装到开发板中,上电启动开发板!

2.2控制开发板的方式

在开发板中有串口,网络,HDMI这三种方式可以登陆到开发板系统中,在这里选择HDMI这种方式,因为选择HDMI可以进入系统的桌面当中,操作起来会更加的直观。

将HDMI线连接到开发板和显示屏,然后再次重新启动开发板,这个时候就可以看到显示屏中进入了桌面系统了。

在这里插入图片描述

三、部署yolov5

首先执行下面的指令安装必要的依赖项

sudo apt-get update
sudo apt-get install -y build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

安装opencv

sudo apt-get install -y python3-opencv

下载YOLO源码并编译源码

git clone https://github.com/pjreddie/darknet.git
cd darknet
make

在这里插入图片描述

下载预训练权重文件

wget https://pjreddie.com/media/files/yolov3.weights

运行 YOLO检索图像

在这里插入图片描述
在这里插入图片描述

接下来来编写一个程序体验一下yolov3的物体检测功能吧

创建一个test1.py文件夹用于存放代码

vi test1.py

在这里插入图片描述

编写代码

import cv2  import numpy as np  # 加载网络和配置  net = cv2.dnn.readNet("yolov3.weights", "cfg/yolov3.cfg")  classes = []  with open("data/coco.names", "r") as f:  classes = [line.strip() for line in f.readlines()]  # 加载图片  img = cv2.imread("1.jpg")  img = cv2.resize(img, None, fx=0.4, fy=0.4)  height, width, channels = img.shape  # 检测  blob = cv2.dnn.blobFromImage(img, 0.00392, (416, 416), (0, 0, 0), True, crop=False)  net.setInput(blob)  outs = net.forward(net.getUnconnectedOutLayersNames())  # 显示信息  class_ids = []  confidences = []  boxes = []  for out in outs:  for detect in out:  scores = detect[5:]  class_id = np.argmax(scores)  confidence = scores[class_id]  if confidence > 0.5:  # Object detected  center_x = int(detect[0] * width)  center_y = int(detect[1] * height)  w = int(detect[2] * width)  h = int(detect[3] * height)  # Rectangle coordinates  x = int(center_x - w / 2)  y = int(center_y - h / 2)  boxes.append([x, y, w, h])  confidences.append(float(confidence))  class_ids.append(class_id)  # NMS  indexes = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.4)  # Draw bounding boxes  for i in range(len(boxes)):  if i in indexes:  x, y, w, h = boxes[i]  label = str(classes[class_ids[i]])  color = (0, 255, 0)  cv2.rectangle(img, (x, y), (x + w, y + h), color, 2)  cv2.putText(img, label, (x, y + 30), cv2.FONT_HERSHEY_PLAIN, 1, color, 2)  # 保存图片  cv2.imwrite("predictions_output.jpg", img)  

在百度找几张图片

在这里插入图片描述

找到合适的图片后来运行一下程序

因为这个程序是pyhton程序,所以在运行之前需要确保在开发板的环境中是有python的

这里我已经提前安装好了pyhton3

运行之前需要给程序权限

在这里插入图片描述

接着运行程序

python3 test1.py

等待处理完成,处理的时间是非常快的,一会就处理好了,在当前目录下会生成处理好的图片

在这里插入图片描述

那么这里的我们可以看到他识别出来了汽车和椅子,并且使用绿色标记进行了标定,有了香橙派AIpro强大性能的支持处理这种基础的图片还是非常简单快捷的。

当然了也可以使用yolov3来进行视频的处理,这里我给出示例代码

import cv2  import numpy as np  # 加载网络和配置  net = cv2.dnn.readNet("yolov3.weights", "cfg/yolov3.cfg")  classes = []  with open("data/coco.names", "r") as f:  classes = [line.strip() for line in f.readlines()]  # 打开视频文件  cap = cv2.VideoCapture("your_video.mp4")  # 替换为你的视频文件路径  while True:  ret, frame = cap.read()  # 读取视频帧  if not ret:  break  # 如果正确读取帧,ret为True  # 帧预处理  frame = cv2.resize(frame, None, fx=0.4, fy=0.4)  height, width, channels = frame.shape  # 检测  blob = cv2.dnn.blobFromImage(frame, 0.00392, (416, 416), (0, 0, 0), True, crop=False)  net.setInput(blob)  outs = net.forward(net.getUnconnectedOutLayersNames())  # 显示信息(在视频帧上绘制)  class_ids = []  confidences = []  boxes = []  for out in outs:  for detect in out:  scores = detect[5:]  class_id = np.argmax(scores)  confidence = scores[class_id]  if confidence > 0.5:  center_x = int(detect[0] * width)  center_y = int(detect[1] * height)  w = int(detect[2] * width)  h = int(detect[3] * height)  x = int(center_x - w / 2)  y = int(center_y - h / 2)  boxes.append([x, y, w, h])  confidences.append(float(confidence))  class_ids.append(class_id)  # NMS  indexes = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.4)  # Draw bounding boxes  for i in range(len(boxes)):  if i in indexes:  x, y, w, h = boxes[i]  label = str(classes[class_ids[i]])  color = (0, 255, 0)  cv2.rectangle(frame, (x, y), (x + w, y + h), color, 2)  cv2.putText(frame, label, (x, y + 30), cv2.FONT_HERSHEY_PLAIN, 1, color, 2)  # 显示视频帧  cv2.imshow("Frame", frame)  # 按'q'键退出循环  if cv2.waitKey(1) & 0xFF == ord('q'):  break  # 释放资源  cap.release()  cv2.destroyAllWindows()

同样的运行这个代码后可以分析视频中出现的物体并且进行标定。

四、香橙派AIpro使用心得和体会

在使用开发板部署yolov5的时候还是非常顺利的,开发板内部支持wifi使得开发板可以直接连接到github下载源码这个是非常方便的。

在使用开发板的时候风扇整体转速还是比较平稳的,散热效果比较好,我使用的屏幕是2K,27寸的屏幕也是可以轻松带动的,可见在性能这块还是完全没有问题的。

同时开发板还支持多种连接的方式,支持串口、网络、HDMI等连接方式,我个人认为使用HDMI的方式是非常方便的,香橙派AIpro烧写了Ubuntu的镜像,这样相当于我们又有了一台小型的Linux电脑了,体验感还是不错的,当然也可以使用香橙派AIpro当作服务器来进行使用。

风扇在正常使用的过程中基本是没有噪音的,当然了风扇的转速也是可以自己进行调节的,转速越快的话噪音会有微小的提升。在整体上香橙派AIpro的性能是表现的比较好的。

在测试中使用香橙派AIpro进行刷视频,玩4399这种小游戏都是毫无压力的。

在部署yolov5在香橙派AIpro中的时候能感觉到香橙派的性能,在处理图片或者是视频的时候速度都是比较快的,也可以尝试去处理和识别一些视频或者图片,比较车牌识别等。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 一键优雅为Ubuntu20.04服务器挂载新磁盘
  • 产品经理-研发流程-敏捷开发-迭代-需求评审及产品规划(15)
  • Cesium--获取当前相机中心与地面的射线焦点
  • 处理线程安全的列表CopyOnWriteArrayList 和Collections.synchronizedList
  • Java中的输入输出
  • [misc]-流量包-wireshark-icmp
  • wifi信号处理的CRC8、CRC32
  • 【学习笔记】无人机(UAV)在3GPP系统中的增强支持(十三)-更换无人机控制器
  • uniapp引入 uview( HBuilder 和 npm 两种安装方式) #按需引入
  • Leetcode3202. 找出有效子序列的最大长度 II
  • 【高中数学/幂函数】比较a=2^0.3,b=3^0.2,c=7^0.1的大小
  • 【面试题】Golang 之Channel底层原理 (第三篇)
  • 前端Vue组件化实践:自定义加载组件的探索与应用
  • Python面试题:如何在 Python 中处理大数据集?
  • GO channel 学习
  • 【React系列】如何构建React应用程序
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • echarts花样作死的坑
  • flutter的key在widget list的作用以及必要性
  • idea + plantuml 画流程图
  • pdf文件如何在线转换为jpg图片
  • Spring Cloud Feign的两种使用姿势
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • Vue 动态创建 component
  • vue总结
  • zookeeper系列(七)实战分布式命名服务
  • 服务器从安装到部署全过程(二)
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 你不可错过的前端面试题(一)
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 入门级的git使用指北
  • 小程序01:wepy框架整合iview webapp UI
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​如何防止网络攻击?
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (3)(3.5) 遥测无线电区域条例
  • (52)只出现一次的数字III
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (原)本想说脏话,奈何已放下
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • ****Linux下Mysql的安装和配置
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET CLR Hosting 简介
  • .NET Core 2.1路线图