This change adds support to retrieve 128D face descriptor for a given landmark. Since now we have full pipeline, README.md has "general usage" section and integration test is added. Also, return from FaceLandmarkDetection is changed, so it can be given to FaceRecognition without changes. All obtained values are crosschecked to match with values from python versions (however, if num_jitters is > 1 in FaceRecognition, values don't match between PHP and Python, I suspect it is related to usage of dlib::rand, but still investigating)..
91 lines
2.9 KiB
C
91 lines
2.9 KiB
C
/*
|
|
+----------------------------------------------------------------------+
|
|
| PHP Version 7 |
|
|
+----------------------------------------------------------------------+
|
|
| Copyright (c) 1997-2018 The PHP Group |
|
|
+----------------------------------------------------------------------+
|
|
| This source file is subject to version 3.01 of the PHP license, |
|
|
| that is bundled with this package in the file LICENSE, and is |
|
|
| available through the world-wide-web at the following url: |
|
|
| http://www.php.net/license/3_01.txt |
|
|
| If you did not receive a copy of the PHP license and are unable to |
|
|
| obtain it through the world-wide-web, please send a note to |
|
|
| license@php.net so we can mail you a copy immediately. |
|
|
+----------------------------------------------------------------------+
|
|
| Author: |
|
|
+----------------------------------------------------------------------+
|
|
*/
|
|
|
|
/* $Id$ */
|
|
|
|
#ifndef PHP_PDLIB_H
|
|
#define PHP_PDLIB_H
|
|
|
|
extern "C" {
|
|
#include "php.h"
|
|
#ifdef ZTS
|
|
#include "TSRM.h"
|
|
#endif
|
|
};
|
|
|
|
extern zend_module_entry pdlib_module_entry;
|
|
#define phpext_pdlib_ptr &pdlib_module_entry
|
|
|
|
#define PHP_PDLIB_VERSION "0.1.0" /* Replace with version number for your extension */
|
|
|
|
#ifdef PHP_WIN32
|
|
# define PHP_PDLIB_API __declspec(dllexport)
|
|
#elif defined(__GNUC__) && __GNUC__ >= 4
|
|
# define PHP_PDLIB_API __attribute__ ((visibility("default")))
|
|
#else
|
|
# define PHP_PDLIB_API
|
|
#endif
|
|
|
|
/*
|
|
Declare any global variables you may need between the BEGIN
|
|
and END macros here:
|
|
|
|
ZEND_BEGIN_MODULE_GLOBALS(pdlib)
|
|
zend_long global_value;
|
|
char *global_string;
|
|
ZEND_END_MODULE_GLOBALS(pdlib)
|
|
*/
|
|
|
|
/* Always refer to the globals in your function as PDLIB_G(variable).
|
|
You are encouraged to rename these macros something shorter, see
|
|
examples in any other php module directory.
|
|
*/
|
|
#define PDLIB_G(v) ZEND_MODULE_GLOBALS_ACCESSOR(pdlib, v)
|
|
|
|
#if defined(ZTS) && defined(COMPILE_DL_PDLIB)
|
|
ZEND_TSRMLS_CACHE_EXTERN()
|
|
#endif
|
|
|
|
#define PARSE_LONG_FROM_ARRAY(hashtable, key, error_key_missing, error_key_not_long) \
|
|
zval* data##key; \
|
|
/* Tries to find given key in array */ \
|
|
data##key = zend_hash_str_find(hashtable, #key, sizeof(#key)-1); \
|
|
if (data##key == nullptr) { \
|
|
zend_throw_exception_ex(zend_ce_exception, 0 TSRMLS_CC, #error_key_missing); \
|
|
return; \
|
|
} \
|
|
\
|
|
/* We also need to check proper type of value in associative array */ \
|
|
if (Z_TYPE_P(data##key) != IS_LONG) { \
|
|
zend_throw_exception_ex(zend_ce_exception, 0 TSRMLS_CC, #error_key_not_long); \
|
|
return; \
|
|
} \
|
|
zend_long key = Z_LVAL_P(data##key); \
|
|
|
|
#endif /* PHP_PDLIB_H */
|
|
|
|
|
|
/*
|
|
* Local variables:
|
|
* tab-width: 4
|
|
* c-basic-offset: 4
|
|
* End:
|
|
* vim600: noet sw=4 ts=4 fdm=marker
|
|
* vim<600: noet sw=4 ts=4
|
|
*/
|