開源環境 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
};