first commit
This commit is contained in:
commit
5539b5bff8
38
.gitignore
vendored
Normal file
38
.gitignore
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
.deps
|
||||
*.lo
|
||||
*.la
|
||||
.libs
|
||||
acinclude.m4
|
||||
aclocal.m4
|
||||
autom4te.cache
|
||||
build
|
||||
config.guess
|
||||
config.h
|
||||
config.h.in
|
||||
config.log
|
||||
config.nice
|
||||
config.status
|
||||
config.sub
|
||||
configure
|
||||
configure.ac
|
||||
include
|
||||
install-sh
|
||||
libtool
|
||||
ltmain.sh
|
||||
Makefile
|
||||
Makefile.fragments
|
||||
Makefile.global
|
||||
Makefile.objects
|
||||
missing
|
||||
mkinstalldirs
|
||||
modules
|
||||
run-tests.php
|
||||
tests/*/*.diff
|
||||
tests/*/*.out
|
||||
tests/*/*.php
|
||||
tests/*/*.exp
|
||||
tests/*/*.log
|
||||
tests/*/*.sh
|
||||
|
||||
.idea
|
||||
cmake-build-debug
|
0
EXPERIMENTAL
Normal file
0
EXPERIMENTAL
Normal file
45
config.m4
Normal file
45
config.m4
Normal file
@ -0,0 +1,45 @@
|
||||
dnl $Id$
|
||||
dnl config.m4 for extension pdlib
|
||||
|
||||
dnl Comments in this file start with the string 'dnl'.
|
||||
dnl Remove where necessary. This file will not work
|
||||
dnl without editing.
|
||||
|
||||
dnl If your extension references something external, use with:
|
||||
|
||||
PHP_ARG_WITH(pdlib, for pdlib support,
|
||||
dnl Make sure that the comment is aligned:
|
||||
[ --with-pdlib Include pdlib support])
|
||||
|
||||
if test "$PHP_PDLIB" != "no"; then
|
||||
dnl using C++11
|
||||
CXXFLAGS="-std=c++11"
|
||||
PHP_REQUIRE_CXX()
|
||||
PHP_ADD_LIBRARY(stdc++, 1, DLIB_SHARED_LIBADD)
|
||||
PHP_SUBST(DLIB_SHARED_LIBADD)
|
||||
|
||||
pdlib_src_files="pdlib.cc \
|
||||
src/face_detection.cc"
|
||||
|
||||
AC_MSG_CHECKING(for pkg-config)
|
||||
if test ! -f "$PKG_CONFIG"; then
|
||||
PKG_CONFIG=`which pkg-config`
|
||||
fi
|
||||
|
||||
if test -x "$PKG_CONFIG" && $PKG_CONFIG --exists dlib-1; then
|
||||
if $PKG_CONFIG dlib-1 --atleast-version 19.00; then
|
||||
LIBDLIB_CFLAGS=`$PKG_CONFIG dlib-1 --cflags`
|
||||
LIBDLIB_LIBDIR=`$PKG_CONFIG dlib-1 --libs`
|
||||
LIBDLIB_VERSON=`$PKG_CONFIG dlib-1 --modversion`
|
||||
AC_MSG_RESULT(from pkgconfig: dlib version $LIBDLIB_VERSON)
|
||||
else
|
||||
AC_MSG_ERROR(system dlib is too old: version 19.00 required)
|
||||
fi
|
||||
else
|
||||
AC_MSG_ERROR(pkg-config not found)
|
||||
fi
|
||||
PHP_EVAL_LIBLINE($LIBDLIB_LIBDIR, DLIB_SHARED_LIBADD)
|
||||
PHP_EVAL_INCLINE($LIBDLIB_CFLAGS)
|
||||
|
||||
PHP_NEW_EXTENSION(pdlib, $pdlib_src_files, $ext_shared,, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1)
|
||||
fi
|
13
config.w32
Normal file
13
config.w32
Normal file
@ -0,0 +1,13 @@
|
||||
// $Id$
|
||||
// vim:ft=javascript
|
||||
|
||||
// If your extension references something external, use ARG_WITH
|
||||
// ARG_WITH("pdlib", "for pdlib support", "no");
|
||||
|
||||
// Otherwise, use ARG_ENABLE
|
||||
// ARG_ENABLE("pdlib", "enable pdlib support", "no");
|
||||
|
||||
if (PHP_PDLIB != "no") {
|
||||
EXTENSION("pdlib", "pdlib.c", PHP_EXTNAME_SHARED, "/DZEND_ENABLE_STATIC_TSRMLS_CACHE=1");
|
||||
}
|
||||
|
188
pdlib.cc
Normal file
188
pdlib.cc
Normal file
@ -0,0 +1,188 @@
|
||||
/*
|
||||
+----------------------------------------------------------------------+
|
||||
| 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$ */
|
||||
|
||||
extern "C" {
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "php.h"
|
||||
#include "php_ini.h"
|
||||
#include "ext/standard/info.h"
|
||||
}
|
||||
#include "php_pdlib.h"
|
||||
#include "src/face_detection.h"
|
||||
|
||||
/* If you declare any globals in php_pdlib.h uncomment this:
|
||||
ZEND_DECLARE_MODULE_GLOBALS(pdlib)
|
||||
*/
|
||||
|
||||
/* True global resources - no need for thread safety here */
|
||||
static int le_pdlib;
|
||||
|
||||
/* {{{ PHP_INI
|
||||
*/
|
||||
/* Remove comments and fill if you need to have entries in php.ini
|
||||
PHP_INI_BEGIN()
|
||||
STD_PHP_INI_ENTRY("pdlib.global_value", "42", PHP_INI_ALL, OnUpdateLong, global_value, zend_pdlib_globals, pdlib_globals)
|
||||
STD_PHP_INI_ENTRY("pdlib.global_string", "foobar", PHP_INI_ALL, OnUpdateString, global_string, zend_pdlib_globals, pdlib_globals)
|
||||
PHP_INI_END()
|
||||
*/
|
||||
/* }}} */
|
||||
|
||||
/* Remove the following function when you have successfully modified config.m4
|
||||
so that your module can be compiled into PHP, it exists only for testing
|
||||
purposes. */
|
||||
|
||||
/* Every user-visible function in PHP should document itself in the source */
|
||||
/* {{{ proto string confirm_pdlib_compiled(string arg)
|
||||
Return a string to confirm that the module is compiled in */
|
||||
PHP_FUNCTION(confirm_pdlib_compiled)
|
||||
{
|
||||
char *arg = NULL;
|
||||
size_t arg_len, len;
|
||||
zend_string *strg;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &arg, &arg_len) == FAILURE) {
|
||||
return;
|
||||
}
|
||||
|
||||
strg = strpprintf(0, "Congratulations! You have successfully modified ext/%.78s/config.m4. Module %.78s is now compiled into PHP.", "pdlib", arg);
|
||||
|
||||
RETURN_STR(strg);
|
||||
}
|
||||
/* }}} */
|
||||
/* The previous line is meant for vim and emacs, so it can correctly fold and
|
||||
unfold functions in source code. See the corresponding marks just before
|
||||
function definition, where the functions purpose is also documented. Please
|
||||
follow this convention for the convenience of others editing your code.
|
||||
*/
|
||||
|
||||
|
||||
/* {{{ php_pdlib_init_globals
|
||||
*/
|
||||
/* Uncomment this function if you have INI entries
|
||||
static void php_pdlib_init_globals(zend_pdlib_globals *pdlib_globals)
|
||||
{
|
||||
pdlib_globals->global_value = 0;
|
||||
pdlib_globals->global_string = NULL;
|
||||
}
|
||||
*/
|
||||
/* }}} */
|
||||
|
||||
/* {{{ PHP_MINIT_FUNCTION
|
||||
*/
|
||||
PHP_MINIT_FUNCTION(pdlib)
|
||||
{
|
||||
/* If you have INI entries, uncomment these lines
|
||||
REGISTER_INI_ENTRIES();
|
||||
*/
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ PHP_MSHUTDOWN_FUNCTION
|
||||
*/
|
||||
PHP_MSHUTDOWN_FUNCTION(pdlib)
|
||||
{
|
||||
/* uncomment this line if you have INI entries
|
||||
UNREGISTER_INI_ENTRIES();
|
||||
*/
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* Remove if there's nothing to do at request start */
|
||||
/* {{{ PHP_RINIT_FUNCTION
|
||||
*/
|
||||
PHP_RINIT_FUNCTION(pdlib)
|
||||
{
|
||||
#if defined(COMPILE_DL_PDLIB) && defined(ZTS)
|
||||
ZEND_TSRMLS_CACHE_UPDATE();
|
||||
#endif
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* Remove if there's nothing to do at request end */
|
||||
/* {{{ PHP_RSHUTDOWN_FUNCTION
|
||||
*/
|
||||
PHP_RSHUTDOWN_FUNCTION(pdlib)
|
||||
{
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ PHP_MINFO_FUNCTION
|
||||
*/
|
||||
PHP_MINFO_FUNCTION(pdlib)
|
||||
{
|
||||
php_info_print_table_start();
|
||||
php_info_print_table_header(2, "pdlib support", "enabled");
|
||||
php_info_print_table_end();
|
||||
|
||||
/* Remove comments if you have entries in php.ini
|
||||
DISPLAY_INI_ENTRIES();
|
||||
*/
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ pdlib_functions[]
|
||||
*
|
||||
* Every user visible function must have an entry in pdlib_functions[].
|
||||
*/
|
||||
const zend_function_entry pdlib_functions[] = {
|
||||
PHP_FE(confirm_pdlib_compiled, NULL)
|
||||
PHP_FE(dlib_face_detection, dlib_face_detection_arginfo)
|
||||
PHP_FE_END /* Must be the last line in pdlib_functions[] */
|
||||
};
|
||||
/* }}} */
|
||||
|
||||
/* {{{ pdlib_module_entry
|
||||
*/
|
||||
zend_module_entry pdlib_module_entry = {
|
||||
STANDARD_MODULE_HEADER,
|
||||
"pdlib",
|
||||
pdlib_functions,
|
||||
PHP_MINIT(pdlib),
|
||||
PHP_MSHUTDOWN(pdlib),
|
||||
PHP_RINIT(pdlib), /* Replace with NULL if there's nothing to do at request start */
|
||||
PHP_RSHUTDOWN(pdlib), /* Replace with NULL if there's nothing to do at request end */
|
||||
PHP_MINFO(pdlib),
|
||||
PHP_PDLIB_VERSION,
|
||||
STANDARD_MODULE_PROPERTIES
|
||||
};
|
||||
/* }}} */
|
||||
|
||||
#ifdef COMPILE_DL_PDLIB
|
||||
#ifdef ZTS
|
||||
ZEND_TSRMLS_CACHE_DEFINE()
|
||||
#endif
|
||||
ZEND_GET_MODULE(pdlib)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* 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
|
||||
*/
|
21
pdlib.php
Normal file
21
pdlib.php
Normal file
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
$br = (php_sapi_name() == "cli")? "":"<br>";
|
||||
|
||||
if(!extension_loaded('pdlib')) {
|
||||
dl('pdlib.' . PHP_SHLIB_SUFFIX);
|
||||
}
|
||||
$module = 'pdlib';
|
||||
$functions = get_extension_funcs($module);
|
||||
echo "Functions available in the test extension:$br\n";
|
||||
foreach($functions as $func) {
|
||||
echo $func."$br\n";
|
||||
}
|
||||
echo "$br\n";
|
||||
$function = 'confirm_' . $module . '_compiled';
|
||||
if (extension_loaded($module)) {
|
||||
$str = $function($module);
|
||||
} else {
|
||||
$str = "Module $module is not compiled into PHP";
|
||||
}
|
||||
echo "$str\n";
|
||||
?>
|
74
php_pdlib.h
Normal file
74
php_pdlib.h
Normal file
@ -0,0 +1,74 @@
|
||||
/*
|
||||
+----------------------------------------------------------------------+
|
||||
| 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
|
||||
|
||||
#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
|
||||
*/
|
36
src/face_detection.cc
Normal file
36
src/face_detection.cc
Normal file
@ -0,0 +1,36 @@
|
||||
|
||||
#include "../php_pdlib.h"
|
||||
#include "face_detection.h"
|
||||
|
||||
#include <dlib/image_processing/frontal_face_detector.h>
|
||||
#include <dlib/gui_widgets.h>
|
||||
#include <dlib/image_io.h>
|
||||
#include <iostream>
|
||||
|
||||
using namespace dlib;
|
||||
using namespace std;
|
||||
|
||||
PHP_FUNCTION(dlib_face_detection)
|
||||
{
|
||||
char *img_path;
|
||||
size_t img_path_len;
|
||||
|
||||
if(zend_parse_parameters(ZEND_NUM_ARGS(), "s", &img_path, &img_path_len) == FAILURE){
|
||||
RETURN_FALSE;
|
||||
}
|
||||
try {
|
||||
frontal_face_detector detector = get_frontal_face_detector();
|
||||
|
||||
array2d<unsigned char> img;
|
||||
load_image(img, img_path);
|
||||
|
||||
pyramid_up(img);
|
||||
std::vector<rectangle> dets = detector(img);
|
||||
RETURN_LONG(dets.size());
|
||||
}
|
||||
catch (exception& e)
|
||||
{
|
||||
RETURN_FALSE;
|
||||
}
|
||||
}
|
||||
|
13
src/face_detection.h
Normal file
13
src/face_detection.h
Normal file
@ -0,0 +1,13 @@
|
||||
//
|
||||
// Created by goodspb on 2018/5/20.
|
||||
//
|
||||
|
||||
#ifndef PHP_DLIB_FACE_DETECTION_H
|
||||
#define PHP_DLIB_FACE_DETECTION_H
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(dlib_face_detection_arginfo, 0, 0, 1)
|
||||
ZEND_ARG_INFO(0, img_path)
|
||||
ZEND_END_ARG_INFO()
|
||||
PHP_FUNCTION(dlib_face_detection);
|
||||
|
||||
#endif //PHP_DLIB_FACE_DETECTION_H
|
21
tests/001.phpt
Normal file
21
tests/001.phpt
Normal file
@ -0,0 +1,21 @@
|
||||
--TEST--
|
||||
Check for pdlib presence
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("pdlib")) print "skip"; ?>
|
||||
--FILE--
|
||||
<?php
|
||||
echo "pdlib extension is available";
|
||||
/*
|
||||
you can add regression tests for your extension here
|
||||
|
||||
the output of your test code has to be equal to the
|
||||
text in the --EXPECT-- section below for the tests
|
||||
to pass, differences between the output and the
|
||||
expected text are interpreted as failure
|
||||
|
||||
see php7/README.TESTING for further information on
|
||||
writing regression tests
|
||||
*/
|
||||
?>
|
||||
--EXPECT--
|
||||
pdlib extension is available
|
Loading…
Reference in New Issue
Block a user