Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: GraphicsFramework GR-PEACH_video LCD_shield_config AsciiFont R_BSP USBHost_custom
HVC/STBLib/src/STB_Property/STBPeAPI.c@5:49a61433290a, 2017-09-05 (annotated)
- 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?
| User | Revision | Line number | New 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 |