香橙派AIpro测评:yolo8+usb鱼眼摄像头的Camera图像获取及识别
一、前言
近期收到了一块受到业界人士关注的开发板"香橙派AIpro",因为这块板子具有极高的性价比,同时还可以兼容ubuntu、安卓等多种操作系统,今天博主便要在一块8+32g的香橙派AI香橙派AIpro进行YoloV8s算法的部署并使用一个外接的鱼眼USB摄像头来作目标检测与识别。经过博主的整体测试,这块开发板可以用来作为边缘计算平台,承担大众化场景的目标检测任务。随着人工智能技术的不断发展,目标检测作为计算机视觉领域的一个重要任务,已经得到了广泛的研究和应用。
二、香橙派AIpro介绍
2.1香橙派简介
作为业界首款基于昇腾深度研发的AI开发板,Orange Pi AIpro无论在外观上、性能上还是技术服务支持上都非常优秀。采用昇腾AI技术路线,集成图形处理器,拥有8GB/16GB LPDDR4X,可以外接32GB/64GB/128GB/256GB eMMC模块,支持双4K高清输出,8/20 TOPS AI算力。配套了MindStudio全流程开发工具链,并提供一键镜像烧录工具和模型适配工具实现极简开发,让开发者快速上手使用,支持算法模型的快速适配。
可广泛适用于AI教学实训、AI算法验证、智能小车、机械臂、边缘计算、无人机、人工智能、云计算、AR/VR、智能安防、智能家居、智能交通等领域。Orange Pi AIpro支持Ubuntu、openEuler操作系统,满足大多数AI算法原型验证、推理应用开发的需求。
2.2香橙派硬件及接口介绍
香橙派AIpro丰富的接口赋予了Orange Pi AIpro强大的可拓展性。包括两个HDMI输出、GPIO接口、Type-C电源接口、支持SATA/NVMe SSD 2280的M.2插槽、TF插槽、千兆网口、两个USB3.0、一个USB Type-C 3.0、一个Micro USB、两个MIPI摄像头、一个MIPI屏等,预留电池接口。
在操作系统方面,Orange Pi AIpro支持Ubuntu、openEuler操作系统,满足大多数AI算法原型验证、推理应用开发的需求,可广泛适用于AI边缘计算、深度视觉学习及视频流AI分析、视频图像分析、自然语言处理、智能小车、机械臂、人工智能、无人机、云计算、AR/VR、智能安防、智能家居等领域,覆盖 AIoT各个行业。
三、实际场景应用体验
3.1所用硬件及技术介绍
3.1.1Yolo V8介绍
YOLOv8是YOLO系列算法的最新版本,其在保持高效、准确的同时,还进一步优化了算法结构,提高了运行速度。YOLOv8采用了全新的网络结构和损失函数,使得模型在训练过程中更加稳定,同时也提高了模型的泛化能力。
YOLOv8采用了端到端的训练方式,将目标检测视为一个回归问题,直接预测物体的位置和类别。在模型结构上,YOLOv8采用了CSPDarknet53作为骨干网络,通过增加残差连接和特征融合,提高了模型的特征提取能力。在损失函数方面,YOLOv8采用了CIoU损失函数,同时考虑了预测框与真实框的重叠面积、中心点距离以及长宽比等因素,使得模型在训练过程中更加关注于提高预测框的准确性。
3.1.2鱼眼镜头介绍
鱼眼镜头是一种焦距为16mm或更短的并且视角接近或等于180°的镜头。 它是一种极端的广角镜头,“鱼眼镜头”是它的俗称。为使镜头达到最大的摄影视角,这种摄影镜头的前镜片直径很短且呈抛物状向镜头前部凸出,与鱼的眼睛颇为相似,“鱼眼镜头”因此而得名。
鱼眼镜头属于超广角镜头中的一种特殊镜头,它的视角力求达到或超出人眼所能看到的范围。因此,鱼眼镜头与人们眼中的真实世界的景象存在很大的差别,因为我们在实际生活中看见的景物是有规则的固定形态,而通过鱼眼镜头产生的画面效果则超出了这一范畴。
鱼眼镜头具有超大视场,因而被广泛应用于场景监视、卫星定位、机器人导航、微小智能系统及工程测量等领域。由于鱼眼镜头能够实现全空域包容和全时域实时信息的获取,特别是符合现代战争对信息获取技术的需求,这是其他光电侦测手段所不能比的,因此鱼眼镜头在国防和军事领域也得到了重要应用。
3.2鱼眼镜头图像获取
3.2.1流程介绍
通过USB接口连接鱼眼镜头与香橙派AIpro,从鱼眼镜头获取图像、并处理为YUV图像。
3.2.2相关驱动安装
首先通过下面的链接下载相关源码:
Ascend/EdgeAndRobotics - Gitee.com
下载完成后进行解压,并进入到样例目录
3.2.3安装FFmpeg
sudo apt-get install ffmpeg libavcodec-dev libswscale-dev libavdevice-dev
运行结果:
3.2.4安装OpenCV
sudo apt-get install libopencv-dev
运行结果:
3.2.5编译样例源码
执行编译命令
g++ main.cpp -o main -lavutil -lavformat -lavcodec -lavdevice
编译命令执行成功后,在USBCamera样例目录下生成可执行文件main。
运行结果:
3.2.6运行样例,从Camera获取图像
运行可执行文件,其中/dev/video0表示Camera设备,需根据实际情况填写:
./main /dev/video0
运行成功后,在USBCamera样例目录下生成yuyv422格式、1280*720分辨率的out.yuv文件。
运行结果:
注意:当把一个摄像头插入开发板后,执行ls /dev/vi*命令可看到摄像头的vedio节点。这里出现了两个设备节点:/dev/video0、/dev/video1,是因为一个是图像/视频采集,一个是metadata采集,因此本样例中在运行可执行文件时,选择图像/视频采集的设备节点/dev/video0。
3.2.7检查从Camera获取的图像
执行如下命令,使用FFmpeg软件查看图像:
ffplay -pix_fmt yuyv422 -video_size 1280*720 out.yuv
运行结果:
3.3YoloV8s算法部署
在使用YOLOv8之前,需要先安装相关的依赖库,包括Python、PyTorch等。同时,为了方便使用YOLOv8,我们还可以选择安装一些辅助工具,如COCO数据集、预训练模型等。
3.3.1环境准备
博主选择的是torch 2.2和torchvision 0.17安装如下:
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simplepip install torch==2.2.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install torchvision==0.17.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
3.3.2安装yolo v8
pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple
3.3.3编写实时目标检测程序
import cv2from ultralytics import YOLO
from cv2 import getTickCount, getTickFrequency
加载 YOLOv8 模型
model = YOLO("weights/yolov8s.pt")
获取摄像头内容,参数 0 表示使用默认的摄像头
cap = cv2.VideoCapture(1)while cap.isOpened():loop_start = getTickCount()success, frame = cap.read() # 读取摄像头的一帧图像if success:results = model.predict(source=frame) # 对当前帧进行目标检测并显示结果annotated_frame = results[0].plot()# 中间放自己的显示程序loop_time = getTickCount() - loop_starttotal_time = loop_time / (getTickFrequency())#FPS = int(1 / total_time)# 在图像左上角添加FPS文本#fps_text = f"FPS: {FPS:.2f}"#font = cv2.FONT_HERSHEY_SIMPLEX#font_scale = 1#font_thickness = 2#text_color = (0, 0, 255) # 红色#text_position = (10, 30) # 左上角位置#cv2.putText(annotated_frame, fps_text, text_position, font, font_scale, text_color, font_thickness)cv2.imshow('img', annotated_frame)# 通过按下 'q' 键退出循环if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release() # 释放摄像头资源
cv2.destroyAllWindows() # 关闭OpenCV窗口
3.3.4最终识别结果
四、结语
作为一名机器视觉工程师,本次我使用香橙派AIpro来部署了yolo V8s的目标检测与识别算法,同时使用适合机器人使用的鱼眼摄像头进行真实图像获取,并将实时获取的图像传递给yoloV8算法进行图像中目标的检测与识别。经过测试香橙派AIpro可以实时使用yoloV8算法进行目标识别与检测,并且识别的准确率还是较高的。
经过博主的整体测试,香橙派AIpro的计算能力完全可以可以用来作为边缘计算平台来承担大众化场景的目标检测任务。相信这款高性价比的开发板会为人们快速验证部署自己的人工智能算法提供性价比高、提高开发效率的完美方案。后续博主也会通过自己制作数据集打标签的方式,在香橙派AIpro上来尝试训练一下模型。
相关文章:

