• Haar Cascade 分类器:Haar Cascade 分类器是一种对象检测器,通过训练来识别特定的对象,这里主要用于人脸检测。
self.classifier_path = “haarcascade_frontalface_default.xml” 指定了已经训练好的人脸分类器的路径。
• ROS2节点初始化:rclpy.init(args=args) 和 rclpy.shutdown() 分别用于初始化和关闭ROS2节点。
• 图像订阅和发布:
self.image_sub = self.create_subscription(Image, ‘/image_raw’, self.image_callback, 10) 用于订阅原始图像。
self.pub = self.create_publisher(Image, ‘/camera/process_image’, 10) 用于发布处理后的图像。
• 图像处理回调函数:image_callback(self, msg) 处理订阅的图像,首先将ROS消息转换为OpenCV图像。
• 将图像转换为灰度图像:gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)。
• 使用 Haar Cascade 分类器检测人脸:faces = self.face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=3, minSize=(20, 20))。
• 如果检测到人脸,用矩形标记出来:cv2.rectangle(image, (x, y), (x + w, y + h), (255, 0, 0), 2)。最后,将处理后的图像发布出去:self.pub.publish(self.bridge.cv2_to_imgmsg(image, ‘bgr8’))。
• ROS2节点主函数:def main(args=None): 主函数初始化节点,并通过 rclpy.spin(face_detection) 进行节点的运行。