4.2.3章节人脸检测服务实现
-
这是4.2.3的代码,在注册之后,colcon build,source等之后,运行,报错 -
@HarryHe 在 4.2.3章节人脸检测服务实现 中说:
这是4.2.3的代码,在注册之后,colcon build,source等之后,运行,报错附上代码:
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 osclass 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()