Все COMPILE_TIME_ASSERT не могут ссылаться на dlib как на общую библиотеку - PullRequest
0 голосов
/ 03 сентября 2018

Я пытаюсь написать оболочку JNI для dlib, чтобы я мог получить дескрипторы лица в Java. Я написал код jni, чтобы сделать это, но я не могу make это (на MacOS X). Мой JNI не создает никаких ошибок компиляции, но тонна COMPILE_TIME_ASSERTS завершается с ошибкой, когда make -ing это.

Что я делаю не так и как мне успешно это сделать?

CMakeLists.txt

cmake_minimum_required(VERSION 2.8.12)

project(dlib-jni)

set(CMAKE_CXX_STANDARD 11)
# add_subdirectory(../dlib dlib_build)
include_directories(src)

find_package(dlib REQUIRED) #possibly supporting components!
# include_directories(${OpenCV_INCLUDE_DIRS})
message(STATUS "Using dlib-${dlib_VERSION}")

find_package(OpenCV 3 REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})

find_package(JNI REQUIRED)
message (STATUS "JNI_INCLUDE_DIRS=${JNI_INCLUDE_DIRS}")
message (STATUS "JAVA_INCLUDE_PATH =${JAVA_INCLUDE_PATH}")
message (STATUS "JNI_LIBRARIES=${JNI_LIBRARIES}")
message (STATUS "JAVA_JVM_LIBRARY=${JAVA_JVM_LIBRARY}")
include_directories(${JNI_INCLUDE_DIRS})

add_library(dlib_jni SHARED src/dlib-jni.cpp)
target_link_libraries(dlib_jni dlib::dlib opencv_core opencv_highgui)

Команда cmake :

cmake -DOpenCV_DIR=/usr/local/opt/opencv/share/OpenCV/OpenCVConfig.cmake  ../

cmake Output :

-- The C compiler identification is AppleClang 9.1.0.9020039
-- The CXX compiler identification is AppleClang 9.1.0.9020039
-- Check for working C compiler: /Library/Developer/CommandLineTools/usr/bin/cc
-- Check for working C compiler: /Library/Developer/CommandLineTools/usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /Library/Developer/CommandLineTools/usr/bin/c++
-- Check for working CXX compiler: /Library/Developer/CommandLineTools/usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Using dlib-19.15.99
-- Found OpenCV: /usr/local (found suitable version "3.3.1", minimum required is "3") 
-- Found JNI: /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/libjawt.dylib  
-- JNI_INCLUDE_DIRS=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/include;/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/include/darwin;/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/include
-- JAVA_INCLUDE_PATH =/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/include
-- JNI_LIBRARIES=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/libjawt.dylib;/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/server/libjvm.dylib
-- JAVA_JVM_LIBRARY=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/server/libjvm.dylib
-- Configuring done
CMake Warning (dev):
  Policy CMP0042 is not set: MACOSX_RPATH is enabled by default.  Run "cmake
  --help-policy CMP0042" for policy details.  Use the cmake_policy command to
  set the policy and suppress this warning.

  MACOSX_RPATH is not specified for the following targets:

   dlib_jni

This warning is for project developers.  Use -Wno-dev to suppress it.

-- Generating done
-- Build files have been written to: /Users/me/gitrepos/dlib-jni/build

сделать команду :

make && make install

Первая ошибка (их много) :

/usr/local/include/dlib/array2d/../geometry/../image_processing/../image_transforms/image_pyramid.h:940:13: error: static_assert failed "Failed assertion"
            COMPILE_TIME_ASSERT( pixel_traits<in_pixel_type>::has_alpha == false );

1 Ответ

0 голосов
/ 04 сентября 2018

COMPILE_TIME_ASSERT s, чтобы гарантировать, что ваш код, который использует dlib, действительно правильный.

Как оказалось, у меня не было.

В моем случае я создал dlib cv_image из OpenCV Mat, например:

dlib::cv_image<rgb_pixel_apha> img(image);

А затем попытался определить лица следующим образом:

std::vector<dlib::matrix<rgb_pixel>> faces; 
for (auto face : detector(img)) 
...

Зоркий разработчик заметит, что они созданы по-разному. Один - rgb_pixel_alpha, а другой - rgb_pixel.

COMPILE_TIME_ASSERT проверяет наличие альфа-канала. Я просто не правильно понял ошибку.

...