鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    4.2.3章节人脸检测服务实现

    已定时 已固定 已锁定 已移动
    ROS2机器人开发:从入门到实践
    4.2.3章节 人脸检测
    1
    2
    122
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • H
      HarryHe
      最后由 编辑

      2025-06-04 01-05-00 的屏幕截图.png
      这是4.2.3的代码,在注册之后,colcon build,source等之后,运行,报错2025-06-04 01-06-50 的屏幕截图.png

      H 1 条回复 最后回复 回复 引用 0
      • H
        HarryHe @HarryHe
        最后由 编辑

        @HarryHe 在 4.2.3章节人脸检测服务实现 中说:

        2025-06-04 01-05-00 的屏幕截图.png
        这是4.2.3的代码,在注册之后,colcon build,source等之后,运行,报错2025-06-04 01-06-50 的屏幕截图.png

        附上代码:
        import rclpy
        from rclpy.node import Node
        from chapter4_interfaces.srv import FaceDetector
        from ament_index_python.packages import get_package_share_directory
        from cv_bridge import CvBridge #用于转换格式,opencv和ros的格式不同
        import cv2
        import face_recognition
        import time
        import os

        class FaceDetectNode(Node):
        def init(self):
        super().init('face_detect_node')
        self.service = self.create_service(FaceDetector,'face_detect',self.face_detect_callback)
        self.bridge = CvBridge()
        self.number_of_times_to_upsample = 1
        self.model = 'hog'
        self.default_image_path = os.path.join(get_package_share_directory('demo_python_service'),
        'resource/default.jpg')
        self.get_logger().info("人脸检测服务启动!")

        def face_detect_callback(self,request,response):
            #判断请求的图像数据是否为空:
            #如果不为空,则使用bridge的方法imgmsg_to_cv2,将图像转化成opencv的格式;
            #如果图像为空,则直接从默认文件路径读取图像。
            if request.image.data:
                cv_image = self.bridge.imgmsg_to_cv2(request.image)
            else:
                cv_image = cv2.imread(self.default_image_path)
                self.get_logger().info(f"传入图像为空,使用默认图像!")
            start_time = time.time()
            self.get_logger().info(f"加载完成图像,开始检测!")
            #查找图像中的所有人脸(图像,上采样次数,使用的训练模型)
            face_locations = face_recognition.face_locations(cv_image,
                                                             number_of_times_to_upsample = self.number_of_times_to_upsample,
                                                             model =self.model)
            #检测耗时
            response.use_time = time.time() - start_time
            #人脸数量
            response.number = len(face_locations)
            for top, right, bottom, left in face_locations:
                response.top.append(top)
                response.right.append(right)
                response.bottom.append(bottom)
                response.left.append(left)
            return response
        

        def main(args=None):
        rclpy.init(args=args)
        node = FaceDetectNode()
        rclpy.spin(node)
        rclpy.shutdown()

        1 条回复 最后回复 回复 引用 0
        • 第一个帖子
          最后一个帖子
        皖ICP备16016415号-7
        Powered by NodeBB | 鱼香ROS