内窥镜项目

news2024/11/22 5:56:13

★ 手持pad内窥镜项目
项目描述:3D电子内窥镜软件项目是一个基于BS(浏览器服务器)架构的项目,旨在实现对内窥镜设备的远程控制和高级功能操作。该项目允许操作员使用平板电脑手动触摸屏上的按钮、外部按键或脚踏板 来控制内窥镜设备的多项功能,包括白平衡、暗区改善、视差调整等。项目还包括实时录像、录像分段设置、拍照功能,以及3D视频的上下、左右和交叉模式切换。此外,用户可以将视频文件导出至U盘,以便进一步分析和存档。
职责描述:
1、Java作为中间件,收到前端消息,放入阻塞队列 后,再通过TCP方式传递给后续微服务,实现指令操控功能。
2、控制录像的启动、停止以及根据空间或时间进行录像分段操作。
3、开发队列系统 ,以批量处理视频转换、合成和取消任务。
4、基于WebSocket 技术实现前后端之间的实时状态信息推送。
5、利用Netty 实现微服务之间的双向通信。
6、编写Docker 部署脚本,实现项目的一键化部署,包括启动、停止、打包和查看项目日志等功能,将项目根据版本存档。
7、编写内窥镜培训PPT,软件用户手册 、软件测试报告等。

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

项目背景和概述:

“我要介绍的项目是一个3D电子内窥镜软件项目,采用BS架构,旨在实现对内窥镜设备的远程控制和高级功能操作。”

项目目标和主要功能:

“该项目的主要目标是允许操作员通过平板电脑手动触摸屏、外部按键或脚踏板来控制内窥镜设备的多项功能,如白平衡、暗区改善和视差调整。此外,我们还实现了实时录像、录像分段设置、拍照功能,以及3D视频的多种模式切换。用户还可以将录制的视频文件导出至U盘,以便进一步分析和存档。”

挑战与解决方案:

在我最近的项目中,我面临了一些有趣的挑战,
消息处理和传递操作:
主要集中在消息处理和传递方面。我们的项目使用Java作为中间件来处理来自前端的消息。为了确保并发问题得到妥善处理,我们引入了@ConcurrentControl注解,它可以确保某些接口只允许一个线程同时访问。此外,为了控制向后端PLC设备发送指令的速率过快,我们采用了有界的阻塞队列,以确保消息的顺序性,避免发送过多的指令。
a.当队列为空的时候,获取队列中元素的消费者线程会被阻塞,同时唤醒生产者线程。
b.当队列满了的时候,向队列中添加元素的生产者线程被阻塞,同时唤醒消费者线程。
一旦消息进入队列,我们使用TCP协议(借助Netty框架)来可靠地将消息传递给后续的微服务,以确保消息安全地到达目的地。这个过程中,我学到了如何处理复杂的消息传递流程,同时保持高效性和可扩展性。
具体内容写在如下地址,
https://blog.csdn.net/weixin_43914278/article/details/133795193

录像分段操作:
另一个关键职责是实现录像的启动、停止,以及根据用户设置的参数进行自动录像分段。用户有机会自定义所有文件时长、单个文件时长、所有文件大小、单个文件大小等参数。这些设置为用户提供了极大的灵活性,同时也让系统能够智能地进行录像分段操作,以避免超出容量或时间限制。
在这里插入图片描述

其他重要功能:
空间和时间管理:
1、有个定时器会每隔6秒检测当前视频的空间和时间比如说项目中空间采用du -cm实时获取,并存入.logx文件,时间原先采用Linux指令ffmpeg递归地获取文件夹中所有视频时长,但是针对正在生成的视频文件不能通过ffmpeg方式获取时长,所以会在开始的时候记录时刻a,结束的时候记录时刻b,差值的形式作为视频时长记录到.logx文件中。为什么需要有文件记录空间与时间大小,因为待总空间大小超出时,需要进行从最早的视频依次删除文件,然后记录此时总空间剩余空间或时间大小"find " + recordRootPath + " -type f -printf ‘%T+ %p\n’ | grep mp4 | sort -n | head -n 1做到释放空间。
新建文件夹的特殊需求处理

2、还有一些特殊需求,比如每次发起结束视频的时候需要生成一个空的新文件夹存放下一次的视频,那你就得考虑跨天如何生成文件夹的问题(判断是否有当天的文件夹)。

