基于百度AI在ROS上实现人体检测功能

关于百度AI网站上的操作和之前关于人脸识别部分的操作一样,注意要在人体识别部分再重新建立一个应用,并且获得

APP_ID = '××××××'
API_KEY = '×××××××××××'
SECRET_KEY = '××××××××××××××'

这三个关键值。

#! /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
from PIL import Image
from std_msgs.msg import String
from aip import AipFace
import base64
import PIL.Image
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
from aip import AipBodyAnalysis

APP_ID = '×××××××××××'
API_KEY = '×××××××××××××××××××××××'
SECRET_KEY = '×××××××××××××××××××××××××××'

client = AipBodyAnalysis(APP_ID, API_KEY, SECRET_KEY)

# Instantiate CvBridge
bridge = CvBridge()

def image_callback(msg):
    try:
        listen()
        # 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 get_file_content(filePath):
    with open(filePath, 'rb') as fp:
        return fp.read()
def listen():
    image = get_file_content('/home/wly/catkin_ws/src/face_men/camera_photo/photo.jpeg')
    a = client.bodyAnalysis(image);
    print(a)
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)
    print("Received an image!")
    # Spin until ctrl + c
    rospy.spin()

if __name__ == '__main__':
    main()

a = client.bodyAnalysis(image);

此部分调用bodyAnalysis()函数,返回人体关键点的一些信息。

字段是否必选类型说明
person_numuint32人体数目
person_infoobject[]人体姿态信息
+body_partsobject身体部位信息,包含21个关键点
++top_headobject头顶
+++xfloatx坐标
+++yfloaty坐标
+++scorefloat概率分数
++left_eyeobject左眼
+++xfloatx坐标
+++yfloaty坐标
+++scorefloat概率分数
++right_eyeobject右眼
+++xfloatx坐标
+++yfloaty坐标
+++scorefloat概率分数
++noseobject鼻子
+++xfloatx坐标
+++yfloaty坐标
+++scorefloat概率分数
++left_earobject左耳
+++xfloatx坐标
+++yfloaty坐标
+++scorefloat概率分数
++right_earobject右耳
+++xfloatx坐标
+++yfloaty坐标
+++scorefloat概率分数
++left_mouth_cornerobject左嘴角
+++xfloatx坐标
+++yfloaty坐标
+++scorefloat概率分数
++right_mouth_cornerobject右嘴角
+++xfloatx坐标
+++yfloaty坐标
+++scorefloat概率分数
++neckobject颈部
+++xfloatx坐标
+++yfloaty坐标
+++scorefloat概率分数
++left_shoulderobject左肩
+++xfloatx坐标
+++yfloaty坐标
+++scorefloat概率分数
++right_shoulderobject右肩
+++xfloatx坐标
+++yfloaty坐标
+++scorefloat概率分数
++left_elbowobject左手肘
+++xfloatx坐标
+++yfloaty坐标
+++scorefloat概率分数
++right_elbowobject右手肘
+++xfloatx坐标
+++yfloaty坐标
+++scorefloat概率分数
++left_wristobject左手腕
+++xfloatx坐标
+++yfloaty坐标
+++scorefloat概率分数
++right_wristobject右手腕
+++xfloatx坐标
+++yfloaty坐标
+++scorefloat概率分数
++left_hipobject左髋部
+++xfloatx坐标
+++yfloaty坐标
+++scorefloat概率分数
++right_hipobject右髋部
+++xfloatx坐标
+++yfloaty坐标
+++scorefloat概率分数
++left_kneeobject左膝
+++xfloatx坐标
+++yfloaty坐标
+++scorefloat概率分数
++right_kneeobject右膝
+++xfloatx坐标
+++yfloaty坐标
+++scorefloat概率分数
++left_ankleobject左脚踝
+++xfloatx坐标
+++yfloaty坐标
+++scorefloat概率分数
++right_ankleobject右脚踝
+++xfloatx坐标
+++yfloaty坐标
+++scorefloat概率分数
+locationobject人体坐标信息
++heightfloat人体区域的高度
++leftfloat人体区域离左边界的距离
++topfloat人体区域离上边界的距离
++widthfloat人体区域的宽度
++scorefloat人体框的概率分数
log_iduint64唯一的log id,用于问题定位

 

还有一些其他函数:bodyAttr()函数

对于输入的一张图片(可正常解码,且长宽比适宜),检测图像中的所有人体并返回每个人体的矩形框位置,识别人体的静态属性和行为,共支持20余种属性,包括:性别、年龄阶段、衣着(含类别/颜色)、是否戴帽子、是否戴眼镜、是否背包、是否使用手机、身体朝向等

序号属性接口字段输出项说明
1性别gender男性、女性、不确定
2年龄阶段age幼儿、青少年、青年、中年、老年、不确定
3上身服饰upper_wear长袖、短袖、不确定
4下身服饰lower_wear长裤、短裤、长裙、短裙、不确定
5上身服饰颜色upper_color红、橙、黄、绿、蓝、紫、粉、黑、白、灰、棕、不确定
6下身服饰颜色lower_color红、橙、黄、绿、蓝、紫、粉、黑、白、灰、棕、不确定
7上身服饰纹理upper_wear_texture纯色、图案、碎花、条纹或格子、不确定
8背包bag无背包、单肩包、双肩包、不确定
9上身服饰细分类upper_wear_fgT恤、无袖、衬衫、西装、毛衣、夹克、羽绒服、风衣、外套、不确定
10是否戴帽子headwear无帽、普通帽、安全帽、不确定
11是否戴眼镜glasses戴眼镜、戴墨镜、无眼镜、不确定
12是否撑伞umbrella撑伞、无撑伞、不确定
13是否使用手机cellphone未使用手机、使用手机、不确定
14身体朝向orientation正面、背面、左侧面、右侧面、不确定
15是否吸烟smoke吸烟、未吸烟、不确定
16是否有手提物carrying_item无手提物、有手提物、不确定
17交通工具vehicle无交通工具、骑摩托车、骑自行车、骑三轮车、不确定
18上方截断upper_cut无上方截断、有上方截断、不确定
19下方截断lower_cut无下方截断、有下方截断、不确定
20遮挡occlusion无遮挡、轻度遮挡、重度遮挡、不确定
21是否是正常人体is_human非正常人体、正常人体、不确定;正常人体:身体露出大于二分之一的人体,一般以能看到腰部肚挤眼为标准;非正常人体:严重截断、严重遮挡的人体,一般是看不到肚挤眼的,比如只有个脑袋、一条腿

 

其他函数参见:https://ai.baidu.com/docs#/BodyAnalysis-Python-SDK/top

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

末世灯光

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

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

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

打赏作者

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

抵扣说明:

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

余额充值