FastDeploy部署(C++ Win10)

参考链接:FastDeploy C++部署保姆级教程

FastDeploy是百度为了解决AI部署落地难题,发布的新一代面向产业实践的推理部署工具。它旨在为AI开发者提供模型部署最优解,具备全场景、简单易用、极致高效三大特点。项目地址:FastDeploy项目地址

部署环境:

  • 系统:Windows10
  • VS版本:Visual Studio 2017
  • CUDA:11.6
  • cuDNN:8.9.0

Win10环境下FastDeploy C++部署:

  1. 下载C++ SDK预编译库,下载地址:C++ SDK预编译库

GPU部署官方环境要求:

  • CUDA >= 11.2
  • cuDNN >= 8.0

下载FastDeploy的GPU版本,下载地址(1.0.2版本):https://bj.bcebos.com/fastdeploy/release/cpp/fastdeploy-win-x64-gpu-1.0.2.zip

  1. 解压C++ SDK预编译库

对下载的fastdeploy-win-x64-gpu-1.0.2.zip进行解压,我的解压路径:D:\FastDeploy,解压后文件内容如下:
在这里插入图片描述
注意:参考链接中,作者说解压路径中最好不要有空格等特殊字符,原因是后续使用fastdeploy_init.bat抽取.dll文件时找不到路径。

  1. 数据准备

下载模型:https://bj.bcebos.com/paddlehub/fastdeploy/ppyoloe_crn_l_300e_coco.tgz
用于测试的图像:
在这里插入图片描述

  1. 开发代码

创建1个文件夹FastDeploy_Test(路径最好为全英文),在文件夹下创建文件FastDeploy_Test.cpp,可使用记事本或VS打开,打开后复制以下内容至FastDeploy_Test.cpp:

// 包含vision.h文件
#include "fastdeploy/vision.h"

// main函数程序主入口
int main(int argc, char* argv[]) {
  // 声明命名空间
  namespace vision = fastdeploy::vision;
  // opencv读取推理图片
  auto im = cv::imread("000000014439.jpg");
  // 加载部署模型
  auto model = vision::detection::PPYOLOE("ppyoloe_crn_l_300e_coco/model.pdmodel",
                                          "ppyoloe_crn_l_300e_coco/model.pdiparams",
                                          "ppyoloe_crn_l_300e_coco/infer_cfg.yml");
  
  // 声明检测结果
  vision::DetectionResult res;
  // 模型预测获取检测结果
  model.Predict(&im, &res);

  // 设置阈值过滤检测结果
  auto vis_im = vision::VisDetection(im, res, 0.5);
  // opencv将检测结果保存为图像
  cv::imwrite("vis_image.jpg", vis_im);
  // 程序结束
  return 0;
 }

注意:imread读取的图像文件名要和测试图像的文件名一致。

  1. 配置编译链接环境

可以使用CMakeLists.txt配置或visual studio新建项目手动配置包含目录和库目录(试了一下,确实不如CMakeLists.txt配置来的方便)。在FastDeploy_Test.cpp的同级目录下,新建CMakeLists.txt,打开后复制以下内容:

PROJECT(FastDeploy_Test C CXX)
CMAKE_MINIMUM_REQUIRED (VERSION 3.10)

# 指定下载解压后的fastdeploy库路径
option(FASTDEPLOY_INSTALL_DIR "Path of downloaded fastdeploy sdk.")

include(${FASTDEPLOY_INSTALL_DIR}/FastDeploy.cmake)

# 添加FastDeploy依赖头文件
include_directories(${FASTDEPLOY_INCS})

add_executable(FastDeploy_Test ${PROJECT_SOURCE_DIR}/FastDeploy_Test.cpp)
target_link_libraries(FastDeploy_Test ${FASTDEPLOY_LIBS})
  1. 编译生成解决方案

    (1)打开x64 Native Tools Command Prompt for VS 2017命令工具
    点击开始菜单,找到x64 Native Tools Command Prompt for VS 2017命令工具(也可能叫做 “适用于 VS 2017 的 x64 本机工具命令提示”),并使用cd命令切换到项目目录FastDeploy_Test
    在这里插入图片描述
    (2)编译FastDeploy_Test
    创建build文件夹并cd到该文件夹:

mkdir build && cd build

编译项目FastDeploy_Test:

cmake .. -G "Visual Studio 15 2017" -A x64 -DFASTDEPLOY_INSTALL_DIR="D:\fastdeploy\fastdeploy-win-x64-gpu-1.0.2" -DCUDA_DIRECTORY="C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.6"

