patrikhuber / 4dface

Real-time 3D face tracking and reconstruction from 2D video
https://www.4dface.io
Apache License 2.0
793 stars 248 forks source link

error: ‘const class Eigen::ArrayWrapper<const Eigen::Matrix<float, -1, 1> >’ has no member named ‘rsqrt’ #49

Closed lulu1315 closed 6 years ago

lulu1315 commented 6 years ago

hello and thank you for the code I'm trying to compile on KDE Neon (Ubuntu 16.04) and got the following error :

make Scanning dependencies of target 4dface [ 50%] Building CXX object CMakeFiles/4dface.dir/apps/4dface.cpp.o In file included from /shared/foss/4dface/external/eos/include/eos/morphablemodel/MorphableModel.hpp:26:0, from /shared/foss/4dface/apps/helpers.hpp:27, from /shared/foss/4dface/apps/4dface.cpp:20: /shared/foss/4dface/external/eos/include/eos/morphablemodel/PcaModel.hpp: In function ‘Eigen::MatrixXf eos::morphablemodel::normalise_pca_basis(const MatrixXf&, const VectorXf&)’: /shared/foss/4dface/external/eos/include/eos/morphablemodel/PcaModel.hpp:399:78: error: ‘const class Eigen::ArrayWrapper<const Eigen::Matrix<float, -1, 1> >’ has no member named ‘rsqrt’ const Eigen::VectorXf one_over_sqrt_of_eigenvalues = eigenvalues.array().rsqrt(); ^ CMakeFiles/4dface.dir/build.make:62: recipe for target 'CMakeFiles/4dface.dir/apps/4dface.cpp.o' failed make[2]: [CMakeFiles/4dface.dir/apps/4dface.cpp.o] Error 1 CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/4dface.dir/all' failed make[1]: [CMakeFiles/4dface.dir/all] Error 2 Makefile:149: recipe for target 'all' failed make: *** [all] Error 2

this is the output of cmake :

cmake -DCMAKE_INSTALL_PREFIX=../4dface_install -DCMAKE_BUILD_TYPE=Release -DOpenCV_haarcascades_DIR=/usr/share/opencv/haarcascades/ ../4dface/ -- The C compiler identification is GNU 5.4.0 -- The CXX compiler identification is GNU 5.4.0 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /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: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Detecting CXX compile features -- Detecting CXX compile features - done -- Found OpenCV: /usr (found suitable version "3.2.0", minimum required is "3") found components: core imgcodecs imgproc highgui videoio objdetect -- OpenCV include dir found at /usr/include;/usr/include/opencv -- OpenCV library dir found at -- Boost version: 1.58.0 -- Found the following Boost libraries: -- system -- filesystem -- program_options -- Boost found at /usr/include -- Found Eigen3: /usr/local/include/eigen3 (Required is at least version "2.91.0") -- Eigen3 found: TRUE -- Eigen3 include dir found at /usr/local/include/eigen3 -- Eigen3 version: 3.2.10 -- Downloading face_landmarks_model_rcr_68.bin (84.6 MB)... -- [download 100% complete] .... -- face_landmarks_model_rcr_68.bin successfully downloaded. -- Configuring done -- Generating done -- Build files have been written to: /shared/foss/4dface_build

patrikhuber commented 6 years ago

Hi,

You're on a quite old Eigen version. Their changelog tells me rsqrt was added in 3.3. I recommend you update Eigen, you can also just clone their repo locally and point 4dface/eos to use that local version.

Feel free to re-open if that doesn't solve the issue.

By the way: Our readme correctly lists Eigen 3.3 as the minimum required version. I recommend you read through it.

lulu1315 commented 6 years ago

thank you patrik I downloaded eigen 3.3.5 how can i point 4dface/eos to use that local version? luc

patrikhuber commented 6 years ago

I'd use cmake-gui, and I think then there is EIGEN3_INCLUDE_DIR, or something like that. It may also help if you have a quick look at the 4dface/eos CMakeLists, in case that doesn't work right away.

This is really more of a CMake question than 4dface/eos related.

lulu1315 commented 6 years ago

thank you patrik I've got it working.just copied eigen/Eigen to /usr/local/include worked. just a little question , I'm looking for the 68 landmarks coordinates. do they correspond to a subset of vertex of the .obj 3D object ? thanks in advance luc

patrikhuber commented 6 years ago

I think what you're looking for is the mapping files, for example https://github.com/patrikhuber/eos/blob/master/share/ibug_to_sfm.txt. You can also search/read through the (closed) issues of the 4dface and eos repos a bit, there are a number of posts there that answer questions regarding 2D landmarks mappings.

lulu1315 commented 6 years ago

great!.I will dig into that. thanks for your help luc