【C++ 图像处理 fastDeploy】20230912-fastDeploy安装测试

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”为对应的解压后的文件夹名。就可以直接使用模型检测图片了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
OpenCV是一个开源计算机视觉库,提供了许多用于图像处理的函数和工具。下面是使用OpenCV C++实现图像处理基本操作的步骤: 1. 首先,需要在C++程序中包含OpenCV的头文件: ```c++ #include <opencv2/core/core.hpp> #include <opencv2/imgcodecs.hpp> #include <opencv2/highgui.hpp> #include <opencv2/imgproc.hpp> #include <iostream> ``` 2. 读取图像文件并显示图像: ```c++ cv::Mat image = cv::imread("example.jpg"); // 读取图像文件 cv::imshow("Image", image); // 显示图像 cv::waitKey(0); // 等待用户输入任意键继续 ``` 3. 转换图像的颜色空间: ```c++ cv::Mat gray_image; cv::cvtColor(image, gray_image, cv::COLOR_BGR2GRAY); // 将图像从BGR色彩空间转换为灰度色彩空间 cv::imshow("Gray Image", gray_image); cv::waitKey(0); ``` 4. 图像的平滑滤波: ```c++ cv::Mat blur_image; cv::GaussianBlur(image, blur_image, cv::Size(5, 5), 0); // 高斯滤波 cv::imshow("Blur Image", blur_image); cv::waitKey(0); ``` 5. 图像的边缘检测: ```c++ cv::Mat canny_image; cv::Canny(image, canny_image, 100, 200, 3); // Canny边缘检测 cv::imshow("Canny Image", canny_image); cv::waitKey(0); ``` 6. 识别图像中的轮廓: ```c++ cv::Mat contour_image = image.clone(); // 克隆原始图像,以便在上面绘制轮廓 cv::cvtColor(image, gray_image, cv::COLOR_BGR2GRAY); // 首先将图像从BGR色彩空间转换为灰度色彩空间 cv::threshold(gray_image, gray_image, 100, 255, cv::THRESH_BINARY); // 二值化图像 std::vector<std::vector<cv::Point>> contours; // 存储轮廓点的向量 std::vector<cv::Vec4i> hierarchy; // 存储轮廓层次结构的向量 cv::findContours(gray_image, contours, hierarchy, cv::RETR_TREE, cv::CHAIN_APPROX_SIMPLE); // 查找轮廓 for (int i = 0; i < contours.size(); i++) // 遍历所有轮廓并绘制 { cv::Scalar color = cv::Scalar(0, 0, 255); // 定义轮廓颜色(红色) cv::drawContours(contour_image, contours, i, color, 2, cv::LINE_8, hierarchy, 0); // 在图像上绘制每个轮廓 } cv::imshow("Contour Image", contour_image); cv::waitKey(0); ``` 引用: opencv(c++)实现图像处理基本操作。常见头文件 #include<opencv2/core/core.hpp> #include<opencv2/imgcodecs.hpp> #include<opencv2/highgui.hpp> #include<opencv2/imgproc.hpp> #include<iostream> [^1]。引用:Opencv c++图像处理)。openCV 中 cv::Rect 矩形类用法_sinat_38102206的博客-CSDN博客_cv rect [^2]。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豆得儿不是猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值