可用于电子设计大赛(控制方向)的一些图像识别代码。基于python,适用于Raspberry Pi平台。
本项目基于树莓派4B和工业摄像头,需要与上位机进行通信(项目使用STM32进行实践)。
- 树莓派4B需要预装python及相关包。
- opencv
- 个人电脑已验证如下版本可以运行。
- opencv-python==4.9.0.80
- 使用FastestDet进行目标识别,模型需要自行训练并导出ONNX格式。
需要指出的是,若载入ONNX网络时出现类似下面的错误:
error: OpenCV(x.x.x) Error: Number of input channels should be multiple of 24 but got 1 in function ‘cv::dnn::ConvolutionLayerImpl::getMemoryShapes’
可考虑更换opencv版本。
- lib 目录内为相关库函数。
- example 目录内为示例。
功能函数位于lib目录内。
Car.py车辆循迹- 多行采样与距离:引导线到视野中心的距离加权平均。
- 多行采样与角度:拟合得到引导线的方向向量。
Command.py命令交互Contours.py轮廓处理- 轮廓过滤:通过面积阈值过滤所得轮廓。
- 计算轮廓重心。
- 提取(面积)最大轮廓。
FastestDet.py基于FastestDet神经网络的目标识别- 读取ONNX格式的模型。
- 输入图片,获得模型输出。
Hop.py信号跳变检测- 信号上升沿&下降沿检测。
PiSerial.py与上位机串口通信- 发送信息到串口。
- 从串口读取一次信息。
- 从串口中读取起始符和结束符之间的内容。
ROI.py感兴趣区域提取- 提取or复制图像中的一部分区域(ROI)。
- 判断某一点是否位于ROI内。
- 计算ROI内黑白像素比例。
Video.py摄像头设置和调整- 常用颜色分割阈值
- HSV:七色、RGB三通道。
- HLS:黑色。
- 返回摄像头硬件参数。
- 摄像头配置和打开。
- 参数可视化调整:生成带有滑块的视频窗口并将滑块值与参数对应。
- 常用颜色分割阈值
更为细致的介绍,请阅读相关代码。
AdjectPara.py工具:使用带有滑块的窗口对相机参数进行实时调整GetCoordinate.py工具:点击屏幕显示坐标,命令行输出坐标和归一化坐标,按下退格键清零GetRange.py工具:使用带有滑块的窗口对阈值进行调整(以黑色提取为例)GetROI.py工具:使用鼠标拖动确定ROI区域,命令行输出坐标和归一化坐标GetTransMatrix.py工具:通过在屏幕左键单击4个点,生成并获取仿射变换矩阵。手动按下退格键进行重置/清零
使用示例位于example目录内。
testCar.pyCar.py的示例- 运行后,输出图像示例和计算输出。
testCommand.pyCommand.py和PiSerial.py的示例- 假设上位机修改r01,按照接收数据对参数r01进行更新,并将修改后数据回传。
testFastestDet.pyFastestDet.py的示例- 使用预训练的FastestDet网络对图片中1~8的数字进行目标识别,标出数字位置和置信度。
GetCoordinate.pyVideo.py的示例testROI.pyROI.py的示例- HSV空间的红色提取
- 划分ROI区域并计算黑白比例、判断点是否位于ROI内。
⚡FastestDet⚡ — 全新设计的超实时Anchor-free目标检测算法
本项目部分程序参考了互联网资料,同时也离不开老师、前辈、同仁们的无私帮助。
本项目欢迎任何人进行补充。
BSD 3-Clause © CodeCatMeow