fastDeploy安装测试
一、环境
Microsoft Visual C++ 2022
fastdeploy-win-x64-1.0.7,下载地址
测试数据
二、fastDeploy下载安装配置环境
2.1 下载
下载地址见"一、环境"中的链接。可以选择下载源码自己编译,也可以选择预编译好的库,下载后直接配置开发环境。我选择直接下载预编译好的库。
首先切换“中文模式”
然后向下滑动,可以找到“预编译库下载安装”。
如果没有GPU环境就选“CPU部署环境”下的C++SDK安装,有GPU选谁都一样,GPU会计算快些。找到下面箭头的压缩文件下载。
下载好后,有些文件路径下(文件路径中出现有空格的),需要移动,因为之后有一步需要cmd模式下使用路径,就算给文件路径打上双引号还是会有问题,所以直接一步搞定,移动到没有特殊字符的文件夹下。如下,我移动到了
D:\Program
文件夹下。
然后进入进入“fastdeploy-win-x64-1.0.7”文件夹下,在导航栏中输入cmd,进入cmd模式
在cmd对话框中,输入下面命令:
fastdeploy_init.bat install %cd% .\dir_to_copy
该命令会把fastdeploy使用的所有dll拷贝到当前目录的“dir_to_copy”文件夹下。
运行结束后,可以在“fastdeploy-win-x64-1.0.7”文件夹下看到新增了“dir_to_copy”,并且里面有多个dll文件。
这里面的dll都会拷贝到之后的项目运行目录下。
2.2 配置环境
需要创建项目,我创建的名字为“fastDeployDemo"。
选择的是"Release"和"x64"。
2.2.1 配置项目属性。
首先进入项目属性配置界面。有以下两种方式。
第一种方式,如序号1,右键点击项目名“fastDeployDemo”,选择“属性”,进入项目属性配置界面。
第二种方式,如序号2,需要先选中“fastDeployDemo”项目,然后再在导航栏中点击“项目”,选择“属性”。
然后依次配置"附加包含目录"。
D:\Program\fastdeploy-win-x64-1.0.7\third_libs\install\opencv\build\include
D:\Program\fastdeploy-win-x64-1.0.7\include
再配置"附加库目录"。
D:\Program\fastdeploy-win-x64-1.0.7\third_libs\install\opencv\build\x64\vc15\lib
D:\Program\fastdeploy-win-x64-1.0.7\lib
最后配置附加依赖项
D:\Program\fastdeploy-win-x64-1.0.7\lib\fastdeploy.lib
D:\Program\fastdeploy-win-x64-1.0.7\third_libs\install\opencv\build\x64\vc15\lib\opencv_world3416.lib
2.2.2 移动dll文件到项目文件夹下
在2.1节中已经将需要移动的dll文件已经存放在“dir_to_copy”文件夹下了,将该文件加下的所有dll文件移动到项目文件夹下,我的路径为:
D:\Microsoft Visual Studio\workspace\fastDeployDemo
三、测试
以上fastdeploy-win-x64-1.0.7的环境已经配置完成了。接下来就是测试了。
3.1 测试准备
将“ppyoloe_crn_l_300e_coc”文件解压在
D:\Microsoft Visual Studio\workspace\fastDeployDemo
路径下,如下图
“test_det.jpg”文件直接放在上述路径下。
3.2 测试代码
#include "fastdeploy/vision.h"
#ifdef WIN32
const char sep = '\\';
#else
const char sep = '/';
#endif
void CpuInfer(const std::string& model_dir, const std::string& image_file) {
auto model_file = model_dir + sep + "model.pdmodel";
auto params_file = model_dir + sep + "model.pdiparams";
auto config_file = model_dir + sep + "infer_cfg.yml";
//auto option = fastdeploy::RuntimeOption();
//option.UseCpu();
fastdeploy::RuntimeOption option;
auto model = fastdeploy::vision::detection::PPYOLOE(model_file, params_file,
config_file, option);
if (!model.Initialized()) {
std::cerr << "Failed to initialize." << std::endl;
return;
}
auto im = cv::imread(image_file);
fastdeploy::vision::DetectionResult res;
if (!model.Predict(im, &res)) {
std::cerr << "Failed to predict." << std::endl;
return;
}
//assert(model.Predict(&im, &result)); // 判断是否预测成功
std::cout << res.Str() << std::endl;
auto vis_im = fastdeploy::vision::VisDetection(im, res, 0.5);
cv::imwrite("vis_result.jpg", vis_im);
std::cout << "Visualized result saved in ./vis_result.jpg" << std::endl;
}
int main(int argc, char* argv[]) {
std::string model_dir = "ppyoloe_crn_l_300e_coco";
std::string image_file = "test_det.jpg";
CpuInfer(model_dir, image_file);
return 0;
}
3.3 测试结果
运行上述代码,控制台输出如下所示。
运行成功会在项目目录下产生“vis_result.jpg”文件。
其结果展示如下所示。上图为原图,下图为结果图。
3.4 坑
运行fastDeploy的测试代码,没有输出结果,和原图还是一摸一样。
在fastDeploy的开发文档中,给的源代码为:
#include "fastdeploy/vision.h"
int main() {
std::string model_file = "ppyoloe_crn_l_300e_coco/model.pdmodel";
std::string params_file = "ppyoloe_crn_l_300e_coco/model.pdiparams";
std::string infer_cfg_file = "ppyoloe_crn_l_300e_coco/infer_cfg.yml";
// 模型推理的配置信息
fastdeploy::RuntimeOption option;
auto model = fastdeploy::vision::detection::PPYOLOE(model_file, params_file, infer_cfg_file, option);
assert(model.Initialized()); // 判断模型是否初始化成功
cv::Mat im = cv::imread("test_det.jpg");
fastdeploy::vision::DetectionResult result;
assert(model.Predict(&im, &result)); // 判断是否预测成功
std::cout << result.Str() << std::endl;
cv::Mat vis_im = fastdeploy::vision::Visualize::VisDetection(im, result, 0.5);
// 可视化结果保存到本地
cv::imwrite("vis_result.jpg", vis_im);
std::cout << "Visualized result save in vis_result.jpg" << std::endl;
return 0;
}
这个源码和我提供的测试代码,其实最主要的差别在于“判断是否预测成功”这一块的代码:
fastdeploy::vision::DetectionResult res;
if (!model.Predict(im, &res)) {
std::cerr << "Failed to predict." << std::endl;
return;
}// 判断是否预测成功
assert(model.Predict(&im, &result)); // 判断是否预测成功
使用assert的方式就会没有检测结果,所以需要替换掉assert,使用第一种方式就能运行出结果。
四、其他资源下载
模型下载地址:https://aistudio.baidu.com/modelsoverview
从该链接下载模型后,可直接解压在项目文件夹下,替换
std::string model_dir = "ppyoloe_crn_l_300e_coco";
中的“ppyoloe_crn_l_300e_coco”为对应的解压后的文件夹名。就可以直接使用模型检测图片了。