磁盘空间管理
3、再比如磁盘空间满了怎么办(是不是得加上df -h判断磁盘已用空间)
极端情况下的应对
https://blog.csdn.net/weixin_43914278/article/details/133640791

4、极端情况下如果当天文件超过1000个时,需要执行覆盖逻辑,注意需要根据逆序寻找ls -t。
单个视频大小的考量

5、分段的单个视频大小需要保证大于2倍的实际录制的视频大小,否则用户如果将视频大小设置过小,根据程序逻辑会删除之前的视频。

个人贡献和学习经验

在项目中,我主要负责后端的设计和开发。

结尾和问题

总结,这个项目教会了我如何处理复杂的消息传递流程,同时确保高效性和可扩展性。我学到了如何满足用户需求,同时解决技术挑战,特别是在磁盘空间和时间管理方面。这些经验使我对项目管理和软件工程方面的知识有了更深刻的理解。

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

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

相关文章

[移动通讯]【Carrier Aggregation-11】【5G NR Carrier Aggregation (CA) basics 】

前言: 参考: RF Wireless world 里面的 《5G/NR - Carrier Aggregation》 《5G NR Carrier Aggregation (CA) basics | Carrier Aggregation frequency bands》 This page describes 5G NR Carrier Aggregation (CA) basics. It mentions Carrier Aggre…

Redis 的几种集群对比

文章目录 一、对比分析二、优缺点对比三、总结 如果您对Redis的了解不够深入请关注本栏目,本栏目包括Redis安装,Redis配置文件说明,Redis命令和数据类型说明,Redis持久化配置,Redis主从复制和哨兵机制,Redi…

一些常规的报错和解决方法(持续更新)

一些常规的报错和解决方法: 1、vue创建项目后,项目启动时报错You are using the runtime-only build of Vue where the template compiler is not available. Either pre-compile the templates into render functions, or use the compiler-included bu…

【JavaEE】实现简单博客系统-前端部分

文件目录&#xff1a; 展示&#xff1a; blog_list.html: <!DOCTYPE html> <html lang"cn"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><t…

05-SpringBoot中yaml文件的语法格式,在程序中读取yaml文件中数据的方式,yaml文件中引用数据的方式

