在 Blender 的 Python 中安装 Dlib 时出错

Posted

技术标签:

【中文标题】在 Blender 的 Python 中安装 Dlib 时出错【英文标题】:Error Installing Dlib in Blender's Python 【发布时间】:2020-07-16 22:47:54 【问题描述】:

我正在编写一个用于处理 3D 面部扫描的 Blender 插件。我想在扫描的面部图像中找到地标(眉毛、眼角、嘴线等),以便将它们映射到模型。 Dlib 库非常适合查找这些地标,但我无法在 Blender 的 Python 中安装它(所以我可以从插件中调用它)。

在我也安装的独立 Python (3.6.4) 版本中安装 Dlib 没有问题。作为一种解决方法,我目前正在从插件中的子进程调用这个 Python,但这非常慢并且使得插件难以安装在另一台计算机上。

这是我尝试在 Blender 的 Python 中使用 pip 安装 Dlib 时的输出(Blender 是 Python 3.7.4 的 2.81 版):

C:\Program Files\Blender Foundation\Blender 2.81\2.81\python\bin> ./python -m pip install dlib --user
Collecting dlib
  Using cached dlib-19.19.0.tar.gz (3.2 MB)
Installing collected packages: dlib
    Running setup.py install for dlib ... error
    ERROR: Command errored out with exit status 1:
     command: 'C:\Program Files\Blender Foundation\Blender 2.81\2.81\python\bin\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\David\\AppData\\Local\\Temp\\pip-install-x18bl7c_\\dlib\\setup.py'"'"'; __file__='"'"'C:\\Users\\David\\AppData\\Local\\Temp\\pip-install-x18bl7c_\\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 'C:\Users\David\AppData\Local\Temp\pip-record-k5d8lob9\install-record.txt' --single-version-externally-managed --user --prefix= --compile --install-headers 'C:\Users\David\AppData\Roaming\Python\Python37\Include\dlib'
         cwd: C:\Users\David\AppData\Local\Temp\pip-install-x18bl7c_\dlib\
    Complete output (66 lines):
    running install
    running build
    running build_py
    package init file 'dlib\__init__.py' not found (or not a regular file)
    running build_ext
    Building extension for Python 3.7.4 (default, Aug 13 2019, 14:10:15) [MSC v.1916 64 bit (AMD64)]
    Invoking CMake setup: 'cmake C:\Users\David\AppData\Local\Temp\pip-install-x18bl7c_\dlib\tools\python -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=C:\Users\David\AppData\Local\Temp\pip-install-x18bl7c_\dlib\build\lib.win-amd64-3.7 -DPYTHON_EXECUTABLE=C:\Program Files\Blender Foundation\Blender 2.81\2.81\python\bin\python.exe -DCMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE=C:\Users\David\AppData\Local\Temp\pip-install-x18bl7c_\dlib\build\lib.win-amd64-3.7 -A x64'
    -- Building for: Visual Studio 15 2017
    -- Selecting Windows SDK version 10.0.17763.0 to target Windows 10.0.18362.
    -- The C compiler identification is MSVC 19.16.27030.1
    -- The CXX compiler identification is MSVC 19.16.27030.1
    -- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x64/cl.exe
    -- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x64/cl.exe -- 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: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x64/cl.exe
    -- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x64/cl.exe -- works
    -- Detecting CXX compiler ABI info
    -- Detecting CXX compiler ABI info - done
    -- Detecting CXX compile features
    -- Detecting CXX compile features - done
    -- Found PythonInterp: C:/Program Files/Blender Foundation/Blender 2.81/2.81/python/bin/python.exe (found version "3.7.4")
    CMake Error at C:/Users/David/AppData/Local/Temp/pip-install-x18bl7c_/dlib/dlib/external/pybind11/tools/FindPythonLibsNew.cmake:158 (message):
      Python libraries not found
    Call Stack (most recent call first):
      C:/Users/David/AppData/Local/Temp/pip-install-x18bl7c_/dlib/dlib/external/pybind11/tools/pybind11Tools.cmake:16 (find_package)
      C:/Users/David/AppData/Local/Temp/pip-install-x18bl7c_/dlib/dlib/external/pybind11/CMakeLists.txt:33 (include)


    -- Configuring incomplete, errors occurred!
    See also "C:/Users/David/AppData/Local/Temp/pip-install-x18bl7c_/dlib/build/temp.win-amd64-3.7/Release/CMakeFiles/CMakeOutput.log".
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "C:\Users\David\AppData\Local\Temp\pip-install-x18bl7c_\dlib\setup.py", line 261, in <module>
        'Topic :: Software Development',
      File "C:\Program Files\Blender Foundation\Blender 2.81\2.81\python\lib\site-packages\setuptools\__init__.py", line 145, in setup
        return distutils.core.setup(**attrs)
      File "C:\Program Files\Blender Foundation\Blender 2.81\2.81\python\lib\distutils\core.py", line 148, in setup
        dist.run_commands()
      File "C:\Program Files\Blender Foundation\Blender 2.81\2.81\python\lib\distutils\dist.py", line 966, in run_commands
        self.run_command(cmd)
      File "C:\Program Files\Blender Foundation\Blender 2.81\2.81\python\lib\distutils\dist.py", line 985, in run_command
        cmd_obj.run()
      File "C:\Program Files\Blender Foundation\Blender 2.81\2.81\python\lib\site-packages\setuptools\command\install.py", line 61, in run
        return orig.install.run(self)
      File "C:\Program Files\Blender Foundation\Blender 2.81\2.81\python\lib\distutils\command\install.py", line 545, in run
        self.run_command('build')
      File "C:\Program Files\Blender Foundation\Blender 2.81\2.81\python\lib\distutils\cmd.py", line 313, in run_command
        self.distribution.run_command(command)
      File "C:\Program Files\Blender Foundation\Blender 2.81\2.81\python\lib\distutils\dist.py", line 985, in run_command
        cmd_obj.run()
      File "C:\Program Files\Blender Foundation\Blender 2.81\2.81\python\lib\distutils\command\build.py", line 135, in run
        self.run_command(cmd_name)
      File "C:\Program Files\Blender Foundation\Blender 2.81\2.81\python\lib\distutils\cmd.py", line 313, in run_command
        self.distribution.run_command(command)
      File "C:\Program Files\Blender Foundation\Blender 2.81\2.81\python\lib\distutils\dist.py", line 985, in run_command
        cmd_obj.run()
      File "C:\Users\David\AppData\Local\Temp\pip-install-x18bl7c_\dlib\setup.py", line 135, in run
        self.build_extension(ext)
      File "C:\Users\David\AppData\Local\Temp\pip-install-x18bl7c_\dlib\setup.py", line 172, in build_extension
        subprocess.check_call(cmake_setup, cwd=build_folder)
      File "C:\Program Files\Blender Foundation\Blender 2.81\2.81\python\lib\subprocess.py", line 347, in check_call
        raise CalledProcessError(retcode, cmd)
    subprocess.CalledProcessError: Command '['cmake', 'C:\\Users\\David\\AppData\\Local\\Temp\\pip-install-x18bl7c_\\dlib\\tools\\python', '-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=C:\\Users\\David\\AppData\\Local\\Temp\\pip-install-x18bl7c_\\dlib\\build\\lib.win-amd64-3.7', '-DPYTHON_EXECUTABLE=C:\\Program Files\\Blender Foundation\\Blender 2.81\\2.81\\python\\bin\\python.exe', '-DCMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE=C:\\Users\\David\\AppData\\Local\\Temp\\pip-install-x18bl7c_\\dlib\\build\\lib.win-amd64-3.7', '-A', 'x64']' returned non-zero exit status 1.
    ----------------------------------------
