Example #1
0
        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);
        }
Example #2
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);
        }
Example #3
0
 private void Close()
 {
     Motion_Track.st_motion_body_destroy_tracker(p_bodies);
 }