ros+kinetic+人脸识别+百度ai+python

news/2025/2/22 11:24:24

本文基于百度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次,所以会有一些延迟,所以还是需要进一步改进。

 

 

 

 

 

 

 

 

 


http://www.niftyadmin.cn/n/1365836.html

相关文章

深入谈谈 C# 的 String.CompareTo

String.CompareTo 语法 public int CompareTo(string strB)返回值 小于 0,实例小于参数 strB;0,实例等于参数 strB;大于 0,实例大于参数 strB,或者 strB 是 null 引用。比较程序 并不是按字符串长度来比较的…

小组赛,每个小组有5支队伍,互相之间打单循环赛,胜一场3分,平一场1分,输一场不得分,小组前三名出线。平分抽签。问一个队最少拿多少分就有理论上的出线希望

小组赛,每个小组有5支队伍,互相之间打单循环赛,胜一场3分,平一场1分,输一场不得分,小组前三名出线。平分抽签。问一个队最少拿多少分就有理论上的出线希望 解:首先假设某一队得分0分&#xff0c…

C#编程实现在Excel文档中搜索文本

打开Excel的VBA帮助,查看Excel的对象模型,很容易找到完成这个功能需要的几个集合和对象:Application、Workbooks、Workbook、Worksheets还有Worksheet和Range。Application创建Excel应用,Workbooks打开Excel文档,Workb…

new、delete、malloc、free关系

delete会调用对象的析构函数,和new对应free只会释放内存,new调用构造函数。malloc与free是C/C语言的标准库函数,new/delete是C的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的…

Silverlight 学习笔记——用MediaElement制作在线音乐播放器

Silverlight的一个很大的特性就是针对多媒体内容,包括音频和视频的支持。在Silverlight中,多媒体内容通过窗口MediaElement来呈现。让我们通过实现一个在线音乐播放器,来学习MediaElement对于音频的支持特性。首先通过Blend Sketch来打个草稿…

现有一完全的P2P共享协议,每次两个节点通讯后都能获取对方已经获取的全部信息,现在使得系统中每个节点都知道所有节点的文件信息,共17个节点,假设只能通过多次两个对等节点之间通讯的方式,则最少需要()次

现有一完全的P2P共享协议,每次两个节点通讯后都能获取对方已经获取的全部信息,现在使得系统中每个节点都知道所有节点的文件信息,共17个节点,假设只能通过多次两个对等节点之间通讯的方式,则最少需要(&…

x = m; y = 1; while (x - y e) { x = (x + y) / 2;     y = m / x; } print(x);求取时间复杂度?

x m; y 1; while (x - y > e) { x (x y) / 2;y m / x; } print(x); A:log m B:m的平方 C:m的1/2方 D:m的1/3方 解析: 1.x(xy)/2(m1)/2 m非常大,则 xm/2; ym/x, xm/2 则 y2;…

已知一个无向图(边为正数)中顶点A,B的一条最短路P,如果把各个边的权重(即相邻两个顶点的距离)变为原来的2倍,那么在新图中,P仍然是A,B之间的最短路

已知一个无向图(边为正数)中顶点A,B的一条最短路P,如果把各个边的权重(即相邻两个顶点的距离)变为原来的2倍,那么在新图中,P仍然是A,B之间的最短路,以上说法是错误的。