ERROR: Command errored out with exit status 1: 'C:\Program Files\Blender Foundation\Blender 2.81\2.81\python\bin\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\David\\AppData\\Local\\Temp\\pip-install-x18bl7c_\\dlib\\setup.py'"'"'; __file__='"'"'C:\\Users\\David\\AppData\\Local\\Temp\\pip-install-x18bl7c_\\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 'C:\Users\David\AppData\Local\Temp\pip-record-k5d8lob9\install-record.txt' --single-version-externally-managed --user --prefix= --compile --install-headers 'C:\Users\David\AppData\Roaming\Python\Python37\Include\dlib' Check the logs for full command output.

虽然我想在 Blender 中使用 Dlib,但我对在图像中查找面部标志的其他方法持开放态度。无论哪种方式,我都需要插件的另一个用户(或插件本身)能够安装所需的库而无需太多工作。

如果有帮助,here is a video 演示在 Blender 中使用 Dlib。

如果我能澄清任何事情,请告诉我。

谢谢, 大卫

【问题讨论】:

我最近在 blender 2.82 上使用 dlib 地标完成了 headpose estimation。如果有帮助,您可以查看此设置方法,***.com/questions/60529676/…。 【参考方案1】:

我在尝试使用搅拌机、笔记本电脑网络摄像头和打开简历时遇到同样的问题,遵循 Gadget Workbench 制作的教程(您可以在此处找到:https://www.youtube.com/watch?v=O7nNO3FLkLU)。这是我的解决方案。

--> 正如 Blender 文档中提到的,你不应该使用不同版本的 python 来使用模块

Python(主要、次要)版本必须与 Blender 附带的版本相匹配。因此,您不能将 Python 3.6 与使用 Python 3.7 构建的 Blender 一起使用。

如果您需要使用操作系统 python 或添加一些扩展,他们还提到了解决方法。 (文档是here)。您也可以使用 Anaconda 代替经典的 Python 安装,以便能够快速切换您的 Python 主版本。一旦你确定你的 python 操作系统版本与 Blender 打包的 python 版本相同,你就可以开始了:)

