Ryo Hagimoto / Mbed OS GR-PEACH_HVC-P2_sample_20200314

Dependencies:   GraphicsFramework GR-PEACH_video LCD_shield_config AsciiFont R_BSP USBHost_custom

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