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

news/2025/2/22 10:56:50

关于百度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


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

相关文章

一个非常困扰我的难题

最近在做一个web客户端,要求是在浏览器里可以看到监看的视屏画面。公司有c做好的取视屏流的SDK,但是在web中的控件好像有都不能取得该控件的句柄,这就给基于SDK进行编程带来麻烦。我在网上查到这么一段话“在BS上操作这个panel拿摄像头是没意…

git clone 速度慢?

1.进入终端命令行模式,输入 sudo vim /etc/hosts 2.输入i进入编辑命令,英文输入法输入G,vim编辑器跳到hosts文件的最后一行 3.用浏览器访问 IPAddress.com or http://tool.chinaz.com 使用 IP Lookup 工具获得github.com和github.global.s…

新疆网站主叫苦备案新规:手续简便路途遥远

背景是互联网接入商的图标,抬头挺胸,面对镜头,拍照。这是一张网站备案的“标准照”,照片中的主角是网站负责人,拍摄地点为网站的接入服务单位,所需时间只有5分钟。而就是这么简单的一张网站备案照&#xff…

QT Creator 同时启动多个ROS launch文件

有时候跑一个ros的应用,需要启动多个ros launch文件,搞得人心烦意乱。这里参考网上给出的做法,利用qt creator,制作一个简单ui,通过点击按钮,同时启动多个launch文件。过程如下: 1. Ubuntu 16.…

数据库学习(一)

软件分享: 链接:https://pan.baidu.com/s/17WB7A25mr_IepVihKVIEwA 提取码:1f1k 复制这段内容后打开百度网盘手机App,操作更方便哦 解压以后进入cmd的 bin目录下; 启动mysql服务: mysqld --console重…

C++程序性能1

//C程序性能1 //#include "ProgramPerformance.h" //program performance /* 程序性能( program performance),是指运行一个程序所需要的内存大小和时间。 可以采用两种方法来确定一个程序的性能, 一个是分析的方法&…

JsonResult作为Action返回值时的错误

System.InvalidOperationException: This request has been blocked because sensitive information could be disclosed to third party web sites when this is used in a GET request. To allow GET requests, set JsonRequestBehavior to AllowGet. 由错误信息可知MVC2出于…

数据库学习(二)

相关操作: 1. 关于库的操作 (1)创建库 语法:create database database_name;database_name是库名,库名的命名规则:由字母、数字、下划线、、#和¥组成,首字母不能是数字和&…