使用ros2服务实现人脸检测2-人脸检测功能实现(适合0基础小白)

发布于:2025-06-29 ⋅ 阅读:(19) ⋅ 点赞:(0)


一、用到的库

face_recognition:实现在图片中检测人脸。
cv2:显示图片,并且可以在图像中展示检测结果。
get_package_share_directory:获取图片的真是路径

二、使用步骤

1.引入库

import face_recognition
import cv2
from ament_index_python.packages import get_package_share_directory

2.获取图片真实路径

从这里开始的代码全部写入主函数。

default_image_path = get_package_share_directory('demo_python_service') + '/resource/default.jpg'
print(f"图片的真实路径:{default_image_path}")
image = cv2.imread(default_image_path)

这里的defauly_image_path储存的是需要检测图片的真实路径,因为你的这个程序以后会储存到其他地址,所以这里不能写死。cv2.imread可以将路径中的图片以特定的参数储存到image中。从这里我们也可以发现要将需要检测人脸的图片放到哪,也就是demo_python_service下的resource文件夹里。

3.检测人脸

face_locations = face_recognition.face_locations(image,number_of_times_to_upsample = 1,model = 'hog')
print(f"人脸;位置:{face_locations}")

face_recognition.face_locations可以检测图片中的人脸,其检测结果以位置的数组储存到face_locations中(后面展示结果时我会展示face_locations的数据是怎么样的)。函数中有三个必填的参数:第一个是需要进行检测的图片(image),第二个是检测次数(1),第三个是模式(‘hog’)。

4.绘制人脸

for top,right,bottom,left in face_locations:
    cv2.rectangle(image,(left,top),(right,bottom),(255,0,0),4)

由上面可知我们检测人脸的结果是人脸在图片中的位置,但是这个位置只是数组,不能很直观的可视,所以我们需要调用cv2中的cv2.rectangle函数在有人脸的位置画上矩形框。

5.显示结果

cv2.imshow('Face Dectect Result',image)
cv2.waitKey(0)

最后我们将结果显示出来。

6.更改setup.py

entry_points={
        'console_scripts': [
            'learn_face_detect=demo_python_service.learn_face_detect:main',

7.完整代码

import face_recognition
import cv2
from ament_index_python.packages import get_package_share_directory

def main():
    #获取图片的真实路径
    default_image_path = get_package_share_directory('demo_python_service') + '/resource/default.jpg'
    print(f"图片的真实路径:{default_image_path}")
    image = cv2.imread(default_image_path)
    #检测人脸
    face_locations = face_recognition.face_locations(image,number_of_times_to_upsample = 1,model = 'hog')
    print(f"人脸;位置:{face_locations}")
    #绘制人脸框
    for top,right,bottom,left in face_locations:
        cv2.rectangle(image,(left,top),(right,bottom),(255,0,0),4)
    #结果显示
    cv2.imshow('Face Dectect Result',image)
    cv2.waitKey(0)

三、结果展示

在这里插入图片描述
在编译后,运行程序可以看到face_locations中储存的人脸位置是一个数组(代表图片中只有一张人脸)数组中的四个数字是矩形框的四个角的位置。
在这里插入图片描述
紧接着检测人脸的结果图片也显示出来。



网站公告

今日签到

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