注意:DFASTDEPLOY_INSTALL_DIR指定你的FastDeploy预编译库目录,DCUDA_DIRECTORY指定你的cuda目录。
运行结果如下:
在这里插入图片描述
build文件夹内容如下:
在这里插入图片描述

(3)生成exe文件:

msbuild FastDeploy_Test.sln /m:4 /p:Configuration=Release /p:Platform=x64

运行结果:
在这里插入图片描述

build文件夹内容更新:
在这里插入图片描述
生成的exe文件在release文件夹中,但是现在还无法运行,因为没有模型和数据。
(4)拷贝模型和数据
将ppyoloe_crn_l_300e_coco文件夹(推理模型)和000000014439.jpg文件(推理图片)拷贝到release文件夹下
在这里插入图片描述

  1. dll文件抽取

    (1)查看dll文件
    进入FastDeploy预编译类目录,执行以下命令

fastdeploy_init.bat show “D:/fastdeploy/fastdeploy-win-x64-gpu-1.0.2

在这里插入图片描述
(2)抽取项目所需dll文件到指定目录
进入FastDeploy预编译类目录,执行命令

fastdeploy_init.bat install "D:/FastDeploy/fastdeploy-win-x64-gpu-1.0.2" "D:/FastDeploy/FastDeploy_Test/build/Release"

点击 “y” 后,再按下任意键后开始抽取dll文件,完成后release文件夹内容如下:
在这里插入图片描述

  1. 项目运行
    双击release下的FastDeploy_Test.exe文件,等待程序执行,完成后检测结果将出现在release文件夹。
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/85865.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据库概述

目录 数据库 数据库的基本概念 数据 表 数据库 数据库管理系统 数据库系统 DBMS的主要功能 DBMS的工作模式 ​编辑 数据库的发展 数据库类型 关系数据库 关系数据库的构成 非关系数据库 非关系型数据库的优点 关系型数据库与非关系型数据库的区别 数据库 数据库…

openCV实战-系列教程2:阈值与平滑处理(图像阈值/图像平滑处理/高斯/中值滤波)、源码解读

1、图像阈值 t图像阈值函数,就是需要判断一下像素值大于一个数应该怎么处理,小于一个数应该怎么处理 ret, dst cv2.threshold(src, thresh, maxval, type) 参数解析: src: 原始输入图,只能输入单通道图像&#…

Shell 编程快速入门 之 数学计算和函数基础

目录 1. 求两数之和 整数之和 浮点数之和 2. 计算1-100的和 for...in C风格for循环 while...do until...do while和until的区别 关系运算符 break与continue的区别 3. shell函数基础知识 函数定义 函数名 函数体 参数 返回值 return返回值的含义 return与…

【Ubuntu】从Graylog到Grafana Loki:构建更强大的网络设备管理和监控系统

在将Graylog部署到生产环境时,我们遇到了一些问题,其中最主要的是无法安装MongoDB并且无法随时重启机器去修改BIOS设置来修复问题 【WARNING: MongoDB 5.0 requires a CPU with AVX support, and your current system does not appear to have that! 】。…

AI 绘画Stable Diffusion 研究(十一)sd图生图功能详解-美女换装

免责声明: 本案例所用安装包免费提供,无任何盈利目的。 大家好,我是风雨无阻。 为了让大家更直观的了解图生图功能,明白图生图功能到底是干嘛的,能做什么事情?今天我们继续介绍图生图的实用案例-美女换装的制作。 对于…

第6天----【位运算进阶之-----位与()】七夕特别版

