17f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* 27f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 37f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * 47f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 57f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * you may not use this file except in compliance with the License. 67f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * You may obtain a copy of the License at 77f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * 87f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 97f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * 107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * See the License for the specific language governing permissions and 147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * limitations under the License. 157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project */ 167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#ifndef bbf_SCAN_DETECTOR_EM_H 187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#define bbf_SCAN_DETECTOR_EM_H 197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- includes ----------------------------------------------------------- */ 217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BasicEm/Context.h" 237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BasicEm/Basic.h" 247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BasicEm/UInt32Arr.h" 257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BasicEm/Int16Arr.h" 267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BasicEm/MemTbl.h" 277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_TensorEm/IdCluster2D.h" 287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BitFeatureEm/Sequence.h" 297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BitFeatureEm/BitParam.h" 307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BitFeatureEm/Scanner.h" 317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- related objects --------------------------------------------------- */ 337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- typedefs ----------------------------------------------------------- */ 357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- constants ---------------------------------------------------------- */ 377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* data format version number */ 397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#define bbf_SCAN_DETECTOR_VERSION 100 407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* maximum number of features in scan detector */ 427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#define bbf_SCAN_DETECTOR_MAX_FEATURES 4 437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- object definition -------------------------------------------------- */ 457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** discrete feature set */ 477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectstruct bbf_ScanDetector 487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /* ---- private data --------------------------------------------------- */ 507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /** minimum scale (12.20) */ 527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 minScaleE; 537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /** maximum scale (0: unlimited) (12.20) */ 557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 maxScaleE; 567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /** maximum image width (this variable must be specified before reading the parameter file) */ 587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 maxImageWidthE; 597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /** maximum image height (this variable must be specified before reading the parameter file) */ 617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 maxImageHeightE; 627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /** scanner */ 647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bbf_Scanner scannerE; 657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /* ---- public data ---------------------------------------------------- */ 677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /** patch width */ 697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 patchWidthE; 707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /** patch height */ 727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 patchHeightE; 737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /** minimum default scale (12.20) */ 757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 minDefScaleE; 767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /** maximum default scale (0: unlimited) (12.20) */ 787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 maxDefScaleE; 797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /** scale step factor (1.32) (leading bit is always one and therefore ignored) */ 817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 scaleStepE; 827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /** overlap threshold (16.16) */ 847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 overlapThrE; 857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /** border width in pixels (refers to scaled image) */ 877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 borderWidthE; 887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /** border height in pixels (refers to scaled image) */ 907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 borderHeightE; 917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /** number of features */ 937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 featuresE; 947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /** bit param array */ 967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bbf_BitParam bitParamArrE[ bbf_SCAN_DETECTOR_MAX_FEATURES ]; 977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /** feature array */ 997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bbf_Sequence featureArrE[ bbf_SCAN_DETECTOR_MAX_FEATURES ]; 1007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /** reference cluster */ 1027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bts_IdCluster2D refClusterE; 1037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /** reference distance (e.g. eye distance) in ref cluster (16.16) */ 1057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 refDistanceE; 1067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project}; 1087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- associated objects ------------------------------------------------- */ 1107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- external functions ------------------------------------------------- */ 1127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ constructor/destructor } ------------------------------------- */ 1147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** initializes bbf_ScanDetector */ 1167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_ScanDetector_init( struct bbs_Context* cpA, 1177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bbf_ScanDetector* ptrA ); 1187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** resets bbf_ScanDetector */ 1207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_ScanDetector_exit( struct bbs_Context* cpA, 1217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bbf_ScanDetector* ptrA ); 1227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ operators } -------------------------------------------------- */ 1247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** copy operator */ 1267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bbf_ScanDetector_copy( struct bbs_Context* cpA, 1277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bbf_ScanDetector* ptrA, 1287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const struct bbf_ScanDetector* srcPtrA ); 1297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** equal operator */ 1317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectflag bbf_ScanDetector_equal( struct bbs_Context* cpA, 1327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const struct bbf_ScanDetector* ptrA, 1337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const struct bbf_ScanDetector* srcPtrA ); 1347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ query functions } -------------------------------------------- */ 1367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ modify functions } ------------------------------------------- */ 1387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ memory I/O } ------------------------------------------------- */ 1407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** word size (16-bit) object needs when written to memory */ 1427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint32 bbf_ScanDetector_memSize( struct bbs_Context* cpA, 1437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const struct bbf_ScanDetector* ptrA ); 1447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** writes object to memory; returns number of words (16-bit) written */ 1467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint32 bbf_ScanDetector_memWrite( struct bbs_Context* cpA, 1477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const struct bbf_ScanDetector* ptrA, uint16* memPtrA ); 1487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** reads object from memory; returns number of words (16-bit) read */ 1507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint32 bbf_ScanDetector_memRead( struct bbs_Context* cpA, 1517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bbf_ScanDetector* ptrA, 1527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const uint16* memPtrA, 1537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bbs_MemTbl* mtpA ); 1547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ exec functions } --------------------------------------------- */ 1567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** Scans over image returns number of detected positions 1587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * After processing the output data are stored in composite format 1597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * in scannerPtrA->outArrE. 1607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * 1617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * The output data array is located after execution at *outArrPtrPtrA. 1627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * The output data are organized as follows: 1637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * x(16.16) y(16.16), scale(12.20), confidence(4.28), x(16.16).... 1647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * 1657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * All positions are sorted by descending confidence 1667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * 1677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * If no faces were found, the function returns 0 but the output contains 1687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * one valid position with the highest confidence; the associated activity 1697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * value is negative (or 0) in that case. 1707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * 1717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * If roiPtrA is NULL, the whole image is considered for processsing 1727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * otherwise *roiPtrA specifies a section of the original image to which 1737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * processing is limited. All coordinates refer to that section and must 1747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * eventually be adjusted externally. 1757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * The roi rectangle must not include pixels outside of the original image 1767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * (checked -> error). The rectangle may be of uneven width. 1777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project */ 1787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint32 bbf_ScanDetector_process( struct bbs_Context* cpA, 1797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bbf_ScanDetector* ptrA, 1807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const void* imagePtrA, 1817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 imageWidthA, 1827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 imageHeightA, 1837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const struct bts_Int16Rect* roiPtrA, 1847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32** outArrPtrPtrA ); 1857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#endif /* bbf_SCAN_DETECTOR_EM_H */ 1877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 188