美文网首页
NCNN官方例子操作流程

NCNN官方例子操作流程

作者: 一个摸鱼AI喵 | 来源:发表于2021-10-05 14:07 被阅读0次

    NCNN官方:

    Tencent/ncnn: ncnn is a high-performance neural network inference framework optimized for the mobile platform (github.com)

    官方例子

    1.安装Android Studio

    默认安装,修改地址到D盘,若遇到unable to access android sdk add-on list 点击cancel默认安装即可

    1.1打开Android Studio,下载相关包

    File-setting-Appearance&Behavior-System Setting-Android SDK

    Android SDK Locations地址先修改

    image-20210611173454493.png

    注:如果一开始忘记修改地址,已经下载包后更改地址方法如下:

    • ndk的项目从C:\Users\jerry\AppData\Local\Android\Sdk\ndk剪切到D:\Android\Sdk\ndk (不然下一步会报错,缺少内容)

    • File-Other Settings-Default Project Structure,修改Android SDK location跟JDK location

    [图片上传中...(image-20210611173454493.png-cc7d5b-1633485004027-0)]

    SDK Platforms选择:

    • Android API 30 # 30 为安卓最新版11.0

    • Android 7.0(Nougat)

    SDK tools选择:

    image-20210611173204674.png

    然后勾上Show Package Details

    • NDK选择21.3.6528147

    • Cmake选择3.10.2.4988404

    2.下载官方例子

    git clone https://github.com/nihui/ncnn-android-scrfd
    

    3.查看app/src/main/jni/CMakeLists.txt

    project(scrfdncnn)
    
    cmake_minimum_required(VERSION 3.10)
    
    set(OpenCV_DIR ${CMAKE_SOURCE_DIR}/opencv-mobile-4.5.1-android/sdk/native/jni)
    find_package(OpenCV REQUIRED core imgproc)
    
    set(ncnn_DIR ${CMAKE_SOURCE_DIR}/ncnn-20210525-android-vulkan/${ANDROID_ABI}/lib/cmake/ncnn)
    find_package(ncnn REQUIRED)
    
    add_library(scrfdncnn SHARED scrfdncnn.cpp scrfd.cpp ndkcamera.cpp)
    
    target_link_libraries(scrfdncnn ncnn ${OpenCV_LIBS} camera2ndk mediandk)
    

    官方配置:

    • opencv-mobile-4.5.1-android

    • ncnn-20210525-android-vulkan

    如果没有此文件,自己创建:

    • 项目名等要改变;

    • add_library()内的文件根据jni里修改,所有cpp文件都要写进去

    • 在app文件夹下建立build文件夹,并进入进行cmake

    cd app && mkdir build
    cd build && cmake ..
    

    4.下载ncnn-android-vulkan.zip

    根据CMakeLists.txt,下载ncnn-20210525-android-vulkan

    下载地址为:https://github.com/Tencent/ncnn/releases

    编译版本,默认配置,android-ndk-r21d,xcode 12.2,ubuntu-16.04,ubuntu-18.04,ubuntu-20.04,vs2017,vs2019

    5.下载opencv-mobile-XYZ-android.zip

    根据CMakeLists.txt,下载opencv-mobile-4.5.1-android

    下载地址为:https://github.com/nihui/opencv-mobile

    可下载其他版本,但CMakeLists.txt的配置信息需要更改,

    注意:(armeabi-v7a, arm64-v8a, x86, x86_64) build with ndk r21d and android api 24,即在build.gradle文件中设置minSdkVersion 不能小于24.即设备安卓系统必须7以上, 安卓6不能使用.

    6.用andriod Studio打开项目

    6.1 File-Sync Project with Gradle Files 进行文件检查

    6.2文件检查没问题,Build-Make Project,生成项目

    6.2- 如果只编译C++代码

    image-20210801164153193.png

    在2020.3的版本为:

    image-20210801231636112.png

    6.3Run - run app

    • 如果用实际手机,手机需连上电脑后,打开开发者模式

    • 如果用虚拟安卓机,设置:

      设置虚拟机保存地址,默认在C:\Users\用户名.android/avd,其中安卓包里有一个Pixel_2_API_30.ini为指向文件,(如果未设置环境变量,只移动安卓包,那这个文件应该保留在这里).设置环境变量,新建环境变量的系统变量,变量名为“ANDROID_AVD_HOME”,变量值为存模拟器的地址

    下拉,选择Open AVD manager,选择Create Virtual Device,选择分辨率跟安卓版本,

    image-20210611174752826.png image-20210611175011432.png

    如果模拟器,需要用到摄像头,在Android Virtual Device Manager选择对应的模拟器,修改-Show Advanced Settings-Camera,Front与Back都选择Webcam0,即电脑的摄像头.

    image-20210611184344702.png

    7.app命名

    直接在文件AndroidManifest.xml中的android:label=”@string/app_name”去修改即可,直接去修改app_name中的名字,中、英文都是可以的;

    img

    注意:项目的versionName、versionCode若需要修改,可以直接去build.gradle中去修改,然后重新编译即可,不要去清单文件AnddroidManifest.xml中修改,因为那样是没有任何作用的。

    8.app图标

    AndroidMenifest.xml中指定了该APP的图标:android:icon="@mipmap/ic_launcher"

    img

    mipmap/ic_launcher”对应了“应用程序名/app/src/main/res”中的多个以“mipmap”开头的文件夹,如图

    img

    2.1 hdpi、mdpi、xhdpi、xxhdpi和xxxhdpi的区别 以上五个文件夹对应了不同屏幕密度下使用的图标。屏幕密度简称DPI,其全称为“Dots Per Inch”,表示“每英寸的像素点”,该值越大显示的图标则越清晰。

    anydpi-v26 待整理;

    hdpi表示屏幕密度是160;

    hdpi表示屏幕密度是240;

    xhdpi表示屏幕密度是320;

    xxhdpi表示屏幕密度是480;

    xxxhdpi表示屏幕密度是640。

    不同文件夹下,保存了不同屏幕密度的图标;可以通过两种方式修改APP的图标,一种是修改图标资源;另一种是修改图标资源值。

    2.2 通过修改 (图标资源)实现图标的修改 将APP的新图标名修改为“ic_launcher.png”,之后将其拷贝到“1.1 hdpi、mdpi、xhdpi、xxhdpi和xxxhdpi的区别”中提到的5个文件夹中,覆盖之前的“ic_launcher.png”文件,之后运行程序即可实现APP图标的修改。

    <实际操作没效果>

    2.3 通过修改 (图标资源值) 实现图标的修改 在“1 修改APP图标”中提到的AndroidMenifest.xml中的“android:icon”指定的是APP图标资源,可以将其修改为其它值。例如,将APP新图标拷贝到drawable文件夹下,并将AndroidMenifest.xml修改

    android:icon="@drawable/ic_launcher"

    <实际操作有效>

    2.4 修改anydpi-v26 待整理;

    9.build.gradle设置

    compileSdkVersion: 编译版本,真正决定代码是否能编译的关键,比如设置成23,就无法使用httpclient,低版本编译出来的apk可以在高版本上运行,因为向下兼容,高版本编译的apk运行到低版本,minSdkVersion的也没有问题,因为编译时就会考虑兼容性,低版本会有v4,v7这些兼容包

    minSdkVersion: 最小支持版本,比如设置成15,就无法在低于15的版本运行

    targetSdkVersion: 只是一个标示,如果targetSdkVersion与目标设备的API版本相同时,运行效率可能会高一些,编译阶段没有实质性作用

    buildToolsVersion: 编译工具的版本,一般设置为最新即可

    兼容包得版本一般要配置跟编译版本一致,比如编译版本配置为23,v7兼容包也要配置为23,否则会出错

    cmake设置

     externalNativeBuild {
             cmake {
    //            cppFlags ""
                cppFlags "-std=c++11 -frtti -fexceptions"  //设置标准跟是否支持try跟exceptions
                arguments "-DANDROID_STL=c++_static"  //支持STL静态库 ,默认
    //          arguments "-DANDROID_STL=c++_shared"  //支持STL动态库
                }
            }
    

    ndk编译版本设置

    为生成的so文件支持平台.会存放在不同平台文件夹中

        sourceSets {
            main {
                jniLibs.srcDirs = ['libs']   //寻找库文件地址添加进library
            }
        }
    

    相关文章

      网友评论

          本文标题:NCNN官方例子操作流程

          本文链接:https://www.haomeiwen.com/subject/nqnnnltx.html