微表情识别API + c++并发服务器系统

news2024/11/21 1:29:23

微表情识别API系统

该项目只开源前后端程序,模型不开源
地址:https://github.com/lin-lai/-API-

更新功能

4.1版本

  1. 改用epoll实现IO多路复用并发服务器
  2. 去除标志位设定—正在考虑用协议实现

项目介绍

本项目用于检测并识别视频中人脸的微表情

目标任务:

  1. 用户上传一段人脸视频

    在这里插入图片描述

  2. 合成可以播放的处理后HLS视频流文件,用户可下载

    在这里插入图片描述

    在这里插入图片描述

演示视频:

https://www.bilibili.com/video/BV13u4y1C7ZT/


项目架构

总结构

c++版服务器+识别API

开源和演示都是c++版
在这里插入图片描述

python版服务器+识别API

在这里插入图片描述

前后处理模块

版本1:linux的c++并发服务器项目
  1. TCP套接字服务器

  2. IO多路复用(select)实现并发

  3. 指令上传下载视频

  4. 文件传输设置开始结束标志位

  5. 使用消息前缀传输数据,防止粘包

  6. 子进程使用ffmpeg分块转成1s的ts流

  7. 循环向API发送视频请求,处理json

  8. 循环合成新视频

版本2:python推流并发服务器
  1. 前台:tornado并发服务器

  2. 分块MP4—ffmpeg

  3. 异步并发 发送API请求,处理json----asyncio+aiohttp

  4. oss推流——阿里云oss服务


API模块

1.pytorch训练识别模型
模型

双帧法 基于resnet的改进模型

结果

在测试集上,模型达到了98%的准确率

输入

一段1s视频

输出

识别到的视频人物表情类别

2.torchserve封装识别模型和检测模型
检测模型

opencv的人脸检测模型

输入

一段1s视频

输出

识别到的类别和视频每一帧的识别人脸所在框组成的json字符串

