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 "PeInterface.h"
dkato 5:49a61433290a 18 #include "STBPeAPI.h"
dkato 5:49a61433290a 19
dkato 5:49a61433290a 20 /*Value range check*/
dkato 5:49a61433290a 21 #define ISVALID_RANGE( val , min , max ) ( ( (min) <= (val) ) && ( (val) <= (max) ) )
dkato 5:49a61433290a 22
dkato 5:49a61433290a 23 /*---------------------------------------------------------------------
dkato 5:49a61433290a 24 ---------------------------------------------------------------------*/
dkato 5:49a61433290a 25 /*error check*/
dkato 5:49a61433290a 26 /*---------------------------------------------------------------------
dkato 5:49a61433290a 27 ---------------------------------------------------------------------*/
dkato 5:49a61433290a 28 static STB_INT32 PeIsValidValue(
dkato 5:49a61433290a 29 const STB_INT32 nValue ,
dkato 5:49a61433290a 30 const STB_INT32 nLimitMin ,
dkato 5:49a61433290a 31 const STB_INT32 nLimitMax )
dkato 5:49a61433290a 32 {
dkato 5:49a61433290a 33 STB_INT32 nRet;
dkato 5:49a61433290a 34 for( nRet = STB_ERR_INVALIDPARAM; nRet != STB_NORMAL; nRet = STB_NORMAL ){
dkato 5:49a61433290a 35 if( ! ISVALID_RANGE( nValue , nLimitMin , nLimitMax ) ){ break; }
dkato 5:49a61433290a 36 }
dkato 5:49a61433290a 37 return nRet;
dkato 5:49a61433290a 38 }
dkato 5:49a61433290a 39 /*---------------------------------------------------------------------
dkato 5:49a61433290a 40 ---------------------------------------------------------------------*/
dkato 5:49a61433290a 41 static STB_INT32 PeIsValidPointer( const VOID* pPointer )
dkato 5:49a61433290a 42 {
dkato 5:49a61433290a 43 STB_INT32 nRet;
dkato 5:49a61433290a 44 for( nRet = STB_ERR_INVALIDPARAM; nRet != STB_NORMAL; nRet = STB_NORMAL ){
dkato 5:49a61433290a 45 if( NULL == pPointer ){ break; }
dkato 5:49a61433290a 46 }
dkato 5:49a61433290a 47 return nRet;
dkato 5:49a61433290a 48 }
dkato 5:49a61433290a 49
dkato 5:49a61433290a 50 /*------------------------------------------------------------------------------------------------------------------*/
dkato 5:49a61433290a 51 /* PeCalcPeSize */
dkato 5:49a61433290a 52 /*------------------------------------------------------------------------------------------------------------------*/
dkato 5:49a61433290a 53 STB_UINT32 PeCalcPeSize ( STB_UINT32 nTraCntMax )
dkato 5:49a61433290a 54 {
dkato 5:49a61433290a 55 STB_UINT32 retVal ;
dkato 5:49a61433290a 56
dkato 5:49a61433290a 57 retVal = 0 ;
dkato 5:49a61433290a 58
dkato 5:49a61433290a 59 retVal += 100 ;///Margin : alignment
dkato 5:49a61433290a 60
dkato 5:49a61433290a 61
dkato 5:49a61433290a 62
dkato 5:49a61433290a 63 retVal += sizeof( FACE_DET ) * nTraCntMax ; // peDet.fcDet
dkato 5:49a61433290a 64 retVal += sizeof( STB_PE_DET ) * STB_PE_BACK_MAX ; // peDetRec
dkato 5:49a61433290a 65 retVal += sizeof( FACE_DET ) * nTraCntMax * STB_PE_BACK_MAX; // handle->peDetRec[t].fcDet
dkato 5:49a61433290a 66 retVal += sizeof( STB_PE_FACE ) * nTraCntMax ; // peRes.peFace
dkato 5:49a61433290a 67 retVal += sizeof( STBExecFlg ) ; // execFlg
dkato 5:49a61433290a 68
dkato 5:49a61433290a 69 return retVal;
dkato 5:49a61433290a 70 }
dkato 5:49a61433290a 71 /*------------------------------------------------------------------------------------------------------------------*/
dkato 5:49a61433290a 72 /* PeSharePeSize */
dkato 5:49a61433290a 73 /*------------------------------------------------------------------------------------------------------------------*/
dkato 5:49a61433290a 74 void PeSharePeSize ( PEHANDLE handle )
dkato 5:49a61433290a 75 {
dkato 5:49a61433290a 76
dkato 5:49a61433290a 77 STB_UINT32 t;
dkato 5:49a61433290a 78 STB_INT8 *stbPtr = handle->pePtr ;
dkato 5:49a61433290a 79 STB_UINT32 nTraCntMax = handle->peCntMax;
dkato 5:49a61433290a 80
dkato 5:49a61433290a 81 handle->peDet.fcDet = ( FACE_DET* ) stbPtr; stbPtr += ( sizeof( FACE_DET ) * nTraCntMax );
dkato 5:49a61433290a 82 handle->peDetRec = ( STB_PE_DET* ) stbPtr; stbPtr += ( sizeof( STB_PE_DET ) * STB_PE_BACK_MAX);
dkato 5:49a61433290a 83 for( t = 0 ; t < STB_PE_BACK_MAX ; t++ )
dkato 5:49a61433290a 84 {
dkato 5:49a61433290a 85 handle->peDetRec[t].fcDet = ( FACE_DET* ) stbPtr; stbPtr += ( sizeof( FACE_DET ) * nTraCntMax );
dkato 5:49a61433290a 86 }
dkato 5:49a61433290a 87 handle->peRes.peFace = ( STB_PE_FACE* ) stbPtr; stbPtr += ( sizeof( STB_PE_FACE) * nTraCntMax );
dkato 5:49a61433290a 88 handle->execFlg = ( STBExecFlg* ) stbPtr; stbPtr += ( sizeof( STBExecFlg ) );
dkato 5:49a61433290a 89
dkato 5:49a61433290a 90 }
dkato 5:49a61433290a 91 /*---------------------------------------------------------------------
dkato 5:49a61433290a 92 ---------------------------------------------------------------------*/
dkato 5:49a61433290a 93 /*Create handle*/
dkato 5:49a61433290a 94 PEHANDLE PeCreateHandle( const STBExecFlg* execFlg ,const STB_INT32 nTraCntMax ){
dkato 5:49a61433290a 95
dkato 5:49a61433290a 96 PEHANDLE handle;
dkato 5:49a61433290a 97 STB_INT32 t , i ,j;
dkato 5:49a61433290a 98 STB_INT32 tmpVal ;
dkato 5:49a61433290a 99 STB_INT32 nRet ;
dkato 5:49a61433290a 100
dkato 5:49a61433290a 101 nRet = PeIsValidPointer(execFlg);
dkato 5:49a61433290a 102 if(nRet != STB_NORMAL)
dkato 5:49a61433290a 103 {
dkato 5:49a61433290a 104 return NULL;
dkato 5:49a61433290a 105 }
dkato 5:49a61433290a 106
dkato 5:49a61433290a 107 if( nTraCntMax < 1 || STB_PE_TRA_CNT_MAX < nTraCntMax )
dkato 5:49a61433290a 108 {
dkato 5:49a61433290a 109 return NULL;
dkato 5:49a61433290a 110 }
dkato 5:49a61433290a 111
dkato 5:49a61433290a 112
dkato 5:49a61433290a 113
dkato 5:49a61433290a 114 /*do handle's Malloc here*/
dkato 5:49a61433290a 115 handle = ( PEHANDLE )malloc( sizeof(*handle) );
dkato 5:49a61433290a 116 if(handle == NULL)
dkato 5:49a61433290a 117 {
dkato 5:49a61433290a 118 return NULL;
dkato 5:49a61433290a 119 }
dkato 5:49a61433290a 120
dkato 5:49a61433290a 121 /*initial value---------------------------------------------------------------------*/
dkato 5:49a61433290a 122 handle->peFaceDirUDMin = STB_PE_DIR_MIN_UD_INI;//The face on top/down allowable range min.
dkato 5:49a61433290a 123 handle->peFaceDirUDMax = STB_PE_DIR_MAX_UD_INI;//The face on top/down allowable range max.
dkato 5:49a61433290a 124 handle->peFaceDirLRMin = STB_PE_DIR_MIN_LR_INI;//The face on left /right side allowable range min.
dkato 5:49a61433290a 125 handle->peFaceDirLRMax = STB_PE_DIR_MAX_LR_INI;//The face on left /right side allowable range max.
dkato 5:49a61433290a 126 handle->peFaceDirThr = STB_PE_DIR_THR_INI ;//If the confidence of Face direction estimation doesn't exceed the reference value, the recognition result isn't trusted.
dkato 5:49a61433290a 127 handle->peFrameCount = STB_PE_FRAME_CNT_INI ;
dkato 5:49a61433290a 128 handle->peCntMax = nTraCntMax ;//Maximum number of tracking people
dkato 5:49a61433290a 129 handle->pePtr = NULL;
dkato 5:49a61433290a 130 handle->peDet.num = 0;
dkato 5:49a61433290a 131 handle->peDet.fcDet = NULL;
dkato 5:49a61433290a 132 handle->peDetRec = NULL;
dkato 5:49a61433290a 133 handle->peRes.peCnt = 0;
dkato 5:49a61433290a 134 handle->peRes.peFace = NULL;
dkato 5:49a61433290a 135 handle->execFlg = NULL;
dkato 5:49a61433290a 136
dkato 5:49a61433290a 137 tmpVal = PeCalcPeSize ( nTraCntMax ); /*calculate necessary amount in the Pe handle*/
dkato 5:49a61433290a 138 handle->pePtr = NULL;
dkato 5:49a61433290a 139 handle->pePtr = ( STB_INT8 * )malloc( tmpVal ); /*keeping necessary amount in the Pe handle*/
dkato 5:49a61433290a 140 if( handle->pePtr == NULL )
dkato 5:49a61433290a 141 {
dkato 5:49a61433290a 142 free ( handle->pePtr );
dkato 5:49a61433290a 143 free ( handle );
dkato 5:49a61433290a 144 return NULL;
dkato 5:49a61433290a 145 }
dkato 5:49a61433290a 146
dkato 5:49a61433290a 147 /*Malloc-area is allocated to things that need Malloc in TR handle*/
dkato 5:49a61433290a 148 PeSharePeSize ( handle );
dkato 5:49a61433290a 149
dkato 5:49a61433290a 150 for( t = 0 ; t < STB_PE_BACK_MAX ; t++ )
dkato 5:49a61433290a 151 {
dkato 5:49a61433290a 152 handle->peDetRec [ t ].num = 0;
dkato 5:49a61433290a 153 for( i = 0 ; i < handle->peCntMax ; i++ )
dkato 5:49a61433290a 154 {
dkato 5:49a61433290a 155 handle->peDetRec[t].fcDet[i].nDetID = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 156 handle->peDetRec[t].fcDet[i].nTraID = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 157 handle->peDetRec[t].fcDet[i].dirDetRoll = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 158 handle->peDetRec[t].fcDet[i].dirDetPitch = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 159 handle->peDetRec[t].fcDet[i].dirDetYaw = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 160 handle->peDetRec[t].fcDet[i].dirDetConf = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 161 handle->peDetRec[t].fcDet[i].ageDetVal = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 162 handle->peDetRec[t].fcDet[i].ageStatus = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 163 handle->peDetRec[t].fcDet[i].ageDetConf = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 164 handle->peDetRec[t].fcDet[i].genDetVal = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 165 handle->peDetRec[t].fcDet[i].genStatus = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 166 handle->peDetRec[t].fcDet[i].genDetConf = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 167 handle->peDetRec[t].fcDet[i].gazDetLR = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 168 handle->peDetRec[t].fcDet[i].gazDetUD = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 169 handle->peDetRec[t].fcDet[i].bliDetL = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 170 handle->peDetRec[t].fcDet[i].bliDetR = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 171
dkato 5:49a61433290a 172 handle->peDetRec[t].fcDet[i].expDetConf = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 173 for( j = 0 ; j < STB_EX_MAX ; j++)
dkato 5:49a61433290a 174 {
dkato 5:49a61433290a 175 handle->peDetRec[t].fcDet[i].expDetVal[ j ] = STB_STATUS_NO_DATA;
dkato 5:49a61433290a 176 }
dkato 5:49a61433290a 177 }
dkato 5:49a61433290a 178 }
dkato 5:49a61433290a 179
dkato 5:49a61433290a 180 handle->execFlg->pet = execFlg->pet ;
dkato 5:49a61433290a 181 handle->execFlg->hand = execFlg->hand ;
dkato 5:49a61433290a 182 handle->execFlg->bodyTr = execFlg->bodyTr ;
dkato 5:49a61433290a 183 handle->execFlg->faceTr = execFlg->faceTr ;
dkato 5:49a61433290a 184 handle->execFlg->gen = execFlg->gen ;
dkato 5:49a61433290a 185 handle->execFlg->age = execFlg->age ;
dkato 5:49a61433290a 186 handle->execFlg->fr = execFlg->fr ;
dkato 5:49a61433290a 187 handle->execFlg->exp = execFlg->exp ;
dkato 5:49a61433290a 188 handle->execFlg->gaz = execFlg->gaz ;
dkato 5:49a61433290a 189 handle->execFlg->dir = execFlg->dir ;
dkato 5:49a61433290a 190 handle->execFlg->bli = execFlg->bli ;
dkato 5:49a61433290a 191
dkato 5:49a61433290a 192
dkato 5:49a61433290a 193 return handle;
dkato 5:49a61433290a 194 }
dkato 5:49a61433290a 195
dkato 5:49a61433290a 196 /*---------------------------------------------------------------------
dkato 5:49a61433290a 197 ---------------------------------------------------------------------*/
dkato 5:49a61433290a 198 /*Delete handle*/
dkato 5:49a61433290a 199 STB_INT32 PeDeleteHandle(PEHANDLE handle){
dkato 5:49a61433290a 200 STB_INT32 nRet;
dkato 5:49a61433290a 201 /*NULL check*/
dkato 5:49a61433290a 202 nRet = PeIsValidPointer(handle);
dkato 5:49a61433290a 203 if(nRet != STB_NORMAL){
dkato 5:49a61433290a 204 return STB_ERR_NOHANDLE;
dkato 5:49a61433290a 205 }
dkato 5:49a61433290a 206
dkato 5:49a61433290a 207 free ( handle->pePtr );
dkato 5:49a61433290a 208 free ( handle );
dkato 5:49a61433290a 209
dkato 5:49a61433290a 210 return STB_NORMAL;
dkato 5:49a61433290a 211 }
dkato 5:49a61433290a 212
dkato 5:49a61433290a 213 /*---------------------------------------------------------------------
dkato 5:49a61433290a 214 ---------------------------------------------------------------------*/
dkato 5:49a61433290a 215 /*Set the result*/
dkato 5:49a61433290a 216 STB_INT32 PeSetDetect(PEHANDLE handle,const STB_PE_DET *stbPeDet){
dkato 5:49a61433290a 217
dkato 5:49a61433290a 218 STB_INT32 nRet;
dkato 5:49a61433290a 219 STB_INT32 i,j;
dkato 5:49a61433290a 220
dkato 5:49a61433290a 221 /*NULL check*/
dkato 5:49a61433290a 222 nRet = PeIsValidPointer(handle);
dkato 5:49a61433290a 223 if(nRet != STB_NORMAL){
dkato 5:49a61433290a 224 return STB_ERR_NOHANDLE;
dkato 5:49a61433290a 225 }
dkato 5:49a61433290a 226
dkato 5:49a61433290a 227 nRet = PeIsValidPointer(stbPeDet);
dkato 5:49a61433290a 228 if(nRet != STB_NORMAL){
dkato 5:49a61433290a 229 return nRet;
dkato 5:49a61433290a 230 }
dkato 5:49a61433290a 231
dkato 5:49a61433290a 232 /*Input value check*/
dkato 5:49a61433290a 233 nRet = STB_PeIsValidValue ( stbPeDet ,handle->execFlg );
dkato 5:49a61433290a 234 if(nRet != STB_TRUE)
dkato 5:49a61433290a 235 {
dkato 5:49a61433290a 236 return STB_ERR_INVALIDPARAM;
dkato 5:49a61433290a 237 }
dkato 5:49a61433290a 238
dkato 5:49a61433290a 239
dkato 5:49a61433290a 240 /*Set the received result to the handle*/
dkato 5:49a61433290a 241 /* Face */
dkato 5:49a61433290a 242 if( stbPeDet->num > handle->peCntMax )
dkato 5:49a61433290a 243 {
dkato 5:49a61433290a 244 return STB_ERR_PROCESSCONDITION;
dkato 5:49a61433290a 245 }
dkato 5:49a61433290a 246
dkato 5:49a61433290a 247
dkato 5:49a61433290a 248 handle->peDet.num = stbPeDet->num;
dkato 5:49a61433290a 249 for( i = 0 ; i < handle->peDet.num ; i++ )
dkato 5:49a61433290a 250 {
dkato 5:49a61433290a 251 handle->peDet.fcDet[i].nDetID = stbPeDet->fcDet[i].nDetID ;
dkato 5:49a61433290a 252 handle->peDet.fcDet[i].nTraID = stbPeDet->fcDet[i].nTraID ;
dkato 5:49a61433290a 253 if( handle->execFlg->gen == STB_TRUE )
dkato 5:49a61433290a 254 {
dkato 5:49a61433290a 255 handle->peDet.fcDet[i].genDetVal = stbPeDet->fcDet[i].genDetVal ;
dkato 5:49a61433290a 256 handle->peDet.fcDet[i].genDetConf = stbPeDet->fcDet[i].genDetConf ;
dkato 5:49a61433290a 257 handle->peDet.fcDet[i].genStatus = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 258 }
dkato 5:49a61433290a 259 if( handle->execFlg->age == STB_TRUE )
dkato 5:49a61433290a 260 {
dkato 5:49a61433290a 261 handle->peDet.fcDet[i].ageDetVal = stbPeDet->fcDet[i].ageDetVal ;
dkato 5:49a61433290a 262 handle->peDet.fcDet[i].ageDetConf = stbPeDet->fcDet[i].ageDetConf ;
dkato 5:49a61433290a 263 handle->peDet.fcDet[i].ageStatus = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 264 }
dkato 5:49a61433290a 265 if( handle->execFlg->exp == STB_TRUE )
dkato 5:49a61433290a 266 {
dkato 5:49a61433290a 267 handle->peDet.fcDet[i].expDetConf = stbPeDet->fcDet[i].expDetConf ;
dkato 5:49a61433290a 268 for( j = 0 ; j < STB_EX_MAX ; j++)
dkato 5:49a61433290a 269 {
dkato 5:49a61433290a 270 handle->peDet.fcDet[i].expDetVal[ j ] = stbPeDet->fcDet[i].expDetVal[ j ];
dkato 5:49a61433290a 271 }
dkato 5:49a61433290a 272 }
dkato 5:49a61433290a 273 if( handle->execFlg->gaz == STB_TRUE )
dkato 5:49a61433290a 274 {
dkato 5:49a61433290a 275 handle->peDet.fcDet[i].gazDetLR = stbPeDet->fcDet[i].gazDetLR ;
dkato 5:49a61433290a 276 handle->peDet.fcDet[i].gazDetUD = stbPeDet->fcDet[i].gazDetUD ;
dkato 5:49a61433290a 277 }
dkato 5:49a61433290a 278 //if( handle->execFlg->dir == STB_TRUE )// dir is obligation.
dkato 5:49a61433290a 279 //{
dkato 5:49a61433290a 280 handle->peDet.fcDet[i].dirDetRoll = stbPeDet->fcDet[i].dirDetRoll ;
dkato 5:49a61433290a 281 handle->peDet.fcDet[i].dirDetPitch = stbPeDet->fcDet[i].dirDetPitch ;
dkato 5:49a61433290a 282 handle->peDet.fcDet[i].dirDetYaw = stbPeDet->fcDet[i].dirDetYaw ;
dkato 5:49a61433290a 283 handle->peDet.fcDet[i].dirDetConf = stbPeDet->fcDet[i].dirDetConf ;
dkato 5:49a61433290a 284 //}
dkato 5:49a61433290a 285 if( handle->execFlg->bli == STB_TRUE )
dkato 5:49a61433290a 286 {
dkato 5:49a61433290a 287 handle->peDet.fcDet[i].bliDetL = stbPeDet->fcDet[i].bliDetL ;
dkato 5:49a61433290a 288 handle->peDet.fcDet[i].bliDetR = stbPeDet->fcDet[i].bliDetR ;
dkato 5:49a61433290a 289 }
dkato 5:49a61433290a 290 }
dkato 5:49a61433290a 291
dkato 5:49a61433290a 292
dkato 5:49a61433290a 293 return STB_NORMAL;
dkato 5:49a61433290a 294 }
dkato 5:49a61433290a 295 /*---------------------------------------------------------------------
dkato 5:49a61433290a 296 ---------------------------------------------------------------------*/
dkato 5:49a61433290a 297 /*Main process execution*/
dkato 5:49a61433290a 298 STB_INT32 PeExecute(PEHANDLE handle){
dkato 5:49a61433290a 299 STB_INT32 nRet;
dkato 5:49a61433290a 300 /*NULL check*/
dkato 5:49a61433290a 301 nRet = PeIsValidPointer(handle);
dkato 5:49a61433290a 302 if(nRet != STB_NORMAL){
dkato 5:49a61433290a 303 return STB_ERR_NOHANDLE;
dkato 5:49a61433290a 304 }
dkato 5:49a61433290a 305
dkato 5:49a61433290a 306 /*Main processing here*/
dkato 5:49a61433290a 307 nRet = StbPeExec ( handle );
dkato 5:49a61433290a 308
dkato 5:49a61433290a 309
dkato 5:49a61433290a 310 return STB_NORMAL;
dkato 5:49a61433290a 311 }
dkato 5:49a61433290a 312 /*---------------------------------------------------------------------
dkato 5:49a61433290a 313 ---------------------------------------------------------------------*/
dkato 5:49a61433290a 314 /*Get-Function of results*/
dkato 5:49a61433290a 315 STB_INT32 PeGetResult( PEHANDLE handle, STB_PE_RES* peResult){
dkato 5:49a61433290a 316
dkato 5:49a61433290a 317 STB_INT32 nRet;
dkato 5:49a61433290a 318 STB_INT32 i;
dkato 5:49a61433290a 319
dkato 5:49a61433290a 320 /*NULL check*/
dkato 5:49a61433290a 321 nRet = PeIsValidPointer(handle);
dkato 5:49a61433290a 322 if(nRet != STB_NORMAL){
dkato 5:49a61433290a 323 return STB_ERR_NOHANDLE;
dkato 5:49a61433290a 324 }
dkato 5:49a61433290a 325
dkato 5:49a61433290a 326 nRet = PeIsValidPointer(peResult);
dkato 5:49a61433290a 327 if(nRet != STB_NORMAL){
dkato 5:49a61433290a 328 return nRet;
dkato 5:49a61433290a 329 }
dkato 5:49a61433290a 330
dkato 5:49a61433290a 331 /*Get result from handle*/
dkato 5:49a61433290a 332 peResult->peCnt = handle->peRes.peCnt ;
dkato 5:49a61433290a 333 for( i = 0 ; i < peResult->peCnt ; i++ )
dkato 5:49a61433290a 334 {
dkato 5:49a61433290a 335 peResult->peFace[i].nTraID = handle->peRes.peFace[i].nTraID ;
dkato 5:49a61433290a 336 peResult->peFace[i].gen.status = handle->peRes.peFace[i].gen.status ;
dkato 5:49a61433290a 337 peResult->peFace[i].gen.value = handle->peRes.peFace[i].gen.value ;
dkato 5:49a61433290a 338 peResult->peFace[i].gen.conf = handle->peRes.peFace[i].gen.conf ;
dkato 5:49a61433290a 339 peResult->peFace[i].age.status = handle->peRes.peFace[i].age.status ;
dkato 5:49a61433290a 340 peResult->peFace[i].age.value = handle->peRes.peFace[i].age.value ;
dkato 5:49a61433290a 341 peResult->peFace[i].age.conf = handle->peRes.peFace[i].age.conf ;
dkato 5:49a61433290a 342 peResult->peFace[i].exp.status = handle->peRes.peFace[i].exp.status ;
dkato 5:49a61433290a 343 peResult->peFace[i].exp.value = handle->peRes.peFace[i].exp.value ;
dkato 5:49a61433290a 344 peResult->peFace[i].exp.conf = handle->peRes.peFace[i].exp.conf ;
dkato 5:49a61433290a 345 peResult->peFace[i].gaz.status = handle->peRes.peFace[i].gaz.status ;
dkato 5:49a61433290a 346 peResult->peFace[i].gaz.LR = handle->peRes.peFace[i].gaz.LR ;
dkato 5:49a61433290a 347 peResult->peFace[i].gaz.UD = handle->peRes.peFace[i].gaz.UD ;
dkato 5:49a61433290a 348 peResult->peFace[i].gaz.conf = handle->peRes.peFace[i].gaz.conf ;
dkato 5:49a61433290a 349 peResult->peFace[i].dir.status = handle->peRes.peFace[i].dir.status ;
dkato 5:49a61433290a 350 peResult->peFace[i].dir.pitch = handle->peRes.peFace[i].dir.pitch ;
dkato 5:49a61433290a 351 peResult->peFace[i].dir.roll = handle->peRes.peFace[i].dir.roll ;
dkato 5:49a61433290a 352 peResult->peFace[i].dir.yaw = handle->peRes.peFace[i].dir.yaw ;
dkato 5:49a61433290a 353 peResult->peFace[i].dir.conf = handle->peRes.peFace[i].dir.conf ;
dkato 5:49a61433290a 354 peResult->peFace[i].bli.status = handle->peRes.peFace[i].bli.status ;
dkato 5:49a61433290a 355 peResult->peFace[i].bli.ratioL = handle->peRes.peFace[i].bli.ratioL ;
dkato 5:49a61433290a 356 peResult->peFace[i].bli.ratioR = handle->peRes.peFace[i].bli.ratioR ;
dkato 5:49a61433290a 357 }
dkato 5:49a61433290a 358
dkato 5:49a61433290a 359
dkato 5:49a61433290a 360
dkato 5:49a61433290a 361 return STB_NORMAL;
dkato 5:49a61433290a 362 }
dkato 5:49a61433290a 363 /*---------------------------------------------------------------------
dkato 5:49a61433290a 364 ---------------------------------------------------------------------*/
dkato 5:49a61433290a 365 STB_INT32 PeSetFaceDirMinMax(PEHANDLE handle , STB_INT32 nMinUDAngle , STB_INT32 nMaxUDAngle ,STB_INT32 nMinLRAngle , STB_INT32 nMaxLRAngle )
dkato 5:49a61433290a 366 {
dkato 5:49a61433290a 367
dkato 5:49a61433290a 368 STB_INT32 nRet;
dkato 5:49a61433290a 369 nRet = PeIsValidPointer(handle);
dkato 5:49a61433290a 370 if(nRet != STB_NORMAL){
dkato 5:49a61433290a 371 return STB_ERR_NOHANDLE;
dkato 5:49a61433290a 372 }
dkato 5:49a61433290a 373
dkato 5:49a61433290a 374 if( nMinUDAngle < STB_PE_DIR_MIN_UD_MIN || STB_PE_DIR_MIN_UD_MAX < nMinUDAngle)
dkato 5:49a61433290a 375 {
dkato 5:49a61433290a 376 return STB_ERR_INVALIDPARAM;
dkato 5:49a61433290a 377 }
dkato 5:49a61433290a 378 if( nMaxUDAngle < STB_PE_DIR_MAX_UD_MIN || STB_PE_DIR_MAX_UD_MAX < nMaxUDAngle)
dkato 5:49a61433290a 379 {
dkato 5:49a61433290a 380 return STB_ERR_INVALIDPARAM;
dkato 5:49a61433290a 381 }
dkato 5:49a61433290a 382 if( nMaxUDAngle < nMinUDAngle)
dkato 5:49a61433290a 383 {
dkato 5:49a61433290a 384 return STB_ERR_INVALIDPARAM;
dkato 5:49a61433290a 385 }
dkato 5:49a61433290a 386
dkato 5:49a61433290a 387
dkato 5:49a61433290a 388 if( nMinLRAngle < STB_PE_DIR_MIN_LR_MIN || STB_PE_DIR_MIN_LR_MAX < nMinLRAngle)
dkato 5:49a61433290a 389 {
dkato 5:49a61433290a 390 return STB_ERR_INVALIDPARAM;
dkato 5:49a61433290a 391 }
dkato 5:49a61433290a 392 if( nMaxLRAngle < STB_PE_DIR_MAX_LR_MIN || STB_PE_DIR_MAX_LR_MAX < nMaxLRAngle)
dkato 5:49a61433290a 393 {
dkato 5:49a61433290a 394 return STB_ERR_INVALIDPARAM;
dkato 5:49a61433290a 395 }
dkato 5:49a61433290a 396 if( nMaxLRAngle < nMinLRAngle)
dkato 5:49a61433290a 397 {
dkato 5:49a61433290a 398 return STB_ERR_INVALIDPARAM;
dkato 5:49a61433290a 399 }
dkato 5:49a61433290a 400
dkato 5:49a61433290a 401 handle->peFaceDirUDMin = nMinUDAngle;
dkato 5:49a61433290a 402 handle->peFaceDirUDMax = nMaxUDAngle;
dkato 5:49a61433290a 403 handle->peFaceDirLRMin = nMinLRAngle;
dkato 5:49a61433290a 404 handle->peFaceDirLRMax = nMaxLRAngle;
dkato 5:49a61433290a 405
dkato 5:49a61433290a 406
dkato 5:49a61433290a 407 return STB_NORMAL;
dkato 5:49a61433290a 408 }
dkato 5:49a61433290a 409 /*---------------------------------------------------------------------
dkato 5:49a61433290a 410 ---------------------------------------------------------------------*/
dkato 5:49a61433290a 411 STB_INT32 PeGetFaceDirMinMax(PEHANDLE handle ,STB_INT32 *pnMinUDAngle, STB_INT32 *pnMaxUDAngle ,STB_INT32 *pnMinLRAngle, STB_INT32 *pnMaxLRAngle )
dkato 5:49a61433290a 412 {
dkato 5:49a61433290a 413 STB_INT32 nRet;
dkato 5:49a61433290a 414 nRet = PeIsValidPointer(handle);
dkato 5:49a61433290a 415 if(nRet != STB_NORMAL){
dkato 5:49a61433290a 416 return STB_ERR_NOHANDLE;
dkato 5:49a61433290a 417 }
dkato 5:49a61433290a 418 nRet = PeIsValidPointer(pnMinUDAngle);
dkato 5:49a61433290a 419 if(nRet != STB_NORMAL){
dkato 5:49a61433290a 420 return STB_ERR_INVALIDPARAM;
dkato 5:49a61433290a 421 }
dkato 5:49a61433290a 422 nRet = PeIsValidPointer(pnMaxUDAngle);
dkato 5:49a61433290a 423 if(nRet != STB_NORMAL){
dkato 5:49a61433290a 424 return STB_ERR_INVALIDPARAM;
dkato 5:49a61433290a 425 }
dkato 5:49a61433290a 426 nRet = PeIsValidPointer(pnMinLRAngle);
dkato 5:49a61433290a 427 if(nRet != STB_NORMAL){
dkato 5:49a61433290a 428 return STB_ERR_INVALIDPARAM;
dkato 5:49a61433290a 429 }
dkato 5:49a61433290a 430 nRet = PeIsValidPointer(pnMaxLRAngle);
dkato 5:49a61433290a 431 if(nRet != STB_NORMAL){
dkato 5:49a61433290a 432 return STB_ERR_INVALIDPARAM;
dkato 5:49a61433290a 433 }
dkato 5:49a61433290a 434
dkato 5:49a61433290a 435 *pnMinUDAngle = handle->peFaceDirUDMin ;
dkato 5:49a61433290a 436 *pnMaxUDAngle = handle->peFaceDirUDMax ;
dkato 5:49a61433290a 437
dkato 5:49a61433290a 438 *pnMinLRAngle = handle->peFaceDirLRMin ;
dkato 5:49a61433290a 439 *pnMaxLRAngle = handle->peFaceDirLRMax ;
dkato 5:49a61433290a 440
dkato 5:49a61433290a 441 return STB_NORMAL;
dkato 5:49a61433290a 442 }
dkato 5:49a61433290a 443 /*---------------------------------------------------------------------
dkato 5:49a61433290a 444 ---------------------------------------------------------------------*/
dkato 5:49a61433290a 445 STB_INT32 PeClear ( PEHANDLE handle )
dkato 5:49a61433290a 446 {
dkato 5:49a61433290a 447 //clear processing
dkato 5:49a61433290a 448 STB_INT32 t , i ,j;
dkato 5:49a61433290a 449 STB_INT32 nRet;
dkato 5:49a61433290a 450
dkato 5:49a61433290a 451 /*NULL check*/
dkato 5:49a61433290a 452 nRet = PeIsValidPointer(handle);
dkato 5:49a61433290a 453 if(nRet != STB_NORMAL){
dkato 5:49a61433290a 454 return STB_ERR_NOHANDLE;
dkato 5:49a61433290a 455 }
dkato 5:49a61433290a 456
dkato 5:49a61433290a 457 for( t = 0 ; t < STB_PE_BACK_MAX ; t++ )
dkato 5:49a61433290a 458 {
dkato 5:49a61433290a 459 handle->peDetRec [ t ].num = 0;
dkato 5:49a61433290a 460 for( i = 0 ; i < handle->peCntMax ; i++ )
dkato 5:49a61433290a 461 {
dkato 5:49a61433290a 462 handle->peDetRec[t].fcDet[i].nDetID = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 463 handle->peDetRec[t].fcDet[i].nTraID = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 464 if( handle->execFlg->dir == STB_TRUE )
dkato 5:49a61433290a 465 {
dkato 5:49a61433290a 466 handle->peDetRec[t].fcDet[i].dirDetRoll = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 467 handle->peDetRec[t].fcDet[i].dirDetPitch = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 468 handle->peDetRec[t].fcDet[i].dirDetYaw = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 469 handle->peDetRec[t].fcDet[i].dirDetConf = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 470 }
dkato 5:49a61433290a 471 if( handle->execFlg->age == STB_TRUE )
dkato 5:49a61433290a 472 {
dkato 5:49a61433290a 473 handle->peDetRec[t].fcDet[i].ageDetVal = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 474 handle->peDetRec[t].fcDet[i].ageStatus = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 475 handle->peDetRec[t].fcDet[i].ageDetConf = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 476 }
dkato 5:49a61433290a 477 if( handle->execFlg->gen == STB_TRUE )
dkato 5:49a61433290a 478 {
dkato 5:49a61433290a 479 handle->peDetRec[t].fcDet[i].genDetVal = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 480 handle->peDetRec[t].fcDet[i].genStatus = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 481 handle->peDetRec[t].fcDet[i].genDetConf = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 482 }
dkato 5:49a61433290a 483 if( handle->execFlg->gaz == STB_TRUE )
dkato 5:49a61433290a 484 {
dkato 5:49a61433290a 485 handle->peDetRec[t].fcDet[i].gazDetLR = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 486 handle->peDetRec[t].fcDet[i].gazDetUD = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 487 }
dkato 5:49a61433290a 488 if( handle->execFlg->bli == STB_TRUE )
dkato 5:49a61433290a 489 {
dkato 5:49a61433290a 490 handle->peDetRec[t].fcDet[i].bliDetL = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 491 handle->peDetRec[t].fcDet[i].bliDetR = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 492 }
dkato 5:49a61433290a 493 if( handle->execFlg->exp == STB_TRUE )
dkato 5:49a61433290a 494 {
dkato 5:49a61433290a 495 handle->peDetRec[t].fcDet[i].expDetConf = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 496 for( j = 0 ; j < STB_EX_MAX ; j++)
dkato 5:49a61433290a 497 {
dkato 5:49a61433290a 498 handle->peDetRec[t].fcDet[i].expDetVal[j] = STB_STATUS_NO_DATA ;
dkato 5:49a61433290a 499 }
dkato 5:49a61433290a 500 }
dkato 5:49a61433290a 501 }
dkato 5:49a61433290a 502 }
dkato 5:49a61433290a 503
dkato 5:49a61433290a 504 return STB_NORMAL;
dkato 5:49a61433290a 505 }
dkato 5:49a61433290a 506 /*---------------------------------------------------------------------
dkato 5:49a61433290a 507 ---------------------------------------------------------------------*/
dkato 5:49a61433290a 508 STB_INT32 PeSetFaceDirThreshold(PEHANDLE handle , STB_INT32 threshold )
dkato 5:49a61433290a 509 {
dkato 5:49a61433290a 510 STB_INT32 nRet;
dkato 5:49a61433290a 511 nRet = PeIsValidPointer(handle);
dkato 5:49a61433290a 512 if(nRet != STB_NORMAL){
dkato 5:49a61433290a 513 return STB_ERR_NOHANDLE;
dkato 5:49a61433290a 514 }
dkato 5:49a61433290a 515 if( threshold < STB_PE_DIR_THR_MIN || STB_PE_DIR_THR_MAX < threshold ){
dkato 5:49a61433290a 516 return STB_ERR_INVALIDPARAM;
dkato 5:49a61433290a 517 }
dkato 5:49a61433290a 518
dkato 5:49a61433290a 519 handle->peFaceDirThr = threshold;
dkato 5:49a61433290a 520 return STB_NORMAL;
dkato 5:49a61433290a 521 }
dkato 5:49a61433290a 522 /*---------------------------------------------------------------------
dkato 5:49a61433290a 523 ---------------------------------------------------------------------*/
dkato 5:49a61433290a 524 STB_INT32 PeGetFaceDirThreshold(PEHANDLE handle , STB_INT32* threshold )
dkato 5:49a61433290a 525 {
dkato 5:49a61433290a 526 STB_INT32 nRet;
dkato 5:49a61433290a 527 nRet = PeIsValidPointer(handle);
dkato 5:49a61433290a 528 if(nRet != STB_NORMAL){
dkato 5:49a61433290a 529 return STB_ERR_NOHANDLE;
dkato 5:49a61433290a 530 }
dkato 5:49a61433290a 531 nRet = PeIsValidPointer(threshold);
dkato 5:49a61433290a 532 if(nRet != STB_NORMAL){
dkato 5:49a61433290a 533 return STB_ERR_INVALIDPARAM;
dkato 5:49a61433290a 534 }
dkato 5:49a61433290a 535
dkato 5:49a61433290a 536 *threshold = handle->peFaceDirThr ;
dkato 5:49a61433290a 537 return STB_NORMAL;
dkato 5:49a61433290a 538 }
dkato 5:49a61433290a 539 /*---------------------------------------------------------------------
dkato 5:49a61433290a 540 ---------------------------------------------------------------------*/
dkato 5:49a61433290a 541 STB_INT32 PeSetFrameCount(PEHANDLE handle , STB_INT32 nFrameCount )
dkato 5:49a61433290a 542 {
dkato 5:49a61433290a 543
dkato 5:49a61433290a 544 STB_INT32 nRet;
dkato 5:49a61433290a 545 nRet = PeIsValidPointer(handle);
dkato 5:49a61433290a 546 if(nRet != STB_NORMAL){
dkato 5:49a61433290a 547 return STB_ERR_NOHANDLE;
dkato 5:49a61433290a 548 }
dkato 5:49a61433290a 549
dkato 5:49a61433290a 550 if( nFrameCount < 1 || nFrameCount > STB_PE_BACK_MAX )
dkato 5:49a61433290a 551 {
dkato 5:49a61433290a 552 return STB_ERR_INVALIDPARAM;
dkato 5:49a61433290a 553 }
dkato 5:49a61433290a 554
dkato 5:49a61433290a 555 handle->peFrameCount = nFrameCount;
dkato 5:49a61433290a 556 return STB_NORMAL;
dkato 5:49a61433290a 557 }
dkato 5:49a61433290a 558 /*---------------------------------------------------------------------
dkato 5:49a61433290a 559 ---------------------------------------------------------------------*/
dkato 5:49a61433290a 560 STB_INT32 PeGetFrameCount(PEHANDLE handle , STB_INT32* nFrameCount )
dkato 5:49a61433290a 561 {
dkato 5:49a61433290a 562 STB_INT32 nRet;
dkato 5:49a61433290a 563 nRet = PeIsValidPointer(handle);
dkato 5:49a61433290a 564 if(nRet != STB_NORMAL){
dkato 5:49a61433290a 565 return STB_ERR_NOHANDLE;
dkato 5:49a61433290a 566 }
dkato 5:49a61433290a 567 nRet = PeIsValidPointer(nFrameCount);
dkato 5:49a61433290a 568 if(nRet != STB_NORMAL){
dkato 5:49a61433290a 569 return STB_ERR_INVALIDPARAM;
dkato 5:49a61433290a 570 }
dkato 5:49a61433290a 571
dkato 5:49a61433290a 572 *nFrameCount = handle->peFrameCount ;
dkato 5:49a61433290a 573 return STB_NORMAL;
dkato 5:49a61433290a 574 }