本文基于百度AI进行人脸识别,在众多人脸中匹配人脸库中的人脸。
首先创建百度AI网站帐号:
进入控制台:
创建应用可以在应用中创建自己的人脸库。
#!/usr/bin/env python
import rospy
from PIL import Image
from std_msgs.msg import String
from aip import AipFace
import base64
from sensor_msgs.msg import Image
import cv2
from cv_bridge import CvBridge, CvBridgeError
import PIL.Image
# def callback(data):
# rospy.loginfo(rospy.get_caller_id() + "I heard %s", data.data)
APP_ID = '××××××'
API_KEY = '×××××××××××'
SECRET_KEY = '××××××××××××××'
client = AipFace(APP_ID, API_KEY, SECRET_KEY)
def listen():
filePath = "/home/wly/data/1/wly.jpg"
with open(filePath,"rb") as f:
base64_data = base64.b64encode(f.read())
image = str(base64_data)
imageType = "BASE64"
groupIdList = "wangliyuan"
a = client.search(image, imageType, groupIdList);
print(a)
rospy.spin()
if __name__ == '__main__':
rospy.init_node('listener')
listen()
这里
APP_ID = '××××××'
API_KEY = '×××××××××××'
SECRET_KEY = '××××××××××××××'
这些信息可以在刚刚百度ai创建的应用中找到。
把这些改造成ros节点之后你会发现Image中提取到的时RGB图像,但是百度AI不支持RGB图像的识别,我们只能将RGB图形进行转化:
#! /usr/bin/python
# Copyright (c) 2015, Rethink Robotics, Inc.
# Using this CvBridge Tutorial for converting
# ROS images to OpenCV2 images
# http://wiki.ros.org/cv_bridge/Tutorials/ConvertingBetweenROSImagesAndOpenCVImagesPython
# Using this OpenCV2 tutorial for saving Images:
# http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_gui/py_image_display/py_image_display.html
# rospy for the subscriber
import rospy
# ROS Image message
from sensor_msgs.msg import Image
# ROS Image message -> OpenCV2 image converter
from cv_bridge import CvBridge, CvBridgeError
# OpenCV2 for saving an image
import cv2
# Instantiate CvBridge
bridge = CvBridge()
def image_callback(msg):
print("Received an image!")
try:
# Convert your ROS Image message to OpenCV2
cv2_img = bridge.imgmsg_to_cv2(msg, "bgr8")
except CvBridgeError, e:
print(e)
else:
# Save your OpenCV2 image as a jpeg
cv2.imwrite('/home/wly/catkin_ws/src/face_men/camera_photo/photo.jpeg', cv2_img)
def main():
rospy.init_node('image_listener')
# Define your image topic
image_topic = "/usb_cam/image_raw"
# Set up your subscriber and define its callback
rospy.Subscriber(image_topic, Image, image_callback)
# Spin until ctrl + c
rospy.spin()
if __name__ == '__main__':
main()
这里我们将转化后的结果存在文件夹下。
这里可以将两部分整合,让百度AI去调用照片去识别人脸,因为百度AI不限制调用次数但是没秒5次,所以会有一些延迟,所以还是需要进一步改进。