You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

编译带OpenVINO推理的OpenCV失败:cpuid.txt无法读取

解决OpenCV集成OpenVINO编译时CPUID.txt无法读取的CMake错误

我之前在Windows环境下编译OpenCV集成旧版OpenVINO时,也碰到过完全一样的错误,当时折腾了好一会儿才搞定。这个问题的核心是OpenVINO自带的CPUID检测脚本在Windows下的路径或权限处理有bug,导致它没法正常生成或者读取cpuid.txt文件。下面给你几个亲测有效的解决办法:

办法一:手动创建并填充cpuid.txt文件

这个是最直接的解决方案:

  1. 找到你的OpenCV构建目录C:/local/opencv-build/,在里面新建一个名为cpuid.txt的空白文件
  2. 根据你的CPU支持的指令集,把对应的名称按每行一个的格式写进去。比如主流Intel酷睿CPU可以填这些内容:
AVX2
AVX
SSE4_2
SSE4_1
SSSE3
SSE3
SSE2

如果你不确定自己CPU支持哪些指令集,用CPU-Z这类工具查一下就行,只需要把检测到的指令集名称逐行写入文件即可。

办法二:修改OpenVINO的CPUID.cmake脚本

如果不想手动维护这个文件,可以直接修改OpenVINO的脚本逻辑,让它在文件不存在时用默认值继续执行:

  1. 打开路径C:/local/Intel/computer_vision_sdk_2018.5.445/deployment_tools/inference_engine/src/extension/cmake/CPUID.cmake
  2. 找到第324行附近的file(STRINGS "${CPUID_FILE}" CPUID_FEATURES)代码,把它替换成下面的逻辑:
if(EXISTS "${CPUID_FILE}")
    file(STRINGS "${CPUID_FILE}" CPUID_FEATURES)
else()
    # 这里填你的CPU支持的指令集,或者用通用的默认值
    set(CPUID_FEATURES "AVX2;AVX;SSE4_2;SSE4_1;SSSE3;SSE3;SSE2")
endif()

这样即使脚本没法生成cpuid.txt,也会用预设的指令集列表继续编译,不会再报错。

办法三:检查构建目录的权限

还有一种常见情况:你的opencv-build目录放在了需要管理员权限的路径下(比如C:\Program Files),导致OpenVINO的脚本没有权限写入cpuid.txt。这种情况下,只需要把构建目录移到普通用户有读写权限的路径下(比如C:\Users\你的用户名\opencv-build),然后重新运行CMake-Gui配置生成项目即可。

另外补充一句:你用的OpenVINO 2018版本确实比较老旧,和OpenCV 4.0.0的兼容性可能存在一些小问题,如果上面的办法都没解决,可以考虑升级OpenVINO到2020及以后的版本,或者降级OpenCV到3.4.x系列,兼容性会更好。

内容的提问来源于stack exchange,提问作者mans

火山引擎 最新活动