TensorFlow Lite C/C++ 환경 구축하기(CMake)
https://cppmagister.tistory.com/18 를 참고하시는게 더 좋습니다!
TensorFlow Lite C 라이브러리와 헤더파일, 그리고 CMake 가 필요합니다.
1. 라이브러리 빌드
라이브러리 만드는법을 참조해주세요
2. 헤더 파일 만들기
1 에서 라이브러리를 만들었으면, 그 원본 소스 파일을 복사하면 됩니다.
아래처럼만 헤더만 남기고 다 날리면 됩니다. (용량 때문에 날린거라 굳이 안 날려도 됩니다)
3. 파일 구성하기
헤더 파일들과 라이브러리 파일들을 각각 하나의 폴더에 묶어 다음처럼 만들면 됩니다.
아래 내용은 Android 로 빌드된 라이브러리를 이용했습니다. 다른 환경에서도 똑같이 해주고 CMakeLists.txt에서만 파일에 맞게 수정해주시면 됩니다.
tftlie/include/tensorflow/ ... 헤더 파일들
tflite/lib/ ... 라이브러리들 (GPU 와 NNAPI를 사용하지 않는다면 libtensorflowlite_c.so 파일만 있으면 됩니다)
이제 TensorFlow Lite 를 보다 편하게 사용하기 위해, 이 녀석을 이용하는 Wrapper 클래스를 만들고, 외부에서는 이 Wrapper만 참조하는 형식으로 구성하겠습니다.
wrapper 폴더 안에 클래스 헤더와 구현부를 만들어주고, tflite 폴더 안에 CMakeLists.txt 파일을 만들어줍니다.
* 만약 Wrapper 을 만드는게 시간이 오래 걸릴 것 같으시면, 제가 만든 커스텀 Wrapper을 사용하시면 됩니다.
https://github.com/lackhole/CuteModel
이걸 쓰신다면 아래 CMakeLists.txt에 있는 add_library 의 Wrapper.cpp을 CuteModel.cpp 로 이름에 맞게 바꿔 주시면 됩니다.
Wrapper.cpp와 위에서 방금 만든 TensorFlow Lite 라이브러리와 헤더를 연결시켜주기 위해 CMakeListst.txt에 다음과 같이 작성해줍니다.
cmake_minimum_required(VERSION 3.4.1)
project(tflite)
set (TFLITE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
set (TFLITE_LIB_PATH "${TFLITE_PATH}/lib")
set (TFLITE_INCLUDE_PATH "${TFLITE_PATH}/include")
set (WRAPPER_PATH "${TFLITE_PATH}/wrapper")
add_library(lib_tflite SHARED IMPORTED)
set_target_properties(lib_tflite PROPERTIES IMPORTED_LOCATION
${TFLITE_LIB_PATH}/libtensorflowlite_c.so)
add_library(lib_tflite_gpu SHARED IMPORTED)
set_target_properties(lib_tflite_gpu PROPERTIES IMPORTED_LOCATION
${TFLITE_LIB_PATH}/libtensorflowlite_gpu_delegate.so)
add_library(lib_nnapi STATIC IMPORTED)
set_target_properties(lib_nnapi PROPERTIES IMPORTED_LOCATION
${TFLITE_LIB_PATH}/libnnapi_delegate.a)
add_library(lib_nnapi_impl STATIC IMPORTED)
set_target_properties(lib_nnapi_impl PROPERTIES IMPORTED_LOCATION
${TFLITE_LIB_PATH}/libnnapi_implementation.a)
add_library(lib_nnapi_util STATIC IMPORTED)
set_target_properties(lib_nnapi_util PROPERTIES IMPORTED_LOCATION
${TFLITE_LIB_PATH}/libnnapi_util.a)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++14")
add_library(tflite SHARED
${WRAPPER_PATH}/Wrapper.cpp)
target_include_directories(tflite PUBLIC
${TFLITE_PATH}
${TFLITE_INCLUDE_PATH}
${TFLITE_INCLUDE_PATH}/tensorflow/lite/tools/make/downloads
${TFLITE_INCLUDE_PATH}/tensorflow/lite/tools/make/downloads/flatbuffers/include
)
target_link_libraries(tflite
lib_tflite
lib_tflite_gpu
lib_nnapi
lib_nnapi_impl
lib_nnapi_util
log )
사용하지 않는 라이브러리가 있으면 위에서 해당하는 항목을 지우면 됩니다.
자 이제 tflite 폴더를 가지고 원하는 프로젝트에 복사해서 넣으면 거기서 CMake 연결만 해주고 라이브러리를 쉽게 쓸 수 있습니다
이 과정은 CMake를 사용하는 프로젝트라면 어디에서든지 동일하게 사용가능합니다.
'TensorFlow' 카테고리의 다른 글
TensorFlow Lite Python API (0) | 2020.04.05 |
---|---|
TensorFlow Lite Java(Android) 사용법 (0) | 2020.04.05 |
TensorFlow Lite C++ API (0) | 2020.04.05 |
Android 에서 TensorFlow Lite 사용하기 (Java) (0) | 2020.04.05 |
TensorFlow Lite 사용법 총정리! (C/C++, Java, Python, Android) (2) | 2020.04.05 |