在这个数字化时代,人工智能技术正在飞速发展,其中,行人检测作为计算机视觉领域的一个重要分支,已经在安防、人机交互等领域展现出巨大的应用潜力。而树莓派(Raspberry Pi)因其低功耗、低成本的特点,成为了实现行人检测的理想平台。结合ROS(Robot Operating System)这一强大的机器人操作系统,我们可以轻松实现一个简单的行人检测系统。本文将为你详细介绍树莓派+ROS实现行人检测的入门教程与实战案例解析。
一、准备工作
1. 树莓派硬件准备
- 树莓派型号:推荐使用树莓派3B+,因为它拥有更好的性能和更丰富的接口。
- 树莓派配件:Micro SD卡、电源、散热片、树莓派底座等。
- 摄像头:选择一款适合树莓派的摄像头,如树莓派官方摄像头。
2. 软件准备
- 操作系统:下载树莓派的官方操作系统,例如Raspbian Stretch。
- ROS版本:选择适合树莓派的ROS版本,如ROS Noetic。
3. 编程环境
- Python:树莓派预装了Python环境,确保版本在3.5及以上。
- ROS工具:安装ROS依赖项,如
rosdep、rosinstall等。
二、树莓派配置
1. 系统安装
将Raspbian Stretch烧录到Micro SD卡,并插入树莓派。启动树莓派,按照屏幕提示完成系统安装。
2. ROS安装
- 更新系统:打开终端,输入以下命令更新系统:
sudo apt update sudo apt upgrade - 安装ROS依赖项:使用以下命令安装ROS依赖项:
sudo apt install -y python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential - 创建ROS工作空间:在终端输入以下命令创建ROS工作空间:
mkdir -p ~/catkin_ws/src cd ~/catkin_ws/ catkin_make - 设置环境变量:在终端输入以下命令设置环境变量:
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc source ~/.bashrc
三、行人检测算法
1. OpenCV库
安装OpenCV库,用于图像处理和行人检测:
sudo apt install -y libopencv-dev
2. YOLOv3算法
YOLOv3是一个高效的实时目标检测算法,适合用于行人检测。以下是安装YOLOv3的步骤:
- 克隆YOLOv3仓库:在终端输入以下命令克隆YOLOv3仓库:
git clone https://github.com/pjreddie/darknet - 编译YOLOv3:进入darknet目录,编译YOLOv3:
cd darknet make
四、实现行人检测
1. 编写Python脚本
创建一个Python脚本,用于加载摄像头视频流,并使用YOLOv3进行行人检测。以下是一个简单的示例:
import cv2
import numpy as np
# 加载YOLOv3模型和权重文件
net = cv2.dnn.readNet("yolov3.weights", "yolov3.cfg")
# 加载图像分类器
classes = []
with open("coco.names", "r") as f:
classes = [line.strip() for line in f.readlines()]
# 设置置信度阈值
conf_threshold = 0.5
iou_threshold = 0.4
# 加载摄像头视频流
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
# 转换为BGR到RGB
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
# 转换为神经网络输入尺寸
blob = cv2.dnn.blobFromImage(frame, scalefactor=0.00392, size=(320, 320), mean=(0, 0, 0), swapRB=True, crop=False)
# 设置神经网络输入
net.setInput(blob)
# 进行预测
layer_names = net.getLayerNames()
output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()]
outputs = net.forward(output_layers)
# 检测
boxes = []
confidences = []
class_ids = []
for output in outputs:
for detect in output:
scores = detect[5:]
class_id = np.argmax(scores)
confidence = scores[class_id]
if confidence > 0.5:
# 获取边界框
center_x = int(detect[0] * frame_width)
center_y = int(detect[1] * frame_height)
w = int(detect[2] * frame_width)
h = int(detect[3] * frame_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)
# 非极大值抑制
indices = cv2.dnn.NMSBoxes(boxes, confidences, conf_threshold, iou_threshold)
# 绘制边界框
for i in indices:
i = i[0]
x, y, w, h = boxes[i]
label = str(classes[class_ids[i]])
confidence = str(round(confidences[i], 2))
color = (0, 255, 0)
cv2.rectangle(frame, (x, y), (x + w, y + h), color, 2)
cv2.putText(frame, label + " " + confidence, (x, y - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2)
# 显示结果
cv2.imshow("Image", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
2. 运行脚本
在终端中,进入脚本所在的目录,并运行以下命令:
python3 yolo_video.py
此时,你将看到摄像头视频流中的行人被检测出来,并在屏幕上显示边界框和标签。
五、总结
本文详细介绍了如何使用树莓派和ROS实现行人检测。通过本文的学习,你可以了解到:
- 树莓派和ROS的准备工作。
- 行人检测算法的选择和安装。
- 编写Python脚本实现行人检测。
- 运行脚本并观察结果。
希望本文对你有所帮助,祝你成功实现树莓派+ROS行人检测!