Software Archive
Read-only legacy content
Announcements
FPGA community forums and blogs have moved to the Altera Community. Existing Intel Community members can sign in with their current credentials.
17060 Discussions

Track multiple properties (ex. track objects and faces)?

Dirk_R_
Beginner
547 Views

Is it possible to track multiple properties?

For example track objects and faces at the same time?
While tracking objects I want to count how many persons are sitting in front of the computer.

I get the object tracking working, but not the face tracking.
The trackes faces are always 0.
I've tried something like this.
 

        public void EnableTracker()
        {
	   // Object tracking works anly with this resolution
            _senseManager.captureManager.FilterByStreamProfiles(PXCMCapture.StreamType.STREAM_TYPE_COLOR, 640, 480, 30);
            // Enable object tracking
            _senseManager.EnableTracker();
            // Enable face tracking
            _senseManager.EnableFace();
            
            PXCMTracker objectTracker = _senseManager.QueryTracker();
            PXCMFaceModule faceTracker = _senseManager.QueryFace();
                       
            var handler = new PXCMSenseManager.Handler
            {
                onModuleProcessedFrame = OnModuleProcessedFrame
            };

            if (_senseManager.Init(handler) >= pxcmStatus.PXCM_STATUS_NO_ERROR)
            {
                pxcmStatus objectTrackingstatus = Set2DTrackFromFiles(_fileNames, objectTracker);
                pxcmStatus faceTrackingStatus = ConfigureFace(faceTracker);

                if ((objectTrackingstatus < pxcmStatus.PXCM_STATUS_NO_ERROR) && 
		(faceTrackingStatus < pxcmStatus.PXCM_STATUS_NO_ERROR))
                {
                    _senseManager.Close();
                    _senseManager.Dispose();
                    return;
                }
                _senseManager.StreamFrames(true);
            }
        }

         private pxcmStatus OnModuleProcessedFrame(int mid, PXCMBase module, PXCMCapture.Sample sample)
        {
            // check if the callback is from the object tracking module.

            if ((mid == PXCMTracker.CUID) && !Stop)
            {
                var tracker = module.QueryInstance<PXCMTracker>();
//..
            }

            else if ((mid == PXCMFaceModule.CUID) && !Stop)
            {
                PXCMFaceModule face = (PXCMFaceModule)module.QueryInstance(PXCMFaceModule.CUID);
                PXCMFaceData fdata = face.CreateOutput();
                Int32 nfaces = fdata.QueryNumberOfDetectedFaces();
//Always = 0

            }

            // return NO_ERROR to continue, or any error to abort.

            return pxcmStatus.PXCM_STATUS_NO_ERROR;
        }

 

0 Kudos
1 Reply
Dirk_R_
Beginner
547 Views

Dirk R. wrote:

I've found the solution. It's working now.
I have to add one line *fdata.Update();*

 

        public void EnableTracker()
        {
	   // Object tracking works anly with this resolution
            _senseManager.captureManager.FilterByStreamProfiles(PXCMCapture.StreamType.STREAM_TYPE_COLOR, 640, 480, 30);
            // Enable object tracking
            _senseManager.EnableTracker();
            // Enable face tracking
            _senseManager.EnableFace();
            
            PXCMTracker objectTracker = _senseManager.QueryTracker();
            PXCMFaceModule faceTracker = _senseManager.QueryFace();
                       
            var handler = new PXCMSenseManager.Handler
            {
                onModuleProcessedFrame = OnModuleProcessedFrame
            };

            if (_senseManager.Init(handler) >= pxcmStatus.PXCM_STATUS_NO_ERROR)
            {
                pxcmStatus objectTrackingstatus = Set2DTrackFromFiles(_fileNames, objectTracker);
                pxcmStatus faceTrackingStatus = ConfigureFace(faceTracker);

                if ((objectTrackingstatus < pxcmStatus.PXCM_STATUS_NO_ERROR) && 
		(faceTrackingStatus < pxcmStatus.PXCM_STATUS_NO_ERROR))
                {
                    _senseManager.Close();
                    _senseManager.Dispose();
                    return;
                }
                _senseManager.StreamFrames(true);
            }
        }

         private pxcmStatus OnModuleProcessedFrame(int mid, PXCMBase module, PXCMCapture.Sample sample)
        {
            // check if the callback is from the object tracking module.

            if ((mid == PXCMTracker.CUID) && !Stop)
            {
                var tracker = module.QueryInstance<PXCMTracker>();
//..
            }

            else if ((mid == PXCMFaceModule.CUID) && !Stop)
            {
                PXCMFaceModule face = (PXCMFaceModule)module.QueryInstance(PXCMFaceModule.CUID);
                PXCMFaceData fdata = face.CreateOutput();
		fdata.Update();
                Int32 nfaces = fdata.QueryNumberOfDetectedFaces();
//Always = 0

            }

            // return NO_ERROR to continue, or any error to abort.

            return pxcmStatus.PXCM_STATUS_NO_ERROR;
        }

 

0 Kudos
Reply