Opencv 引入 Android / linux

1.CMakeLists.txt 引入动态Opencv库 和 静态 NCNN库

cmake_minimum_required(VERSION 3.4.1)

## add ncnn prebuilt 0413
set(ncnn_path D:/scripts/ocr_android/ncnn_0413)
include_directories(${ncnn_path}/include/ncnn)
link_directories(${ncnn_path}/armeabi-v7a)
set(ncnn_lib ${ncnn_path}/armeabi-v7a/libncnn.a)
add_library (ncnn STATIC IMPORTED)
set_target_properties(ncnn PROPERTIES IMPORTED_LOCATION ${ncnn_lib})

# add opencv
set(OpenCV_DIR D:/scripts/ocr_android/opencv_release_armeabi/build)
find_package(OpenCV REQUIRED)

# openmp
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fopenmp")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fopenmp")

add_library( # Sets the name of the library.
        native-lib
        SHARED
        native-lib.cpp model.cpp)

find_library(
        log-lib
        log
        android)

target_link_libraries( # Specifies the target library.
        native-lib
        ncnn
        ${OpenCV_LIBS}
        android
        jnigraphics
        ${log-lib})

 

Opencv4.1 & NDK21b

 

2.Android.mk 动态导入 Opencv 和 Ncnn

# Android.mk必须以LOCAL_PATH开头,注释#除外

# 设置工作目录,而my-dir则会返回Android.mk文件所在的目录


LOCAL_PATH := $(call my-dir)

OpenCV_BASE = ../libraries/OpenCV-android-sdk
NCNN_BASE = ../libraries/ncnn-android-lib

# 借助CLEAR_VARS变量清除除LOCAL_PATH外的所有LOCAL_<name>变量

include $(CLEAR_VARS)
LOCAL_MODULE := ncnn
LOCAL_SRC_FILES := $(NCNN_BASE)/arm64-v8a/libncnn.a
include $(PREBUILT_STATIC_LIBRARY)


include $(CLEAR_VARS)
OPENCV_INSTALL_MODULES:=on
OPENCV_LIB_TYPE=SHARED
include $(OpenCV_BASE)/sdk/native/jni/OpenCV.mk



# 设置模块的名称,即编译出来.so文件名
# 注,要和上述步骤中build.gradle中NDK节点设置的名字相同


LOCAL_MODULE := libFaceInterface


LOCAL_C_INCLUDES += $(OpenCV_BASE)/sdk/native/jni/include
LOCAL_C_INCLUDES += $(NCNN_BASE)/include/ncnn


LOCAL_STATIC_LIBRARIES += ncnn


LOCAL_CFLAGS := -O2 -fvisibility=hidden -fomit-frame-pointer -fstrict-aliasing -ffunction-sections -fdata-sections -ffast-math
LOCAL_CPPFLAGS := -O2 -fvisibility=hidden -fvisibility-inlines-hidden -fomit-frame-pointer -fstrict-aliasing -ffunction-sections -fdata-sections -ffast-math
LOCAL_LDFLAGS += -Wl,--gc-sections

LOCAL_CFLAGS += -fopenmp
LOCAL_CPPFLAGS += -fopenmp
LOCAL_LDFLAGS += -fopenmp



LOCAL_SRC_FILES := com_example_demo_SUANFA.cpp abstractFace.cpp Base64.cpp extractFaceFeatures.cpp face_detect.cpp factoryProcess.cpp image_quality_util.cpp libFaceAPI.cpp resAmFace.cpp


LOCAL_LDLIBS :=  -landroid -llog -ldl -lz 

# 必须在文件结尾定义编译类型,指定生成的静态库或者共享库在运行时依赖的共享库模块列表。

# BUILD_SHARED_LIBRARY 共享库,供java或者其他共享库调用

# BUILD_STATIC_LIBRARY 静态库,供共享库调用,不能直接被java调用

include $(BUILD_SHARED_LIBRARY)

Android静态导入 Opencv & NCNN

# Android.mk必须以LOCAL_PATH开头,注释#除外

# 设置工作目录,而my-dir则会返回Android.mk文件所在的目录


LOCAL_PATH := $(call my-dir)

OpenCV_BASE = ../libraries/OpenCV-android-sdk
NCNN_BASE = ../libraries/ncnn-android-lib

# 借助CLEAR_VARS变量清除除LOCAL_PATH外的所有LOCAL_<name>变量


include $(CLEAR_VARS)
LOCAL_MODULE := ncnn
LOCAL_SRC_FILES := $(NCNN_BASE)/arm64-v8a/libncnn.a
include $(PREBUILT_STATIC_LIBRARY)


include $(CLEAR_VARS)
OPENCV_INSTALL_MODULES:=on
OPENCV_LIB_TYPE := STATIC
include $(OpenCV_BASE)/sdk/native/jni/OpenCV.mk


# 设置模块的名称,即编译出来.so文件名
# 注,要和上述步骤中build.gradle中NDK节点设置的名字相同

LOCAL_MODULE := libFaceInterface


LOCAL_C_INCLUDES += $(OpenCV_BASE)/sdk/native/jni/include
LOCAL_C_INCLUDES += $(NCNN_BASE)/include/ncnn


LOCAL_STATIC_LIBRARIES += ncnn


LOCAL_CFLAGS := -O2 -fvisibility=hidden -fomit-frame-pointer -fstrict-aliasing -ffunction-sections -fdata-sections -ffast-math
LOCAL_CPPFLAGS := -O2 -fvisibility=hidden -fvisibility-inlines-hidden -fomit-frame-pointer -fstrict-aliasing -ffunction-sections -fdata-sections -ffast-math
LOCAL_LDFLAGS += -Wl,--gc-sections

LOCAL_CFLAGS += -fopenmp
LOCAL_CPPFLAGS += -fopenmp
LOCAL_LDFLAGS += -fopenmp



LOCAL_SRC_FILES := com_example_demo_SUANFA.cpp abstractFace.cpp Base64.cpp extractFaceFeatures.cpp face_detect.cpp factoryProcess.cpp image_quality_util.cpp libFaceAPI.cpp resAmFace.cpp



LOCAL_LDLIBS := -landroid -llog -ldl -lz 


# 必须在文件结尾定义编译类型,指定生成的静态库或者共享库在运行时依赖的共享库模块列表。

# BUILD_SHARED_LIBRARY 共享库,供java或者其他共享库调用

# BUILD_STATIC_LIBRARY 静态库,供共享库调用,不能直接被java调用

include $(BUILD_SHARED_LIBRARY)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NineDays66

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值