yolov5-seg训练完成之后,转成了onnx模型,使用yolov5自带的predict.py脚本进行推理,默认情况下用的是onnxruntime推理,能正常出结果。然后增加了--dnn参数,想用opnecv的dnn进行推理,却出现了如下报错(附图),请问是什么原因导致的呢,我的推理命令是:
python ./segment/predict.py --weight ./runs/train-seg/exp4/weights/best.onnx --source ./datasets/result/images/test --imgsz 1536 --dnn
问题原因是在使用OpenCV的DNN进行推理时,报错"ERROR:src/opencv/modules/dnn/src/dnn.cpp:1645: error: (-2:Unspecified error) COI: Video I/O: No backend available in function 'icvExtractFilePart' ",这个错误通常是由于OpenCV编译时未开启支持Video I/O的选项导致的。解决这个问题需要重新编译OpenCV并开启Video I/O选项,下面是具体的解决步骤:
步骤一:进入OpenCV源码路径
cd <opencv_source_path>
步骤二:创建一个新的构建目录
mkdir build
cd build
步骤三:执行CMake命令,开启Video I/O选项
cmake -D CMAKE_BUILD_TYPE=Release \
-D WITH_FFMPEG=ON \
-D WITH_CUDA=OFF \
-D BUILD_TESTS=OFF \
-D BUILD_PERF_TESTS=OFF \
..
注意:根据自己的需求可以添加或删除其他选项,并根据CUDA支持情况决定是否使用WITH_CUDA选项。
步骤四:编译OpenCV
make -j8
注意:根据系统的CPU核心数进行调整命令中的-j参数。
步骤五:安装OpenCV
sudo make install
完成以上步骤后,重新运行推理脚本,即可使用OpenCV的DNN进行推理。如果问题仍然存在,请确认您的机器上是否安装了ffmpeg库,如果没有安装,请先安装ffmpeg库。
如果以上步骤仍然不能解决问题,请提供更多错误信息,以便我能更准确地帮助您解决问题。