OpenVINO开发小组
直播中

李进锋

8年用户 996经验值
私信 关注
[问答]

在Visual Studio中使用OpenVINO™ C API时无法读取网络怎么解决?




    • 使用 OpenVINO C API 加载中间表示 (IR),方法是引用Hello 分类 C 样本。
    • 使用ie_infer_request_set_blob 时收到的状态为 -1(一般错误)。

回帖(2)

李耘蝶

2025-3-7 09:25:22
此问题与 MKLDNN 插件有关,该插件通常在OpenVINO环境未正确设置时发生。通过按照以下创建批处理文件自动化 OpenVINO setupvars.bat :


  • 在 .bat 文件中编写下面的脚本:

    @echo打开
    cd bin
    CALL setupvars.bat
    cd 2019CommunityCommon7IDE
    调用 devenv.exe
             
  • 以管理员身份运行 .bat 文件
  • VS2019 打开后,从OpenVINO文件夹中选择 Hello 查询设备 Python 示例
  • 如有必要,创建备份文件
  • 设置 Hello 查询设备 Python 示例 作为启动项目
  • 运行 示例应用程序

使用 以下建议的方法,如在 推理引擎 C* API 中写入:


  • IEStatusCode ie_infer_request_set_blob(ie_infer_request_t *infer_request, ie_blob_t *blob)


    • 说明:将 blob 设置为推理请求。


  • 参数:


    • infer_request: ie_infer_request_t 实例的指针。
    • blob: ie_blob_t 实例的指针。


  • 回值:操作的状态代码: 确定(0) 以获得成功。
举报

vinww特烦恼

2025-3-8 17:35:50

在使用 OpenVINO™ C API 加载中间表示(IR)时遇到 ie_infer_request_set_blob 返回状态为 -1(一般错误)的问题,可能由多种原因引起。以下是一些可能的解决方案和排查步骤:


1. 检查 IR 文件的路径和格式



  • 确保你提供的 IR 文件路径是正确的,并且文件存在。

  • 确认 IR 文件是有效的,可以通过 OpenVINO 的 Model Optimizer 工具生成,并且没有损坏。


2. 检查输入和输出 Blob 的名称



  • 确保你在 ie_infer_request_set_blob 中使用的输入和输出 Blob 名称与模型中的输入和输出节点名称一致。

  • 可以通过 ie_core_read_networkie_network_get_inputs_info 等函数来获取模型的输入和输出信息。


3. 检查 Blob 的维度



  • 确保你设置的 Blob 的维度与模型的输入维度匹配。如果维度不匹配,可能会导致错误。

  • 使用 ie_blob_get_dims 函数来检查 Blob 的维度。


4. 检查 OpenVINO 版本



  • 确保你使用的 OpenVINO 版本与你的代码和模型兼容。不同版本的 OpenVINO 可能会有不同的 API 行为或要求。


5. 检查硬件支持



  • 确保你的硬件设备(如 CPU、GPU、VPU 等)支持你加载的模型。

  • 使用 ie_core_get_available_devices 函数来检查可用的硬件设备。


6. 调试信息



  • 使用 ie_core_get_versions 函数来获取 OpenVINO 的版本信息,并确保它与你的代码和模型兼容。

  • 使用 ie_core_get_available_devices 函数来检查可用的硬件设备,并确保你使用的设备支持你加载的模型。


7. 参考 Hello 分类 C 样本



  • 确保你参考的 Hello 分类 C 样本代码是正确的,并且与你的代码逻辑一致。

  • 检查样本代码中 ie_infer_request_set_blob 的使用方式,确保你没有遗漏任何步骤。


8. 错误处理



  • 使用 ie_core_get_last_error 函数来获取更详细的错误信息,这有助于你定位问题的根源。


9. 日志和调试



  • 启用 OpenVINO 的日志功能,查看是否有更多的调试信息输出。可以通过设置环境变量 GLOG_minloglevel=0 来启用详细的日志输出。


示例代码片段


以下是一个简单的代码片段,展示了如何加载 IR 文件并设置 Blob:


#include 
#include

int main() {
    ie_core_t* core = NULL;
    ie_network_t* network = NULL;
    ie_executable_network_t* executable_network = NULL;
    ie_infer_request_t* infer_request = NULL;
    ie_blob_t* input_blob = NULL;
    ie_blob_t* output_blob = NULL;

    // 初始化核心
    ie_core_create(&core);

    // 读取网络
    ie_core_read_network(core, "model.xml", "model.bin", &network);

    // 加载网络到设备
    ie_core_load_network(core, network, "CPU", NULL, &executable_network);

    // 创建推理请求
    ie_exec_network_create_infer_request(executable_network, &infer_request);

    // 获取输入 Blob
    ie_infer_request_get_blob(infer_request, "input", &input_blob);

    // 设置输入数据(假设数据已经准备好)
    // ie_blob_set_data(input_blob, input_data, input_size);

    // 执行推理
    ie_infer_request_infer(infer_request);

    // 获取输出 Blob
    ie_infer_request_get_blob(infer_request, "output", &output_blob);

    // 处理输出数据
    // ie_blob_get_data(output_blob, output_data, output_size);

    // 释放资源
    ie_blob_free(&input_blob);
    ie_blob_free(&output_blob);
    ie_infer_request_free(&infer_request);
    ie_exec_network_free(&executable_network);
    ie_network_free(&network);
    ie_core_free(&core);

    return 0;
}

总结


通过以上步骤,你应该能够定位并解决 ie_infer_request_set_blob 返回状态为 -1 的问题。如果问题仍然存在,建议参考 OpenVINO 的官方文档或社区论坛,获取更多的帮助和支持。

举报

更多回帖

×
20
完善资料,
赚取积分