Software Archive
Read-only legacy content
Announcements
FPGA community forums and blogs on community.intel.com are migrating to the new Altera Community and are read-only. For urgent support needs during this transition, please visit the FPGA Design Resources page or contact an Altera Authorized Distributor.
17060 Discussions

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

Dirk_R_
Beginner
523 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
523 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