Sample to operate omron HVC-P2 on GR-PEACH.

Dependencies:   AsciiFont

Information

Please see here for Japanese version.
日本語版はこちらを参照ください。

What is this ?

This is a sample that runs OMRON HVC-P2 with GR-PEACH. In this sample, you can try following among the functions of HVC-P2 : Human Body Detection, Face Detection, Age Estimation, Gender Estimation, Expression Estimation and Face Recognition.
Both GR-PEACH and HVC-P2 use Renesas RZ/A1H included ARM® Cortex™-A9 processor.

/media/uploads/dkato/hvcp2_demo_img3.jpg

HVC-P2 (Human Vision Components B5T-007001) is a human-sensing component that recognizes people. It is an integrated module that is built into other device and provides both the OKAO Vision's ten types of image sensing and a camera module.
For details, please refer to the following link.

In the HVCApi folder of this sample, the code of the following link destination Sample Code "SampleCode_rev.2.0.2" is used. (You can download from "Product Information" -> "Sample Code" in the middle of the following page.)
http://www.omron.com/ecb/products/mobile/hvc_p2/

Constitution

  1. HVC-P2 x 1
  2. USBA-microUSB conversion cable x 2
  3. USBA-microUSB conversion adapter x 1
  4. GR-PEACH x 1
  5. 4.3inc LCD shield x 1

/media/uploads/dkato/composition_hvcp2_demo.jpg

/media/uploads/dkato/composition_hvcp2_demo_2.jpg

Please close JP3 of GR-PEACH.
/media/uploads/RyoheiHagimoto/usb.jpg

How to use

It starts when connecting the power supply USB cable. At startup, all functions are turned off. By pressing the button on the right of the screen you can switch the function on / off.

  • Function ON : orange or green
  • Function OFF : blue or gray

Only the FACE button changes to "FACE (blue) -> FACE (orange) -> RECOGNITION (green)". When FACE (blue), following buttons are gray and can not be operated : AGE, GENDER and EXPRESSION.
"Response time" at the bottom left of the screen indicates "image processing + USB transfer time". It is not pure image processing time.

Register Data (Face Recognition)

Set the FACE button to RECOGNITION (green), and touch the screen with one person on the screen to register the face. In this sample, face registration will record up to 10 people. Delete the old registrant when registering after 11 people. Registration information is stored in the RAM on the HVC-P2 side. It is discarded by power off and reset.

/media/uploads/dkato/hvcp2_demo_img2.jpg

Change parameters

When you press Config icon at the bottom right of the screen, the parameter setting screen is displayed. You can change threshold value, detection size and face angle parameters.

/media/uploads/dkato/hvcp2_demo_config_icon.jpg
/media/uploads/dkato/hvcp2_demo_config.jpg

Change transfer image size

By pressing USER_BUTTON0 on the back of the board, the image transfer size switches in the order of "160 x 120 -> 320 x 240 -> no image".
/media/uploads/dkato/gr-peach_switch2.jpg