香橙派AIpro测评:yolo8+usb鱼眼摄像头的Camera图像获取及识别
一、前言 近期收到了一块受到业界人士关注的开发板"香橙派AIpro",因为这块板子具有极高的性价比,同时还可以兼容ubuntu、安卓等多种操作系统,今天博主便要在一块832g的香橙派AI香橙派AIpro进行YoloV8s算法的部署并使用一个外接的鱼眼USB摄像头…...

大华设备接入GB28181视频汇聚管理平台EasyCVR安防监控系统的具体操作步骤
智慧城市/视频汇聚/安防监控平台EasyCVR兼容性强,支持多协议接入,包括国标GB/T 28181协议、GA/T 1400协议、部标JT808协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大华SDK、华为SDK、宇视SDK、乐橙SDK、萤石云SDK等,并能对外分发RTMP、…...
Laravel包开发指南:构建可重用组件的艺术
标题:Laravel包开发指南:构建可重用组件的艺术 Laravel不仅是一个强大的Web应用框架,它的包(Package)系统也为开发者提供了构建和共享可重用组件的能力。通过包开发,开发者可以轻松地扩展Laravel的功能&am…...

JavaDS预备知识
集合框架 Java 集合框架 Java Collection Framework ,又被称为容器 container ,是定义在 java.util 包下的一组接口 interfaces和其实现类 classes 。 其主要表现为将多个元素 element 置于一个单元中,对数据进行创建(Create)、读取(Retrieve…...
日常学习--20240705
1、IO流 按照IO操作的数据类型分为字节流和字符流: 字节流:又分为输入流(其他程序传递过来的数据,读取流中的数据)和输出流(往流中写数据,传递给其他程序);可以操作二进制文件&…...
Java中初始化一个List的多种方式
1.最原始的方式:先创建,然后再添加元素 List<String> list new ArrayList<>(); list.add("apple"); list.add("banana"); list.add("cherry");2.使用Arrays.asList 这是一种快速方便的方式,直接…...

BeikeShop多国语言多货币商城系统源码基于Laravel框架
BeikeShop是基于 Laravel 开发的一款开源商城系统,支持多语言商城 多货币商城 100%全开源 ChatGPT OpenAI B2C商城系统 H5商城 PHP商城系统 商城源码 PC商城 跨境电商系统 跨境商城系统 电商商城系统 Laravel 10 框架开发系统,支持插件市场。 Event 机制…...

gradle构建工具
setting.gradle // settings.gradle rootProject.name my-project // 指定根项目名称include subproject1, subproject2 // 指定子项目名称,可选jar包名称 方式一 jar {archiveBaseName my-application // 设置 JAR 文件的基本名称archiveVersion 1.0 // 设置…...

Java需要英语基础吗?
Java编程语言本身并不要求必须有很强的英语基础,因为Java的语法和逻辑是独立于任何特定语言的。我收集归类了一份嵌入式学习包,对于新手而言简直不要太棒,里面包括了新手各个时期的学习方向编程教学、问题视频讲解、毕设800套和语言类教学&am…...

14-36 剑和诗人10 - 用LLM构建 AI 代理平台
介绍 在当今快速发展的技术环境中,大型语言模型 (LLM) 和 AI 代理正在改变我们与信息交互、实现流程自动化以及应对不同行业复杂挑战的方式。随着这些强大的模型不断发展,对能够无缝集成和协调它们的强大平台的需求变得越来越重要。 让我们深入研究设计…...
如何在Java中实现批量数据处理
如何在Java中实现批量数据处理 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 1. 引言 在大数据时代,处理大量数据是许多应用程序中必不可少的需…...

项目部署_持续集成_Jenkins
1 今日内容介绍 1.1 什么是持续集成 持续集成( Continuous integration , 简称 CI )指的是,频繁地(一天多次)将代码集成到主干 持续集成的组成要素 一个自动构建过程, 从检出代码、 编译构建…...

如何选择TikTok菲律宾直播网络?
为了满足用户对于实时互动的需求,TikTok推出了直播功能,让用户能够与粉丝即时交流。本文将探讨如何选择适合的TikTok菲律宾直播网络,并分析OgLive是否是值得信赖的选择。 TikTok菲律宾直播网络面临的挑战 作为全球领先的短视频平台ÿ…...

Pseudo-Label : The Simple and Efficient Semi-Supervised Learning Method--论文笔记
论文笔记 资料 1.代码地址 https://github.com/iBelieveCJM/pseudo_label-pytorch 2.论文地址 3.数据集地址 论文摘要的翻译 本文提出了一种简单有效的深度神经网络半监督学习方法。基本上,所提出的网络是以有监督的方式同时使用标记数据和未标记数据来训练的…...
信息收集-arping
信息收集-arping 简介 arping 是一个用于发送 ARP 请求和接收 ARP 回复的工具。它通常用于检查网络中的 IP 地址是否被使用,或发现网络中的重复 IP 地址。arping 工具类似于 ping 命令,但它使用的是 ARP 协议而不是 ICMP 协议。在 Kali Linux 中&#…...

一文了解常见DNS问题
当企业的DNS出现故障时,为不影响企业的正常运行,团队需要能够快速确定问题的性质和范围。那么有哪些常见的DNS问题呢? 域名解析失败: 当您输入一个域名,但无法获取到与之对应的IP地址,导致无法访问相应的网…...
TCP/IP 网络协议族分层
TCP/IP协议族 TCP/IP不单是TCP和IP两个协议,TCP/IP实际上是一组协议,它包括上百个各种功能的协议,如:远程登录、文件传输和电子邮件等,当然,也包括TCP、IP协议 它将软件通信过程抽象化为四个抽象层&#…...

Qt:5.QWidget属性介绍(Enabled属性-控件可用性设置、geometry属性-控件位置/大小设置)
目录 一、 QWidget属性的介绍: 二、Enabled属性-控件可用性设置: 2.1Enabled属性的介绍: 2.2获取控件当前可用状态的api——isEnabled(): 2.3设置控件当前的可用状态的api—— setEnabled() : 2.4 实例ÿ…...

NoSQL 非关系型数据库 Redis 的使用:
redis是基于内存型的NoSQL 非关系型数据库,本内容只针对有基础的小伙伴, 因为楼主不会做更多的解释,而是记录更多的技术接口使用,毕竟楼主不是做教学的,没有教学经验。 关于redis的介绍请自行搜索查阅。 使用redis数据…...

python库(5):Psutil库实现系统和硬件监控工具
1 psutil简介 psutil(process and system utilities)是一个跨平台库,用于检索运行中进程和系统利用率(包括 CPU、内存、磁盘、网络等)的信息,可以提供丰富的系统监控功能。 2 psutil安装 pip install -i …...

关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...

毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...
ArcPy扩展模块的使用(3)
管理工程项目 arcpy.mp模块允许用户管理布局、地图、报表、文件夹连接、视图等工程项目。例如,可以更新、修复或替换图层数据源,修改图层的符号系统,甚至自动在线执行共享要托管在组织中的工程项。 以下代码展示了如何更新图层的数据源&…...
shell脚本质数判断
shell脚本质数判断 shell输入一个正整数,判断是否为质数(素数)shell求1-100内的质数shell求给定数组输出其中的质数 shell输入一个正整数,判断是否为质数(素数) 思路: 1:1 2:1 2 3:1 2 3 4:1 2 3 4 5:1 2 3 4 5-------> 3:2 4:2 3 5:2 3…...