| /* |
| * Copyright (C) 2008 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #ifndef bpi_BF_FACE_FINDER_EM_H |
| #define bpi_BF_FACE_FINDER_EM_H |
| |
| /* ---- includes ----------------------------------------------------------- */ |
| |
| #include "b_BasicEm/Context.h" |
| #include "b_APIEm/FaceFinder.h" |
| #include "b_BitFeatureEm/ScanDetector.h" |
| |
| /* ---- related objects --------------------------------------------------- */ |
| |
| struct bpi_DCR; |
| |
| /* ---- typedefs ----------------------------------------------------------- */ |
| |
| /* ---- constants ---------------------------------------------------------- */ |
| |
| /* data format version number */ |
| #define bpi_BF_FACE_FINDER_VERSION 100 |
| |
| /* ---- object definition -------------------------------------------------- */ |
| |
| /** Face Finder using ractangle features */ |
| struct bpi_BFFaceFinder |
| { |
| /* ---- private data --------------------------------------------------- */ |
| |
| /** base object */ |
| struct bpi_FaceFinder baseE; |
| |
| /* number of detected faces in last call of multiProcess in face data buffer */ |
| uint32 detectedFacesE; |
| |
| /* number of available faces in last call of multiProcess in face data buffer */ |
| uint32 availableFacesE; |
| |
| /* pointer to face data buffer */ |
| int32* faceDataBufferE; |
| |
| /* ---- public data ---------------------------------------------------- */ |
| |
| /* detector */ |
| struct bbf_ScanDetector detectorE; |
| }; |
| |
| /* ---- associated objects ------------------------------------------------- */ |
| |
| /* ---- external functions ------------------------------------------------- */ |
| |
| /* ---- \ghd{ constructor/destructor } ------------------------------------- */ |
| |
| /** initializes module */ |
| void bpi_BFFaceFinder_init( struct bbs_Context* cpA, |
| struct bpi_BFFaceFinder* ptrA ); |
| |
| /** destroys module */ |
| void bpi_BFFaceFinder_exit( struct bbs_Context* cpA, |
| struct bpi_BFFaceFinder* ptrA ); |
| |
| /* ---- \ghd{ operators } -------------------------------------------------- */ |
| |
| /** copies module */ |
| void bpi_BFFaceFinder_copy( struct bbs_Context* cpA, |
| struct bpi_BFFaceFinder* ptrA, |
| const struct bpi_BFFaceFinder* srcPtrA ); |
| |
| /** determines equality of parameters */ |
| flag bpi_BFFaceFinder_equal( struct bbs_Context* cpA, |
| const struct bpi_BFFaceFinder* ptrA, |
| const struct bpi_BFFaceFinder* srcPtrA ); |
| |
| /* ---- \ghd{ query functions } -------------------------------------------- */ |
| |
| /** minimum eye distance (pixel) */ |
| uint32 bpi_BFFaceFinder_getMinEyeDistance( const struct bpi_BFFaceFinder* ptrA ); |
| |
| /** maximum eye distance (pixel) */ |
| uint32 bpi_BFFaceFinder_getMaxEyeDistance( const struct bpi_BFFaceFinder* ptrA ); |
| |
| /* ---- \ghd{ modify functions } ------------------------------------------- */ |
| |
| /** minimum eye distance (pixel) */ |
| void bpi_BFFaceFinder_setMinEyeDistance( struct bbs_Context* cpA, |
| struct bpi_BFFaceFinder* ptrA, |
| uint32 distA ); |
| |
| /** maximum eye distance (pixel) */ |
| void bpi_BFFaceFinder_setMaxEyeDistance( struct bbs_Context* cpA, |
| struct bpi_BFFaceFinder* ptrA, |
| uint32 distA ); |
| |
| /* ---- \ghd{ memory I/O } ------------------------------------------------- */ |
| |
| /** size object needs when written to memory */ |
| uint32 bpi_BFFaceFinder_memSize( struct bbs_Context* cpA, |
| const struct bpi_BFFaceFinder* ptrA ); |
| |
| /** writes object to memory; returns number of 16-bit words written */ |
| uint32 bpi_BFFaceFinder_memWrite( struct bbs_Context* cpA, |
| const struct bpi_BFFaceFinder* ptrA, |
| uint16* memPtrA ); |
| |
| /** reads object from memory; returns number of 16-bit words read |
| * Note: Before executing this function the maximum image dimensions must be specified |
| * through function bpi_BFFaceFinder_setMaxImageSize. This is to ensure proper allocation |
| * of internal memory. Otherwise this function will cause an exception. |
| */ |
| uint32 bpi_BFFaceFinder_memRead( struct bbs_Context* cpA, |
| struct bpi_BFFaceFinder* ptrA, |
| const uint16* memPtrA, |
| struct bbs_MemTbl* mtpA ); |
| |
| /* ---- \ghd{ exec functions } --------------------------------------------- */ |
| |
| /** processes image for single face detection; |
| * returns confidence ( 8.24 ) |
| * fills external id cluster with node positions and ids |
| * |
| * If roiPtrA is NULL, the whole image is considered for processsing |
| * otherwise *roiPtrA specifies a section of the original image to which |
| * processing is limited. All coordinates refer to that section and must |
| * eventually be adjusted externally. |
| * The roi rectangle must not include pixels outside of the original image |
| * (checked -> error). The rectangle may be of uneven width. |
| * |
| * offsPtrA points to an offset vector (whole pixels) that is to be added to |
| * cluster coordinates in order to obtain image coordinates |
| * |
| */ |
| int32 bpi_BFFaceFinder_process( struct bbs_Context* cpA, |
| const struct bpi_BFFaceFinder* ptrA, |
| void* imagePtrA, |
| uint32 imageWidthA, |
| uint32 imageHeightA, |
| const struct bts_Int16Rect* roiPtrA, |
| struct bts_Int16Vec2D* offsPtrA, |
| struct bts_IdCluster2D* idClusterPtrA ); |
| |
| /** Processes integral image for multiple face detection; |
| * returns number of faces detected |
| * return pointer to faceBuffer (intermediate data format) |
| * call getFace() to retrieve face information from buffer. |
| * *faceDataBufferPtrA is set to the address of an internal buffer that is valid until the next image processing |
| * |
| * Positions are sorted by confidence (highest confidence first) |
| * |
| * When this function returns 0 (no face detected) faceDataBuffer |
| * still contains one valid entry retrievable by getFace() that |
| * represents the most likely position. The confidence is then below |
| * or equal 0.5. |
| * |
| * If roiPtrA is NULL, the whole image is considered for processsing |
| * otherwise *roiPtrA specifies a section of the original image to which |
| * processing is limited. All coordinates refer to that section and must |
| * eventually be adjusted externally. |
| * The roi rectangle must not include pixels outside of the original image |
| * (checked -> error). The rectangle may be of uneven width. |
| */ |
| uint32 bpi_BFFaceFinder_multiProcess( struct bbs_Context* cpA, |
| const struct bpi_BFFaceFinder* ptrA, |
| void* imagePtrA, |
| uint32 imageWidthA, |
| uint32 imageHeightA, |
| const struct bts_Int16Rect* roiPtrA ); |
| |
| /** Extracts a single face from a face buffer that was previously filled with face data by function |
| * multiProcess(). |
| * returns confidence ( 8.24 ) |
| * Fills external id cluster with node positions and ids |
| * |
| * offsPtrA points to an offset vector (whole pixels) that is to be added to |
| * cluster coordinates in order to obtain image coordinates |
| */ |
| uint32 bpi_BFFaceFinder_getFace( struct bbs_Context* cpA, |
| const struct bpi_BFFaceFinder* ptrA, |
| uint32 indexA, |
| struct bts_Int16Vec2D* offsPtrA, |
| struct bts_IdCluster2D* idClusterPtrA ); |
| |
| /** Extracts a single face from a face buffer that was previously filled with face data by function |
| * multiProcess(). |
| * returns confidence ( 8.24 ) |
| * provides |
| * - id cluster with node positions and ids |
| * - confidence |
| */ |
| void bpi_BFFaceFinder_getFaceDCR( struct bbs_Context* cpA, |
| const struct bpi_BFFaceFinder* ptrA, |
| uint32 indexA, |
| struct bpi_DCR* dcrPtrA ); |
| |
| /** this function must be executed before calling _memRead */ |
| void bpi_BFFaceFinder_setMaxImageSize( struct bbs_Context* cpA, |
| struct bpi_BFFaceFinder* ptrA, |
| uint32 maxImageWidthA, |
| uint32 maxImageHeightA ); |
| |
| /** initializes some parameters prior to reading |
| * Overload of vpSetParams |
| * wraps function setMaxImageSize |
| */ |
| void bpi_BFFaceFinder_setParams( struct bbs_Context* cpA, |
| struct bpi_FaceFinder* ptrA, |
| uint32 maxImageWidthA, |
| uint32 maxImageHeightA ); |
| |
| /** sets detection range |
| * Overload of vpSetParams |
| */ |
| void bpi_BFFaceFinder_setRange( struct bbs_Context* cpA, |
| struct bpi_FaceFinder* ptrA, |
| uint32 minEyeDistanceA, |
| uint32 maxEyeDistanceA ); |
| |
| /** Single face processing function; returns confidence (8.24) |
| * Overload of vpProcess |
| * wraps function process |
| */ |
| int32 bpi_BFFaceFinder_processDcr( struct bbs_Context* cpA, |
| const struct bpi_FaceFinder* ptrA, |
| struct bpi_DCR* dcrPtrA ); |
| |
| /** Multiple face processing function; returns number of faces detected |
| * Overload of vpPutDcr |
| * wraps function multiProcess |
| */ |
| int32 bpi_BFFaceFinder_putDcr( struct bbs_Context* cpA, |
| const struct bpi_FaceFinder* ptrA, |
| struct bpi_DCR* dcrPtrA ); |
| |
| /** Retrieves indexed face from face finder after calling PutDCR |
| * Overload of vpGetDcr |
| * wraps function getFaceDCR |
| */ |
| void bpi_BFFaceFinder_getDcr( struct bbs_Context* cpA, |
| const struct bpi_FaceFinder* ptrA, |
| uint32 indexA, |
| struct bpi_DCR* dcrPtrA ); |
| |
| #endif /* bpi_BF_FACE_FINDER_EM_H */ |