当前位置:   article > 正文

香橙派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
  • 1
  • 2

安装opencv

sudo apt-get install -y python3-opencv
  • 1

下载YOLO源码并编译源码

git clone https://github.com/pjreddie/darknet.git
cd darknet
make
  • 1
  • 2
  • 3

在这里插入图片描述

下载预训练权重文件

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

运行 YOLO检索图像

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

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

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

vi test1.py
  • 1

在这里插入图片描述

编写代码

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)  

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114

在百度找几张图片

在这里插入图片描述

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

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

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

运行之前需要给程序权限

在这里插入图片描述

接着运行程序

python3 test1.py
  • 1

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

在这里插入图片描述

那么这里的我们可以看到他识别出来了汽车和椅子,并且使用绿色标记进行了标定,有了香橙派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()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140

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

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

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

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

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

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/960101
推荐阅读
相关标签
  

闽ICP备14008679号