yaml文件格式 语法格式 YAML(YAML Aint Markup Language)是一种数据序列化格式 , 具有容易阅读、容易与脚本语言交互、以数据为核心即重数据轻格式的特点 YAML数据常见的文件扩展名有yml格式(主流)和yaml格式两种 YAML文件的语法格式: 属性层级关系使用多行和缩进描述(同层…

第十一章《搞懂算法:聚类是怎么回事》笔记

聚类是机器学习中一种重要的无监督算法&#xff0c;可以将数据点归结为一系列的特定组合。归为一类的数据点具有相同的特性&#xff0c;而不同类别的数据点则具有各不相同的属性。 11.1 聚类算法介绍 人们将物理或抽象对象的集合分成由类似 的对象组成的多个类的过程被称为聚…

使用IDEA让文本对比不在变的困难

文章目录 前言操作1、IDEA与电脑磁盘任意文件的比较2、项目内部的文件比较3、剪切板比较4、IDEA本地历史比较5、IDEA版本历史对比 前言 在日常实际开发当中我们常常会对一些代码或内容进行比对查看是否有差异&#xff0c;这个时候不需要借用第三方比对插件&#xff0c;在IDEA中…

ubuntu 20.04 server安装

ubuntu 20.04 server安装 ubuntu-20.04.6-live-server-amd64.iso 安装 安装ubuntu20.04 TLS系统后&#xff0c;开机卡在“A start job is running for wait for network to be Configured”等待连接两分多钟。 cd /etc/systemd/system/network-online.target.wants/在[Servi…

【UE4】UE编辑器乱码问题

环境&#xff1a;UE4.27、vs2019 如何解决 问题原因&#xff0c;UE的编码默认是UTF-8&#xff0c;VS的默认编码是GBK 通过"高级保存选项" 直接修改VS的 .h头文件 的 编码 为 UTF-8 步骤1. 步骤2. 修改编码后&#xff0c;从新编译&#xff0c;然后就可以解决编辑器…

Linux基础环境开发工具的使用(二):动静态库的理解,make,makefile

Linux基础环境开发工具的使用[二] 一.动静态库的初步理解1.库的作用2.Linux和Windows中库的后缀名3.如何在Linux中看一个的库名字4.Linux中和Windows平台怎样支持开发的?5.动静态库的概念6.动静态库的优缺点与补充7.代码验证 二.make,makefile1.功能2.基本语法1.快速使用2.依赖…

SV-704LW 无线WIFI网络音柱

SV-704LW 无线WIFI网络音柱(工业级) 一、描述 SV-704LW是深圳锐科达电子有限公司的一款壁挂式WIFI无线网络音柱&#xff0c;通过WIFI无线接入到WIFI覆盖的网络中&#xff0c;可将网络音源通过自带的功放和喇叭输出播放&#xff0c;其采用防水设计&#xff0c;功率可以从30W到6…

品牌如何长期占领小红书市场,小红书投放复盘怎么规划?

想要实现产品种草与品牌营销&#xff0c;达人投放成了很多品牌的选择。然而随着达人协助成本的水涨船高&#xff0c;提高达人投放结果&#xff0c;就变得迫在眉睫。今天我们将为大家分享下&#xff0c;品牌如何长期占领小红书市场&#xff0c;小红书投放复盘怎么规划&#xff1…

找不到x3daudio1_7.dll的解决方法,快速修复x3daudio1_7.dll缺失问题

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“找不到x3daudio1_7.dll”。这个错误提示通常出现在运行某些程序或游戏时&#xff0c;这个文件是与音频设备相关的动态链接库文件&#xff0c;如果缺失或损坏&#xff0c;可能会导致软件游戏…

RabbitMQ(高级特性):限流

消费端限流 在rabbitmq中&#xff0c;使用消费端限流必须开启手动签收信息 过MQ可以对请求进行“削峰填谷”&#xff0c;即通过消费端限流的方式限制消息的拉取速度&#xff0c;达到保护消费端的目的。 生产者批量发送消息&#xff1a; Test public void testSendBatch() {…

聊聊 Python 的单元测试框架:unittest!

前言 说到 Python 的单元测试框架&#xff0c;想必接触过 Python 的朋友脑袋里第一个想到的就是 unittest。 的确&#xff0c;作为 Python 的标准库&#xff0c;它很优秀&#xff0c;并被广泛用于各个项目。但你知道吗&#xff1f;其实在 Python 众多项目中&#xff0c;主流的…

【SQL篇】一、Flink动态表与流的关系以及DDL语法

文章目录 1、启动SQL客户端2、SQL客户端常用配置3、动态表和持续查询4、将流转为动态表5、用SQL持续查询6、动态表转为流7、时间属性8、DDL-数据库相关9、DDL-表相关 1、启动SQL客户端 启动Flink&#xff08;基于yarn-session模式为例&#xff09;&#xff1a; /opt/module/f…

PubDef:使用公共模型防御迁移攻击

对抗性攻击对机器学习系统的可靠性和安全性构成了严重威胁。通过对输入进行微小的变动&#xff0c;攻击者就可以导致模型生成完全错误的输出。防御这种攻击是一个很活跃的研究领域&#xff0c;但大多数提议的防御措施都存在重大的缺点。 这篇来自加州大学伯克利分校研究人员的…

全光谱大面积氙光灯太阳光模拟器老化测试

氙灯光源太阳光模拟器广泛应用于光解水产氢、光化学催化、二氧化碳制甲醇、光化学合成、光降解污染物、 水污染处理、生物光照,光学检测、太阳能电池研究、荧光材料测试(透射、反射、吸收) 太阳能电池特性测试&#xff0c;光热转化&#xff0c;光电材料特性测试&#xff0c;生物…

Docker Compose安装milvus向量数据库单机版-milvus基本操作

目录 安装Ubuntu 22.04 LTS在power shell启动milvus容器安装docker desktop下载yaml文件启动milvus容器Milvus管理软件Attu python连接milvus配置下载wget示例导入必要的模块和类与Milvus数据库建立连接创建名为"hello_milvus"的Milvus数据表插入数据创建索引基于向量…

docker容器技术基础入门

docker容器技术基础入门 容器(Container) 容器是一种基础工具&#xff1b;泛指任何可以用于容纳其他物品的工具&#xff0c;可以部分或完全封闭&#xff0c;被用于容纳、储存、运输物品&#xff1b;物体可以被放置在容器中&#xff0c;而容器则可以保护内容物&#xff1b;容器…