凯卓立识别货车围板安全性项目0-1搭建
凯卓立识别货车围板安全性项目0-1搭建
编译方式
1 | mkdir build |
1. 在本机安装 Python
1 | python3 --version |
2. 安装 ultralytics(yolov官方库)
1 | pip install ultralytics |
3. 下载人像图片
下载 people.jpeg,保存在 home 里的 people_ims 文件夹。
4. 编写 detect_people.py 并检测图片
在项目文件夹中编写 detect_people.py,对图片 people1 进行检测。
1 | cd /home/zlyjy/Desktop/tof_sdk/Metasense_SDK_and_Demo_Yunshis/Ubuntu/uvc_ir_depth_rgb_sample_ubuntu20.04_20240609/uvc_ir_depth_rgb/ |
目前已可对文件夹内图片中的人进行框选。
5. 采用 C++ 采集,Python 检测+实时监测
编写 socket.py,使用 python3 detect_people_socket.py 实现接口调用。
1 | cd /home/zlyjy/Desktop/tof_sdk/uvc_ir_depth_rgb/build/ |
6. 遇到 USB.10 的 bug
只有不断重复删除 build 并重新创建 build 才能解决。
7. 代码实现逻辑理解
数据流:
USB摄像头 → C++程序 → Socket传输 → Python脚本 → YOLOv8检测 → 显示结果
cv::Mat matIr;
// 红外图像(单通道灰度)cv::Mat matrgb;
// RGB图像(三通道彩色)cv::Mat matDepth;
// 深度图像(单通道,存储距离值)
8. C++端初始化阶段
8.1 USB设备连接
1 | usb_initial(); // 初始化USB系统 |
作用:连接并识别USB摄像头设备
8.2 设备配置
1 | SendDataByUSB temp; // 创建USB通信对象 |
作用:配置摄像头参数(红外强度、启用通道、帧率)
8.3 图像采集器初始化
1 | depth_picture_capture cap; |
作用:初始化图像采集器
8.4 Socket连接建立
1 | int sock = socket(AF_INET, SOCK_STREAM, 0); |
8.5 图像处理
- IR图像处理
- 深度图像处理
(此处省略部分代码,详见原文)
9. Python 脚本 log 配置
1 | logging.basicConfig( |
10. Python 脚本 socket 配置
1 | server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
11. TCP/UDP、IPv4/IPv6 区别简述
- TCP:可靠、顺序、面向连接,适合网页、文件等
- UDP:不保证可靠和顺序,速度快,适合视频、语音、游戏
- IPv4:点分十进制
- IPv6:冒号分隔的8组16进制
12. Socket 核心代码(初始版本)
(此处核心代码,卖个关子)
13. 发送/接收优化
- C++端循环补发,确保数据完整
- Python端用 recv_all 辅助函数,确保每次都完整收到数据
14. 检测所有类别并绘制检测结果
(此处核心代码,卖个关子)
15. 深度图归一化、三通道复制、jpg编码和socket发送
(此处核心代码,卖个关子)
16. DEPTH类型窗口和类型映射
(此处核心代码,卖个关子)
17. 项目进度检查
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.