Tensorflow 为什么在Android NDK中加载冻结模型时没有注册ops? 我想使用NDK和CGub来使用C++ TysFraceAPI,我可以创建库,但是当我加载一个冻结模型时,当我尝试加载图:时,会出现很多错误。
E/native:op_kernel.cc:1148 OpKernel('op:'PopulationCount' 设备类型:“CPU”约束{name:“T”允许的{u值列表{ 未知op:PopulationCount的类型:DT_INT32}}') 因此,我知道我的库不支持这些操作。 我是否需要添加另一个库来支持这些操作 我的Cmake脚本基于此和 我使用该脚本为armeabi-v7a构建依赖项 这就是我的cmake脚本的外观:Tensorflow 为什么在Android NDK中加载冻结模型时没有注册ops? 我想使用NDK和CGub来使用C++ TysFraceAPI,我可以创建库,但是当我加载一个冻结模型时,当我尝试加载图:时,会出现很多错误。,tensorflow,android-ndk,Tensorflow,Android Ndk,E/native:op_kernel.cc:1148 OpKernel('op:'PopulationCount' 设备类型:“CPU”约束{name:“T”允许的{u值列表{ 未知op:PopulationCount的类型:DT_INT32}}') 因此,我知道我的库不支持这些操作。 我是否需要添加另一个库来支持这些操作 我的Cmake脚本基于此和 我使用该脚本为armeabi-v7a构建依赖项 这就是我的cmake脚本的外观: cmake_minimum_required(VERSION 3
cmake_minimum_required(VERSION 3.4.1)
include(ExternalProject)
SET(PROJECT_NAME tf_native_lib)
SET(OpenCV_FOUND true )
SET(PREBUILT_DIR ${TENSORFLOW_ROOT_DIR}/tensorflow/contrib/makefile/gen)
SET(TARGET_NSYNC_LIB ${TENSORFLOW_ROOT_DIR}/tensorflow/contrib/makefile /downloads/nsync/builds/${ANDROID_ABI}.android.c++11)
FIND_PACKAGE(OpenCV REQUIRED)
add_library( # Sets the name of the library.
${PROJECT_NAME}
SHARED
src/main/cpp/native-lib.h
src/main/cpp/native-lib.cpp
src/main/cpp/TensorflowInferenceHandler.h
src/main/cpp/TensorflowInferenceHandler.cpp
)
add_library(lib_proto STATIC IMPORTED )
set_target_properties(lib_proto PROPERTIES IMPORTED_LOCATION
${PREBUILT_DIR}/protobuf_android/${ANDROID_ABI}/lib/libprotobuf.a)
add_library(lib_nsync STATIC IMPORTED )
set_target_properties(lib_nsync PROPERTIES IMPORTED_LOCATION
${TARGET_NSYNC_LIB}/libnsync.a)
add_library(lib_tf STATIC IMPORTED )
set_target_properties(lib_tf PROPERTIES IMPORTED_LOCATION
${PREBUILT_DIR}/lib/android_${ANDROID_ABI}/libtensorflow-core.a)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DIS_SLIM_BUILD \
-std=c++11 -fno-rtti -fno-exceptions \
-O2 -Wno-narrowing -fomit-frame-pointer \
-mfpu=neon -mfloat-abi=softfp -fPIE -fPIC \
-ftemplate-depth=900 \
-DGOOGLE_PROTOBUF_NO_RTTI \
-DGOOGLE_PROTOBUF_NO_STATIC_INITIALIZER")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} \
-Wl,--allow-multiple-definition \
-Wl,--whole-archive \
-fPIE -pie -v")
# MESSAGE("tensorflow lib dir ${TENSORFLOW_LIB_DIR}")
target_link_libraries( # Specifies the target library.
${PROJECT_NAME}
${OpenCV_LIBS}
android
dl
log
m
z
jnigraphics
lib_tf
lib_proto
lib_nsync)
include_directories(
${OPENCV_INCLUDE_DIRS}
${PREBUILT_DIR}/proto
${PREBUILT_DIR}/protobuf_android/${ANDROID_ABI}/include
${PREBUILT_DIR}/nsync/public
${TENSORFLOW_ROOT_DIR}/tensorflow/contrib/makefile/downloads/eigen
${TENSORFLOW_ROOT_DIR}/bazel-tensorflow/external/nsync/public
${TENSORFLOW_ROOT_DIR}/bazel-genfiles
${TENSORFLOW_ROOT_DIR}
../../../cpp_utils)
如果这是不可能的,那么将tensorflow_推断与我的Jni源链接起来的源在哪里
提前谢谢
Unai.在
tensorflow/core/Ops/bitwise_Ops.cc
中声明了人口计数和其他一些操作。将该文件添加到/tensorflow/contrib/makefile/tf_op_files.txt
的末尾。然后重新编译Tensorflow
。这对我来说很有用。你能弄明白吗?如果有,请告诉我好吗?谢谢,解决了。见下面的答案。