Committer:
dkato
Date:
Tue Sep 05 10:01:51 2017 +0000
Revision:
5:49a61433290a
Add HVC sensing result stabilizing library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dkato 5:49a61433290a 1 /*---------------------------------------------------------------------------*/
dkato 5:49a61433290a 2 /* Copyright(C) 2017 OMRON Corporation */
dkato 5:49a61433290a 3 /* */
dkato 5:49a61433290a 4 /* Licensed under the Apache License, Version 2.0 (the "License"); */
dkato 5:49a61433290a 5 /* you may not use this file except in compliance with the License. */
dkato 5:49a61433290a 6 /* You may obtain a copy of the License at */
dkato 5:49a61433290a 7 /* */
dkato 5:49a61433290a 8 /* http://www.apache.org/licenses/LICENSE-2.0 */
dkato 5:49a61433290a 9 /* */
dkato 5:49a61433290a 10 /* Unless required by applicable law or agreed to in writing, software */
dkato 5:49a61433290a 11 /* distributed under the License is distributed on an "AS IS" BASIS, */
dkato 5:49a61433290a 12 /* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
dkato 5:49a61433290a 13 /* See the License for the specific language governing permissions and */
dkato 5:49a61433290a 14 /* limitations under the License. */
dkato 5:49a61433290a 15 /*---------------------------------------------------------------------------*/
dkato 5:49a61433290a 16
dkato 5:49a61433290a 17 #include "STBPeAPI.h"
dkato 5:49a61433290a 18
dkato 5:49a61433290a 19
dkato 5:49a61433290a 20 /*---------------------------------------------------------------------*/
dkato 5:49a61433290a 21 // PeSlideFacesRec
dkato 5:49a61433290a 22 /*---------------------------------------------------------------------*/
dkato 5:49a61433290a 23 void PeSlideFacesRec ( STB_PE_DET *facesRec , STBExecFlg *execFlg)
dkato 5:49a61433290a 24 {
dkato 5:49a61433290a 25 STB_INT32 t , i ,j;
dkato 5:49a61433290a 26
dkato 5:49a61433290a 27 for( t = STB_PE_BACK_MAX -2 ; t >= 0 ; t-- )
dkato 5:49a61433290a 28 {
dkato 5:49a61433290a 29 facesRec [ t + 1 ].num = facesRec[ t + 0 ].num;
dkato 5:49a61433290a 30 for( i = 0 ; i < facesRec [ t + 1 ].num ; i++ )
dkato 5:49a61433290a 31 {
dkato 5:49a61433290a 32 facesRec[ t + 1 ].fcDet[i].nDetID = facesRec[ t ].fcDet[i].nDetID ;
dkato 5:49a61433290a 33 facesRec[ t + 1 ].fcDet[i].nTraID = facesRec[ t ].fcDet[i].nTraID ;
dkato 5:49a61433290a 34 if( execFlg->gen == STB_TRUE )
dkato 5:49a61433290a 35 {
dkato 5:49a61433290a 36 facesRec[ t + 1 ].fcDet[i].genDetVal = facesRec[ t ].fcDet[i].genDetVal ;
dkato 5:49a61433290a 37 facesRec[ t + 1 ].fcDet[i].genStatus = facesRec[ t ].fcDet[i].genStatus ;
dkato 5:49a61433290a 38 facesRec[ t + 1 ].fcDet[i].genDetConf = facesRec[ t ].fcDet[i].genDetConf ;
dkato 5:49a61433290a 39 }
dkato 5:49a61433290a 40 if( execFlg->age == STB_TRUE )
dkato 5:49a61433290a 41 {
dkato 5:49a61433290a 42 facesRec[ t + 1 ].fcDet[i].ageDetVal = facesRec[ t ].fcDet[i].ageDetVal ;
dkato 5:49a61433290a 43 facesRec[ t + 1 ].fcDet[i].ageStatus = facesRec[ t ].fcDet[i].ageStatus ;
dkato 5:49a61433290a 44 facesRec[ t + 1 ].fcDet[i].ageDetConf = facesRec[ t ].fcDet[i].ageDetConf ;
dkato 5:49a61433290a 45 }
dkato 5:49a61433290a 46 if( execFlg->exp == STB_TRUE )
dkato 5:49a61433290a 47 {
dkato 5:49a61433290a 48 facesRec[ t + 1 ].fcDet[i].expDetConf = facesRec[ t ].fcDet[i].expDetConf ;
dkato 5:49a61433290a 49 for( j = 0 ; j < STB_EX_MAX ; j++)
dkato 5:49a61433290a 50 {
dkato 5:49a61433290a 51 facesRec[ t + 1 ].fcDet[ i ].expDetVal[ j ]
dkato 5:49a61433290a 52 = facesRec[ t + 0 ].fcDet[ i ].expDetVal[ j ];
dkato 5:49a61433290a 53 }
dkato 5:49a61433290a 54 }
dkato 5:49a61433290a 55 if( execFlg->gaz == STB_TRUE )
dkato 5:49a61433290a 56 {
dkato 5:49a61433290a 57 facesRec[ t + 1 ].fcDet[i].gazDetLR = facesRec[ t ].fcDet[i].gazDetLR ;
dkato 5:49a61433290a 58 facesRec[ t + 1 ].fcDet[i].gazDetUD = facesRec[ t ].fcDet[i].gazDetUD ;
dkato 5:49a61433290a 59 }
dkato 5:49a61433290a 60 //if( execFlg->dir == STB_TRUE )
dkato 5:49a61433290a 61 //{
dkato 5:49a61433290a 62 facesRec[ t + 1 ].fcDet[i].dirDetRoll = facesRec[ t ].fcDet[i].dirDetRoll ;
dkato 5:49a61433290a 63 facesRec[ t + 1 ].fcDet[i].dirDetPitch = facesRec[ t ].fcDet[i].dirDetPitch;
dkato 5:49a61433290a 64 facesRec[ t + 1 ].fcDet[i].dirDetYaw = facesRec[ t ].fcDet[i].dirDetYaw ;
dkato 5:49a61433290a 65 facesRec[ t + 1 ].fcDet[i].dirDetConf = facesRec[ t ].fcDet[i].dirDetConf ;
dkato 5:49a61433290a 66 //}
dkato 5:49a61433290a 67 if( execFlg->bli == STB_TRUE )
dkato 5:49a61433290a 68 {
dkato 5:49a61433290a 69 facesRec[ t + 1 ].fcDet[i].bliDetL = facesRec[ t ].fcDet[i].bliDetL ;
dkato 5:49a61433290a 70 facesRec[ t + 1 ].fcDet[i].bliDetR = facesRec[ t ].fcDet[i].bliDetR ;
dkato 5:49a61433290a 71 }
dkato 5:49a61433290a 72 }
dkato 5:49a61433290a 73 }
dkato 5:49a61433290a 74
dkato 5:49a61433290a 75 }
dkato 5:49a61433290a 76 /*---------------------------------------------------------------------*/
dkato 5:49a61433290a 77 // PeCurFaces
dkato 5:49a61433290a 78 /*---------------------------------------------------------------------*/
dkato 5:49a61433290a 79 void PeCurFaces ( STB_PE_DET *facesRec , STB_PE_DET *srcFace ,STBExecFlg *execFlg)
dkato 5:49a61433290a 80 {
dkato 5:49a61433290a 81 STB_INT32 i ,j;
dkato 5:49a61433290a 82
dkato 5:49a61433290a 83
dkato 5:49a61433290a 84 facesRec [ 0 ].num = srcFace->num;
dkato 5:49a61433290a 85 for( i = 0 ; i < facesRec [ 0 ].num ; i++ )
dkato 5:49a61433290a 86 {
dkato 5:49a61433290a 87 facesRec[ 0 ].fcDet[ i ].nDetID = srcFace[ 0 ].fcDet[ i ].nDetID ;
dkato 5:49a61433290a 88 facesRec[ 0 ].fcDet[ i ].nTraID = srcFace[ 0 ].fcDet[ i ].nTraID ;
dkato 5:49a61433290a 89 if( execFlg->gen == STB_TRUE )
dkato 5:49a61433290a 90 {
dkato 5:49a61433290a 91 facesRec[ 0 ].fcDet[ i ].genDetVal = srcFace[ 0 ].fcDet[ i ].genDetVal ;
dkato 5:49a61433290a 92 facesRec[ 0 ].fcDet[ i ].genStatus = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 93 facesRec[ 0 ].fcDet[ i ].genDetConf = srcFace[ 0 ].fcDet[ i ].genDetConf;
dkato 5:49a61433290a 94 }
dkato 5:49a61433290a 95 if( execFlg->age == STB_TRUE )
dkato 5:49a61433290a 96 {
dkato 5:49a61433290a 97 facesRec[ 0 ].fcDet[ i ].ageDetVal = srcFace[ 0 ].fcDet[ i ].ageDetVal ;
dkato 5:49a61433290a 98 facesRec[ 0 ].fcDet[ i ].ageStatus = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 99 facesRec[ 0 ].fcDet[ i ].ageDetConf = srcFace[ 0 ].fcDet[ i ].ageDetConf;
dkato 5:49a61433290a 100 }
dkato 5:49a61433290a 101 if( execFlg->exp == STB_TRUE )
dkato 5:49a61433290a 102 {
dkato 5:49a61433290a 103 facesRec[ 0 ].fcDet[ i ].expDetConf = srcFace[ 0 ].fcDet[ i ].expDetConf ;
dkato 5:49a61433290a 104 for( j = 0 ; j < STB_EX_MAX ; j++)
dkato 5:49a61433290a 105 {
dkato 5:49a61433290a 106 facesRec[ 0 ].fcDet[ i ].expDetVal[ j] = srcFace[ 0 ].fcDet[ i ].expDetVal[ j];
dkato 5:49a61433290a 107 }
dkato 5:49a61433290a 108 }
dkato 5:49a61433290a 109 if( execFlg->gaz == STB_TRUE )
dkato 5:49a61433290a 110 {
dkato 5:49a61433290a 111 facesRec[ 0 ].fcDet[ i ].gazDetLR = srcFace[ 0 ].fcDet[ i ].gazDetLR ;
dkato 5:49a61433290a 112 facesRec[ 0 ].fcDet[ i ].gazDetUD = srcFace[ 0 ].fcDet[ i ].gazDetUD ;
dkato 5:49a61433290a 113 }
dkato 5:49a61433290a 114 //if( execFlg->dir == STB_TRUE )
dkato 5:49a61433290a 115 //{
dkato 5:49a61433290a 116 facesRec[ 0 ].fcDet[ i ].dirDetRoll = srcFace[ 0 ].fcDet[ i ].dirDetRoll ;
dkato 5:49a61433290a 117 facesRec[ 0 ].fcDet[ i ].dirDetYaw = srcFace[ 0 ].fcDet[ i ].dirDetYaw ;
dkato 5:49a61433290a 118 facesRec[ 0 ].fcDet[ i ].dirDetPitch = srcFace[ 0 ].fcDet[ i ].dirDetPitch ;
dkato 5:49a61433290a 119 facesRec[ 0 ].fcDet[ i ].dirDetConf = srcFace[ 0 ].fcDet[ i ].dirDetConf ;
dkato 5:49a61433290a 120 //}
dkato 5:49a61433290a 121 if( execFlg->bli == STB_TRUE )
dkato 5:49a61433290a 122 {
dkato 5:49a61433290a 123 facesRec[ 0 ].fcDet[ i ].bliDetL = srcFace[ 0 ].fcDet[ i ].bliDetL ;
dkato 5:49a61433290a 124 facesRec[ 0 ].fcDet[ i ].bliDetR = srcFace[ 0 ].fcDet[ i ].bliDetR ;
dkato 5:49a61433290a 125 }
dkato 5:49a61433290a 126 }
dkato 5:49a61433290a 127 }
dkato 5:49a61433290a 128
dkato 5:49a61433290a 129 /*----------------------------------------------------------------------------------------------------*/
dkato 5:49a61433290a 130 /* PeExpressID */
dkato 5:49a61433290a 131 /*----------------------------------------------------------------------------------------------------*/
dkato 5:49a61433290a 132 STB_INT32 PeExpressID( STB_INT32* exp )
dkato 5:49a61433290a 133 {
dkato 5:49a61433290a 134 int i;
dkato 5:49a61433290a 135 int tmpVal;
dkato 5:49a61433290a 136 int retVal;
dkato 5:49a61433290a 137
dkato 5:49a61433290a 138 retVal = 0;
dkato 5:49a61433290a 139 tmpVal = 0;
dkato 5:49a61433290a 140 for( i = 0 ; i < STB_EX_MAX ; i++)
dkato 5:49a61433290a 141 {
dkato 5:49a61433290a 142 if( tmpVal < exp[i] && exp[i] != STB_ERR_PE_CANNOT )
dkato 5:49a61433290a 143 {
dkato 5:49a61433290a 144 tmpVal = exp[i];
dkato 5:49a61433290a 145 retVal = i;
dkato 5:49a61433290a 146 }
dkato 5:49a61433290a 147 }
dkato 5:49a61433290a 148 return retVal;
dkato 5:49a61433290a 149 }
dkato 5:49a61433290a 150 /*---------------------------------------------------------------------*/
dkato 5:49a61433290a 151 // PeStbFaceEasy
dkato 5:49a61433290a 152 /*---------------------------------------------------------------------*/
dkato 5:49a61433290a 153 void PeStbFaceEasy
dkato 5:49a61433290a 154 (
dkato 5:49a61433290a 155 STB_PE_RES *peRes ,
dkato 5:49a61433290a 156 STB_PE_DET *peRec ,
dkato 5:49a61433290a 157 STB_INT32 dirThr ,
dkato 5:49a61433290a 158 STB_INT32 dirUDMax ,
dkato 5:49a61433290a 159 STB_INT32 dirUDMin ,
dkato 5:49a61433290a 160 STB_INT32 dirLRMax ,
dkato 5:49a61433290a 161 STB_INT32 dirLRMin ,
dkato 5:49a61433290a 162 STB_INT32 frmMax ,
dkato 5:49a61433290a 163 STBExecFlg *execFlg
dkato 5:49a61433290a 164 )
dkato 5:49a61433290a 165 {
dkato 5:49a61433290a 166
dkato 5:49a61433290a 167
dkato 5:49a61433290a 168 /*Checking the past data here, fill in all peRes.*/
dkato 5:49a61433290a 169 STB_INT32 k ,t,i ;
dkato 5:49a61433290a 170 STB_INT32 trID;
dkato 5:49a61433290a 171
dkato 5:49a61433290a 172 STB_INT32 recCnt;
dkato 5:49a61433290a 173 STB_INT32 recVal [STB_PE_BACK_MAX];
dkato 5:49a61433290a 174 STB_INT32 recConf [STB_PE_BACK_MAX];
dkato 5:49a61433290a 175 STB_INT32 tmpVal;
dkato 5:49a61433290a 176 STB_INT32 tmpConf;
dkato 5:49a61433290a 177 STB_INT32 expVal [STB_EX_MAX] = {0};
dkato 5:49a61433290a 178
dkato 5:49a61433290a 179 STB_STATUS preSAge ;
dkato 5:49a61433290a 180 STB_STATUS preSGen ;
dkato 5:49a61433290a 181 STB_INT32 preVAge ;
dkato 5:49a61433290a 182 STB_INT32 preVGen ;
dkato 5:49a61433290a 183 STB_INT32 preCAge ;
dkato 5:49a61433290a 184 STB_INT32 preCGen ;
dkato 5:49a61433290a 185 STB_STATUS tmpS ;
dkato 5:49a61433290a 186
dkato 5:49a61433290a 187
dkato 5:49a61433290a 188
dkato 5:49a61433290a 189 for( t = 0; t < STB_PE_BACK_MAX ; t++)
dkato 5:49a61433290a 190 {
dkato 5:49a61433290a 191 recVal [t] = 0;
dkato 5:49a61433290a 192 recConf[t] = 0;
dkato 5:49a61433290a 193 }
dkato 5:49a61433290a 194
dkato 5:49a61433290a 195
dkato 5:49a61433290a 196 /*do stabilization processing each tracking person*/
dkato 5:49a61433290a 197 peRes->peCnt = peRec[0].num ;//a number of tracking people(present)
dkato 5:49a61433290a 198 for( k = 0; k < peRes->peCnt ; k++)
dkato 5:49a61433290a 199 {
dkato 5:49a61433290a 200 trID = peRec[0].fcDet[k].nTraID;/*Tracking person number in the through frame*/
dkato 5:49a61433290a 201
dkato 5:49a61433290a 202
dkato 5:49a61433290a 203 // peRes Add -------------------------------------------------------------------------------------------------
dkato 5:49a61433290a 204 peRes->peFace[k].nTraID = trID;
dkato 5:49a61433290a 205
dkato 5:49a61433290a 206
dkato 5:49a61433290a 207 // preStatus -------------------------------------------------------------------------------------------------
dkato 5:49a61433290a 208 preSAge = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 209 preSGen = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 210 preVAge = 0 ;
dkato 5:49a61433290a 211 preVGen = 0 ;
dkato 5:49a61433290a 212 preCAge = 0 ;
dkato 5:49a61433290a 213 preCGen = 0 ;
dkato 5:49a61433290a 214 if( execFlg->age == STB_TRUE || execFlg->gen == STB_TRUE )
dkato 5:49a61433290a 215 {
dkato 5:49a61433290a 216 for( i = 0; i < peRec[1].num ; i++)
dkato 5:49a61433290a 217 {
dkato 5:49a61433290a 218 if( peRec[1].fcDet[i].nTraID == trID )
dkato 5:49a61433290a 219 {
dkato 5:49a61433290a 220 preSAge = peRec[1].fcDet[i].ageStatus ;
dkato 5:49a61433290a 221 preSGen = peRec[1].fcDet[i].genStatus ;
dkato 5:49a61433290a 222 preVAge = peRec[1].fcDet[i].ageDetVal ;
dkato 5:49a61433290a 223 preVGen = peRec[1].fcDet[i].genDetVal ;
dkato 5:49a61433290a 224 preCAge = peRec[1].fcDet[i].ageDetConf ;
dkato 5:49a61433290a 225 preCGen = peRec[1].fcDet[i].genDetConf ;
dkato 5:49a61433290a 226 break;
dkato 5:49a61433290a 227 }
dkato 5:49a61433290a 228 }
dkato 5:49a61433290a 229 }
dkato 5:49a61433290a 230
dkato 5:49a61433290a 231 // age -------------------------------------------------------------------------------------------------
dkato 5:49a61433290a 232 if( execFlg->age == STB_TRUE )
dkato 5:49a61433290a 233 {
dkato 5:49a61433290a 234 if ( preSAge == STB_STATUS_NO_DATA //stabilization impossible: no data of the relevant people
dkato 5:49a61433290a 235 || preSAge == STB_STATUS_CALCULATING //during stabilization : a number of data for relevant people aren't enough(a number of frames that relevant people are taken)
dkato 5:49a61433290a 236 )
dkato 5:49a61433290a 237 {
dkato 5:49a61433290a 238 recCnt = 0;
dkato 5:49a61433290a 239 for( t = 0; t < STB_PE_BACK_MAX ; t++) //previous t frame
dkato 5:49a61433290a 240 {
dkato 5:49a61433290a 241 for( i = 0; i < peRec[t].num ; i++) //a number of tracking people(previous t frame)
dkato 5:49a61433290a 242 {
dkato 5:49a61433290a 243 if(
dkato 5:49a61433290a 244 peRec[t].fcDet[i].nTraID == trID //the same tracking number
dkato 5:49a61433290a 245 && peRec[t].fcDet[i].nDetID >= 0 //not lost
dkato 5:49a61433290a 246 && peRec[t].fcDet[i].dirDetConf >= dirThr // Face angle : confidence
dkato 5:49a61433290a 247 && peRec[t].fcDet[i].dirDetPitch >= dirUDMin // Face angle : pitch
dkato 5:49a61433290a 248 && peRec[t].fcDet[i].dirDetPitch <= dirUDMax // Face angle : pitch
dkato 5:49a61433290a 249 && peRec[t].fcDet[i].dirDetYaw >= dirLRMin // Face angle : yaw
dkato 5:49a61433290a 250 && peRec[t].fcDet[i].dirDetYaw <= dirLRMax // Face angle : yaw
dkato 5:49a61433290a 251 && peRec[t].fcDet[i].ageDetVal != STB_ERR_PE_CANNOT //
dkato 5:49a61433290a 252 && peRec[t].fcDet[i].ageDetConf != STB_ERR_PE_CANNOT //
dkato 5:49a61433290a 253 )
dkato 5:49a61433290a 254 {
dkato 5:49a61433290a 255 recVal [ recCnt ] = peRec[ t ].fcDet[ i ].ageDetVal ;
dkato 5:49a61433290a 256 recConf[ recCnt ] = peRec[ t ].fcDet[ i ].ageDetConf ;
dkato 5:49a61433290a 257 recCnt++;
dkato 5:49a61433290a 258 }
dkato 5:49a61433290a 259 }
dkato 5:49a61433290a 260 }
dkato 5:49a61433290a 261 tmpS = STB_STATUS_NO_DATA;
dkato 5:49a61433290a 262 if ( recCnt == 0 ) { tmpS = STB_STATUS_NO_DATA ; }//stabilization impossible
dkato 5:49a61433290a 263 else if ( recCnt < frmMax ) { tmpS = STB_STATUS_CALCULATING; }//during stabilization
dkato 5:49a61433290a 264 else if ( recCnt >= frmMax ) { tmpS = STB_STATUS_COMPLETE ; }//Just after stabilization
dkato 5:49a61433290a 265 tmpVal = 0;
dkato 5:49a61433290a 266 tmpConf = 0;
dkato 5:49a61433290a 267 for( i = 0; i < recCnt ; i++ )
dkato 5:49a61433290a 268 {
dkato 5:49a61433290a 269 tmpVal += recVal [ i ] ;
dkato 5:49a61433290a 270 tmpConf += recConf[ i ] ;
dkato 5:49a61433290a 271 }
dkato 5:49a61433290a 272 if ( recCnt == 0 ) { recCnt = 1 ; }
dkato 5:49a61433290a 273 tmpVal /= recCnt;
dkato 5:49a61433290a 274 tmpConf /= recCnt;
dkato 5:49a61433290a 275 peRes->peFace[k].age.value = tmpVal ;
dkato 5:49a61433290a 276 peRes->peFace[k].age.conf = STB_CONF_NO_DATA ;
dkato 5:49a61433290a 277 peRes->peFace[k].age.status = tmpS ;
dkato 5:49a61433290a 278 peRec[0].fcDet[k].ageStatus = tmpS ;
dkato 5:49a61433290a 279 if( tmpS == STB_STATUS_COMPLETE )//Just after stabilization
dkato 5:49a61433290a 280 {
dkato 5:49a61433290a 281 peRec[0].fcDet[k].ageDetVal = tmpVal ;
dkato 5:49a61433290a 282 peRec[0].fcDet[k].ageDetConf = tmpConf ;
dkato 5:49a61433290a 283 }
dkato 5:49a61433290a 284 }else if ( preSAge == STB_STATUS_COMPLETE //Just after stabilization
dkato 5:49a61433290a 285 || preSAge == STB_STATUS_FIXED //already stabilized
dkato 5:49a61433290a 286 )
dkato 5:49a61433290a 287 {
dkato 5:49a61433290a 288 peRes->peFace[k].age.value = preVAge ;
dkato 5:49a61433290a 289 peRes->peFace[k].age.conf = preCAge;
dkato 5:49a61433290a 290 peRes->peFace[k].age.status = STB_STATUS_FIXED ;//already stabilized
dkato 5:49a61433290a 291 peRec[0].fcDet[k].ageDetVal = preVAge ;
dkato 5:49a61433290a 292 peRec[0].fcDet[k].ageDetConf = preCAge ;
dkato 5:49a61433290a 293 peRec[0].fcDet[k].ageStatus = STB_STATUS_FIXED ;//already stabilized
dkato 5:49a61433290a 294 }
dkato 5:49a61433290a 295 }
dkato 5:49a61433290a 296
dkato 5:49a61433290a 297
dkato 5:49a61433290a 298 // gender -------------------------------------------------------------------------------------------------
dkato 5:49a61433290a 299 if( execFlg->gen == STB_TRUE )
dkato 5:49a61433290a 300 {
dkato 5:49a61433290a 301 if ( preSGen == STB_STATUS_NO_DATA //stabilization impossible: no data of the relevant people
dkato 5:49a61433290a 302 || preSGen == STB_STATUS_CALCULATING //during stabilization : a number of data for relevant people aren't enough(a number of frames that relevant people are taken)
dkato 5:49a61433290a 303 )
dkato 5:49a61433290a 304 {
dkato 5:49a61433290a 305 recCnt = 0;
dkato 5:49a61433290a 306 for( t = 0; t < STB_PE_BACK_MAX ; t++)
dkato 5:49a61433290a 307 {
dkato 5:49a61433290a 308 for( i = 0; i < peRec[t].num ; i++) //a number of tracking people(previous t frame)
dkato 5:49a61433290a 309 {
dkato 5:49a61433290a 310 if(
dkato 5:49a61433290a 311 peRec[t].fcDet[i].nTraID == trID //the same tracking number
dkato 5:49a61433290a 312 && peRec[t].fcDet[i].nDetID >= 0 //not lost
dkato 5:49a61433290a 313 && peRec[t].fcDet[i].dirDetConf >= dirThr // Face angle : confidence
dkato 5:49a61433290a 314 && peRec[t].fcDet[i].dirDetPitch >= dirUDMin // Face angle : pitch
dkato 5:49a61433290a 315 && peRec[t].fcDet[i].dirDetPitch <= dirUDMax // Face angle : pitch
dkato 5:49a61433290a 316 && peRec[t].fcDet[i].dirDetYaw >= dirLRMin // Face angle : yaw
dkato 5:49a61433290a 317 && peRec[t].fcDet[i].dirDetYaw <= dirLRMax // Face angle : yaw
dkato 5:49a61433290a 318 && peRec[t].fcDet[i].genDetVal != STB_ERR_PE_CANNOT //
dkato 5:49a61433290a 319 && peRec[t].fcDet[i].genDetConf != STB_ERR_PE_CANNOT //
dkato 5:49a61433290a 320 )
dkato 5:49a61433290a 321 {
dkato 5:49a61433290a 322 recVal [ recCnt ] = peRec[ t ].fcDet[ i ].genDetVal ;// 1:man 0:woman
dkato 5:49a61433290a 323 recConf[ recCnt ] = peRec[ t ].fcDet[ i ].genDetConf;
dkato 5:49a61433290a 324 recCnt++;
dkato 5:49a61433290a 325 }
dkato 5:49a61433290a 326 }
dkato 5:49a61433290a 327 }
dkato 5:49a61433290a 328 tmpS = STB_STATUS_NO_DATA;
dkato 5:49a61433290a 329 if ( recCnt == 0 ) { tmpS = STB_STATUS_NO_DATA ; }//stabilization impossible
dkato 5:49a61433290a 330 else if ( recCnt < frmMax ) { tmpS = STB_STATUS_CALCULATING; }//during stabilization
dkato 5:49a61433290a 331 else if ( recCnt >= frmMax ) { tmpS = STB_STATUS_COMPLETE ; }//Just after stabilization
dkato 5:49a61433290a 332 tmpVal = 0;
dkato 5:49a61433290a 333 tmpConf = 0;
dkato 5:49a61433290a 334 for( i = 0; i < recCnt ; i++ )
dkato 5:49a61433290a 335 {
dkato 5:49a61433290a 336 tmpVal += recVal [ i ] ;
dkato 5:49a61433290a 337 tmpConf += recConf[ i ] ;
dkato 5:49a61433290a 338 }
dkato 5:49a61433290a 339 if ( recCnt == 0 ) { recCnt = 1 ; }
dkato 5:49a61433290a 340 tmpConf /= recCnt;
dkato 5:49a61433290a 341 if ( tmpVal * 2 <= recCnt )
dkato 5:49a61433290a 342 {
dkato 5:49a61433290a 343 peRes->peFace[k].gen.value = 0 ;// 1:man 0:woman
dkato 5:49a61433290a 344 peRes->peFace[k].gen.status = tmpS ;
dkato 5:49a61433290a 345 peRes->peFace[k].gen.conf = STB_CONF_NO_DATA ;
dkato 5:49a61433290a 346 peRec[0].fcDet[k].genStatus = tmpS ;
dkato 5:49a61433290a 347 if( tmpS == STB_STATUS_COMPLETE )//Just after stabilization
dkato 5:49a61433290a 348 {
dkato 5:49a61433290a 349 peRec[0].fcDet[k].genDetVal = 0 ;
dkato 5:49a61433290a 350 peRec[0].fcDet[k].genDetConf = tmpConf ;
dkato 5:49a61433290a 351 }
dkato 5:49a61433290a 352 }
dkato 5:49a61433290a 353 else
dkato 5:49a61433290a 354 {
dkato 5:49a61433290a 355 peRes->peFace[k].gen.value = 1 ;// 1:man 0:woman
dkato 5:49a61433290a 356 peRes->peFace[k].gen.status = tmpS ;
dkato 5:49a61433290a 357 peRes->peFace[k].gen.conf = STB_CONF_NO_DATA ;
dkato 5:49a61433290a 358 peRec[0].fcDet[k].genStatus = tmpS ;
dkato 5:49a61433290a 359 if( tmpS == STB_STATUS_COMPLETE )//Just after stabilization
dkato 5:49a61433290a 360 {
dkato 5:49a61433290a 361 peRec[0].fcDet[k].genDetVal = 1 ;
dkato 5:49a61433290a 362 peRec[0].fcDet[k].genDetConf = tmpConf ;
dkato 5:49a61433290a 363 }
dkato 5:49a61433290a 364 }
dkato 5:49a61433290a 365 }else if ( preSGen == STB_STATUS_COMPLETE //Just after stabilization
dkato 5:49a61433290a 366 || preSGen == STB_STATUS_FIXED //already stabilized
dkato 5:49a61433290a 367 )
dkato 5:49a61433290a 368 {
dkato 5:49a61433290a 369 peRes->peFace[k].gen.value = preVGen ;
dkato 5:49a61433290a 370 peRes->peFace[k].gen.conf = preCGen;
dkato 5:49a61433290a 371 peRes->peFace[k].gen.status = STB_STATUS_FIXED ;//already stabilized
dkato 5:49a61433290a 372 peRec[0].fcDet[k].genDetVal = preVGen ;
dkato 5:49a61433290a 373 peRec[0].fcDet[k].genStatus = STB_STATUS_FIXED ;//already stabilized
dkato 5:49a61433290a 374 peRec[0].fcDet[k].genDetConf = preCGen ;
dkato 5:49a61433290a 375 }
dkato 5:49a61433290a 376 }
dkato 5:49a61433290a 377
dkato 5:49a61433290a 378 // gazeLR -------------------------------------------------------------------------------------------------
dkato 5:49a61433290a 379 if( execFlg->gaz == STB_TRUE )
dkato 5:49a61433290a 380 {
dkato 5:49a61433290a 381 recCnt = 0;
dkato 5:49a61433290a 382 for( t = 0; t < STB_PE_BACK_MAX ; t++)
dkato 5:49a61433290a 383 {
dkato 5:49a61433290a 384 for( i = 0; i < peRec[t].num ; i++) //a number of tracking people(previous t frame)
dkato 5:49a61433290a 385 {
dkato 5:49a61433290a 386 if(
dkato 5:49a61433290a 387 peRec[t].fcDet[i].nTraID == trID //the same tracking number
dkato 5:49a61433290a 388 && peRec[t].fcDet[i].nDetID >= 0 //not lost
dkato 5:49a61433290a 389 && peRec[t].fcDet[i].dirDetConf >= dirThr // Face angle : confidence
dkato 5:49a61433290a 390 && peRec[t].fcDet[i].dirDetPitch >= dirUDMin // Face angle : pitch
dkato 5:49a61433290a 391 && peRec[t].fcDet[i].dirDetPitch <= dirUDMax // Face angle : pitch
dkato 5:49a61433290a 392 && peRec[t].fcDet[i].dirDetYaw >= dirLRMin // Face angle : yaw
dkato 5:49a61433290a 393 && peRec[t].fcDet[i].dirDetYaw <= dirLRMax // Face angle : yaw
dkato 5:49a61433290a 394 && peRec[t].fcDet[i].gazDetLR != STB_ERR_PE_CANNOT //
dkato 5:49a61433290a 395 )
dkato 5:49a61433290a 396 {
dkato 5:49a61433290a 397 recVal[ recCnt ] = peRec[ t ].fcDet [ i ].gazDetLR ;
dkato 5:49a61433290a 398 recCnt++;
dkato 5:49a61433290a 399 }
dkato 5:49a61433290a 400 }
dkato 5:49a61433290a 401 }
dkato 5:49a61433290a 402 if ( recCnt == 0 ) { peRes->peFace[k].gaz.status = STB_STATUS_NO_DATA ; }//stabilization impossible
dkato 5:49a61433290a 403 else { peRes->peFace[k].gaz.status = STB_STATUS_CALCULATING; }//during stabilization
dkato 5:49a61433290a 404 peRes->peFace[k].gaz.conf = STB_CONF_NO_DATA;//no Confidence
dkato 5:49a61433290a 405 tmpVal = 0;
dkato 5:49a61433290a 406 for( i = 0; i < recCnt ; i++ ) { tmpVal += recVal[ i ] ; }
dkato 5:49a61433290a 407 if ( recCnt == 0 ) { recCnt = 1 ; }
dkato 5:49a61433290a 408 peRes->peFace[k].gaz.LR = tmpVal / recCnt;
dkato 5:49a61433290a 409 // gazeUD -------------------------------------------------------------------------------------------------
dkato 5:49a61433290a 410 recCnt = 0;
dkato 5:49a61433290a 411 for( t = 0; t < STB_PE_BACK_MAX ; t++)
dkato 5:49a61433290a 412 {
dkato 5:49a61433290a 413 for( i = 0; i < peRec[t].num ; i++) //a number of tracking people(previous t frame)
dkato 5:49a61433290a 414 {
dkato 5:49a61433290a 415 if(
dkato 5:49a61433290a 416 peRec[t].fcDet[i].nTraID == trID //the same tracking number
dkato 5:49a61433290a 417 && peRec[t].fcDet[i].nDetID >= 0 //not lost
dkato 5:49a61433290a 418 && peRec[t].fcDet[i].dirDetConf >= dirThr // Face angle : confidence
dkato 5:49a61433290a 419 && peRec[t].fcDet[i].dirDetPitch >= dirUDMin // Face angle : pitch
dkato 5:49a61433290a 420 && peRec[t].fcDet[i].dirDetPitch <= dirUDMax // Face angle : pitch
dkato 5:49a61433290a 421 && peRec[t].fcDet[i].dirDetYaw >= dirLRMin // Face angle : yaw
dkato 5:49a61433290a 422 && peRec[t].fcDet[i].dirDetYaw <= dirLRMax // Face angle : yaw
dkato 5:49a61433290a 423 && peRec[t].fcDet[i].gazDetUD != STB_ERR_PE_CANNOT //
dkato 5:49a61433290a 424 )
dkato 5:49a61433290a 425 {
dkato 5:49a61433290a 426 recVal[ recCnt ] = peRec[ t ].fcDet [ i ].gazDetUD ;
dkato 5:49a61433290a 427 recCnt++;
dkato 5:49a61433290a 428 }
dkato 5:49a61433290a 429 }
dkato 5:49a61433290a 430 }
dkato 5:49a61433290a 431 tmpVal = 0;
dkato 5:49a61433290a 432 for( i = 0; i < recCnt ; i++ ) { tmpVal += recVal[ i ] ; }
dkato 5:49a61433290a 433 if ( recCnt == 0 ) { recCnt = 1 ; }
dkato 5:49a61433290a 434 peRes->peFace[k].gaz.UD = tmpVal / recCnt;
dkato 5:49a61433290a 435 }
dkato 5:49a61433290a 436
dkato 5:49a61433290a 437
dkato 5:49a61433290a 438 // expression -------------------------------------------------------------------------------------------------
dkato 5:49a61433290a 439 if( execFlg->exp == STB_TRUE )
dkato 5:49a61433290a 440 {
dkato 5:49a61433290a 441 recCnt = 0;
dkato 5:49a61433290a 442 for( t = 0; t < STB_PE_BACK_MAX ; t++)
dkato 5:49a61433290a 443 {
dkato 5:49a61433290a 444 for( i = 0; i < peRec[t].num ; i++) //a number of tracking people(previous t frame)
dkato 5:49a61433290a 445 {
dkato 5:49a61433290a 446 if(
dkato 5:49a61433290a 447 peRec[t].fcDet[i].nTraID == trID //the same tracking number
dkato 5:49a61433290a 448 && peRec[t].fcDet[i].nDetID >= 0 //not lost
dkato 5:49a61433290a 449 && peRec[t].fcDet[i].dirDetConf >= dirThr // Face angle : confidence
dkato 5:49a61433290a 450 && peRec[t].fcDet[i].dirDetPitch >= dirUDMin // Face angle : pitch
dkato 5:49a61433290a 451 && peRec[t].fcDet[i].dirDetPitch <= dirUDMax // Face angle : pitch
dkato 5:49a61433290a 452 && peRec[t].fcDet[i].dirDetYaw >= dirLRMin // Face angle : yaw
dkato 5:49a61433290a 453 && peRec[t].fcDet[i].dirDetYaw <= dirLRMax // Face angle : yaw
dkato 5:49a61433290a 454 && peRec[t].fcDet[i].expDetConf != STB_ERR_PE_CANNOT //
dkato 5:49a61433290a 455 )
dkato 5:49a61433290a 456 {
dkato 5:49a61433290a 457 recVal[ recCnt ] = PeExpressID ( peRec[ t ].fcDet[i].expDetVal );
dkato 5:49a61433290a 458 recCnt++;
dkato 5:49a61433290a 459 }
dkato 5:49a61433290a 460 }
dkato 5:49a61433290a 461 }
dkato 5:49a61433290a 462 for( i = 0; i < STB_EX_MAX; i++ ) { expVal[ i ] = 0 ; }
dkato 5:49a61433290a 463 for( i = 0; i < recCnt ; i++ ) { expVal[ recVal[ i ] ] += 1 ; }
dkato 5:49a61433290a 464 peRes->peFace[k].exp.value = PeExpressID ( expVal );
dkato 5:49a61433290a 465 peRes->peFace[k].exp.conf = STB_CONF_NO_DATA;//no Confidence
dkato 5:49a61433290a 466 if ( recCnt == 0 ) { peRes->peFace[k].exp.status = STB_STATUS_NO_DATA ; }//stabilization impossible
dkato 5:49a61433290a 467 else { peRes->peFace[k].exp.status = STB_STATUS_CALCULATING; }//during stabilization
dkato 5:49a61433290a 468 }
dkato 5:49a61433290a 469
dkato 5:49a61433290a 470 // blink L -------------------------------------------------------------------------------------------------
dkato 5:49a61433290a 471 if( execFlg->bli == STB_TRUE )
dkato 5:49a61433290a 472 {
dkato 5:49a61433290a 473 recCnt = 0;
dkato 5:49a61433290a 474 for( t = 0; t < STB_PE_BACK_MAX ; t++)
dkato 5:49a61433290a 475 {
dkato 5:49a61433290a 476 for( i = 0; i < peRec[t].num ; i++) //a number of tracking people(previous t frame)
dkato 5:49a61433290a 477 {
dkato 5:49a61433290a 478 if(
dkato 5:49a61433290a 479 peRec[t].fcDet[i].nTraID == trID //the same tracking number
dkato 5:49a61433290a 480 && peRec[t].fcDet[i].nDetID >= 0 //not lost
dkato 5:49a61433290a 481 && peRec[t].fcDet[i].dirDetConf >= dirThr // Face angle : confidence
dkato 5:49a61433290a 482 && peRec[t].fcDet[i].dirDetPitch >= dirUDMin // Face angle : pitch
dkato 5:49a61433290a 483 && peRec[t].fcDet[i].dirDetPitch <= dirUDMax // Face angle : pitch
dkato 5:49a61433290a 484 && peRec[t].fcDet[i].dirDetYaw >= dirLRMin // Face angle : yaw
dkato 5:49a61433290a 485 && peRec[t].fcDet[i].dirDetYaw <= dirLRMax // Face angle : yaw
dkato 5:49a61433290a 486 && peRec[t].fcDet[i].bliDetL != STB_ERR_PE_CANNOT //
dkato 5:49a61433290a 487 )
dkato 5:49a61433290a 488 {
dkato 5:49a61433290a 489 recVal[ recCnt ] = peRec[ t ].fcDet[ i ].bliDetL ;
dkato 5:49a61433290a 490 recCnt++;
dkato 5:49a61433290a 491 }
dkato 5:49a61433290a 492 }
dkato 5:49a61433290a 493 }
dkato 5:49a61433290a 494 if ( recCnt == 0 ) { peRes->peFace[k].bli.status = STB_STATUS_NO_DATA ; }//stabilization impossible
dkato 5:49a61433290a 495 else { peRes->peFace[k].bli.status = STB_STATUS_CALCULATING; }//during stabilization
dkato 5:49a61433290a 496 tmpVal = 0;
dkato 5:49a61433290a 497 for( i = 0; i < recCnt ; i++ ) { tmpVal += recVal[ i ] ; }
dkato 5:49a61433290a 498 if ( recCnt == 0 ) { recCnt = 1 ; }
dkato 5:49a61433290a 499 peRes->peFace[k].bli.ratioL = tmpVal / recCnt;
dkato 5:49a61433290a 500 // blink R -------------------------------------------------------------------------------------------------
dkato 5:49a61433290a 501 recCnt = 0;
dkato 5:49a61433290a 502 for( t = 0; t < STB_PE_BACK_MAX ; t++)
dkato 5:49a61433290a 503 {
dkato 5:49a61433290a 504 for( i = 0; i < peRec[t].num ; i++) //a number of tracking people(previous t frame)
dkato 5:49a61433290a 505 {
dkato 5:49a61433290a 506 if(
dkato 5:49a61433290a 507 peRec[t].fcDet[i].nTraID == trID //the same tracking number
dkato 5:49a61433290a 508 && peRec[t].fcDet[i].nDetID >= 0 //not lost
dkato 5:49a61433290a 509 && peRec[t].fcDet[i].dirDetConf >= dirThr // Face angle : confidence
dkato 5:49a61433290a 510 && peRec[t].fcDet[i].dirDetPitch >= dirUDMin // Face angle : pitch
dkato 5:49a61433290a 511 && peRec[t].fcDet[i].dirDetPitch <= dirUDMax // Face angle : pitch
dkato 5:49a61433290a 512 && peRec[t].fcDet[i].dirDetYaw >= dirLRMin // Face angle : yaw
dkato 5:49a61433290a 513 && peRec[t].fcDet[i].dirDetYaw <= dirLRMax // Face angle : yaw
dkato 5:49a61433290a 514 && peRec[t].fcDet[i].bliDetR != STB_ERR_PE_CANNOT //
dkato 5:49a61433290a 515 )
dkato 5:49a61433290a 516 {
dkato 5:49a61433290a 517 recVal[ recCnt ] = peRec[ t ].fcDet [ i ].bliDetR;
dkato 5:49a61433290a 518 recCnt++;
dkato 5:49a61433290a 519 }
dkato 5:49a61433290a 520 }
dkato 5:49a61433290a 521 }
dkato 5:49a61433290a 522 tmpVal = 0;
dkato 5:49a61433290a 523 for( i = 0; i < recCnt ; i++ ) { tmpVal += recVal[ i ] ; }
dkato 5:49a61433290a 524 if ( recCnt == 0 ) { recCnt = 1 ; }
dkato 5:49a61433290a 525 peRes->peFace[k].bli.ratioR = tmpVal / recCnt;
dkato 5:49a61433290a 526 }
dkato 5:49a61433290a 527
dkato 5:49a61433290a 528
dkato 5:49a61433290a 529
dkato 5:49a61433290a 530 // dirYaw -------------------------------------------------------------------------------------------------
dkato 5:49a61433290a 531 if( execFlg->dir == STB_TRUE )
dkato 5:49a61433290a 532 {
dkato 5:49a61433290a 533 recCnt = 0;
dkato 5:49a61433290a 534 for( t = 0; t < STB_PE_BACK_MAX ; t++)
dkato 5:49a61433290a 535 {
dkato 5:49a61433290a 536 for( i = 0; i < peRec[t].num ; i++) //a number of tracking people(previous t frame)
dkato 5:49a61433290a 537 {
dkato 5:49a61433290a 538 if(
dkato 5:49a61433290a 539 peRec[t].fcDet[i].nTraID == trID //the same tracking number
dkato 5:49a61433290a 540 && peRec[t].fcDet[i].nDetID >= 0 //not lost
dkato 5:49a61433290a 541 && peRec[t].fcDet[i].dirDetConf >= dirThr // Face angle : confidence
dkato 5:49a61433290a 542 && peRec[t].fcDet[i].dirDetPitch >= dirUDMin // Face angle : pitch
dkato 5:49a61433290a 543 && peRec[t].fcDet[i].dirDetPitch <= dirUDMax // Face angle : pitch
dkato 5:49a61433290a 544 && peRec[t].fcDet[i].dirDetYaw >= dirLRMin // Face angle : yaw
dkato 5:49a61433290a 545 && peRec[t].fcDet[i].dirDetYaw <= dirLRMax // Face angle : yaw
dkato 5:49a61433290a 546 )
dkato 5:49a61433290a 547 {
dkato 5:49a61433290a 548 recVal[ recCnt ] = peRec[ t ].fcDet [ i ].dirDetYaw ;
dkato 5:49a61433290a 549 recCnt++;
dkato 5:49a61433290a 550 }
dkato 5:49a61433290a 551 }
dkato 5:49a61433290a 552 }
dkato 5:49a61433290a 553 if ( recCnt == 0 ) { peRes->peFace[k].dir.status = STB_STATUS_NO_DATA ; }//stabilization impossible
dkato 5:49a61433290a 554 else { peRes->peFace[k].dir.status = STB_STATUS_CALCULATING; }//during stabilization
dkato 5:49a61433290a 555 peRes->peFace[k].dir.conf = STB_CONF_NO_DATA;//no Confidence
dkato 5:49a61433290a 556 tmpVal = 0;
dkato 5:49a61433290a 557 for( i = 0; i < recCnt ; i++ ) { tmpVal += recVal[ i ] ; }
dkato 5:49a61433290a 558 if ( recCnt == 0 ) { recCnt = 1 ; }
dkato 5:49a61433290a 559 peRes->peFace[k].dir.yaw = tmpVal / recCnt;
dkato 5:49a61433290a 560 // dirRoll -------------------------------------------------------------------------------------------------
dkato 5:49a61433290a 561 recCnt = 0;
dkato 5:49a61433290a 562 for( t = 0; t < STB_PE_BACK_MAX ; t++)
dkato 5:49a61433290a 563 {
dkato 5:49a61433290a 564 for( i = 0; i < peRec[t].num ; i++) //a number of tracking people(previous t frame)
dkato 5:49a61433290a 565 {
dkato 5:49a61433290a 566 if(
dkato 5:49a61433290a 567 peRec[t].fcDet[i].nTraID == trID //the same tracking number
dkato 5:49a61433290a 568 && peRec[t].fcDet[i].nDetID >= 0 //not lost
dkato 5:49a61433290a 569 && peRec[t].fcDet[i].dirDetConf >= dirThr // Face angle : confidence
dkato 5:49a61433290a 570 && peRec[t].fcDet[i].dirDetPitch >= dirUDMin // Face angle : pitch
dkato 5:49a61433290a 571 && peRec[t].fcDet[i].dirDetPitch <= dirUDMax // Face angle : pitch
dkato 5:49a61433290a 572 && peRec[t].fcDet[i].dirDetYaw >= dirLRMin // Face angle : yaw
dkato 5:49a61433290a 573 && peRec[t].fcDet[i].dirDetYaw <= dirLRMax // Face angle : yaw
dkato 5:49a61433290a 574 )
dkato 5:49a61433290a 575 {
dkato 5:49a61433290a 576 recVal[ recCnt ] = peRec[ t ].fcDet [ i ].dirDetRoll;
dkato 5:49a61433290a 577 recCnt++;
dkato 5:49a61433290a 578 }
dkato 5:49a61433290a 579 }
dkato 5:49a61433290a 580 }
dkato 5:49a61433290a 581 tmpVal = 0;
dkato 5:49a61433290a 582 for( i = 0; i < recCnt ; i++ ) { tmpVal += recVal[ i ] ; }
dkato 5:49a61433290a 583 if ( recCnt == 0 ) { recCnt = 1 ; }
dkato 5:49a61433290a 584 peRes->peFace[k].dir.roll = tmpVal / recCnt;
dkato 5:49a61433290a 585 // dirPitch -------------------------------------------------------------------------------------------------
dkato 5:49a61433290a 586 recCnt = 0;
dkato 5:49a61433290a 587 for( t = 0; t < STB_PE_BACK_MAX ; t++)
dkato 5:49a61433290a 588 {
dkato 5:49a61433290a 589 for( i = 0; i < peRec[t].num ; i++) //a number of tracking people(previous t frame)
dkato 5:49a61433290a 590 {
dkato 5:49a61433290a 591 if(
dkato 5:49a61433290a 592 peRec[t].fcDet[i].nTraID == trID //the same tracking number
dkato 5:49a61433290a 593 && peRec[t].fcDet[i].nDetID >= 0 //not lost
dkato 5:49a61433290a 594 && peRec[t].fcDet[i].dirDetConf >= dirThr // Face angle : confidence
dkato 5:49a61433290a 595 && peRec[t].fcDet[i].dirDetPitch >= dirUDMin // Face angle : pitch
dkato 5:49a61433290a 596 && peRec[t].fcDet[i].dirDetPitch <= dirUDMax // Face angle : pitch
dkato 5:49a61433290a 597 && peRec[t].fcDet[i].dirDetYaw >= dirLRMin // Face angle : yaw
dkato 5:49a61433290a 598 && peRec[t].fcDet[i].dirDetYaw <= dirLRMax // Face angle : yaw
dkato 5:49a61433290a 599 )
dkato 5:49a61433290a 600 {
dkato 5:49a61433290a 601 recVal[ recCnt ] = peRec[ t ].fcDet [ i ].dirDetPitch ;
dkato 5:49a61433290a 602 recCnt++;
dkato 5:49a61433290a 603 }
dkato 5:49a61433290a 604 }
dkato 5:49a61433290a 605 }
dkato 5:49a61433290a 606 tmpVal = 0;
dkato 5:49a61433290a 607 for( i = 0; i < recCnt ; i++ ) { tmpVal += recVal[ i ] ; }
dkato 5:49a61433290a 608 if ( recCnt == 0 ) { recCnt = 1 ; }
dkato 5:49a61433290a 609 peRes->peFace[k].dir.pitch = tmpVal / recCnt;
dkato 5:49a61433290a 610 }
dkato 5:49a61433290a 611
dkato 5:49a61433290a 612 }//for( k = 0; k < peRes->peCnt ; k++)
dkato 5:49a61433290a 613
dkato 5:49a61433290a 614 }
dkato 5:49a61433290a 615 /*---------------------------------------------------------------------*/
dkato 5:49a61433290a 616 // StbPeExec
dkato 5:49a61433290a 617 /*---------------------------------------------------------------------*/
dkato 5:49a61433290a 618 int StbPeExec ( PEHANDLE handle )
dkato 5:49a61433290a 619 {
dkato 5:49a61433290a 620
dkato 5:49a61433290a 621 int retVal = 0 ;
dkato 5:49a61433290a 622
dkato 5:49a61433290a 623 /* Face --------------------------------------*/
dkato 5:49a61433290a 624 PeSlideFacesRec ( handle->peDetRec ,
dkato 5:49a61433290a 625 handle->execFlg );//Shift the time series of past data before stabilization.
dkato 5:49a61433290a 626 PeCurFaces ( handle->peDetRec ,
dkato 5:49a61433290a 627 &(handle->peDet) ,
dkato 5:49a61433290a 628 handle->execFlg );//Setting "present data before the stabilization" to past data before the stabilization.
dkato 5:49a61433290a 629
dkato 5:49a61433290a 630 PeStbFaceEasy ( &(handle->peRes) ,
dkato 5:49a61433290a 631 handle->peDetRec ,
dkato 5:49a61433290a 632 handle->peFaceDirThr ,
dkato 5:49a61433290a 633 handle->peFaceDirUDMax ,
dkato 5:49a61433290a 634 handle->peFaceDirUDMin ,
dkato 5:49a61433290a 635 handle->peFaceDirLRMax ,
dkato 5:49a61433290a 636 handle->peFaceDirLRMin ,
dkato 5:49a61433290a 637 handle->peFrameCount ,
dkato 5:49a61433290a 638 handle->execFlg );//Calculate "current data after stabilization" from "past data before stabilization".
dkato 5:49a61433290a 639
dkato 5:49a61433290a 640
dkato 5:49a61433290a 641
dkato 5:49a61433290a 642
dkato 5:49a61433290a 643 return retVal;
dkato 5:49a61433290a 644 }
dkato 5:49a61433290a 645
dkato 5:49a61433290a 646
dkato 5:49a61433290a 647