#示例json
[
	[
	"surprise",
	[
		[136,503,87,454],
		[135,504,85,454],
		// other data...
	]
]
3.在docker容器中部署组成微服务API
运行环境

可以用GPU,也可以只用cpu

端口

暴露端口:30088

映射到容器的端口:8080

启动
torchserve --start --ncs --model-store model-store --models IDB-emo-video.mar

测试API示例

本机终端


D:\work\IDB-py3.9>curl http://127.0.0.1:30088/predictions/IDB-emo-video -T EP02_01f.avi
[
  "surprise",
  [
    [
      136,
      503,
      87,
      454
    ],
    [
      135,
      504,
      85,
      454
    ],
    [
      134,
      504,
      84,
      454
    ],
    // other data...
  ]
]

docker容器内部终端
在这里插入图片描述


C++并发服务器详细说明

文件结构

项目架构
lb@lb-xa:~/myProject/网编微表情识别API/服务端/4.0$ tree -L 2
.
├── data				---------用户上传文件保存位置
│   ├── 1.txt
│   ├── 2.txt
│   ├── final			---------用户原视频转HLS保存文件夹
│   ├── final.mp4		---------用户上传原视频
│   ├── other
│   ├── output_video	---------API合成HLS文件保存文件夹
│   └── test.txt
├── func				---------功能模块
│   ├── UpDownFile.cpp
│   └── VideoHandle.cpp
├── include				---------头文件
│   ├── myhead.h
│   ├── UpDownFile.h
│   └── VideoHandle.h
├── main				---------项目可执行文件
├── main.cpp			---------项目主入口文件
├── Makefile			---------makefile编译项目
├── output				---------编译中间生成文件
│   ├── func
│   ├── main.d
│   └── main.o
└── 说明文档.txt

8 directories, 15 files

数据存放文件夹结构

在这里插入图片描述

实现功能

  1. 指令上传下载

    上传:put file.txt
    下载:get file.txt
    
  2. IO多路复用(select),高性能并发

    初始化:
        fd_set stFdr;              // 初始化表
        FD_ZERO(&stFdr);           // 全置0
        FD_SET(fd_Server, &stFdr); // 将服务器接受请求IO文件加入检测表
    检测:
        fd_set stFdrTmp = stFdr;// 缓存表,存放select每次返回的结果
        ret = select(max + 1, &stFdrTmp, NULL, NULL, NULL);
    循环条件处理:
    	if (FD_ISSET(i, &stFdrTmp))// 如果表中i位置为1,表示有客户端活跃
    
  3. 自定义文件传输标志位,通知对方文件传输开始与结束

    STF:文件传输开始标志位
    EOF:文件传输结束标志位
    
  4. 使用消息前缀(int),防止粘包

    12put file.txt3STF1024data...
    
  5. 创建子进程处理视频

  6. 子进程处理完任务发信号通知父进程回收资源,防止僵尸进程

    父进程:
    	// 注册回收信号并绑定回调处理函数
    	signal(SIGUSR1, signal_handler); 
    	
    子进程:
    	// 结束后,给父进程发送信号通知回收资源
    	kill(getppid(), SIGUSR1);
    
    
  7. 将上传的视频处理成hls流媒体文件

    • 用户上传原视频文件

    • 转换HLS文件

  8. 循环发送API请求(curl库),携带ts文件

  9. json+opencv库处理API返回结果,生成新的ts流文件


5.0版本【研发中】

功能

  1. 添加数据库,上传指令先要带上上传文件的信息和一个key值,数据库保存文件上传者信息、key、视频位置

    put username key file.txt
    
  2. 下载指令需要带上上传者用户和key,服务器验证完,再返回下载文件

    get username key file.txt
    
  3. 采用生产者消费者架构模式,实现解耦

    • 线程1:循环发送视频请求,返回json结果加入队列
    • 线程2:循环从队列中拿取json,合成视频
  4. 发送视频请求采用IO多路复用框架实现并发

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【插件】页面引导库driver.js:

文章目录 一、效果图:二、实现思路:三、实现代码:【1】Driver.js 的技术特性【2】安装依赖【3】代码实现【4】 配置相关参数 一、效果图: 二、实现思路: 【官网】https://driverjs.com/docs/installation 【npm】https://www.npmjs.com/package/driver.js 【案例】改造driver.j…

用Python在XML和Excel表格之间实现互转

XML是一种超文本标记语言和文件格式,具有可自定义标签,易于扩展,便于编辑,传输便捷等优点。XML已成为应用数据交换的常用方式。虽然XML格式易于传输和开发者操作,但对于普通用户来说,数据以xls或xlsx的形式…

二维穿墙雷达CW112 的 优势

TFN CW112加固型二维定位穿墙雷达是一款综合UWB雷达和生物医学工程技术研制而成的人体目标探测装备。该产品可穿透建筑墙体等障碍物,实时获取其后方人体目标位置及数量等信息,具有穿透性强、轻质便携、可双手操控等特点,广泛应用于反恐处突、…

vue+element项目创建步骤

一、创建vue项目步骤 要创建一个Vue Element UI的项目,你可以按照以下步骤进行操作: 1.确保你已经安装了Node.js和npm(Node.js的包管理器)。你可以在命令行中运行以下命令来检查它们是否已经安装: node -vnpm -v2.使…

视频超过1g怎么压缩?分享简单的视频压缩方法

随着科技的发展,视频已经成为了我们日常生活中不可或缺的一部分。然而,有时候我们会遇到视频文件过大,无法顺利传输或存储的问题。那么,如何解决视频超过1g压缩的问题呢? #长假读书清单# 首先我们可以借助专业的压缩…

华为云云耀云服务器L实例评测|运行python脚本

目录 一、往期回顾二、华为云云耀云服务器L实例使用流程1、账号注册2、购买并配置云耀云服务器L实例3、登录并使用云耀云服务器L实例 三、为什么Python越来越火?四、使用宝塔运行Python脚本1、下载Python项目管理器2、上传项目到服务器3、添加项目4、安装requests启…

一文读懂Llama 2(从原理到实战)

简介 Llama 2,是Meta AI正式发布的最新一代开源大模型。 Llama 2训练所用的token翻了一倍至2万亿,同时对于使用大模型最重要的上下文长度限制,Llama 2也翻了一倍。Llama 2包含了70亿、130亿和700亿参数的模型。Meta宣布将与微软Azure进行合…

便携式水质采样设备助力毒情监测

便携式水质采样设备助力毒情监测 污水涉毒采样检测工作是运用科技手段准确评估监测辖区内毒情形势的重要手段。期间,民警详细了解了生活和工业污水的处理、排放以及服务范围、人口数量等情况,并就污水涉毒采样检测工作达成共识。随后,民警严格…

【车载开发系列】ECU Application Software程序刷新步骤

【车载开发系列】ECU Application Software程序刷新步骤 ECU Application Software程序刷新步骤 【车载开发系列】ECU Application Software程序刷新步骤一. Boot Software(引导软件)1)boot manager(启动管理器)2&…