我设法通过更新 pip 修复了这个错误,只使用了带有 blender 的 python。

1- 首先,运行 pip update 命令(一旦您位于 Blender 安装目录中的 python 文件夹中):

.\python -m pip install --upgrade pip

2- 然后就可以安装dlib了

.\python -m pip install dlib

3- 要验证一切正常,您可以打开 Blender 项目,进入“脚本”选项卡(或在 Blender 中的任意位置打开控制台)并尝试输入

import dlib

它不应再在 Blender 或您的操作系统控制台内引发错误。

【讨论】:

谢谢!当我尝试时,我怀疑它可能与当前版本的 Dlib 有问题,因为更新 pip 为您修复了它。我最终创建了一个内部使用 Dlib 的C++ Python extension。【参考方案2】:

我建议在普通 python 中运行 Dlib,并将输出坐标存储在其他一些 txt、csv 或一些图像文件中。然后在blender-python的脚本中导入OS模块,读取普通python制作的文件。这样就可以在普通python和blender的python之间进行通信了。另一种选择是使用 sys 模块。在 blender 的 py 脚本中导入 sys 模块并在从命令行调用 blender-python 脚本时传递参数。或者,你也可以从普通的 python 中使用 blender 的 python。在普通 python 中导入子进程模块并将您的 py 脚本作为子进程运行。它类似于从终端或 windows cmd 运行脚本。 Blender 的 python 预装了 sys 或 OS 等基本模块。您可以使用它们与普通 python 进行通信。您将能够从两个不同版本的 python 中获得优势。

【讨论】:

以上是关于在 Blender 的 Python 中安装 Dlib 时出错的主要内容,如果未能解决你的问题,请参考以下文章

在 openSUSE 上的 Virtualenv 中安装 TensorFlow

dlib 未在 pythonanywhere virtualenv 中安装

在Arduino IDE中安装固件ESP32,ESP8266板

在linux系统中安装LANMP

如何在CentOS6.5系统中安装Docker

如何在CentOS6.5系统中安装Docker