今天我们来学习C语言的位与。 ❤️C语言的位与(&)操作是一种按位运算符,用于对两个操作数的每个对应位执行逻辑与操作。它的操作规则如下: 如果两个操作数的对应位都为1,则结果的对应位也为1。(全1才…

pdf怎么转换成图片?用这几种简单方法搞定

pdf怎么转换成图片?PDF作为一种通用的文档格式,广泛应用于各个领域。然而,在某些情况下,我们可能需要将PDF文件转换成图片格式,以便更方便地在网页、社交媒体或演示中使用。下面就给大家介绍三种简单而高效的方法来实现…

基于springboot灾区物资管理系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

【Leetcode】移动零

移动零 题目描述算法描述编程代码 链接: 移动零 题目描述 算法描述 编程代码 class Solution { public:void moveZeroes(vector<int>& nums) {//题目要求不可以复制数组&#xff0c;开辟额外空间int dest -1,curr 0;for(;curr < nums.size();curr){if(nums[cu…

linux中互斥锁,自旋锁,条件变量,信号量,与freeRTOS中的消息队列,信号量,互斥量,事件的区别

RTOS 对于目前主流的RTOS的任务&#xff0c;大部分都属于并发的线程。 因为MCU上的资源每个任务都是共享的&#xff0c;可以认为是单进程多线程模型。 【freertos】003-任务基础知识 在没有操作系统的时候两个应用程序进行消息传递一般使用全局变量的方式&#xff0c;但是如…

jenkins 是什么?

一、jenkins 是什么&#xff1f; Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具&#xff0c;起源于Hudson&#xff0c;主要用于持续、自动的构建/测试软件项目、监控外部任务的运行。Jenkins用Java语言编写&#xff0c;可在Tomcat等流行的servlet容器中运行&#…

GraphScope,开源图数据分析引擎的领航者

文章首发地址 GraphScope是一个开源的大规模图数据分析引擎&#xff0c;由Aliyun、阿里巴巴集团和华为公司共同开发。GraphScope旨在为大规模图数据处理和分析提供高性能、高效率的解决方案。 Github地址&#xff1a; https://github.com/alibaba/GraphScope GraphScope 的重…

redis7高级篇3 数据量亿级别的统计分析(hyperloglog,bitmap,geo)

一 亿级别统计分类 1.1 统计分类 1.聚合统计&#xff1a;统计多个集合聚合的结果&#xff0c;也就是多个集合之间交并差的统计。 2.排序统计&#xff1a;在需要展示最新列表&#xff0c;排行榜等场景时&#xff0c;如果数据更新频繁或者需要分页时&#xff0c;建议使用zset12…

适合国内用户的五款ChatGPT插件

众所周知使用ChatGPT3.5需要使用魔法且不稳定&#xff0c;订阅ChatGPT4.0每月需要支付20美元&#xff0c;并且使用次数有限制。对于那些不想每年花费240美元&#xff08;超过1500元人民币&#xff09;来使用GPT4.0的朋友们来说&#xff0c;还有别的办法吗&#xff1f; 答案…

安防视频能力平台EasyNVR视频汇聚平台关闭匿名登陆的问题的解决步骤

EasyNVR是基于RTSP/Onvif协议的安防视频能力平台&#xff0c;它可实现设备接入、实时直播、录像、检索与回放、存储、视频分发等视频能力服务&#xff0c;可覆盖全终端平台&#xff08;pc、手机、平板等终端&#xff09;&#xff0c;在智慧工厂、智慧工地、智慧社区、智慧校园等…

pbootcms系统安全防护设置大全

PbootCMS系统简介 PbootCMS是全新内核且永久开源免费的PHP企业网站开发建设管理系统&#xff0c;是一套高效、简洁、 强悍的可免费商用的PHP CMS源码&#xff0c;能够满足各类企业网站开发建设的需要。系统采用简单到想哭的模板标签&#xff0c;只要懂HTML就可快速开发企业网站…

[JavaWeb]【八】web后端开发-Mybatis

目录 一 介绍 二 Mybatis的入门 2.1 快速入门 2.1.1 准备SpringBoot工程 2.1.2 创建数据库mybatis以及对应库表user 2.1.3 创建User实体类 2.1.4 配置application.properties数据库连接信息 2.1.5 编写sql语句&#xff08;注解方式&#xff09; 2.1.6 测试运行 2.1.7 配…

无涯教程-Perl - unshift函数

描述 此函数按顺序将LIST中的元素放在ARRAY的开头。这与shift()相反。 语法 以下是此函数的简单语法- unshift ARRAY, LIST返回值 此函数返回ARRAY中新元素的数量。 例 以下是显示其基本用法的示例代码- #!/usr/bin/perl -warray ( 1, 2, 3, 4);print "Value of a…

容斥原理 博弈论(多种Nim游戏解法)

目录 容斥原理容斥原理的简介能被整除的数&#xff08;典型例题&#xff09;实现思路代码实现扩展&#xff1a;用DPS实现 博弈论博弈论中的相关性质博弈论的相关结论先手必败必胜的证明Nim游戏&#xff08;典型例题&#xff09;代码实现 台阶-Nim游戏&#xff08;典型例题&…

16.遍历二叉树,线索二叉树

目录 一. 遍历二叉树 &#xff08;1&#xff09;三种遍历方式 &#xff08;2&#xff09;递归遍历算法 &#xff08;3&#xff09;非递归遍历算法 &#xff08;4&#xff09;层次遍历算法 二. 基于递归遍历算法的二叉树有关算法 &#xff08;1&#xff09;二叉树的建立 …