From 42b763d19111872e62deafdebbddb3b69ebfe39d Mon Sep 17 00:00:00 2001 From: Jason Xun Xu Date: Sun, 25 Jan 2015 17:16:39 -0500 Subject: [PATCH 1/4] + Added working OpenCV recipe. --- .../opencv/patches/p4a_build-2.4.10.1.patch | 44 ++++++++++++++ recipes/opencv/recipe.sh | 57 +++++++++++++++++++ 2 files changed, 101 insertions(+) create mode 100644 recipes/opencv/patches/p4a_build-2.4.10.1.patch create mode 100644 recipes/opencv/recipe.sh diff --git a/recipes/opencv/patches/p4a_build-2.4.10.1.patch b/recipes/opencv/patches/p4a_build-2.4.10.1.patch new file mode 100644 index 0000000000..819dfa0ab7 --- /dev/null +++ b/recipes/opencv/patches/p4a_build-2.4.10.1.patch @@ -0,0 +1,44 @@ +diff --git a/cmake/OpenCVDetectPython.cmake b/cmake/OpenCVDetectPython.cmake +index 31c2c1e..c890917 100644 +--- a/cmake/OpenCVDetectPython.cmake ++++ b/cmake/OpenCVDetectPython.cmake +@@ -36,7 +36,7 @@ if(PYTHON_EXECUTABLE) + unset(PYTHON_VERSION_FULL) + endif() + +- if(NOT ANDROID AND NOT IOS) ++ if(P4A OR NOT ANDROID AND NOT IOS) + ocv_check_environment_variables(PYTHON_LIBRARY PYTHON_INCLUDE_DIR) + if(CMAKE_CROSSCOMPILING) + find_host_package(PythonLibs ${PYTHON_VERSION_MAJOR_MINOR}) +@@ -51,7 +51,7 @@ if(PYTHON_EXECUTABLE) + endif() + endif() + +- if(NOT ANDROID AND NOT IOS) ++ if(P4A OR NOT ANDROID AND NOT IOS) + if(CMAKE_HOST_UNIX) + execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "from distutils.sysconfig import *; print get_python_lib()" + RESULT_VARIABLE PYTHON_CVPY_PROCESS +@@ -117,7 +117,7 @@ if(PYTHON_EXECUTABLE) + OUTPUT_STRIP_TRAILING_WHITESPACE) + endif() + endif() +- endif(NOT ANDROID AND NOT IOS) ++ endif(P4A OR NOT ANDROID AND NOT IOS) + + if(BUILD_DOCS) + find_host_program(SPHINX_BUILD sphinx-build) +diff --git a/modules/python/CMakeLists.txt b/modules/python/CMakeLists.txt +index 3c0f2fd..7ba234a 100644 +--- a/modules/python/CMakeLists.txt ++++ b/modules/python/CMakeLists.txt +@@ -5,7 +5,7 @@ + if(WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug") + ocv_module_disable(python) + endif() +-if(ANDROID OR IOS OR NOT PYTHONLIBS_FOUND OR NOT PYTHON_USE_NUMPY) ++if(ANDROID AND NOT P4A OR IOS OR NOT PYTHONLIBS_FOUND OR NOT PYTHON_USE_NUMPY) + ocv_module_disable(python) + endif() + diff --git a/recipes/opencv/recipe.sh b/recipes/opencv/recipe.sh new file mode 100644 index 0000000000..5ad4103127 --- /dev/null +++ b/recipes/opencv/recipe.sh @@ -0,0 +1,57 @@ +#!/bin/bash + +VERSION_opencv=${VERSION_opencv:-2.4.10.1} +URL_opencv=https://github.com/Itseez/opencv/archive/$VERSION_opencv.zip + +DEPS_opencv=(numpy python) +MD5_opencv=e6667a39c33aa2c63defb9beb94e84ca +BUILD_opencv=$BUILD_PATH/opencv/$(get_directory $URL_opencv) +RECIPE_opencv=$RECIPES_PATH/opencv + +_cvsrc=$BUILD_opencv +_cvbuild=$BUILD_opencv/build_p4a +_pyroot=$(dirname `dirname $HOSTPYTHON`) + +function prebuild_opencv() { + cd $BUILD_opencv + + if [ -f .patched ]; then + return + fi + + try patch -p1 < $RECIPE_opencv/patches/p4a_build-2.4.10.1.patch + touch .patched +} + +function shouldbuild_opencv() { + if [ -f "$SITEPACKAGES_PATH/cv2.so" ]; then + DO_BUILD=0 + fi +} + +function build_opencv() { + + try mkdir -p $_cvbuild + cd $_cvbuild + + push_arm + + #try set > opencv_p4y_env.log # export env vars for debugging + + export ANDROID_NDK=$ANDROIDNDK + try cmake -DP4A=ON -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON -DCMAKE_TOOLCHAIN_FILE=$_cvsrc/platforms/android/android.toolchain.cmake \ + -DPYTHON_INCLUDE_PATH=$_pyroot/include/python2.7 -DPYTHON_LIBRARY=$_pyroot/lib/libpython2.7.so \ + -DPYTHON_NUMPY_INCLUDE_DIR=$SITEPACKAGES_PATH/numpy/core/include \ + -DANDROID_EXECUTABLE=$ANDROIDSDK/tools/android \ + -DBUILD_TESTS=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_EXAMPLES=OFF -DBUILD_ANDROID_EXAMPLES=OFF \ + -DPYTHON_PACKAGES_PATH=$SITEPACKAGES_PATH \ + $_cvsrc + try make -j8 opencv_python + try cmake -DCOMPONENT=python -P ./cmake_install.cmake + + pop_arm +} + +function postbuild_opencv() { + true +} From 50f66427c60cc2b1f74ef1ab4cfee77575075ebe Mon Sep 17 00:00:00 2001 From: Jason Xun Xu Date: Sun, 25 Jan 2015 17:23:42 -0500 Subject: [PATCH 2/4] * Formatted code, removed debugging command. --- recipes/opencv/recipe.sh | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/recipes/opencv/recipe.sh b/recipes/opencv/recipe.sh index 5ad4103127..186c85dc8f 100644 --- a/recipes/opencv/recipe.sh +++ b/recipes/opencv/recipe.sh @@ -31,23 +31,21 @@ function shouldbuild_opencv() { function build_opencv() { - try mkdir -p $_cvbuild - cd $_cvbuild + try mkdir -p $_cvbuild + cd $_cvbuild push_arm - #try set > opencv_p4y_env.log # export env vars for debugging - - export ANDROID_NDK=$ANDROIDNDK - try cmake -DP4A=ON -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON -DCMAKE_TOOLCHAIN_FILE=$_cvsrc/platforms/android/android.toolchain.cmake \ - -DPYTHON_INCLUDE_PATH=$_pyroot/include/python2.7 -DPYTHON_LIBRARY=$_pyroot/lib/libpython2.7.so \ - -DPYTHON_NUMPY_INCLUDE_DIR=$SITEPACKAGES_PATH/numpy/core/include \ - -DANDROID_EXECUTABLE=$ANDROIDSDK/tools/android \ - -DBUILD_TESTS=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_EXAMPLES=OFF -DBUILD_ANDROID_EXAMPLES=OFF \ - -DPYTHON_PACKAGES_PATH=$SITEPACKAGES_PATH \ - $_cvsrc - try make -j8 opencv_python - try cmake -DCOMPONENT=python -P ./cmake_install.cmake + export ANDROID_NDK=$ANDROIDNDK + try cmake -DP4A=ON -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON -DCMAKE_TOOLCHAIN_FILE=$_cvsrc/platforms/android/android.toolchain.cmake \ + -DPYTHON_INCLUDE_PATH=$_pyroot/include/python2.7 -DPYTHON_LIBRARY=$_pyroot/lib/libpython2.7.so \ + -DPYTHON_NUMPY_INCLUDE_DIR=$SITEPACKAGES_PATH/numpy/core/include \ + -DANDROID_EXECUTABLE=$ANDROIDSDK/tools/android \ + -DBUILD_TESTS=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_EXAMPLES=OFF -DBUILD_ANDROID_EXAMPLES=OFF \ + -DPYTHON_PACKAGES_PATH=$SITEPACKAGES_PATH \ + $_cvsrc + try make -j8 opencv_python + try cmake -DCOMPONENT=python -P ./cmake_install.cmake pop_arm } From 61b0034365a75026ccb32cb07b0657af2fcbe2b4 Mon Sep 17 00:00:00 2001 From: Jason Xun Xu Date: Mon, 26 Jan 2015 19:03:23 -0800 Subject: [PATCH 3/4] + Automatic select Android ABI. - Removed unnecessary RPATH build option. --- recipes/opencv/recipe.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recipes/opencv/recipe.sh b/recipes/opencv/recipe.sh index 186c85dc8f..e275be7ff7 100644 --- a/recipes/opencv/recipe.sh +++ b/recipes/opencv/recipe.sh @@ -37,7 +37,7 @@ function build_opencv() { push_arm export ANDROID_NDK=$ANDROIDNDK - try cmake -DP4A=ON -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON -DCMAKE_TOOLCHAIN_FILE=$_cvsrc/platforms/android/android.toolchain.cmake \ + try cmake -DP4A=ON -DANDROID_ABI=$ARCH -DCMAKE_TOOLCHAIN_FILE=$_cvsrc/platforms/android/android.toolchain.cmake \ -DPYTHON_INCLUDE_PATH=$_pyroot/include/python2.7 -DPYTHON_LIBRARY=$_pyroot/lib/libpython2.7.so \ -DPYTHON_NUMPY_INCLUDE_DIR=$SITEPACKAGES_PATH/numpy/core/include \ -DANDROID_EXECUTABLE=$ANDROIDSDK/tools/android \ From 33c5b7765f5172760ebb9aba9c26ee94c1d75c60 Mon Sep 17 00:00:00 2001 From: Jason Xun Xu Date: Thu, 29 Jan 2015 01:33:37 -0800 Subject: [PATCH 4/4] + Support Android native camera. --- .../opencv/patches/p4a_build-2.4.10.1.patch | 21 +++++++++++++++++++ recipes/opencv/recipe.sh | 2 ++ 2 files changed, 23 insertions(+) diff --git a/recipes/opencv/patches/p4a_build-2.4.10.1.patch b/recipes/opencv/patches/p4a_build-2.4.10.1.patch index 819dfa0ab7..0061fae6a3 100644 --- a/recipes/opencv/patches/p4a_build-2.4.10.1.patch +++ b/recipes/opencv/patches/p4a_build-2.4.10.1.patch @@ -42,3 +42,24 @@ index 3c0f2fd..7ba234a 100644 ocv_module_disable(python) endif() +diff --git a/modules/androidcamera/src/camera_activity.cpp b/modules/androidcamera/src/camera_activity.cpp +index 84db3e1..4222526 100644 +--- a/modules/androidcamera/src/camera_activity.cpp ++++ b/modules/androidcamera/src/camera_activity.cpp +@@ -7,6 +7,7 @@ + #include + #include + #include ++#include + #include + #include "camera_activity.hpp" + #include "camera_wrapper.h" +@@ -342,6 +343,8 @@ std::string CameraWrapperConnector::getPathLibFolder() + + char* pathEnd = strrchr(pathBegin, '/'); + pathEnd[1] = 0; ++ pathBegin = realpath((std::string(pathBegin)+"../../../../lib").c_str(), lineBuf); ++ pathBegin = strcat(pathBegin, "/"); + + LOGD("Libraries folder found: %s", pathBegin); + diff --git a/recipes/opencv/recipe.sh b/recipes/opencv/recipe.sh index e275be7ff7..8872515a38 100644 --- a/recipes/opencv/recipe.sh +++ b/recipes/opencv/recipe.sh @@ -35,6 +35,7 @@ function build_opencv() { cd $_cvbuild push_arm + #try set > opencv_p4y_env.log # check env vars for debugging export ANDROID_NDK=$ANDROIDNDK try cmake -DP4A=ON -DANDROID_ABI=$ARCH -DCMAKE_TOOLCHAIN_FILE=$_cvsrc/platforms/android/android.toolchain.cmake \ @@ -46,6 +47,7 @@ function build_opencv() { $_cvsrc try make -j8 opencv_python try cmake -DCOMPONENT=python -P ./cmake_install.cmake + try cp -a $_cvbuild/lib/$ARCH/lib*.so $LIBS_PATH pop_arm }