大部分完成,细节再调节
Esse commit está contido em:
+3
-1
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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()
|
||||
|
||||
@@ -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
|
||||
Referência em uma Nova Issue
Bloquear um usuário