高通QCS6490平台部署YOLOv8,Opencv C++读取视频/USB摄像头推理识别测试

QCS6490部署YOLOv8与OpenCV测试

高通QCS6490平台部署YOLOv8,Opencv C++读取视频/USB摄像头推理识别测试

1. 参考说明

高通QCS6490开发板: APLUX犀牛派AI开发板

平台手册:犀牛派A1 产品使用手册 | APLUX Doc Center

平台SDK:AidLite SDK | APLUX Doc Center

平台模型广场:模型广场

高通QNN文档:AI Engine Direct SDK

2. 操作说明

2.1 供电与连接

板卡为 DC 12V供电,使用网络访问板卡:

请添加图片描述

2.2 网络访问

通过adb工具将板卡IP修改为:192.168.1.xxx

可通过ssh访问:

ip: 192.168.1.xxx

账号:aidlux

密码:aidlux

通过浏览器访问:

url: http://192.168.1.xxx:8000

账号:aidlux

密码:aidlux

验证AidLite安装(Linux)

# aidlite sdk c++ check
python3 -c "import aidlite; print(aidlite.get_library_version())"

# aidlite sdk python check
python3 -c "import aidlite; print(aidlite.get_py_library_version())"

3. 算法验证

内置ubuntu22.04系统,默认安装了python3.10、opencv等库,可进行yolov5、yolov8、yolov11等官方demo验证,demo来自官方模型广场:模型广场,选择 QCS6490芯片平台,根据需求选择算法,然后将下载的demo拷贝到板卡对应路径下,进行编译和测试:
在这里插入图片描述

3.1 模型转换

pt转换为onnx模型

# conda 新建环境
conda create -n Model_T python=3.10
# 打开环境
conda activate Model_T
# 配置包
pip install ultralytics onnx

新建一个python文件,用于模型转换以及导出:

## model.py
from ultralytics import YOLO

model = YOLO('./yolov8n.pt') # 加载pt模型文件
# 导出ONNX配置参数
export_params = {
   
   
'format': 'onnx',
'opset': 12, 		# 推荐算子集版本
'simplify': True, 	# 启用模型简化
'dynamic': False, 	# 固定输入尺寸
'imgsz': 640, 		# 标准输入尺寸
'half': False 		# 保持FP32精度
} 
#执行转换并保存到同级目录
model.export(**export_params)

Model_T 环境下,执行命令,转换pt文件为onnx

python model.py
3.2 模型优化

参考 模型优化平台 (AIMO) 用户指南 和模型广场yolov8的“模型转换参考”。
使用 模型优化平台 (AIMO) 进行模型转换,转换完成后下载到本地,然后在拷贝到板卡yolov8测试源码models加载路径下。

在这里插入图片描述
yolov8 模型测试

# c++
cd /home/aidlux/aidlite_demo/examples/model_farm_yolov8s_qcs6490_qnn2.31_int8_aidlite/cpp
mkdir build
cd build/
cmake ..
make -j
./run_test --target_model ../../models/cutoff_yolov8n_qcs6490_w8a8.qnn231.ctx.bin --imgs ../bus.jpg  --invoke_nums 10

#python
cd /home/aidlux/aidlite_demo/examples/model_farm_yolov8s_qcs6490_qnn2.31_int8_aidlite/
python3  python/run_test.py --target_model ./models/cutoff_yolov8s_qcs6490_w8a8.qnn231.ctx.bin --imgs ./python/bus.jpg  --invoke_nums 10

在这里插入图片描述

3.3 修改c++源码为读取mp4视频或USB摄像头验证

查看usb摄像头设备
在这里插入图片描述

执行 ls /dev/video* 后看到以下设备:
在这里插入图片描述

我这里USB摄像头设备默认不是0,可通过v4l2-ctl 查看每个设备的信息

v4l2-ctl --device=/dev/video0 --info
v4l2-ctl --device=/dev/video1 --info
v4l2-ctl --device=/dev/video2 --info
v4l2-ctl --device=/dev/video3 --info

发现usb摄像头设备ID是 2
在这里插入图片描述

c++源码如下:

#include <iostream>
#include <string>
#include <algorithm>
#include <cctype>
#include <opencv2/opencv.hpp>
#include <aidlux/aidlite/aidlite.hpp>
#include <vector>
#include <numeric>
#include <signal.h>
#include <chrono>


const float INPUT_WIDTH = 640.0;
const float INPUT_HEIGHT = 640.0;
const float SCORE_THRESHOLD = 0.25;
const float NMS_THRESHOLD = 0.45;
const float CONFIDENCE_THRESHOLD = 0.25;
const uint32_t size = 640;
const uint32_t out_size = 8400;

const int FONT_FACE = cv::FONT_HERSHEY_SIMPLEX;
cv::Scalar WHITE = cv::Scalar(255,255,255);

const float FONT_SCALE = 0.75;
const int THICKNESS = 1;

const int CLASS_NUM = 80;  //目标类数量

const std::vector<std::string> class_list = {
   
   
    "person", "bicycle", "car", "motorcycle", "airplane", "bus", "train",
    "truck", "boat", "traffic light", "fire hydrant", "stop sign", "parking meter",
    "bench", "bird", "cat", "dog", "horse", "sheep", "cow", "elephant", "bear",
    "zebra", "giraffe", "backpack", "umbrella", "handbag", "tie", "suitcase",
    "frisbee", "skis", "snowboard", "sports ball", "kite", "baseball bat",
    "baseball glove", "skateboard", "surfboard", "tennis racket", "bottle",
    "wine glass", "cup", "fork", "knife", "spoon", "bowl", "banana", "apple",
    "sandwich", "orange", "broccoli", "carrot", "hot dog", "pizza", "donut",
    "cake", "chair", "couch", "potted plant", "bed", "dining table", "toilet",
    "TV", "laptop", "mouse", "remote", "keyboard", "cell phone", "microwave",
    "oven", "toaster", "sink", "refrigerator", "book", "clock", "vase",
    "scissors", "teddy bear", "hair drier", "toothbrush"
};


// const std::vector<std::string> class_list = {
   
   
//     "Multi-rotor-UAV","Fixed-wing-UAV"
// };


using namespace Aidlux::Aidlite;


// 输出视频路径   
std::string output_video = "./output.mp4"
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值