精华内容
下载资源
问答
  • 姿态识别

    2019-12-12 07:38:31
    姿态识别姿态识别姿态识别 1.hourglass-2016

    姿 态 识 别 姿态识别 姿

    1.hourglass-2016

    展开全文
  • 众所周知随着人工智能智能的发展,人工智能的落地项目也在变得越来越多,...所以今天我们也是做一个计算机视觉方面的训练,用python来判断用户溺水行为,结合姿态识别和图像识别得到结果。其中包括姿态识别和图像分类。
  • 姿态识别资源

    2021-08-28 08:21:20
    姿态识别 网络资源 Github开源人体姿态识别项目OpenPose中文文档 人体姿态识别Light weight openpose 人体姿态识别HRNet 人体姿态识别alphapose 人体姿态识别PyraNet 知乎:姿态识别
    展开全文
  • tensorflow实现人体姿态识别
  • 用opencv进行姿态识别,人体姿态检测和动作识别
  • 人脸姿态识别

    千次阅读 2015-06-10 10:14:24
    人脸姿态识别

    对于人脸姿态识别这个领域不甚了解,所以就想了一个很简单的方法,通过眼睛鼻子的比例关系来计算人脸左右旋转的角度,不出所料,效果还不错。甚喜,记录如下:

    (1)识别图片姿态

    // face_detect.cpp : 定义控制台应用程序的入口点。
    //
    
    //#include "stdafx.h"
    
    #include "opencv2/objdetect/objdetect.hpp"
    #include "opencv2/highgui/highgui.hpp"
    #include "opencv2/imgproc/imgproc.hpp"
    #include "opencv2/ml/ml.hpp"
    
    #include <iostream>
    #include <stdio.h>
    
    using namespace std;
    using namespace cv;
    
    Point center2[3];
    
    void detectAndDraw(Mat& img,
    	CascadeClassifier& cascade, CascadeClassifier& nestedCascade,
    	double scale);
    
    String cascadeName = "D:/mySoftware/opencv/sources/data/haarcascades/haarcascade_frontalface_alt2.xml";//人脸的训练数据
    //String nestedCascadeName = "./haarcascade_eye_tree_eyeglasses.xml";//人眼的训练数据
    String nestedCascadeName = "D:/mySoftware/opencv/sources/data/haarcascades/haarcascade_eye.xml";//人眼的训练数据
    
    int main(int argc, const char** argv)
    {
    	Mat image;
    	CascadeClassifier cascade, nestedCascade;//创建级联分类器对象
    	double scale = 0.8;
    
    	//image = imread( "lena.jpg", 1 );//读入lena图片
    	image = imread("C:/Users/jiang/Desktop/王建程序/FaceBase_png/EX2/bruno-vp2-il0-ex2.png", 1);
    	namedWindow("result", 1);//opencv2.0以后用namedWindow函数会自动销毁窗口
    
    	if (!cascade.load(cascadeName))//从指定的文件目录中加载级联分类器
    	{
    		cerr << "ERROR: Could not load classifier cascade唉唉出错了" << endl;
    		return 0;
    	}
    
    	if (!nestedCascade.load(nestedCascadeName))
    	{
    		cerr << "WARNING: Could not load classifier cascade for nested objects" << endl;
    		return 0;
    	}
    
    	if (!image.empty())//读取图片数据不能为空
    	{
    		detectAndDraw(image, cascade, nestedCascade, scale);
    		for (int i = 0; i < 3; i++){
    			std::cout << "( "<<center2[i].x << " , " << center2[i].y<<" )"<<std::endl;
    		}
    		double x = (double)(center2[0].x - center2[2].x) / (double)(center2[2].x - center2[1].x);
    		cout << x << endl;
    		waitKey(0);
    	}
    
    	return 0;
    }
    
    void detectAndDraw(Mat& img,
    	CascadeClassifier& cascade, CascadeClassifier& nestedCascade,
    	double scale)
    {
    	cv::CascadeClassifier mNoseDetector;
    	mNoseDetector.load("D:/mySoftware/opencv/sources/data/haarcascades/haarcascade_mcs_nose.xml");
    	int i = 0;
    	double t = 0;
    	int w = 0;
    	vector<Rect> faces;
    	const static Scalar colors[] = { CV_RGB(0, 0, 255),
    		CV_RGB(0, 128, 255),
    		CV_RGB(0, 255, 255),
    		CV_RGB(0, 255, 0),
    		CV_RGB(255, 128, 0),
    		CV_RGB(255, 255, 0),
    		CV_RGB(255, 0, 0),
    		CV_RGB(255, 0, 255) };//用不同的颜色表示不同的人脸
    
    	Mat gray, smallImg(cvRound(img.rows / scale), cvRound(img.cols / scale), CV_8UC1);//将图片缩小,加快检测速度
    
    	cvtColor(img, gray, CV_BGR2GRAY);//因为用的是类haar特征,所以都是基于灰度图像的,这里要转换成灰度图像
    	resize(gray, smallImg, smallImg.size(), 0, 0, INTER_LINEAR);//将尺寸缩小到1/scale,用线性插值
    	equalizeHist(smallImg, smallImg);//直方图均衡
    
    	t = (double)cvGetTickCount();//用来计算算法执行时间
    
    
    	//检测人脸
    	//detectMultiScale函数中smallImg表示的是要检测的输入图像为smallImg,faces表示检测到的人脸目标序列,1.1表示
    	//每次图像尺寸减小的比例为1.1,2表示每一个目标至少要被检测到3次才算是真的目标(因为周围的像素和不同的窗口大
    	//小都可以检测到人脸),CV_HAAR_SCALE_IMAGE表示不是缩放分类器来检测,而是缩放图像,Size(30, 30)为目标的
    	//最小最大尺寸
    	cascade.detectMultiScale(smallImg, faces,
    		1.1, 2, 0
    		//|CV_HAAR_FIND_BIGGEST_OBJECT
    		//|CV_HAAR_DO_ROUGH_SEARCH
    		| CV_HAAR_SCALE_IMAGE
    		,
    		Size(30, 30));
    
    	t = (double)cvGetTickCount() - t;//相减为算法执行的时间
    	printf("detection time = %g ms\n", t / ((double)cvGetTickFrequency()*1000.));
    	int s1 = 0;
    	for (vector<Rect>::const_iterator r = faces.begin(); r != faces.end(); r++, i++)
    	{
    		s1++;
    		if (s1 > 1)
    			break;
    		Mat smallImgROI;
    		vector<Rect> nestedObjects;
    		Point center;
    		Scalar color = colors[i % 8];
    		int radius;
    		center.x = cvRound((r->x + r->width*0.5)*scale);//还原成原来的大小
    		center.y = cvRound((r->y + r->height*0.5)*scale);
    		radius = cvRound((r->width + r->height)*0.25*scale);
    		circle(img, center, radius, color, 3, 8, 0);
    
    		//检测人眼,在每幅人脸图上画出人眼
    		if (nestedCascade.empty())
    			continue;
    		smallImgROI = smallImg(*r);
    
    		//和上面的函数功能一样
    		nestedCascade.detectMultiScale(smallImgROI, nestedObjects,
    			1.1, 2, 0
    			//|CV_HAAR_FIND_BIGGEST_OBJECT
    			//|CV_HAAR_DO_ROUGH_SEARCH
    			//|CV_HAAR_DO_CANNY_PRUNING
    			| CV_HAAR_SCALE_IMAGE
    			,
    			Size(30, 30));
    		int s2 = 0;
    		for (vector<Rect>::const_iterator nr = nestedObjects.begin(); nr != nestedObjects.end(); nr++)
    		{
    			s2++;
    			if (s2 > 2)
    				break;
    			center.x = cvRound((r->x + nr->x + nr->width*0.5)*scale);
    			center.y = cvRound((r->y + nr->y + nr->height*0.5)*scale);
    			//cout << center.x << " , " << center.y << endl;
    			center2[w].x = center.x;
    			center2[w].y = center.y;
    			w++;
    			radius = cvRound((nr->width + nr->height)*0.25*scale);
    			circle(img, center, radius, color, 3, 8, 0);//将眼睛也画出来,和对应人脸的图形是一样的
    		}
    		mNoseDetector.detectMultiScale(smallImgROI, nestedObjects,
    			1.1, 2, 0
    			//|CV_HAAR_FIND_BIGGEST_OBJECT
    			//|CV_HAAR_DO_ROUGH_SEARCH
    			//|CV_HAAR_DO_CANNY_PRUNING
    			| CV_HAAR_SCALE_IMAGE
    			,
    			Size(30, 30));
    		int s3 = 0;
    		for (vector<Rect>::const_iterator nr = nestedObjects.begin(); nr != nestedObjects.end(); nr++)
    		{
    			s3++;
    			if (s3 > 1)
    				break;
    			center.x = cvRound((r->x + nr->x + nr->width*0.5)*scale);
    			center.y = cvRound((r->y + nr->y + nr->height*0.5)*scale);
    			//cout << center.x << " , " << center.y << endl;
    			center2[w].x = center.x;
    			center2[w].y = center.y;
    			w++;
    			radius = cvRound((nr->width + nr->height)*0.25*scale);
    			circle(img, center, radius, color, 3, 8, 0);//将眼睛也画出来,和对应人脸的图形是一样的
    		}
    	}
    	cv::imshow("result", img);
    }


    (2)识别相机流姿态

    #include "opencv2/imgproc/imgproc.hpp"
    #include "opencv2/ml/ml.hpp"
    #include <iostream>
    #include <stdio.h>
    #include <opencv2/core/core.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/objdetect/objdetect.hpp>
    #include <string>
    #include <vector>
    using namespace std;
    using namespace cv;
    Point center2[3];
    cv::CascadeClassifier mFaceDetector;
    cv::CascadeClassifier mEyeDetector;
    cv::CascadeClassifier mMouthDetector;
    cv::CascadeClassifier mNoseDetector;
    void detectAndDraw(Mat& img,
    	double scale)
    {
    	//载入四个人脸特征分类器文件,可以从opencv的安装目录中找到
    	if (mFaceDetector.empty())
    		mFaceDetector.load("D:/mySoftware/opencv/sources/data/haarcascades/haarcascade_frontalface_alt2.xml");
    	if (mEyeDetector.empty())
    		mEyeDetector.load("D:/mySoftware/opencv/sources/data/haarcascades/haarcascade_lefteye_2splits.xml");
    	if (mNoseDetector.empty())
    		mNoseDetector.load("D:/mySoftware/opencv/sources/data/haarcascades/haarcascade_mcs_nose.xml");
    	if (mMouthDetector.empty())
    		mMouthDetector.load("D:/mySoftware/opencv/sources/data/haarcascades/haarcascade_mcs_mouth.xml");
    	int i = 0;
    	double t = 0;
    	int w = 0;
    	vector<Rect> faces;
    	const static Scalar colors[] = { CV_RGB(0, 0, 255),
    		CV_RGB(0, 128, 255),
    		CV_RGB(0, 255, 255),
    		CV_RGB(0, 255, 0),
    		CV_RGB(255, 128, 0),
    		CV_RGB(255, 255, 0),
    		CV_RGB(255, 0, 0),
    		CV_RGB(255, 0, 255) };//用不同的颜色表示不同的人脸
    
    	Mat gray, smallImg(cvRound(img.rows / scale), cvRound(img.cols / scale), CV_8UC1);//将图片缩小,加快检测速度
    
    	cvtColor(img, gray, CV_BGR2GRAY);//因为用的是类haar特征,所以都是基于灰度图像的,这里要转换成灰度图像
    	resize(gray, smallImg, smallImg.size(), 0, 0, INTER_LINEAR);//将尺寸缩小到1/scale,用线性插值
    	equalizeHist(smallImg, smallImg);//直方图均衡
    
    	t = (double)cvGetTickCount();//用来计算算法执行时间
    
    
    	//检测人脸
    	//detectMultiScale函数中smallImg表示的是要检测的输入图像为smallImg,faces表示检测到的人脸目标序列,1.1表示
    	//每次图像尺寸减小的比例为1.1,2表示每一个目标至少要被检测到3次才算是真的目标(因为周围的像素和不同的窗口大
    	//小都可以检测到人脸),CV_HAAR_SCALE_IMAGE表示不是缩放分类器来检测,而是缩放图像,Size(30, 30)为目标的
    	//最小最大尺寸
    	mFaceDetector.detectMultiScale(smallImg, faces,
    		1.1, 2, 0
    		//|CV_HAAR_FIND_BIGGEST_OBJECT
    		//|CV_HAAR_DO_ROUGH_SEARCH
    		| CV_HAAR_SCALE_IMAGE
    		,
    		Size(30, 30));
    
    	t = (double)cvGetTickCount() - t;//相减为算法执行的时间
    	printf("detection time = %g ms\n", t / ((double)cvGetTickFrequency()*1000.));
    	int s1 = 0;
    	for (vector<Rect>::const_iterator r = faces.begin(); r != faces.end(); r++, i++)
    	{
    		s1++;
    		if (s1 > 1)
    			break;
    		Mat smallImgROI;
    		vector<Rect> nestedObjects;
    		Point center;
    		Scalar color = colors[i % 8];
    		int radius;
    		center.x = cvRound((r->x + r->width*0.5)*scale);//还原成原来的大小
    		center.y = cvRound((r->y + r->height*0.5)*scale);
    		radius = cvRound((r->width + r->height)*0.25*scale);
    		circle(img, center, radius, color, 3, 8, 0);
    
    		//检测人眼,在每幅人脸图上画出人眼
    		if (mEyeDetector.empty())
    			continue;
    		smallImgROI = smallImg(*r);
    
    		//和上面的函数功能一样
    		mEyeDetector.detectMultiScale(smallImgROI, nestedObjects,
    			1.1, 2, 0
    			//|CV_HAAR_FIND_BIGGEST_OBJECT
    			//|CV_HAAR_DO_ROUGH_SEARCH
    			//|CV_HAAR_DO_CANNY_PRUNING
    			| CV_HAAR_SCALE_IMAGE
    			,
    			Size(30, 30));
    		int s2 = 0;
    		for (vector<Rect>::const_iterator nr = nestedObjects.begin(); nr != nestedObjects.end(); nr++)
    		{
    			s2++;
    			if (s2 > 2)
    				break;
    			center.x = cvRound((r->x + nr->x + nr->width*0.5)*scale);
    			center.y = cvRound((r->y + nr->y + nr->height*0.5)*scale);
    			//cout << center.x << " , " << center.y << endl;
    			center2[w].x = center.x;
    			center2[w].y = center.y;
    			w++;
    			radius = cvRound((nr->width + nr->height)*0.25*scale);
    			circle(img, center, radius, color, 3, 8, 0);//将眼睛也画出来,和对应人脸的图形是一样的
    		}
    		mNoseDetector.detectMultiScale(smallImgROI, nestedObjects,
    			1.1, 2, 0
    			//|CV_HAAR_FIND_BIGGEST_OBJECT
    			//|CV_HAAR_DO_ROUGH_SEARCH
    			//|CV_HAAR_DO_CANNY_PRUNING
    			| CV_HAAR_SCALE_IMAGE
    			,
    			Size(30, 30));
    		int s3 = 0;
    		for (vector<Rect>::const_iterator nr = nestedObjects.begin(); nr != nestedObjects.end(); nr++)
    		{
    			s3++;
    			if (s3 > 1)
    				break;
    			center.x = cvRound((r->x + nr->x + nr->width*0.5)*scale);
    			center.y = cvRound((r->y + nr->y + nr->height*0.5)*scale);
    			//cout << center.x << " , " << center.y << endl;
    			center2[w].x = center.x;
    			center2[w].y = center.y;
    			w++;
    			radius = cvRound((nr->width + nr->height)*0.25*scale);
    			circle(img, center, radius, color, 3, 8, 0);//将眼睛也画出来,和对应人脸的图形是一样的
    		}
    	}
    	cv::imshow("result", img);
    }
    
    int main()
    {
    	cv::VideoCapture capture(0);
    	//检查视频是否打开
    	if (!capture.isOpened())
    		return 1;
    
    	// 得到帧率
    	double rate = capture.get(CV_CAP_PROP_FPS);
    	bool stop(false);
    	cv::Mat frame; // 现在的视频帧
    	cv::Mat mElabImage;//备份frame图像
    
    	// 两帧之间的间隔时间
    	int delay = 1000 / rate;
    	// 循环播放所有的帧
    	while (!stop) {
    		// 读下一帧
    		if (!capture.read(frame))
    			break;
    		double scale = 1.0;
    		for (int i = 0; i < 3; i++){
    			center2[i].x = 0;
    			center2[i].y = 0;
    		}
    		detectAndDraw(frame, scale);
    		for (int i = 0; i < 3; i++){
    			std::cout << "( "<<center2[i].x << " , " << center2[i].y<<" )"<<std::endl;
    		}
    		double x = (double)(center2[0].x - center2[2].x) / (double)(center2[2].x - center2[1].x);
    		cout << x << endl;
    		cv::waitKey(1000);
    	}
    	// 关闭视频文件
    	capture.release();
    	return 0;
    }
    


    展开全文
  • 用于对姿态识别出来的批量图片和数据的处理,对人体进行编号并输出,前提是手中已经有了对应的图片中人体各关节点参数文件
  • 人脸多属性三维姿态识别源代码
  • 人体姿态识别的文献

    2016-04-22 17:40:45
    里面有20多份国外人体姿态识别的最新论文,希望能对大家有所帮助
  • 人体关键点姿态识别

    千次阅读 2020-10-27 18:06:54
    基于关键点的人体姿态识别可分为两个方面,即静态的人体姿态识别与动态的人体姿态识别,总的来说,人体关键点姿态识别技术主要面临的几方面技术难点如下: (1) 姿态位移尺度变换 不同相机角度下捕获到的姿态关键点...

    一、技术难点介绍

    人体关键点姿态识别是人体姿态识别技术的重要分支。通过检测人体行为表达过程中,每一帧人体姿态关键部位的位置,将人体姿态简化为人体关键点,并通过这些关键点对人体姿态表达的语义进行分类识别。

    基于关键点的人体姿态识别可分为两个方面,即静态的人体姿态识别与动态的人体姿态识别,总的来说,人体关键点姿态识别技术主要面临的几方面技术难点如下:

    (1) 姿态位移尺度变换
    不同相机角度下捕获到的姿态关键点的空间位置、视角方向各不相同
    (2) 姿态大小尺度变换
    不同行为个体的差异造成相同人体姿态的尺寸大小、表观形状不完全相同。
    (3) 关键点噪声与关键点缺失
    人体姿态检测的造成的人体骨骼关键点丢失,或者关键点漂移等。
    (4) 人体姿态表达的视频区域分割
    对运动人体姿态语义视频的有效分割。比如,喝水动作,需要分割出人体从拿起水杯喝水,到喝完水放下水杯的过程。

    二、关键技术介绍:

    2.1 动态人体关键点姿态识别:
    传统机器学习算法中,将人体骨骼关键点看作时间域动态轨迹序列,可通过隐马尔科夫HMM,条件随机场CRFs,时域金字塔等模型求解。对时域骨骼关键点的特征提取方法主要有关键点的联合位置直方图分布,关键点3D位置的旋转与位移特征等等。

    在深度学习领域,可通过RNNs、LSTM、CNN等手段将时空域人体姿态关键点建模来完成分类识别。

    下图所示为基于3D骨骼点的人体行为姿态检测方法分类:
    Joint-based Representations:

    基于关键点坐标的行为姿态表达,包括空间描述子(Spatial Descriptors)、几何描述子(Geometrical Descriptors)、关键帧描述子(key-poses Descriptors)。

    Mined Joints based Descriptors:
    考虑子空间关键点的相关性来提升判别度。

    Dynamics based descriptors:
    基于动态规划算法来考虑不同视频序列的匹配度。
    在这里插入图片描述图 1 基于图像学表达的3D人体行为姿态识别方法分类

    (Presti L L, Cascia M L. 3D skeleton-based human action classification[M]. Elsevier Science Inc. 2016.)

    各类经典算法分类识别率对比,如图2©所示:
    在这里插入图片描述其中,S指空间描述子方法(Spatial Descriptors)、G指几何描述子方法(Geometrical Descriptors)、K指关键帧描述子方法(key-poses Descriptors)。

    数据库介绍:
    UCF:骨骼点(15 joints)、16个动作;
    MHAD: 11个动作、660个motion sequences;
    MSRA3D: 骨骼点(20个)、20个动作。

    对于视频序列的人体骨骼关键点姿态识别,这里介绍一种基于深度神经网络的方法,该方法具有识别率相对较高、算法复杂度低、实现简单快速等优势,并对人体姿态的位移与尺度变化具有不变性。缺点在于其输入的人体姿态必须是具备先验的视频姿态起始和结尾帧。

    首先算法的总体流程框架如下图所示,:
    在这里插入图片描述图2(a) CNN框架下基于人体骨骼关键点的姿态识别

    将每一幅图中的骨骼点分为五个部分,分别为左右手臂骨骼点、左右腿骨骼点、躯干骨骼点。如上图左,用不同颜色区分。按照表述顺序,将每一帧骨骼点拉成一维向量。随后,将一个完整的视频姿态序列中每一帧的向量进行级联,组成一幅RGB图像,(R,G,B)通道分别对应每个骨骼点的(x,y,z)坐标,从而完成将人体视频姿态关键点到一幅图像的映射。

    具体来说,人体姿态图像的行定义为: Ri = [xi1; xi2; :::; xiN ], Gi = [yi1; yi2; :::; yiN ], Bi = [zi1; zi2; :::; ziN ], 其中i为关键点的索引,N为视频序列的总帧数。随后通过对上述每一帧中的向量进行坐标系像素对应级联,得到最终的姿态图像,表达为N×M×3, 其中M为每一帧中骨骼点的数量(保持不变)如下图所示。
    在这里插入图片描述图(b) 时空域人体关键点RGB图像映射表达与尺度不变性示意

    随后,对每幅图像的像素点进行归一化:
    在这里插入图片描述其中,Cmax和Cmin为训练数据集中的最大最小坐标值。255则是将其归一化到图像表达的(0~255)像素区间。

    该算法所用数据库为NTU datsets:60个动作,每个动作分别相隔45度从三个角度拍摄;骨骼点(24 joints)。该算法可利用多种CNN开源框架进行训练,对于60个类,测试结果根据训练情况为80%~90%。该算法的缺点是,无法估计人体姿态的首尾帧,需要人工标注。

    其他人体骨骼关键点的分类识别方法,绝大部分也类似于上述将关键点序列转化为图像的方式,只是转化方式略有不同,且特征表达较为复杂,不利于算法实时性实现。

    2.2 静态人体关键点识别
    推荐一种基于形状上下文(shape context)的人体姿态识别方法。形状上下文是基于物体轮廓样本点进行描述, 如下图3所示。
    在这里插入图片描述图3 基于形状上下文(shape context)的目标轮廓点特征表达

    形状上下文算子的基本原理是通过建立目标关于每个轮廓点的极坐标,并将极坐标进行区间划分,计算轮廓点落入每个极坐标区间的个数,构成矩阵分布,如下图4所示。
    在这里插入图片描述图4 每一个轮廓点形状上下文特征表达矩阵可视化

    其中图4左为图3(a)中菱形坐标为参考坐标系的特征分布矩阵;图4中为图3(b)中三角坐标为参考坐标系的特征分布矩阵;图4右为图3(b)中方框坐标为参考坐标系的特征分布矩阵.由图4可见,图3(a)的菱形和图3(b)的矩形坐标系下的轮廓点特征分布的可视化矩阵十分相似,从而说明这种特征表达方式对目标具有一定的尺度不变性。

    最终通过计算不同目标之间的向量分布差异,从而得到目标相似匹配度。

    该算法的初衷是对二维平面的目标进行匹配识别,然后可以将该算法中的极坐标扩展成三维,并将人体骨骼点当作目标轮廓点进行类似的骨骼点坐标分布计算。

    三、骨骼点噪声问题

    主流文献对该部分的处理不多见,个人理解对于丢失的骨骼关键点,可以通过邻域坐标差值的方法进行拟合 ,对于坐标漂移剧烈的骨骼关键点,可以首先将某个关键点的时域轨迹单独提取,根据帧间轨迹点的速度、位移、方向等变化规律,利用RANSCA或轨迹预测等方法进行漂移关键点剔除。

    备注:
    点击下面链接,进入奥比中光开发者社区,了解更多3D视觉技术信息:
    https://developer.orbbec.com.cn/

    或扫描下方二维码,进入奥比中光开发者社区:
    在这里插入图片描述

    展开全文
  • 针对传统基于图像视频的姿态识别算法中所存在的计算成本高、摄像盲区多、隐私易泄露等问题,提出了一种基于手机加速度与陀螺仪数据的卷积—卷积长短时记忆—注意力(CCLA,convolution-convolutional long short-...
  • Openpose2d转换3d姿态识别

    千次阅读 热门讨论 2019-08-19 12:28:26
    最近笔者遇到一个问题就是openpose在对于姿态识别的时候,识别出的人体姿态是一个2d平面姿态。对于AR交互应用来说,2d姿态是不如3d姿态的。当然可以使用kinect深度摄像头或者开源项目vnect实现3d的实时姿态识别。...
  • 基于动作姿态识别的手语机器人.pdf
  • 人体姿态识别在人机交互, 游戏以及医疗健康等领域有着深远意义, 基于便携式传感器进行多种人体姿态高精度的稳定识别是该领域的研究难点. 本文采集了8种姿态的高频传感器数据, 提取原始数据的窗口时域特征组成数据集....
  • 人体姿态识别在移动端上开发的经验分享.pdf
  • 基于深度学习的牙刷姿态识别方法.pdf
  • 基于BP神经网络的人体运动姿态识别.pdf
  • 基于扩展卡尔曼滤波的姿态识别,很好的资料!供大家参考!!
  • 该代码是一个安卓小项目,应用卷积神经网络访问手机加速度计进行的人体动作姿态识别算法的安卓端开发。开发时需要借助Android Studio.
  • 人体姿态识别-左肩和左肘的定位识别

    千次阅读 热门讨论 2018-05-18 09:43:44
    人体姿态识别-左肩和左肘的定位识别 对于传统的人体动作识别方法来说,分为三类:基于人体模型的方法;基于全局特征的方法,基于特征的方法,人体动作丰富多样,不同的动作具有不同的含义。这里我选择基于特征的...
  • 基于Hu矩与改进PNN的飞机姿态识别算法
  •  ...2D人体姿态识别在dataset和model方面都比3D成熟,2Dmodel也有很多户外,自然界的dataset,但是3D的dataset几乎都是indoor的。因为3D标注、识别的复杂,所以需要大量的传感器,摄像头去采集...
  • HumanActivityRecognition:基于卷积神经网络的人类姿态识别
  • 人体姿态识别

    2017-10-26 00:32:28
    CVPR2017的最新论文,实时的人体姿态估计算法。对深度学习爱好者有帮助
  • 人体姿态识别OpenPose相关资料

    千次阅读 2019-04-24 16:42:40
    OpenPose人体姿态识别项目是美国卡耐基梅隆大学(CMU)基于卷积神经网络和监督学习并以caffe为框架开发的开源库。可以实现人体动作、面部表情、手指运动等姿态估计。适用于单人和多人,具有极好的鲁棒性。是世界上首...
  • 基于人工智能的无穿戴人体姿态识别技术研究.pdf

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,669
精华内容 9,067
关键字:

姿态识别