dlib在人脸的很多代码中用到。
在ubuntu上安装的时候关于dlib遇到了一些问题,以下将适用自己的解决方案做一个整理记录。
主要使用conda的虚拟环境

遇到的问题做了个汇总,是因为一个个解决了以后总有下一个问题,最后是用一个总的方案这些问题都消失了。

问题汇总

1. conda找不到dlib库

可能是源的问题

  1. conda install -c menpo dlib
  2. # 或者
  3. pip install dlib

2. conda创建的虚拟环境无法安装dlib

报错信息为:

  1. RuntimeError:
  2. *******************************************************************
  3. CMake must be installed to build the following extensions: dlib
  4. *******************************************************************

3. conda创建的虚拟环境无法安装dlib

报错信息为

  1. 1 error detected in the compilation of "/tmp/tmpxft_0002b980_00000000-6_cuda_dlib.cpp1.ii".
  2. CMake Error at dlib_generated_cuda_dlib.cu.o.Release.cmake:279 (message):
  3. Error generating file
  4. /tmp/pip-install-1mezk9zs/dlib/build/temp.linux-x86_64-3.8/dlib_build/CMakeFiles/dlib.dir/cuda/./dlib_generated_cuda_dlib.cu.o
  5. dlib_build/CMakeFiles/dlib.dir/build.make:63: recipe for target 'dlib_build/CMakeFiles/dlib.dir/cuda/dlib_generated_cuda_dlib.cu.o' failed
  6. make[2]: *** [dlib_build/CMakeFiles/dlib.dir/cuda/dlib_generated_cuda_dlib.cu.o] Error 1
  7. make[2]: *** Waiting for unfinished jobs....
  8. CMakeFiles/Makefile2:145: recipe for target 'dlib_build/CMakeFiles/dlib.dir/all' failed
  9. make[1]: *** [dlib_build/CMakeFiles/dlib.dir/all] Error 2
  10. Makefile:83: recipe for target 'all' failed
  11. make: *** [all] Error 2
  12. Traceback (most recent call last):
  13. File "<string>", line 1, in <module>
  14. File "/tmp/pip-install-1mezk9zs/dlib/setup.py", line 223, in <module>
  15. setup(
  16. File "/opt/conda/envs/torch1.5/lib/python3.8/site-packages/setuptools/__init__.py", line 144, in setup
  17. return distutils.core.setup(**attrs)
  18. File "/opt/conda/envs/torch1.5/lib/python3.8/distutils/core.py", line 148, in setup
  19. dist.run_commands()
  20. File "/opt/conda/envs/torch1.5/lib/python3.8/distutils/dist.py", line 966, in run_commands
  21. self.run_command(cmd)
  22. File "/opt/conda/envs/torch1.5/lib/python3.8/distutils/dist.py", line 985, in run_command
  23. cmd_obj.run()
  24. File "/opt/conda/envs/torch1.5/lib/python3.8/site-packages/setuptools/command/install.py", line 61, in run
  25. return orig.install.run(self)
  26. File "/opt/conda/envs/torch1.5/lib/python3.8/distutils/command/install.py", line 545, in run
  27. self.run_command('build')
  28. File "/opt/conda/envs/torch1.5/lib/python3.8/distutils/cmd.py", line 313, in run_command
  29. self.distribution.run_command(command)
  30. File "/opt/conda/envs/torch1.5/lib/python3.8/distutils/dist.py", line 985, in run_command
  31. cmd_obj.run()
  32. File "/opt/conda/envs/torch1.5/lib/python3.8/distutils/command/build.py", line 135, in run
  33. self.run_command(cmd_name)
  34. File "/opt/conda/envs/torch1.5/lib/python3.8/distutils/cmd.py", line 313, in run_command
  35. self.distribution.run_command(command)
  36. File "/opt/conda/envs/torch1.5/lib/python3.8/distutils/dist.py", line 985, in run_command
  37. cmd_obj.run()
  38. File "/tmp/pip-install-1mezk9zs/dlib/setup.py", line 135, in run
  39. self.build_extension(ext)
  40. File "/tmp/pip-install-1mezk9zs/dlib/setup.py", line 175, in build_extension
  41. subprocess.check_call(cmake_build, cwd=build_folder)
  42. File "/opt/conda/envs/torch1.5/lib/python3.8/subprocess.py", line 364, in check_call
  43. raise CalledProcessError(retcode, cmd)
  44. subprocess.CalledProcessError: Command '['cmake', '--build', '.', '--config', 'Release', '--', '-j80']' returned non-zero exit status 2.
  45. ----------------------------------------
  46. ERROR: Command errored out with exit status 1: /opt/conda/envs/torch1.5/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-1mezk9zs/dlib/setup.py'"'"'; __file__='"'"'/tmp/pip-install-1mezk9zs/dlib/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-t54jnsix/install-record.txt --single-version-externally-managed --compile --install-headers /opt/conda/envs/torch1.5/include/python3.8/dlib Check the logs for full command output.

4. 从dlib源码安装的报错

cmake和python setup.py均有报错,报错信息为

  1. [ 1%] Building NVCC (Device) object dlib/CMakeFiles/dlib.dir/cuda/dlib_generated_cuda_dlib.cu.o
  2. /home/alex/Desktop/dlib/dlib/cuda/cuda_dlib.cu(1691): error: calling a constexpr __host__ function("log1p") from a __device__ function("cuda_log1pexp") is not allowed. The experimental flag '--expt-relaxed-constexpr' can be used to allow this.
  3. 1 error detected in the compilation of "/tmp/tmpxft_0000635c_00000000-6_cuda_dlib.cpp1.ii".
  4. CMake Error at dlib_generated_cuda_dlib.cu.o.Release.cmake:279 (message):
  5. Error generating file
  6. /home/alex/Desktop/dlib/build/dlib/CMakeFiles/dlib.dir/cuda/./dlib_generated_cuda_dlib.cu.o
  7. dlib/CMakeFiles/dlib.dir/build.make:583: recipe for target 'dlib/CMakeFiles/dlib.dir/cuda/dlib_generated_cuda_dlib.cu.o' failed
  8. make[2]: *** [dlib/CMakeFiles/dlib.dir/cuda/dlib_generated_cuda_dlib.cu.o] Error 1
  9. CMakeFiles/Makefile2:93: recipe for target 'dlib/CMakeFiles/dlib.dir/all' failed
  10. make[1]: *** [dlib/CMakeFiles/dlib.dir/all] Error 2
  11. Makefile:151: recipe for target 'all' failed
  12. make: *** [all] Error 2

5. 使用conda安装dlib,opencv,pillow之后,opencv提示找不到

报错信息为

  1. no module named cv2

解决方案

1. 全部使用conda的解决方案

  1. apt install cmake
  2. conda create -n tf1.14 python=3.6
  3. source activate tf1.14
  4. conda install tensorflow-gpu=1.14 keras=2.3
  5. conda install -c menpo dlib # dlib需要先安装,后装就有BUG了
  6. conda install pillow
  7. pip install opencv-python # opencv使用conda里的pip装
  8. conda install requests tqdm

2. 从源码安装dlib的解决方案

  1. apt install cmake # 先装cmake总是对的
  2. git clone https://github.com/davisking/dlib.git
  3. cd dlib
  4. mkdir build
  5. cd build
  6. cmake .. -DDLIB_USE_CUDA=1 -DUSE_AVX_INSTRUCTIONS=1 -DCUDA_NVCC_FLAGS="--expt-relaxed-constexpr"
  7. cmake --build . --config Release
  8. python setup.py install --set DLIB_USE_CUDA=1 --set USE_AVX_INSTRUCTIONS=1 --set CUDA_NVCC_FLAGS="--expt-relaxed-constexpr" #我的python是链接到conda环境里的python的

参考

https://github.com/ageitgey/face_recognition/issues/1039