利用kinect2结构光相机进行运动动作识别和运动计数,不仅可以测量运动人员的卡路里,也可以测出运动速度和做功,并对于运动的动作做出科学规范的指导。
这里我们选用kinect2和windows系统作为开发工具来进行开发。如果要进行运动动作的识别,第一步需要对于采集运动的信息,比如人体的骨骼关键点信息,这里我们以手为采集对象,同时判断手是否有抓握杆的行为来进行运动的信息采集。同时我们这里以深蹲作为示范,举例如何进行运动动作的判定和计数。
人体关键点的效果如图所示

通过kinect2提供的接口,我们可以获取到人体各个骨骼关节点的三维信息
这里我把windows下获取人体骨骼关节点的信息的代码放在这里
//这里是.h文件
#ifndef __APP__
#define __APP__
#include <Windows.h>
#include <Kinect.h>
#include <opencv2/opencv.hpp>
#include <vector>
#include <array>
#include <wrl/client.h>
using namespace Microsoft::WRL;
class Kinect
{
private:
// Sensor
ComPtr<IKinectSensor> kinect;
// Coordinate Mapper
ComPtr<ICoordinateMapper> coordinateMapper;
// Reader
ComPtr<IColorFrameReader> colorFrameReader;
ComPtr<IBodyFrameReader> bodyFrameReader;
// Color Buffer
std::vector<BYTE> colorBuffer;
int colorWidth;
int colorHeight;
unsigned int colorBytesPerPixel;
cv::Mat colorMat;
// Body Buffer
std::array<IBody*, BODY_COUNT> bodies = {
nullptr };
std::array<cv::Vec3b, BODY_COUNT> colors;
public:
// Constructor
Kinect();
// Destructor
~Kinect();
// Processing
void run();
private:
// Initialize
void initialize();
// Initialize Sensor
inline void initializeSensor();
// Initialize Color
inline void initializeColor();
// Initialize Body
inline void initializeBody();
// Finalize
void finalize();
// Update Data
void update();
// Update Color
inline void updateColor();
// Update Body
inline void updateBody();
// Draw Data
void draw();
// Draw Color
inline void drawColor();
// Draw Body
inline void drawBody();
// Draw Circle
inline void drawEllipse( cv::Mat& image, const Joint& joint, const int radius, const cv::Vec3b& color, const int thickness = -1 );
// Draw Hand State
inline void drawHandState( cv::Mat& image, const Joint& joint, HandState handState, TrackingConfidence handConfidence );
// Show Data
void show();
// Show Body
inline void showBody();
};
#endif // __APP__
//这里是cpp文件
#include "app.h"
#include "util.h"
#include <thread>
#include <chrono>
#include <ppl.h>
// Constructor
Kinect::Kinect()
{
// Initialize
initialize();
}
// Destructor
Kinect::~Kinect()
{
// Finalize
finalize();
}
// Processing
void Kinect::run()
{
// Main Loop
while( true ){
// Update Data
update();
// Draw Data
draw();
// Show Data
show();
// Key Check
const int key = cv::waitKey( 10 );
if( key ==

本文介绍如何使用Kinect2结构光相机进行运动动作识别及计数,包括采集人体骨骼关键点信息、开发智能计数代码、训练快速识别模型等关键技术。
最低0.47元/天 解锁文章
7286





