大部分完成,细节再调节

Esse commit está contido em:
midoks
2017-10-12 19:57:24 +08:00
commit 7afb339431
6 arquivos alterados com 104 adições e 79 exclusões
+3 -1
Ver Arquivo
@@ -18,7 +18,9 @@ extension=opencv.so
```
## DEBUG使用
## auto install
```
curl -fsSL https://raw.githubusercontent.com/midoks/opencv/master/shell/php7.sh | sh
curl -fsSL https://raw.githubusercontent.com/midoks/opencv/master/shell/php7d.sh | sh
```
+38 -40
Ver Arquivo
@@ -1,48 +1,31 @@
PHP_ARG_WITH(opencv, for opencv support,
Make sure that the comment is aligned:
[ --with-opencv Include opencv support])
[ --with-opencv Include opencv support])
PHP_ARG_ENABLE(opencv_d, whether to enable opencv debug,
[ --enable-opencv_d opencv debug support default=no], no, no)
if test "$PHP_OPENCV" != "no"; then
dnl Write more examples of tests here...
# DEBUG
if test "$PHP_OPENCV_D" != "no";then
AC_DEFINE(OPENCV_DEBUG, 1, [OPENCV_DEBUG Setting])
fi
dnl # --with-opencv -> check with-path
dnl SEARCH_PATH="/usr/local /usr" # you might want to change this
dnl SEARCH_FOR="/include/opencv.h" # you most likely want to change this
dnl if test -r $PHP_OPENCV/$SEARCH_FOR; then # path given as parameter
dnl OPENCV_DIR=$PHP_OPENCV
dnl else # search default path list
dnl AC_MSG_CHECKING([for opencv files in default path])
dnl for i in $SEARCH_PATH ; do
dnl if test -r $i/$SEARCH_FOR; then
dnl OPENCV_DIR=$i
dnl AC_MSG_RESULT(found in $i)
dnl fi
dnl done
dnl fi
dnl
dnl if test -z "$OPENCV_DIR"; then
dnl AC_MSG_RESULT([not found])
dnl AC_MSG_ERROR([Please reinstall the opencv distribution])
dnl fi
dnl # --with-opencv -> add include path
dnl PHP_ADD_INCLUDE($OPENCV_DIR/include)
dnl # --with-opencv -> check for lib and symbol presence
dnl LIBNAME=opencv # you may want to change this
dnl LIBSYMBOL=opencv # you most likely want to change this
dnl PHP_CHECK_LIBRARY($LIBNAME,$LIBSYMBOL,
dnl [
dnl PHP_ADD_LIBRARY_WITH_PATH($LIBNAME, $OPENCV_DIR/$PHP_LIBDIR, OPENCV_SHARED_LIBADD)
dnl AC_DEFINE(HAVE_OPENCVLIB,1,[ ])
dnl ],[
dnl AC_MSG_ERROR([wrong opencv lib version or lib not found])
dnl ],[
dnl -L$OPENCV_DIR/$PHP_LIBDIR -lm
dnl ])
dnl
dnl PHP_SUBST(OPENCV_SHARED_LIBADD)
SEARCH_PATH="/usr/lib/pkgconfig /usr/local/lib/pkgconfig" # you might want to change this
SEARCH_FOR="opencv.pc" # you most likely want to change this
if test -r $PHP_TCLIP/$SEARCH_FOR; then # path given as parameter
TCLIP_DIR=$PHP_TCLIP
else # search default path list
AC_MSG_CHECKING([for opencv.pc file in default path])
for i in $SEARCH_PATH ; do
if test -r $i/$SEARCH_FOR; then
TCLIP_DIR=$i
AC_MSG_RESULT(found in $i)
fi
done
fi
OPENCV_FLAGS="`pkg-config opencv --libs --cflags opencv`"
opencv_lib_path=""
@@ -76,6 +59,21 @@ if test "$PHP_OPENCV" != "no"; then
done
# have some question
#AC_DEFINE(PHP_OPENCV_OPENCV_PATH, \"$opencv_lib_path\", [Include OPENCV_SHARE XML Path])
opencv_root_path=`dirname $opencv_lib_path`
if test -r php_opencv.bak.h;then
echo "php_opencv.bak.h ok"
else
cp php_opencv.h php_opencv.bak.h
fi
echo "" > php_opencv.h
echo "#define PHP_OPENCV_OPENCV_PATH \"$opencv_root_path\"" >> php_opencv.h
cat php_opencv.bak.h >> php_opencv.h
PHP_ADD_LIBRARY(stdc++,"",OPENCV_SHARED_LIBADD)
PHP_SUBST(OPENCV_SHARED_LIBADD)
PHP_REQUIRE_CXX()
+21 -14
Ver Arquivo
@@ -50,6 +50,8 @@ using namespace cv;
using namespace std;
/** {{{ proto php_opencv_imgproc
*/
typedef struct _php_opencv_imgproc
@@ -60,6 +62,7 @@ typedef struct _php_opencv_imgproc
} php_opencv_imgproc_t;
/* }}} */
php_opencv_imgproc_t * opencv_imgproc_var;
Mat opencv_imgproc_src_im;
Mat opencv_imgproc_dst_im;
@@ -99,13 +102,6 @@ int opencv_imgproc_detect_face(Mat &img TSRMLS_DC){
if ( !cmp ){
return -1;
}
string config_path = "/usr/local/Cellar/opencv/3.3.0_3/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml";
if (!face_cascade.load( config_path ) ){
opencv_show("load:fail!\r\n");
php_error_docref(NULL TSRMLS_CC, E_WARNING, "can not load classifier file%s", config_path.c_str());
return -1;
}
vector<Rect> faces;
@@ -262,7 +258,7 @@ PHP_METHOD(opencv_imgproc, __construct) {
opencv_imgproc_src_im = imread(src);
opencv_imgproc_dst_im = imread(src);
if (!opencv_imgproc_src_im.data) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "fail to load image from %s", src);
}
@@ -306,7 +302,6 @@ PHP_METHOD(opencv_imgproc, tclip) {
opencv_imgproc_var->width = dst_width;
opencv_imgproc_var->height = dst_height;
Size tmp_size;
float ratio = 0.0, ratio_w = 0.0, ratio_h = 0.0;
int clip_top = 0,clip_bottom = 0,clip_left = 0, clip_right = 0;
@@ -323,7 +318,6 @@ PHP_METHOD(opencv_imgproc, tclip) {
RETURN_TRUE;
}
ratio = 200.0 / (float)opencv_imgproc_src_im.size().width;
tmp_size = Size((int)(opencv_imgproc_src_im.size().width * ratio), (int)(opencv_imgproc_src_im.size().height * ratio));
opencv_imgproc_dst_im = Mat(tmp_size, CV_32S );
@@ -334,7 +328,6 @@ PHP_METHOD(opencv_imgproc, tclip) {
opencv_show("width:%d,height:%d\r\n", (int)(opencv_imgproc_src_im.size().width * ratio), (int)(opencv_imgproc_src_im.size().height * ratio));
int result = opencv_imgproc_detect_face( opencv_imgproc_src_im TSRMLS_CC);
opencv_show("opencv_imgproc_detect_face:%d\r\n", result);
if (result == -1) {
@@ -356,9 +349,6 @@ PHP_METHOD(opencv_imgproc, tclip) {
opencv_show("width_i:%d,height_i:%d\r\n", dst_width, dst_height);
opencv_show("ratio:%f\r\n", ratio);
result = result == -1 ? -1 : (int)((float)result * ratio);
opencv_show("width_d:%d,height_d:%d\r\n", (int)(opencv_imgproc_src_im.size().width * ratio), (int)(opencv_imgproc_src_im.size().height * ratio));
@@ -460,6 +450,23 @@ zend_function_entry opencv_imgproc_methods[] = {
*/
OPENCV_STARTUP_FUNCTION(imgproc) {
char *face_xml_path;
spprintf(&face_xml_path, 0, "%s/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml", OPENCV_G(root_path));
opencv_show("imgproc:%s\r\n", opencv_globals.root_path);
string config_path = face_xml_path;
if (!face_cascade.load( config_path ) ){
opencv_show("load face_xml_path fail!\r\n");
php_error_docref(NULL TSRMLS_CC, E_WARNING, "can not load classifier file%s", config_path.c_str());
}
opencv_show("load face_xml_path ok!\r\n");
if (face_xml_path) {
efree(face_xml_path);
}
zend_class_entry ce;
INIT_CLASS_ENTRY(ce, "OpenCV\\ImgProc", opencv_imgproc_methods);
+14 -17
Ver Arquivo
@@ -33,21 +33,17 @@ extern "C" {
#include "opencv2/core/version.hpp"
/* If you declare any globals in php_opencv.h uncomment this:
ZEND_DECLARE_MODULE_GLOBALS(opencv)
*/
PHPAPI ZEND_DECLARE_MODULE_GLOBALS(opencv)
/* True global resources - no need for thread safety here */
static int le_opencv;
/* {{{ PHP_INI
*/
/* Remove comments and fill if you need to have entries in php.ini
// Remove comments and fill if you need to have entries in php.ini
PHP_INI_BEGIN()
STD_PHP_INI_ENTRY("opencv.global_value", "42", PHP_INI_ALL, OnUpdateLong, global_value, zend_opencv_globals, opencv_globals)
STD_PHP_INI_ENTRY("opencv.global_string", "foobar", PHP_INI_ALL, OnUpdateString, global_string, zend_opencv_globals, opencv_globals)
STD_PHP_INI_ENTRY("opencv.root_path", PHP_OPENCV_OPENCV_PATH, PHP_INI_ALL, OnUpdateString, root_path, zend_opencv_globals, opencv_globals)
PHP_INI_END()
*/
/* }}} */
/* Remove the following function when you have successfully modified config.m4
@@ -79,24 +75,22 @@ PHP_FUNCTION(confirm_opencv_compiled)
*/
/* {{{ php_opencv_init_globals
*/
/* Uncomment this function if you have INI entries
/* {{{ php_opencv_init_globals */
//Uncomment this function if you have INI entries
static void php_opencv_init_globals(zend_opencv_globals *opencv_globals)
{
opencv_globals->global_value = 0;
opencv_globals->global_string = NULL;
opencv_globals->root_path = NULL;
}
*/
/* }}} */
/* {{{ PHP_MINIT_FUNCTION
*/
PHP_MINIT_FUNCTION(opencv)
{
/* If you have INI entries, uncomment these lines
REGISTER_INI_ENTRIES();
*/
OPENCV_STARTUP(demo);
OPENCV_STARTUP(imgproc);
@@ -109,9 +103,9 @@ PHP_MINIT_FUNCTION(opencv)
*/
PHP_MSHUTDOWN_FUNCTION(opencv)
{
/* uncomment this line if you have INI entries
UNREGISTER_INI_ENTRIES();
*/
return SUCCESS;
}
/* }}} */
@@ -146,7 +140,10 @@ PHP_MINFO_FUNCTION(opencv)
php_info_print_table_row(2, "OpenCV version", CV_VERSION);
php_info_print_table_row(2, "PHP_OPENCV_VERSION", PHP_OPENCV_VERSION);
php_info_print_table_row(2, "Supports", PHP_OPENCV_SOURCE_URL);
php_info_print_table_row(2, "OpenCV RUN PATH", PHP_OPENCV_OPENCV_PATH);
php_info_print_table_end();
DISPLAY_INI_ENTRIES();
}
/* }}} */
+12 -7
Ver Arquivo
@@ -27,6 +27,11 @@ extern zend_module_entry opencv_module_entry;
#define PHP_OPENCV_VERSION "0.1.0"
#define PHP_OPENCV_SOURCE_URL "https://github.com/midoks/opencv"
#ifndef PHP_OPENCV_OPENCV_PATH
#define PHP_OPENCV_OPENCV_PATH "/usr/local"
#endif
#ifdef PHP_WIN32
# define PHP_OPENCV_API __declspec(dllexport)
#elif defined(__GNUC__) && __GNUC__ >= 4
@@ -40,8 +45,7 @@ extern zend_module_entry opencv_module_entry;
#endif
//debug
#define opencv_debug
#ifdef opencv_debug
#ifdef OPENCV_DEBUG
#define opencv_show(format, args...) \
php_printf(format, ##args);
#else
@@ -65,18 +69,19 @@ extern zend_module_entry opencv_module_entry;
/*
Declare any global variables you may need between the BEGIN
and END macros here:
ZEND_BEGIN_MODULE_GLOBALS(opencv)
zend_long global_value;
char *global_string;
ZEND_END_MODULE_GLOBALS(opencv)
*/
ZEND_BEGIN_MODULE_GLOBALS(opencv)
char *root_path;
ZEND_END_MODULE_GLOBALS(opencv)
/* Always refer to the globals in your function as OPENCV_G(variable).
You are encouraged to rename these macros something shorter, see
examples in any other php module directory.
*/
#define OPENCV_G(v) ZEND_MODULE_GLOBALS_ACCESSOR(opencv, v)
PHPAPI ZEND_EXTERN_MODULE_GLOBALS(opencv)
#if defined(ZTS) && defined(COMPILE_DL_OPENCV)
ZEND_TSRMLS_CACHE_EXTERN()
+16
Ver Arquivo
@@ -0,0 +1,16 @@
#!/bin/sh
rm -rf php_opencv
rm -f opencv.tar.gz
wget -O opencv.tar.gz https://github.com/midoks/opencv/archive/master.tar.gz
tar -zxvf opencv.tar.gz
mv opencv-master php_opencv
cd php_opencv
/usr/local/php71/bin/phpize
./configure --with-php-config=/usr/local/php71/bin/php-config --with-opencv_d=yes
make && make install