OpenCV Error: Assertion failed + error: (-215) 使用ros opencv中的DNN模塊報錯


當嘗試編寫python2.7的ROS程序時,使用  import  cv2 語句的時候,程序可能會自動使用ROS自帶的OpenCV3.3.1- dev( path :  /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so),而非我們自己安裝的高版本OpenCV( path: /usr/local/lib/python2.7/dist-packages/cv2.so)。

我的部分程序使用了OpenCV的DNN模塊提供的face detection功能,

DNN = "CAFFE"
if DNN == "CAFFE":
    modelFile = "res10_300x300_ssd_iter_140000_fp16.caffemodel"
    configFile = "deploy.prototxt"
    net = cv2.dnn.readNetFromCaffe(configFile, modelFile)

 

當和ROS的代碼一起執行時,程序報錯。

[ INFO:0] Initialize OpenCL runtime...
OpenCV Error: Assertion failed (input.dims == 4 && (input.type() == 5 || input.type() == 6)) in finalize, file /tmp/binarydeb/ros-kinetic-opencv3-3.3.1/modules/dnn/src/layers/convolution_layer.cpp, line 78
Traceback (most recent call last):
  File "detect_faces.py", line 41, in <module>
    detections = net.forward()
cv2.error: /tmp/binarydeb/ros-kinetic-opencv3-3.3.1/modules/dnn/src/layers/convolution_layer.cpp:78: error: (-215) input.dims == 4 && (input.type() == 5 || input.type() == 6) in function finalize

 

emmm....試了幾種方法,最有效的就是刪除ros包中的cv2.so,讓程序自己去使用我們自己安裝的高版本opencv。為了防止以后出問題,現在只是把ros的cv2.so放入trash, 而不是直接 rm 刪除。 步驟如下:

sudo easy_install trash-cli
# trash-cli是一款用來文件移入trash和恢復的軟件

sudo trash-put /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so
# 這就可以了

# 如果python2.7的包里opencv版本也低的話,自行安裝特定版本的語句為
sudo pip2 install opencv-python==3.4.0.12

然后運行程序,就不報錯了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM