构造MxBase::Image时提示 “Failed to initialize all devices”
收藏回复举报
构造MxBase::Image时提示 “Failed to initialize all devices”
t('forum.solved') 已解决
发表于2024-08-23 11:20:41
0 查看

环境

  • CANN:8.0RC1
  • SDK:6.0RC1
  • 设备:Atlas 300I Pro

流程

  • 调用昇腾版本ffmpeg接口:av_hwdevice_ctx_create构造deviceCtx并初始化解码器

  • 解码视频流得到AVFrame

  • 使用AVFrame的数据构造MxBase::Image

  • 将Image转为Tensor时报错并死亡

    //部分代码
    
    // 1.初始化deviceCtx
    AVBufferRef* hwCtx = nullptr;
    int err = av_hwdevice_ctx_create(&hwCtx, AV_HWDEVICE_TYPE_ASCEND, deviceId.c_str(), NULL, 0);
    
    // 2.使用ffmpeg解码得到AVFrame
    
    // 3.构造Image并转为Tensor
    size_t size = src->linesize[0] * h + src->linesize[1] * (h * 0.5);
    std::shared_ptr<uint8_t> data(src->data[0]);
    MxBase::Image image(data, size, acl::deviceId, MxBase::Size(w, h));
    MxBase::Tensor tensor(std::vector<uint32_t>{(uint32_t)h, (uint32_t)w, 3}, MxBase::TensorDType::UINT8, acl::deviceId);
    tensor = image.ConvertToTensor();
  • 运行到最后一行时出现如下报错

    WARNING: Logging before InitGoogleLogging() is written to STDERR
    E20240823 11:14:24.986564 1258257 DeviceManager.cpp:153] Failed to initialize all devices. (Calling Function = aclInit, Code = 100002, Message = "ACL error, please refer to the document of CANN.") 
    E20240823 11:14:24.986614 1258257 DeviceManager.cpp:259] Init device failed. (Code = 1013, Message = "initialize failed") 
    E20240823 11:14:24.986631 1258257 ImageDptr.hpp:743] ImageToHost setDevice failed, please check the state of device. (Code = 1013, Message = "initialize failed") 
    E20240823 11:14:24.986645 1258257 ImageDptr.hpp:643] Fail to SetDevice in ConvertToTensor function (Code = 1013, Message = "initialize failed")

我要发帖子