zoukankan      html  css  js  c++  java
  • Ubuntu 上编译opencv_contrib模块for Android

    https://blog.csdn.net/ipfpm/article/details/81132144

    【ubuntu】Ubuntu中Android SDK下载跟配置 android24的版本

    (1)  安装ADNORID SDk环境

     https://developer.android.com/studio

    1.1 安装JAVA环境

    https://cloud.tencent.com/developer/article/1162527

    https://www.howtoing.com/how-to-install-java-with-apt-on-ubuntu-18-04

    OpenJDK 8

    Java 8是目前的长期支持版本,虽然公共维护在2019年1月结束,但仍然得到广泛支持。要安装OpenJDK 8,请执行以下命令:

    sudo apt install openjdk-8-jdk

    验证这是与安装

    java -version

    也可以只安装JRE,你可以通过执行sudo apt install openjdk-8-jre 。

    OpenJDK 10/11

    Ubuntu的存储库包含一个安装Java 10或11的软件包。在2018年9月之前,该软件包将安装OpenJDK 10.一旦Java 11发布,该软件包将安装Java 11。

    要安装OpenJDK 10/11,请执行以下命令:

    sudo apt install openjdk-11-jdk

    要仅安装JRE,请使用以下命令:

    sudo apt install openjdk-11-jre

    接下来,让我们看看如何安装Oracle的官方JDK和JRE。

    1.2 配置JAVA_HOME

    设置JAVA_HOME环境变量

    许多使用Java编写的程序使用JAVA_HOME环境变量来确定Java安装位置。

    要设置此环境变量,请首先确定Java的安装位置。使用update-alternatives命令:

    $ sudo update-alternatives --config java

    此命令显示Java的每个安装及其安装路径:

    There are 3 choices for the alternative java (providing /usr/bin/java).
    
      Selection    Path                                            Priority   Status
    ------------------------------------------------------------
    * 0            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1101      auto mode
      1            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1101      manual mode
      2            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode
      3            /usr/lib/jvm/java-8-oracle/jre/bin/java          1081      manual mode
    
    Press <enter> to keep the current choice[*], or type selection number:

    在这种情况下,安装路径如下:

    1. OpenJDK 11位于 /usr/lib/jvm/java-11-openjdk-amd64/bin/java.
    2. OpenJDK 8位于/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
    3. Oracle Java 8位于/usr/lib/jvm/java-8-oracle/jre/bin/java

    从您想要的安装中复制路径。然后使用nano或您喜欢的文本编辑器打开/etc/environment

    $ sudo nano /etc/environment

    在此文件的末尾,添加以下行,确保使用您自己复制的路径替换突出显示的路径:

    /etc/environment

    JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64/bin/java"

    修改此文件将为系统上的所有用户设置JAVA_HOME路径。

    保存文件并退出编辑器。

    现在重新加载此文件:

    $ source /etc/environment

    验证是否已设置环境变量:

    $ echo $JAVA_HOME

    您将看到刚刚设置的路径:

    /usr/lib/jvm/java-11-openjdk-amd64/bin/java

    其他用户需要执行命令source /etc/environment或注销并重新登录才能应用此设置。

    1.3 下载

    https://blog.csdn.net/opengl_es/article/details/80184519

    解压后,出现 tools 目录,将其放入一个空的 SDK 待安装目录下,开始安装。

    二、列出可安装组件包

    使用快捷键 CTRL + ALT + T 打开 Console 控制端,进入上面解压出来的 tools 目录下的 bin 目录,找到 sdkmanager ,

    执行如下命令

    ./sdkmanager --list ( ../android list sdk  已过时)

    三、安装组件包

    接下来,选择上面的 PATH 列内容进行安装,命令如下:

    $ ./sdkmanager "system-images;android-27;google_apis;x86"
    

    ./sdkmanager  "双引号中是上面的path"

    ./sdkmanager "build-tools;28.0.0"
    ./sdkmanager "ndk-bundle"
    ./sdkmanager "ndk;20.0.5594570"
    ./sdkmanager "platforms;android-28"
    ./sdkmanager "sources;android-28"
    ./sdkmanager "system-images;android-28;google_apis;x86_64"

    2 编译opencv以及opencv_contrib

    https://www.cnblogs.com/klchang/p/7563494.html

    本文以编译opencv 3.3.0 和 opencv_contrib 3.3.0为例,系统为 Linux x64 (Fedora 21),具体步骤如下:

    1. 下载 Source code zip 压缩包

    从下面网址,选择 opencv 3.3.0 Source code 下载 
    https://github.com/opencv/opencv/releases

    从下面网址,选择下载与 opencv 3.3.0 对应的 opencv_contrib 3.3.0 
    https://github.com/opencv/opencv_contrib/releases

    注意:opencvopencv_contrib 版本必须保持一致,否则可能会出现编译错误。

     

    2. 下载 build-opencv-for-android 开源代码

    $ cd /mnt/work
    $ git clone https://github.com/tzutalin/build-opencv-for-android.git
    $ cd build-opencv-for-android

     

    3. 解压源码包并重命名

    opencv-3.3.0.zip 和 opencv_contrib-3.3.0.zip 都解压到下载的build-opencv-for-android 开源代码 所在目录 /mnt/work/build-opencv-for-android 

    $ unzip opencv-3.3.0.zip -d /mnt/work/build-opencv-for-android
    $ unzip opencv_contrib-3.3.0.zip -d /mnt/work/build-opencv-for-android
    $ cd /mnt/work/build-opencv-for-android
    $ mv opencv-3.3.0 opencv
    $ mv opencv_contrib-3.3.0 opencv_contrib

     

    4. 修改 build-opencv-for-android 开源代码中 build-android-opencv.sh

    修改内容如下:

    修改 第 行代码:

    declare -a ANDROID_ABI_LIST=("x86" "x86_64" "armeabi" "arm64-v8a" "armeabi-v7a" "mips" "mips64")

    declare -a ANDROID_ABI_LIST=("armeabi-v7a")

    3 错误

    opencv_contrib/modules/xfeatures2d/src/boostdesc.cpp:653:20: fatal error: 'boostdesc_bgm.i' file not found

    下载这些文件

    xfeatures2d/boostdesc: Download failed: 7;"Couldn't connect to server"

    下载 对应的文件

    放到

    build-opencv-for-androidopencv_contribmodulesxfeatures2dcmake

    build-opencv-for-androidopencv_contribmodulesxfeatures2dsrc

    5. 执行脚本 build-android-opencv.sh

    $ ./build-android-opencv.sh /mnt/work/android/android-sdk-linux/ndk-bundle

    注:build-android-opencv.sh脚本的通用的执行命令格式为“./build-android-opencv.sh [NDK_ROOT]”,其中,参数NDK_ROOT是可选的,表示Android Native Development Kit (NDK) 顶层目录,如果没有提供,则会试图寻找环境变量 ANDROID_NDK

     

    6 在Android中使用

    在mk文件中加入

    # OpenCV
    OPENCV_CAMERA_MODULES:=on
    OPENCV_INSTALL_MODULES:=on
    OPENCV_LIB_TYPE:=STATIC
    #include D:/projectAndroidOpenCV-2.4.10-android-sdksdk ativejniOpenCV.mk
    #include /software/OpenCV-android-sdk/sdk/native/jni/OpenCV.mk #without opencv_contrib
    include /software/build-opencv-for-android/android_opencv/opencv/sdk/native/jni/OpenCV.mk #with opencv_contrib

    7 问题2

    terminate called after throwing an instance of 'cv::Exception'
    what(): OpenCV(3.4.3-dev) /home/zhourui/Software/opencv_contrib/modules/xfeatures2d/src/sift.cpp:1205: error: (-213:The function/feature is not implemented) This algorithm is patented and is excluded in this configuration; Set OPENCV_ENABLE_NONFREE CMake option and rebuild the library in function 'create'

    https://zhuanlan.zhihu.com/p/48854990

     cmake -DOPENCV_EXTRA_MODULES_PATH=<opencv_contrib>/modules -DOPENCV_ENABLE_NONFREE=ON

  • 相关阅读:
    Ubuntu20.04更换软件源
    使用kubeadm安装k8s1.19版本之系统基础环境配置&k8s集群初始化(二)
    k8s如何删除处于terminating状态的ns资源
    k8s如何强制删除pod&pv&pvc和ns&namespace方法
    C语言中的有符号数和无符号整形数转换
    互联网-架构演进
    结合redis使token失效
    有一种爱叫做放手
    js 读取上传的json文件内容
    使用spark-md5获取文件的MD5值
  • 原文地址:https://www.cnblogs.com/adong7639/p/11422666.html
Copyright © 2011-2022 走看看