一、用到的库
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中储存的人脸位置是一个数组(代表图片中只有一张人脸)数组中的四个数字是矩形框的四个角的位置。
紧接着检测人脸的结果图片也显示出来。