使用ros2服务实现人脸检测4-客户端(适合0基础小白)

发布于:2025-06-30 ⋅ 阅读:(18) ⋅ 点赞:(0)


前言

上一篇文章我们完成了人脸检测服务端的编写,给服务端发送请求会收到回复。那么我们现在需要编写一个客户端节点,专门用来发送请求,收回复。


一、用到的库

客户端用到的库与服务端基本一致,所以这里就略过。

二、使用步骤

1.在demo_python_service下新建名为detect_node_detect_client_node的python文件

import rclpy
from rclpy.node import Node
from chapt4_interfaces.srv import FaceDetector
import face_recognition
import cv2
from ament_index_python.packages import get_package_share_directory
from cv_bridge import CvBridge
import time

class FaceDetectClientNode(Node):
    def __init__(self):
        super().__init__('face_detect_client_node')
        self.bridge = CvBridge()
        self.default_image_path = get_package_share_directory('demo_python_service') + '/resource/test1.jpg'
        self.get_logger().info(f"人脸检测客户端已启动")
        self.client = self.create_client(FaceDetector,'face_detect')
        self.image = cv2.imread(self.default_image_path)

    def send_request(self):
        #1.判断服务端是否在线
        while self.client.wait_for_service(timeout_sec=1.0) is False:
            self.get_logger().info('等待服务上线!')
        #2.构造request
        request = FaceDetector.Request()
        request.image = self.bridge.cv2_to_imgmsg(self.image)
        #3.发送请求并等待处理完成
        future = self.client.call_async(request)# 现在的future并没有包含响应的结果,需要等待服务端处理完成才会把结果放入到future中
        rclpy.spin_until_future_complete(self,future)
        response = future.result()
        self.get_logger().info(f'接受到响应,共检测到有{response.number}张人脸,耗时{response.use_time}s')
        self.show_response(response)

    def show_response(self,response):
        for i in range(response.number):
            top = response.top[i]
            right = response.right[i]
            bottom = response.bottom[i]
            left = response.left[i]
            cv2.rectangle(self.image,(left,top),(right,bottom),(255,0,0),4)
        cv2.imshow('Face Dectect Result',self.image)
        cv2.waitKey(0)

    
    


def main():
    rclpy.init()
    node = FaceDetectClientNode()
    node.send_request()
    rclpy.spin(node)
    rclpy.shutdown()

2.更改setup.py

在entry_points加入’face_detect_client_node=demo_python_service.face_detect_client_node:main’,

entry_points={
        'console_scripts': [
            'learn_face_detect=demo_python_service.learn_face_detect:main',
            'face_detect_node=demo_python_service.face_detect_node:main',
            'face_detect_client_node=demo_python_service.face_detect_client_node:main',
        ],
    },

保存编译后运行。

二、结果展示

首先运行我们上一章的服务端节点,再运行客户端节点。在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到