香橙派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中的时候能感觉到香橙派的性能,在处理图片或者是视频的时候速度都是比较快的,也可以尝试去处理和识别一些视频或者图片,比较车牌识别等。