当前位置: 首页 > news >正文

paddle表情识别部署

表情识别模块

  • 1.环境部署
    • 1.1同样采用fastDeploy库
    • 1.2相关模型
  • 2.封装成静态库
    • 2.1参考[百度Paddle中PP-Mattingv2的部署并将之封装并调用一个C++静态库](https://blog.csdn.net/weixin_43564060/article/details/128882099)
    • 2.2项目依赖添加
    • 2.3生成成功
  • 3.test
    • 3.1创建emotion_test项目
    • 3.2进行项目配置
    • 3.3解决dll文件缺失的问题
    • 3.4运行结果

1.环境部署

1.1同样采用fastDeploy库

可以参考百度Paddle中PP-Mattingv2的部署并将之封装并调用一个C++静态库,部署过程大致一样,只是核心的代码进行了改动。

1.2相关模型

模型使用的自训练resnet50模型,其中输出的标签为:

  • 0.angry
  • 1.disgust
  • 2.fear
  • 3.happy
  • 4.neutral
  • 5.sad
  • 6.surprise
    模型需要三个文件:model.pdmodel,model.pdiparams,model.yml

2.封装成静态库

2.1参考百度Paddle中PP-Mattingv2的部署并将之封装并调用一个C++静态库

framework.h代码:

#pragma once#define WIN32_LEAN_AND_MEAN             // 从 Windows 头文件中排除极少使用的内容
#include "fastdeploy/vision.h"std::string emotion_CpuInfer(const std::string& model_dir, const cv::Mat& image_file);std::string emotion_GpuInfer(const std::string& model_dir, const cv::Mat& image_file);int emotion_infer_by_camera(const std::string& device, const std::string& model_dir, const std::string& window_name);

在这里插入图片描述

emotion_StaticLib.cpp代码为:

// emotion_StaticLib.cpp : 定义静态库的函数。
//#include "pch.h"#include "framework.h"#ifdef WIN32
const char sep = '\\';
#else
const char sep = '/';
#endifstd::string emotion_CpuInfer(const std::string& model_dir, const cv::Mat& image_file) {auto model_file = model_dir + sep + "model.pdmodel";auto params_file = model_dir + sep + "model.pdiparams";auto config_file = model_dir + sep + "inference.yml";auto option = fastdeploy::RuntimeOption();option.UseCpu();auto model = fastdeploy::vision::classification::PaddleClasModel(model_file, params_file, config_file, option);std::string result;if (!model.Initialized()) {std::cerr << "Failed to initialize." << std::endl;result = "Failed to initialize.";return result;}auto im = image_file;fastdeploy::vision::ClassifyResult res;if (!model.Predict(im, &res)) {std::cerr << "Failed to predict." << std::endl;result = "Failed to initialize.";return result;}// print resstd::cout << res.Str() << std::endl;return res.Str();
}std::string emotion_GpuInfer(const std::string& model_dir, const cv::Mat& image_file) {auto model_file = model_dir + sep + "model.pdmodel";auto params_file = model_dir + sep + "model.pdiparams";auto config_file = model_dir + sep + "inference.yml";auto option = fastdeploy::RuntimeOption();option.UseGpu();auto model = fastdeploy::vision::classification::PaddleClasModel(model_file, params_file, config_file, option);std::string result;if (!model.Initialized()) {std::cerr << "Failed to initialize." << std::endl;result = "Failed to initialize.";return result;}auto im = image_file;fastdeploy::vision::ClassifyResult res;if (!model.Predict(im, &res)) {std::cerr << "Failed to predict." << std::endl;result = "Failed to initialize.";return result;}// print resstd::cout << res.Str() << std::endl;return res.Str();
}int emotion_infer_by_camera(const std::string& device, const std::string& model_dir, const std::string& window_name = "video") {cv::VideoCapture cap;cap.open(0);std::string result;if (!cap.isOpened()) {std::cout << "open camera failed!" << std::endl;return 0;}cv::namedWindow(window_name, 1);while (1) {time_t t_now = time(0);cv::Mat frame;cap >> frame;if (frame.empty()) {return 0;}cv::imshow(window_name, frame);emotion_CpuInfer(model_dir, frame);if (device == "gpu") {cv::imshow(window_name, frame);result = emotion_GpuInfer(model_dir, frame);}else {cv::imshow(window_name, frame);result = emotion_CpuInfer(model_dir, frame);}std::cout << "emotion此帧共消耗" << (time(0) - t_now) << "秒" << std::endl;if (cv::waitKey(30) >= 0) break;}cap.release();return 1;
}

在这里插入图片描述

所有的环境部署步骤与百度Paddle中PP-Mattingv2的部署并将之封装并调用一个C++静态库一致,在该部署过程中,只进行了cpu环境的部署

2.2项目依赖添加

在这里插入图片描述
在这里插入图片描述
注意:所有的环境必须是Release X64
在这里插入图片描述

2.3生成成功

在这里插入图片描述
在这里插入图片描述
到此为止封装已经超过了,在项目里面即可部署使用。

3.test

3.1创建emotion_test项目

在这里插入图片描述
emotion_test.cpp

#include <vector>
#include <iostream>
#include <string>
#include "C:/Users/44869/Desktop/emotion_StaticLib/emotion_StaticLib/pch.h"int main() {emotion_infer_by_camera("cpu", "A:/emotion/resnet50", "emotion");return 0;
}

3.2进行项目配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.3解决dll文件缺失的问题

运行C:\Users\44869\Desktop\emotion_StaticLib\fastdeploy-win-x64-1.0.3下的fastdeploy_init.bat
生成的所有dll文件复制到C:\Users\44869\Desktop\emotion_StaticLib\emotion_test\x64\Release下即可

3.4运行结果

在这里插入图片描述

http://www.lryc.cn/news/3496.html

相关文章:

  • Python-第五天 Python函数
  • 【Python学习笔记】28.Python3 错误和异常
  • SQLServer 迁移到 MySQL 工具对比
  • 分析finebi5.x仪表板组件获取数据过程(数据是数据集或者sql的)
  • 设计模式--适配器模式 Adapter Pattern
  • PVE虚拟机篇-rest api
  • 2022-2025学年面向中小学生的白名单全国性竞赛活动清单及官网地址链接
  • Python 高级编程之生成器与协程进阶(五)
  • Django框架之视图和URL
  • Python 的Tkinter包系列之七:好例子补充2
  • 每日一练-等差数列
  • 使用动态参数构建CUDA图
  • 在Fortran中调用Python教程
  • 04-PS人像磨皮方法
  • nginx反向代理+负载均衡上传webshell重难点+apache漏洞
  • transition组件的使用
  • 多行文本在块元素中垂直居中
  • 在 WebAssembly 中使用 C/C++ 和 libbpf 编写 eBPF 程序
  • leveldb源码解析六——compact
  • 数据结构(二):单向链表、双向链表
  • COCO物体检测评测方法简介
  • 记一次上环境获取资源失败的案例
  • 实战超详细MySQL8离线安装
  • 依赖倒置原则|SOLID as a rock
  • Webpack的知识要点
  • handler解析(2) -Handler源码解析
  • 【算法】kmp
  • git 常用命令之 git checkout
  • 一些常见错误
  • [单片机框架][调试功能] 回溯案发现场