Интеграция Tensorflow как статической библиотеки в Android - PullRequest
0 голосов
/ 23 октября 2018

Недавно я хотел построить тензор потока в качестве статической библиотеки, а затем использовать эту библиотеку в файлах C ++ и, наконец, использовать эти файлы C ++ в Android.

  1. Я успешно построил статический файлбиблиотека в соответствии с разделом Android в здесь

  2. Я внимательно прочитал эту замечательную статью и теперь знаю, какие заголовочные файлы следует включить,и какие файлы .a будут использоваться.

  3. Я написал очень простой C ++ файл main.cpp.Он создает сеанс и запускает его, чтобы получить результат.Часть #include выглядит следующим образом:

    #include "tensorflow/core/public/session.h"
    #include "tensorflow/cc/ops/standard_ops.h"
    
  4. Теперь последний шаг.Я должен написать Android.mk и использовать ndk-build для сборки файла .so, который будет использоваться в AndroidStudio.Поскольку C ++ использует 4 статические библиотеки: libtensorflow-core.a, libprotobuf.a, libprotobuf-lite.a и libprotoc.a.Я создаю один модуль для каждой библиотеки, используя

    include $(PREBUILT_STATIC_LIBRARY)
    

    И, наконец, мне нужно создать итоговую разделяемую библиотеку, которая включает в себя 4 готовых библиотеки.Мой Android.mk выглядит следующим образом:

    #----------------------
    LOCAL_PATH := $(call my-dir)
    
    
    include $(CLEAR_VARS)
    LOCAL_MODULE := tensorflow-prebuilt
    LOCAL_TF_PATH := ../tensorflow- r1.10/tensorflow/contrib/makefile
    LOCAL_SRC_FILES :=  
    $(LOCAL_TF_PATH)/gen/lib/android_armeabi-v7a/libtensorflow-core.a
    LOCAL_EXPORT_C_INCLUDES += \
    $(LOCAL_TF_PATH)/gen/host_obj \
    $(LOCAL_TF_PATH)/gen/protobuf_android/armeabi-v7a/include \
    $(LOCAL_TF_PATH)/downloads/eigen \
    $(LOCAL_TF_PATH)/downloads/nsync/public \
    ../tensorflow-r1.10
    include $(PREBUILT_STATIC_LIBRARY)
    
    # here is a similar module for libprotobuf.a
    # here is a similar module for libprotobuf-lite.a
    # here is a similar module for libprotoc.a
    include $(CLEAR_VARS)
    LOCAL_MODULE := main
    LOCAL_SRC_FILES := main.cpp
    LOCAL_STATIC_LIBRARIES += \
                    tensorflow-prebuilt \
                    libprotobuf-prebuilt \
                    libprotobuf-lite-prebuilt \
                    libprotoc-prebuilt
    include $(BUILD_SHARED_LIBRARY)
    

Затем, когда я использую ndk-build, он говорит, что отсутствуют некоторые заголовочные файлы, например,

"tensorflow/core/framework/device_attributes.pb.h"

Как правильно написать Android.mk?

...