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

这篇具有很好参考价值的文章主要介绍了微表情识别API + c++并发服务器系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

该项目只开源c++并发服务器程序,模型API部分不开源
地址:https://github.com/lin-lai/-API-

更新功能

4.1版本

  1. 改用epoll实现IO多路复用并发服务器

项目介绍

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

目标任务:

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

    微表情识别API + c++并发服务器系统,面试,linux,c++,服务器,开发语言

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

    微表情识别API + c++并发服务器系统,面试,linux,c++,服务器,开发语言

    微表情识别API + c++并发服务器系统,面试,linux,c++,服务器,开发语言

演示视频:

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


项目架构

总结构

前后处理模块+API识别模块

c++版服务器+识别API

开源和演示都是c++版
微表情识别API + c++并发服务器系统,面试,linux,c++,服务器,开发语言

python版服务器+识别API

微表情识别API + c++并发服务器系统,面试,linux,c++,服务器,开发语言

前后处理模块

版本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容器内部终端
微表情识别API + c++并发服务器系统,面试,linux,c++,服务器,开发语言


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

数据存放文件夹结构

微表情识别API + c++并发服务器系统,面试,linux,c++,服务器,开发语言

实现功能

  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,服务器验证完,再返回下载文件文章来源地址https://www.toymoban.com/news/detail-731318.html

    get username key file.txt
    

到了这里,关于微表情识别API + c++并发服务器系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一、C++项目:仿muduo库实现高性能高并发服务器

    仿mudou库one thread oneloop式并发服务器实现 仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器: 通过实现的高并发服务器组件,可以简洁快速的完成一个高性能的服务器搭建。并且,通过组件内提供的不同应用层协议支持,也可以快速完成一个高性能应用服务器的搭建

    2024年02月07日
    浏览(51)
  • C++项目:仿mudou库one thread one loop式并发服务器实现

    目录 1.实现目标 2.HTTP服务器 3.Reactor模型 3.1分类 4.功能模块划分: 4.1SERVER模块: 4.2HTTP协议模块: 5.简单的秒级定时任务实现 5.1Linux提供给我们的定时器 5.2时间轮思想: 6.正则库的简单使用 7.通用类型any类型的实现 8.日志宏的实现 9.缓冲区buffer类的实现 10.套接字Socket类实现 11.

    2024年02月08日
    浏览(43)
  • Linux高并发服务器开发---笔记1(环境搭建、系统编程、多进程)

    0613 首先这整个系列笔记属于笔记①:牛客校招冲刺集训营—C++工程师中的 第四章 笔记。 视频课链接: 视频1:Linux高并发服务器开发(40h); 视频2:第4章 项目制作与技能提升(录播)(26h30min); 视频课3: 第5章 高频考点与真题精讲(录播)中的 5.10-5.13 项目回顾 有个学

    2024年02月15日
    浏览(67)
  • 基于linux下的高并发服务器开发(第一章)- Linux系统IO函数

     (1)man 2 open 打开一个已经存在的文件 int open(const char *pathname, int flags); 参数:             pathname:要打开文件路径             - flags:对文件的操作权限设置还有其他的设置             O_RDONLY,O_WRONLY,O_RDWR 这三个设置是互斥的 返回值:             返回一个新的文件描述

    2024年02月16日
    浏览(61)
  • 通过C++发布一个web api服务器,其实没有想象的难,一个库就够了

      为了实现一个包含静态文件输出、GET、POST 请求处理(含参数读取)、文件上传和下载功能的 Web API 服务,我们将使用  cpp-httplib 作为 HTTP 服务器库。首先,确保你已经安装了该库。 下面是一个简单的示例代码,演示如何使用  cpp-httplib 创建一个包含上述功能的 Web API 服

    2024年02月04日
    浏览(46)
  • C++服务器框架01_日志系统01

    sylar/log.h

    2024年02月12日
    浏览(50)
  • 【Python+百度API】实现人脸识别和颜值检测系统(包括人脸数量、年龄、颜值评分、性别、种族、表情检测)(超详细 附源码)

    需要源码请点赞关注收藏后评论区留下QQ~~~ 本系统根据已有的模型上改写,添加了在给照片打分的同时可以显示照片,这样显得更加直观和真实 如需要请自行前往官网查询文档相关内容 百度API官网 部分内容如下 接口能力 人脸检测 :检测图片中的人脸并标记出位置信息。

    2024年02月10日
    浏览(46)
  • C++服务器框架02_日志系统02_logger

    sylar/log.h sylar/log.cpp

    2024年02月12日
    浏览(43)
  • C++服务器框架03_日志系统03_appender

    sylar/log.h sylar/log.cpp

    2024年02月13日
    浏览(82)
  • linux并发服务器 —— 多进程并发(四)

    程序是包含一系列信息的文件,描述了如何在运行时创建一个进程; 进程是正在运行的程序的实例,可以用一个程序来创建多个进程; 用户内存空间包含程序代码以及代码所使用的变量,内核数据结构用于维护进程状态信息; 进程控制块(PCB):维护进程相关的信息,tas

    2024年02月11日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包