ros-noetic+face-recognition完成相应人脸识别(检测人脸并对应姓名)

一、概述

        因为课程要求,需要在ros上完成人脸识别,并将识别出来的人脸对应相应的姓名。我们采用python中第三方库face-recognition进行实现。

二、具体实现过程

(一)版本

        所使用的系统是ubuntu20.04,ros版本是noetic,在ros上面运行的python解释器是python3.8。程序先经过window系统下进行测试,在window下测试成功后,将其迁移至ubuntu系统下。

        face-recognition是别人已经训练好的一个模型,只需要调用其接口就行。

(二)第三方库安装

        程序主要使用两个库dlib和face-recognition。在终端中输入如下命令,安装即可。

pip install dlib
pip install face_recognition

        需要注意的是,需要首先安装dlib,因为face-recognition需要依赖于dlib,安装顺序出现问题可能会导致之后程序运行出现问题。如果dlib安装不上去,可以考虑使用源码安装,或者进行换源。

        可以参考这篇博客,上面也介绍face-recognition的安装和使用。Ros平台下基于face_recognition的人脸检测及识别_ros人脸识别gitee-优快云博客

(三) 测试版本

        1.概述

        首先编写测试版本,在ros中进行测试,主要是测试是否可以使用face-recogniton。这部分我用于提取图片特征信息的图片数量比较少。少量图片可以达到检测出人脸并对应姓名的效果,效果不太理想,极其容易误检。但能达到测试效果。

        2.代码及分析

#!/usr/bin/env python

import rospy
import cv2 
import numpy as np
import face_recognition
import os
from sensor_msgs.msg import Image
from cv_bridge import CvBridge, CvBridgeError
from std_msgs.msg import Header

# 创建图像订阅者
class ImageConverter:
    def __init__(self):
        self.bridge = CvBridge()
        # 训练集文件夹目录
        self.train_dir = r"/home/gfc/study_BIT/ros/study/catkin_ws/src/testPublishPhoto/images"

        # 准备空的列表来保存人脸编码和对应的人名
        # 这个需要提前完成
        self.known_face_encodings = []
        self.known_face_names = []

        # 训练数据
        self.trainFunction()

        # 计数,用于输出图像
        self.num = 0

        self.image_raw_sub = rospy.Subscriber('/usb_cam/image_raw', Image, self.subscriberPhotoCallback)

    def convert_and_publish(self, img_path):
        # 使用OpenCV读取图像
        cv_image = cv2.imread(img_path)
        # 转换OpenCV图像到ROS图像消息
        ros_image = self.bridge.cv2_to_imgmsg(cv_image, "bgr8")
        # 创建频率
        rate = rospy.Rate(1)
        # 发布图像消息
        while not rospy.is_shutdown():
            self.image_pub.publish(ros_image)
            rospy.loginfo("Image converted and published.")
            rate.sleep()
            # rospy.sp

    def subscriberPhotoCallback(self, data):
        # 这个函数是用来接受摄像头的数据的
        bridge = CvBridge()
        image = bridge.imgmsg_to_cv2(data, "bgr8")
        face_locations = face_recognition.face_locations(image)
        face_encod
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GFCGUO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值