opecv4.0.1 dnn 運行報錯

開源環境 vs2015 + opencv4.0.1

代碼片段

void init()
{
// 初始化網絡
	Net net = readNetFromCaffe(modelDesc, modelBinary);
	Net netRecogn = readNetFromTorch(facemodel);
	net.setPreferableBackend(DNN_BACKEND_OPENCV);
//	net.setPreferableBackend(DNN_BACKEND_INFERENCE_ENGINE);
	net.setPreferableTarget(DNN_TARGET_CPU);

	netRecogn.setPreferableBackend(DNN_BACKEND_OPENCV);
	//netRecogn.setPreferableBackend(DNN_BACKEND_INFERENCE_ENGINE);
	netRecogn.setPreferableTarget(DNN_TARGET_CPU);

}


void recognize_face(Mat &face, Net net, vector<float> &fv) 
{
	Mat blob = blobFromImage(face, 1.0/255.0, Size(96, 96), Scalar(0, 0, 0), true, false);
	net.setInput(blob);
	Mat probMat = net.forward();
	Mat vec = probMat.reshape(1, 1);
	printf("vec rows : %d, vec cols : %d \n", vec.rows, vec.cols);
	for (int i = 0; i < vec.cols; i++) 
    {
		float value = vec.at<float>(0, i);
		fv.push_back(value);
	}
}

 

在 Mat probMat = net.forward() 語句中 運行報錯

 OpenCV(4.0.1) Error: Assertion failed (haveInfEngine()) in cv::dnn::dnn4_v20181221::wrapMat, file C:\build\master_winpack-build-win64-vc14\opencv\modules\dnn\src\dnn.cpp, line 997

 

出錯原因是運行環境的opencv 沒有安裝IE 庫(Intel's Inference Engine library )。

將 net.setPreferableBackend(DNN_BACKEND_INFERENCE_ENGINE); 換成 net.setPreferableBackend(DNN_BACKEND_OPENCV); 即可
 

DNN 後臺枚舉:


enum Backend 
{ //! DNN_BACKEND_DEFAULT equals to DNN_BACKEND_INFERENCE_ENGINE if
 //! OpenCV is built with Intel's Inference Engine library or 
//! DNN_BACKEND_OPENCV otherwise. DNN_BACKEND_DEFAULT, 

DNN_BACKEND_HALIDE,
 DNN_BACKEND_INFERENCE_ENGINE, 
DNN_BACKEND_OPENCV, 
DNN_BACKEND_VKCOM 
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章