Flink1.12.7 Standalone版本安装

官网下载版本:https://archive.apache.org/dist/flink/flink-1.12.7/flink-1.12.7-bin-scala_2.12.tgz 可以从首页找到Downloads | Apache Flink,一直往下拉 安装:下载后直接解压即可 添加全局参数: #vi /etc/profile FLINK_HO…

云服务器免费体检

三丰云提供了免费云服务器与免费虚拟主机服务, 个人学习、搭建个人网站或者微信小程序调试等可以申请一台。 免费申请网址为: https://www.sanfengyun.com/ 还是挺方便的,大家可以体验体验。

【校招VIP】前端操作系统之I/O调度算法

考点介绍 I/O 调度算法在各个进程竞争磁盘I/O的时候担当了裁判的角色。他要求请求的次序和时机做最优化的处理,以求得尽可能最好的整体I/O性能。 前端操作系统之I/O调度算法-相关题目及解析内容可点击文章末尾链接查看! 一、考点题目 1. 某文件占10个…

Kafka的消息存储机制

前面咱们简单讲了K啊开发入门相关的概念、架构、特点以及安装启动。 今天咱们来说一下它的消息存储机制。 前言: Kafka通过将消息持久化到磁盘上的日志文件来实现高吞吐量的消息传递。 这种存储机制使得Kafka能够处理大量的消息,并保证消息的可靠性。 1…

西门子S7-1200使用LRCF通信库与安川机器人进行EthernetIP通信的具体方法示例

西门子S7-1200使用LRCF通信库与安川机器人进行EthernetIP通信的具体方法示例 准备条件: PLC:S7-1200 1214C DC/DC/DC 系统版本4.5及以上。 机器人控制柜:安川YRC1000。 软件:TIA V17 PLC做主站,机器人做从站。 具体方法可参考以下内容: 使用的库文件为西门子 1200系列…

[React] react-hooks如何使用

react-hooks思想和初衷,也是把组件,颗粒化,单元化,形成独立的渲染环境,减少渲染次数,优化性能。 文章目录 1.为什么要使用hooks2.如何使用hooks2.1 useState2.2 useEffect2.3 useLayoutEffect2.4 useRef2.5…

【前段基础入门之】=>HTML5 的新增特性!

这里写目录标题 HTML5简介HTML5 优势新增语义化标签新增布局标签新增状态标签meter 标签progress 标签 新增列表标签新增文本标签文本注音文本标记 新增表单功能表单控件新增属性input 新增属性值form 标签新增属性 新增多媒体标签视频播放标签音乐播放标签 新增全局属性&#…

ICCV 2023 | 噪声关联鲁棒的图匹配方法

©PaperWeekly 原创 作者 | 林义杰 单位 | 四川大学 研究方向 | 多模态、多视角学习 论文标题: Graph Matching with Bi-level Noisy Correspondence 论文地址: https://arxiv.org/pdf/2212.04085.pdf 开源代码: https://github.com/XLe…

word文档莫名其妙的丢失了怎么办?7个方案恢复

不知道你是否曾经遇到过相似的情况:花费了数小时甚至数天编辑的Word文档,却莫名其妙的丢失了。这时的心情可能非常复杂。如果你不知道该怎么办,以下是几种恢复方案,希望能对你有所帮助! 关于Word文档 Word文档通常是由…

Vue路由与nodejs下载安装及环境变量的配置

目录 前言 一、Vue路由 1.路由简介 是什么 作用 应用场景 2.SPA简介 SPA是什么 SPA的优点 注意事项 3.路由实现思路 1.引入路由的js依赖 2.定义组件 3.定义组件与路径的对应关系 4.通过路由关系获取路由对象router 5.将路由对象挂载到实例中 6.触发路由事…