简体   繁体   English

如何在 Android(使用 NDK)和 ARM 处理器上使用 OpenCV C++ 应用程序

[英]How to use OpenCV C++ applications on Android (using NDK) & ARM processor

I want to change my existing OpenCV applications which were written in cpp for desktop version (X_86) processor to an ARM (processor) Architecture .我想将我现有的 OpenCV 应用程序更改为 ARM(处理器)架构,这些应用程序是用 cpp 编写的桌面版 (X_86) 处理器。 At the initial stage I am not interested to change my cpp applications to java and compile it on Android Studio IDE.在初始阶段,我没有兴趣将我的 cpp 应用程序更改为 java 并在 Android Studio IDE 上编译它。 Before developing an Android app I want to benchmark the ARM processor.在开发 Android 应用程序之前,我想对 ARM 处理器进行基准测试。 Whether it is capable to run my OpenCV applications, how much time it takes to process the video frames etc. So retaining my cpp applications as it is, I want to cross compile it for ARM Arch.它是否能够运行我的 OpenCV 应用程序,处理视频帧需要多少时间等等。所以保留我的 cpp 应用程序,我想为 ARM Arch 交叉编译它。 and run it on Android Device (without GUI).并在 Android 设备上运行它(没有 GUI)。 how to do this?这该怎么做?

I have followed many links and blogs to compile and build opencv cpp applications for ARM processor.我已经按照许多链接和博客为 ARM 处理器编译和构建 opencv cpp 应用程序。 One good link is一个好的链接是

https://www.learnopencv.com/install-opencv-on-android-tiny-and-optimized/ https://www.learnopencv.com/install-opencv-on-android-tiny-and-optimized/

all credits goes to above mentioned blog author.所有学分都归于上述博客作者。

This link is very good for beginners, till step no 8 it is very clearly written and I could follow it but Step no 9 onwards it is not properly written about where to keep demo application,link,include libraries.这个链接非常适合初学者,直到第 8 步,它写得非常清楚,我可以遵循它,但是从第 9 步开始,它没有正确写出在哪里保存演示应用程序、链接、包含库。 It used to give an error *.hpp not found.它曾经给出错误 *.hpp not found。 I tried all the ways but not able to solve.我尝试了所有方法但无法解决。 Then I thought that let me first build sample applications comes with opencv sdk.然后我想让我首先构建带有opencv sdk的示例应用程序。 my approach is as shown below.我的方法如下所示。

Build Set-up used使用的构建设置

a.一种。 Ubuntu 14.04 and installed all the packages mentioned in https://www.learnopencv.com/install-opencv3-on-ubuntu/ link. Ubuntu 14.04 并安装了https://www.learnopencv.com/install-opencv3-on-ubuntu/链接中提到的所有软件包。

b.Download and install NDK r14b下载并安装 NDK r14b

c. C。 Download and install OpenCV 3.4.1下载并安装 OpenCV 3.4.1

d. d. Target armeabi-v7a (ARM based) & Android API 23目标 armeabi-v7a(基于 ARM)和 Android API 23

Steps 1-4 are required for first time setup首次设置需要步骤 1-4

Step 1 : Download and Setup NDK unzip it and go to NDK folder第 1 步:下载并安装 NDK解压并进入 NDK 文件夹

$ ./build/tools/make_standalone_toolchain.py \\ --arch arm \\ --api 23 \\ --install-dir /tmp/my-android-toolchain $ ./build/tools/make_standalone_toolchain.py \\ --arch arm \\ --api 23 \\ --install-dir /tmp/my-android-toolchain

Step 2 : Setup ANDROID_NDK Path第 2 步:设置 ANDROID_NDK 路径

$ export ANDROID_STANDALONE_TOOLCHAIN=/tmp/my-android-toolchain/ $ export ANDROID_STANDALONE_TOOLCHAIN=/tmp/my-android-toolchain/

Step 3 Download and Install OpenCV 3.4.1步骤 3 下载并安装 OpenCV 3.4.1

$ cd opencv/ $ cd opencv/

$ mkdir build $ mkdir 构建

$ cd build $ cd 构建

$ cmake -DCMAKE_TOOLCHAIN_FILE=../platforms/android/android.toolchain.cmake -DANDROID_STL=gnustl_shared -DBUILD_EXAMPLES=ON -DANDROID_NATIVE_API_LEVEL=23 .. $ cmake -DCMAKE_TOOLCHAIN_FILE=../platforms/android/android.toolchain.cmake -DANDROID_STL=gnustl_shared -DBUILD_EXAMPLES=ON -DANDROID_NATIVE_API_LEVEL=23 ..

( -DBUILD_EXAMPLES=ON is important to build the samples). -DBUILD_EXAMPLES=ON对构建示例很重要)。

$ make -j4 $ make -j4

Step 4 Neon and VFPV3 optimizations (optional)第 4 步 Neon 和 VFPV3 优化(可选)

For ARM based devices, optimization i usually enable using: NEON VFPV3 Check out preamble of platforms/android/android.toolchain.cmake for various configuration options.对于基于 ARM 的设备,我通常使用以下方法启用优化:NEON VFPV3 查看平台/android/android.toolchain.cmake 的序言以了解各种配置选项。

Step 5 Building your code Go to Working Diretory第 5 步构建您的代码转到工作目录

$ cd path-to-opencv $ cd path-to-opencv

Place your newly created cpp file in opencv/samples/cpp/将新创建的 cpp 文件放在 opencv/samples/cpp/

$ cd build/ $ cd 构建/

$ cmake -DCMAKE_TOOLCHAIN_FILE=../platforms/android/android.toolchain.cmake -DANDROID_STL=gnustl_shared -DBUILD_EXAMPLES=ON -DANDROID_NATIVE_API_LEVEL=23 .. $ cmake -DCMAKE_TOOLCHAIN_FILE=../platforms/android/android.toolchain.cmake -DANDROID_STL=gnustl_shared -DBUILD_EXAMPLES=ON -DANDROID_NATIVE_API_LEVEL=23 ..

$ make -j4 $ make -j4

Step 6 Copying on android and running第6步在android上复制并运行

$ cd path-to-opencv $ cd path-to-opencv

$ adb push build/bin/example_cpp_your_program /system/xbin/ $ adb push build/bin/example_cpp_your_program /system/xbin/

$ adb push build/libs/armeabi-v7a/libgnustl_shared.so /system/lib/ ****(If Required)**** $ adb push build/libs/armeabi-v7a/libgnustl_shared.so /system/lib/ ****(如果需要)****

(for me while executing cpp binary it said library not found to link so) (对我来说,在执行 cpp 二进制文件时,它说没有找到链接的库)

$ adb shell $亚行外壳

$ cd /system/xbin/ $ cd /system/xbin/

$ ./example_cpp_your_program $ ./example_cpp_your_program

This method perfectly worked on my Android device without using Android Studio IDE.这种方法在我的 Android 设备上完美运行,无需使用 Android Studio IDE。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM