当前位置: 首页 > news >正文

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

文章目录

  • 前言
  • 一、用到的库
  • 二、使用步骤
    • 1.在demo_python_service下新建名为detect_node_detect_client_node的python文件
    • 2.更改setup.py
  • 二、结果展示


前言

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


一、用到的库

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

二、使用步骤

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 timeclass 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.构造requestrequest = 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',],},

保存编译后运行。

二、结果展示

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

相关文章:

  • 通达信【MACD趋势增强系统】幅图(含支撑压力位)
  • D-FiNE:在DETR模型中重新定义回归任务为精细粒度分布细化
  • MySQL数据库的增删改查
  • SpringCloud系列(41)--SpringCloud Config分布式配置中心简介
  • 模拟多维物理过程与基于云的数值分析-AI云计算数值分析和代码验证
  • CppCon 2017 学习:The Asynchronous C++ Parallel Programming Model
  • 在线之家官网入口 - 免费高清海外影视在线观看平台
  • STM32之28BYJ-48步进电机驱动
  • 思二勋:算法稳定币的发展在于生态场景、用户和资产的丰富性
  • 打造地基: App拉起基础小程序容器
  • 大事件项目记录12-文章管理接口开发-总
  • 现代 JavaScript (ES6+) 入门到实战(一):告别 var!拥抱 let 与 const,彻底搞懂作用域
  • Spark Web UI从0到1详解
  • SpringSecurity6-授权-动态权限
  • (NIPS-2024)CogVLM:预训练语言模型的视觉专家
  • 大事件项目记录13-接口开发-补充
  • 深入剖析 Linux 内核网络核心:sock.c 源码解析
  • 现代 JavaScript (ES6+) 入门到实战(四):数组的革命 map/filter/reduce - 告别 for 循环
  • 数据挖掘、机器学习与人工智能:概念辨析与应用边界
  • 设计模式精讲 Day 18:备忘录模式(Memento Pattern)