public int ProcessFrame(Mat buffer, out st_pointf_t[][] keypoints, out float[][] keypoint_scores) { keypoints = null; keypoint_scores = null; // 初始化指针 p_bodies = IntPtr.Zero; bodies_count = 0; // body track ret = Motion_Track.st_motion_body_track(body_handle, buffer.DataPointer, //frame, st_pixel_format.ST_PIX_FMT_BGR888, buffer.Width, buffer.Height, st_motion_orientation.ST_MOTION_UP, ref p_bodies, ref bodies_count); if (ret != ST_OK) { return(ret); } Motion_Track.Recon_Body_T(p_bodies, out st_motion_body_t[] p_bodies_m, bodies_count); keypoints = new st_pointf_t[bodies_count][]; keypoint_scores = new float[bodies_count][]; for (int i = 0; i < bodies_count; i++) { Motion_Track.Recon_keypoints(p_bodies_m[i], out keypoints[i], out keypoint_scores[i]); } // release memory Motion_Track.st_motion_body_release_track_result(p_bodies, bodies_count); return(0); }
private int SDK_Initiate(byte[] license_path, int bodies_count) { // initialize license ret = Motion_Track.st_motion_public_init_license(license_path, Encoding.Default.GetBytes("license")); if (ret != ST_OK) { return(ret); } ret = Motion_Track.st_motion_body_create_tracker(ref body_handle, Motion_Track.p_model_path, 0); if (ret != ST_OK) { Motion_Track.st_motion_body_destroy_tracker(body_handle); return(ret); } // limit the track bodies count, -1 means no limit, only support 1 actor here ret = Motion_Track.st_motion_body_set_track_body_cnt_limit(body_handle, bodies_count, null); if (ret != ST_OK) { return(ret); } return(0); }
private void Close() { Motion_Track.st_motion_body_destroy_tracker(p_bodies); }