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

远程监控系统项目里练习

1、项目目标

  • 设备端

(1)基于stm32mp157开发板,裁剪linux5.10.10,完成ov5640摄像头移植;

(2)完成用户层程序,完成对摄像头的控制及与云端服务的数据交互。

  • 云端

(1)完成TCP服务器,完成用户端<---->设备端的数据转发;

(2)使用关系型数据库,存储用户与设备的基础信息。

  • 用户端

(1)Qt开发应用界面,包括用户注册、用户登录、设备绑定、设备控制等功能;

(2)移植opencv,实现人脸框选功能。(未实现)

2、项目设计

2.1 Qt用户端设计(原型图)

2.1.1 用户登录和用户注册

  

点击眼睛:展示密码

2.1.2 主界面(Tab1: 设备监控)

双击左侧表格,设备具体信息展示在右侧;

点击开始按钮,黑色区域展示远程摄像头拍摄的内容(此时不可切换至其他页面,直至点击结束按钮)。

2.1.3 设备绑定(Tab2: 我的设备)

  

主要功能:将登录的用户与远程的摄像头设备关联。

2.2 Qt用户端程序设计

2.2.1 单例模式

        设计了 MyWidgetFactory,管理LoginWidget、RegistWidget、MainWidget和AddDevWidget的单例,并提供静态接口获取这些单例。避免了各个页面之间跳转需要将其他页面的示例注入到自身,解决了管理麻烦的问题。以下是部分代码展示:

class MyWidgetFactory
{
public:MyWidgetFactory()=delete;static void init();static LoginWidget* getLoginWidget();static RegistWidget* getRegistWidget();static MainWidget* getMainWidget();static AddDeviceWidget* getAddDeviceWidget();
};

2.2.2 工厂方法模式或代理模式

   设计了MyTcpProxy代理:

(1)QTcpSocket管理:以单例的方式管理QTcpSocket,将QTcpSocket与各个UI界面进行了解耦,在MyTcpProxy集中管理QTcpSocket单例,UI只处理UI的事情;

(2)报文发送:对外提供sendXXX的静态接口给各个界面调用以发送消息,在Proxy内部统一组包;

(3)报文解析:在MyTcpProxy内部完成TcpSocket返回消息的报文解析,并根据不同的报文种类,通过信号发送到各个界面,各界面通过槽函数进行消息返回处理及刷新界面;

(4)类MVC设计:对于复杂结构,如主界面的tab1和tab2的设备表格,构造表格设备模型,将解析内容刷新到模型,再通过信号发送到界面,实现类似MVC的模式。

class MyTcpProxy:public QObject
{
private:QTcpSocket* socket;  //单例: 全局有且仅有一个QSocketpublic:MyTcpProxy();static MyTcpProxy* getTcpProxy(); //获取代理:也单例,所有界面可通过此代理操作socket//发送报文(若干个函数),类似工厂方法模式static bool sndLogin(const QString & user,const QString & pwd);static bool sndReg(const QString & user,const QString & pwd);static bool sndStartCamera(const QString& userid,const QString& devid);// 省略......public slots://socket通信的槽函数,所有远端来的消息先通过Pro需要处理,Proxy再将通过信号发送到各个UI中//(1)报文的统一拆解//(2)预处理,例如视频数据,等一帧收齐并进行格式转换后,再发送给UI界面//(3)UI与逻辑分离,UI只处理UI的事情    void msgRecved();void onDisconn();signals://信号(若干)void loginRet(const bool& ret,const QString& msg);void regRet(const bool& ret,const QString& msg);void videoRecv(QPixmap& pic);// 省略......};

2.2.3 config.ini配置文件

        设计MyConfig类和config.ini文件,通过MyConfig::getValue(const QString & key)接口获取config.ini配置内容,避免将一些重要且需要频繁修改的参数写死在代码中,仅仅通过修改配置文件即可完成参数修改。

class MyConfig
{
private:static QSettings* settings;
public:MyConfig()=delete;static QString getConfigString(QString key);static int getConfigInt(QString key);static double getConfigDouble(QString key);
};

配置文件:

[network]
host=127.0.0.1
port=8080

虽然配置内容较少了,但体现了配置与代码分离的思想。

2.2.4 yuyv4与RGB32的格式转换

这个是有公式的,见源码的 ImageUtil类。 我是从yuyv4转成RGB32格式的。

QImage ImageUtil::yuyvArr2QImage(const uchar *data, int width, int height)
{QImage image(width, height, QImage::Format_RGB32);for (int y = 0; y < height; ++y) {// 获取当前行的YUV数据指针const uchar *yuyvLine = data + y * width * 2; // 每行占用 width*2 字节QRgb *rgbLine = reinterpret_cast<QRgb*>(image.scanLine(y));// 每4字节处理两个像素(YUYV格式)for (int x = 0; x < width; x += 2) {// 提取YUV分量uchar Y0 = yuyvLine[0];  // 第一个像素的Yuchar U  = yuyvLine[1];  // 共用U分量uchar Y1 = yuyvLine[2];  // 第二个像素的Yuchar V  = yuyvLine[3];  // 共用V分量yuyvLine += 4;           // 移动到下一个YUYV块// YUV转RGB(BT.601标准,TV范围)auto convert = [](uchar Y, uchar U, uchar V) -> QRgb {// 调整YUV到有效范围int y = qMax((int)Y, 16) - 16;  // Y范围: 16-235 → 0-219int u = U - 128;           // U范围: 0-255 → -128-127int v = V - 128;           // V范围: 0-255 → -128-127// 整数运算(使用64位防溢出)int r = (298 * y + 409 * v + 128) >> 8;int g = (298 * y - 100 * u - 208 * v + 128) >> 8;int b = (298 * y + 516 * u + 128) >> 8;// 限制到0-255范围r = qBound(0, r, 255);g = qBound(0, g, 255);b = qBound(0, b, 255);return qRgb(r, g, b);};// 转换两个像素rgbLine[x]     = convert(Y0, U, V);rgbLine[x + 1] = convert(Y1, U, V);}}return image;
}

2.3 云端数据库设计

2.3.1 数据库

        其实就两张表,tbl_user用户表、tbl_dev设备表。一般按照数据库设计范式,应该再添加一张关联关系表,例如tbl_user_dev,但是,我把userid字段直接放到了tbl_dev中,然后让userid和devid成为tbl_dev的联合主键。E-R就不画了。

        实际中,应该用关联关系表还是把关联关系放到某个实体表中,要看实际应用情况,按我的理解,如果需要通过关联关系查询的频率很高且数据量还不小,我认为还是沉到实体表中更好,但这样实体表,确实就不能叫实体表了,可以称之为数据表。

2.3.2 网络数据接口设计

        本案例中均使用tcp进行通信,除了设备心跳报文,其他报文都是一问一答的形式。相对麻烦的视频数据发送的时序图如下图所示:

2.3.3 关键的数据结构设计

(1)手写hashmap: 目的通过devid快速查找qt端的socketfd和设备端的socketfd,本案例实际上用不着,纯粹为了练手。贴下头文件

typedef struct{char devid[20];//keyint devfd;//设备端fdint userfd;//qt端fd
}data_t;typedef struct pn{union{ int subLen; data_t data; };struct pn* next;
}node_t;typedef struct{ node_t* arr[20]; int len; }hashmap_t;hashmap_t* hashmap_create();
void hashmap_destroy(hashmap_t* mp);
int hashmap_hashcode(char* key);
void hashmap_put(hashmap_t* mp, char* key, data_t value);
data_t* hashmap_get(hashmap_t* mp, char* key);
void hashmap_remove(hashmap_t* mp, char* key);
int hashmap_size(hashmap_t* mp);  
void hashmap_printself(hashmap_t* map);

(2)设备表与用户表对应的结构体

typedef struct{char userid[20];//用户名char pwd[20];//密码
}my_user_t;typedef struct{char userid[20];//用户名char devid[20];//设备idchar devname[20];//设备名称int state;//设备状态char desc[50];//设备描述
}my_dev_t;

2.3.4 模块设计

(1)qt_server和dev_server: 两个基于EPoll模型的tcp服务端

(2)sqlite3的DAO层:贴下头文件

bool mysql_init();//初始化表
void mysql_deinit();//销毁资源sqlite3* mysql_getConn();//获取sqlite3连接: 上锁!
void mysql_closeConn(sqlite3* db);//解锁!
bool mysql_user_exit(sqlite3* db, char* userid,char* pwd);//user表:查询
bool mysql_user_add(sqlite3* db, my_user_t* user);//user表:添加用户
//dev表:查询userid 关联的 设备列表
bool mysql_dev_list(sqlite3* db, char* userid, my_dev_t* arr, int* len);
bool mysql_dev_add(sqlite3* db, my_dev_t* dev);//dev表:添加关联的设备
//dev表:删除关联的设备
bool mysql_dev_del(sqlite3* db, char* userid, char* devid);

(3)统一的报文解析、处理与回复,思想类似Qt端的设计。

2.4 设备端设计

2.4.1 驱动层设计

外设: OV5640

驱动: linux5.10.10源码自带驱动 (基于V4L2驱动框架),通过make menuconfig直接配置内核

 Device Drivers  --->    <*> Multimedia support  ---> Media core support  --->  <*> Video4Linux core Media drivers  ---[*] V4L platform devices  ---><*>   STM32 Digital Camera Memory Interface (DCMI) support  Media ancillary drivers  --->   Camera sensor devices  --->   <*> OmniVision OV5640 sensor support

设备树的配置: 比较多,我也按照教程来做的,此处不写了。完成后,可以通过ls /dev/video0查看到这个设备文件。

2.4.2 用户层设计

(1)线程1: 定时拍照,生成图片。封装函数通过调用驱动生成拍摄图片

(2)线程2: 读取生成的图片文件,若有文件,上送到云端的dev_server

(3)线程3: 心跳线程

3、总结

3.1 图片传输效率

其实我使用的方法传输的效率特别,但由于时间原因,又不想做更多的改动,我能想到的可以改善的方法如下:

(1)改用udp,多包发送,确认后,再回复补包,补充缺少的包;

(2)采用一些压缩算法,减少数据量;

(3)本案例中已经将图片数据生成了文件,可以通过tftp直接发送文件;

(4)视频流传输(我还不会);

(5)采用一些专用的传输协议(我也还不会);

3.2 Qt的QSocket的readyRead信号绑定

3.3 hashmap的封装碰到的问题

3.4 缺陷

这个系统只是为了给小编自己练手用的,存在蛮多BUG的,例如:

(1)本来设计的用户端与设备端是多对多的,cloud_server需要维护多个hashmap来保存对应管理与通信时序,偷懒,在进行远程拍摄的时候,只能1对1;

(2)cloud_server用了不少全局变量;

(3)通过图片的方式再进行视频拍摄,视频应该有专门的方法,尚未研究;

(4)本来现在Qt端调用opencv的人脸框选接口,这是一个比较独立的功能,且,时间有限,先这样吧;

(5)QSS没有加,这个不是练习重点。

..... 如果要用的我源码,请注意这些坑以及还没有发现的坑。回归实际,如果云端程序面临比较的并发,且不用太考虑硬件资源的问题,我更建议用java来写,开发效率高、运维成本较低。

4、源码

tjzhuorui@163.com/远程监控系统

相关文章:

远程监控系统项目里练习

1、项目目标 设备端&#xff1a; &#xff08;1&#xff09;基于stm32mp157开发板&#xff0c;裁剪linux5.10.10&#xff0c;完成ov5640摄像头移植&#xff1b; &#xff08;2&#xff09;完成用户层程序&#xff0c;完成对摄像头的控制及与云端服务的数据交互。 云端&…...

Spring Boot 通过全局配置去除字符串类型参数的前后空格

1、问题 避免前端输入的字符串参数两端包含空格&#xff0c;通过统一处理的方式&#xff0c;trim掉空格 2、实现方式 /*** 去除字符串类型参数的前后空格* author yanlei* since 2022-06-14*/ Configuration AutoConfigureAfter(WebMvcAutoConfiguration.class) public clas…...

设计模式 --- 观察者模式

设计模式 --- 观察者模式 什么是观察者模式观察者模式典型应用 --- C#中的事件使用观察者模式实现事件处理机制 什么是观察者模式 观察者模式&#xff08;Observer Pattern&#xff09;是一种行为型设计模式&#xff0c;用于在对象之间建立一对多的依赖关系。当一个对象&#x…...

组播网络构建:IGMP、PIM 原理及应用实践

IP组播基础 组播基本架构 组播IP地址 一个组播IP地址并不是表示具体的某台主机&#xff0c;而是一组主机的集合&#xff0c;主机声明加入某组播组即标识自己需要接收目的地址为该组播地址的数据IP组播常见模型分为ASM模型和SSM模型ASM&#xff1a;成员接收任意源组播数据&…...

Java常见的23种设计模式

Java常见的23种设计模式 大家好&#xff0c;我是钢板兽&#xff01; 本文将系统梳理 Java 的设计模式&#xff0c;涵盖创建型、结构型和行为型三大类&#xff0c;结合定义、原理、优点、应用场景、示例代码&#xff0c;帮助你初步了解常见的23种设计模式。 一、设计模式分类…...

兔单B细胞单抗制备服务

1.兔单B细胞技术原理 兔单B细胞技术是近年来新发展的一类快速制备单克隆抗体的技术&#xff0c;是一种通过分离和单克隆化兔子体内的B细胞来制备单一来源的高特异性抗体的方法。基于流式细胞分选技术进行单B细胞单抗制备&#xff0c;利用每个B细胞只含有一个功能性重链可变区D…...

MySQL基础 [六] - 内置函数+复合查询+表的内连和外连

内置函数一般要用select调用 内置函数 日期函数 current_date函数 current_date函数用于获取当前的日期。如下&#xff1a; current_time函数 current_time函数用于获取当前的时间。如下&#xff1a; now函数 now函数用于获取当前的日期时间。如下&#xff1a; date函数 dat…...

nginx路径匹配的优先级

在 Nginx 配置中&#xff0c;当请求 /portal/agent/sse 时&#xff0c;会匹配 location ~* /sse$ 规则&#xff0c;而不是 location /portal。原因如下&#xff1a; 匹配规则解析 location ~* /sse$ ~* 表示 不区分大小写的正则匹配/sse$ 表示以 /sse 结尾的路径匹配结果&#…...

tcp/ip攻击及防范

作为高防工程师&#xff0c;我每天拦截数以万计的恶意流量&#xff0c;其中TCP/IP协议层攻击是最隐蔽、最具破坏性的威胁之一。常见的攻击手法包括&#xff1a; 1. SYN Flood攻击&#xff1a;攻击者发送大量伪造的SYN包&#xff0c;耗尽服务器连接资源&#xff0c;导致正常用…...

2025年3月中国电子学会青少年软件编程(Python)等级考试试卷(一级)答案 + 解析

更多真题在线练习系统&#xff1a;历年真题在线练习系统 一、单选题 1、下列哪个软件不能运行 Python 程序&#xff1f;&#xff08; &#xff09; A、JupyterNotebook B、Pycharm C、原版的Scratch D、IDLE 正确答案&#xff1a;C 答案解析&#xff1a;本题考察的 Pyt…...

TreeMap 核心知识点与面试题解析

TreeMap 核心知识点与面试题解析 一、TreeMap 基础概念 TreeMap 是 Java 集合框架中基于 红黑树&#xff08;Red-Black Tree&#xff09; 实现的 Map&#xff0c;具有以下特点&#xff1a; 有序性&#xff1a;默认按 key 的自然顺序&#xff08;Comparable&#xff09;或自定…...

深入理解 DevOps 与 CI/CD:概念、流程及优势

在当今快速发展的数字化时代,软件开发和交付的速度与质量成为企业在激烈竞争中脱颖而出的关键因素。DevOps 和 CI/CD 作为现代软件开发领域的重要理念和实践,正深刻地改变着软件开发生命周期的运作方式。本文将深入探讨 DevOps 的概念,详细解析 CI/CD 的内涵、管道阶段以及实…...

Flutter BloC 架构入门指南

BLoC (Business Logic Component) 是 Flutter 中一种流行的状态管理架构&#xff0c;它可以帮助你将业务逻辑与 UI 分离&#xff0c;使代码更清晰、可测试性更强。 核心概念 1. BloC 的核心组件 Events&#xff1a;用户交互或系统事件&#xff08;如按钮点击、网络请求完成&…...

OpenHarmony-AI调研

OpenHarmony-AI调研 文章目录 OpenHarmony-AI调研前言一、当前版本部署组件二、AI架构1.mindspore-lite2.ai_engine3.neural_network_runtime4.intelligent_voice_framework5.HDI驱动 三、应用1.命令行以及web运行deepseek-r12.与deepseek通过语音进行交互3.物品识别4.人脸识别…...

zk基础—zk实现分布式功能

1.zk实现数据发布订阅 (1)发布订阅系统一般有推模式和拉模式 推模式&#xff1a;服务端主动将更新的数据发送给所有订阅的客户端。 拉模式&#xff1a;客户端主动发起请求来获取最新数据(定时轮询拉取)。 (2)zk采用了推拉相结合来实现发布订阅 首先客户端需要向服务端注册自己关…...

Tips:用proxy解决前后端分离项目中的跨域问题

在前后端分离项目中&#xff0c;"跨域问题"是浏览器基于同源策略&#xff08;Same-Origin Policy&#xff09;对跨域请求的安全限制。当你的前端&#xff08;如运行在 http://localhost:3000 &#xff09;和后端&#xff08;如运行在 http://localhost:8080 &#…...

JMeterPlugins-Standard-1.4.0 插件详解:安装、功能与使用指南

JMeterPlugins-Standard-1.4.0 是 Apache JMeter&#xff08;一款流行的开源负载和性能测试工具&#xff09;的插件包&#xff0c;它扩展了 JMeter 的功能&#xff0c;提供了更多监听器&#xff08;Listeners&#xff09;、采样器&#xff08;Samplers&#xff09;和辅助组件&a…...

JMeter 中,Token 和 Cookie 的区别及实际应用

在 JMeter 中,Token 和 Cookie 都是用于处理用户会话和身份验证的机制,但它们的 工作原理、存储方式 和 应用场景 有显著区别。以下是详细对比和实际应用指南: 1. 核心区别 特性Token (如 JWT、OAuth)Cookie存储位置通常存储在 HTTP 请求头(如 Authorization: Bearer <t…...

蓝桥杯真题——好数、R格式

目录 蓝桥杯2024年第十五届省赛真题-好数 【模拟题】 题目描述 输入格式 输出格式 样例输入 样例输出 提示 代码1&#xff1a;有两个案例过不了&#xff0c;超时 蓝桥杯2024年第十五届省赛真题-R 格式 【vector容器的使用】 题目描述 输入格式 输出格式 样例输入…...

JavaScript惰性加载优化实例

这是之前的一位朋友的酒桌之谈&#xff0c;他之前负责的一个电商项目&#xff0c;刚刚开发万&#xff0c;首页加载时间特别长&#xff0c;体验很差&#xff0c;所以就开始排查&#xff0c;发现是在首页一次性加载所有js导致的问题&#xff0c;这个问题在自己学习的时候并不明显…...

0_Pytorch中的张量操作

[引言]张量的概念 1.基本概念 张量是一个通用的多维数组&#xff0c;可以表示标量&#xff08;0 维&#xff09;、向量&#xff08;1 维&#xff09;、矩阵&#xff08;2 维&#xff09;以及更高维度的数据。张量是 PyTorch 中的核心数据结构&#xff0c;用于表示和操作数据。…...

Java面试43-常见的限流算法有哪些?

限流算法是一种系统保护策略&#xff0c;主要是避免在流量高峰导致系统被压垮&#xff0c;造成系统不可用的问题。 常见的限流算法有五种&#xff1a; 计数器限流&#xff0c;一般用在单一维度的访问频率限制上&#xff0c;比如短信验证码每隔60s只能发送一次&#xff0c;或者…...

牛客网:树的高度 ← 根节点为 0 号节点

【题目来源】 https://www.nowcoder.com/questionTerminal/4faa2d4849fa4627aa6d32a2e50b5b25 【题目描述】 现在有一棵合法的二叉树&#xff0c;树的节点都是用数字表示&#xff0c;现在给定这棵树上所有的父子关系&#xff0c;求这棵树的高度。 【输入格式】 输入的第一行表…...

Linux:进程程序替换execl

目录 引言 1.单进程版程序替换 2.程序替换原理 3.6种替换函数介绍 3.1 函数返回值 3.2 命名理解 3.3 环境变量参数 引言 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支)&#xff0c;我们所创建的所有的子进程&#xff0c;执行的代码&#x…...

⑩数据中心M-LAG 实战

一、配置指导自己去看今天操作的是M-LAG 基础实验 二、配置代码信息回顾 ### 1、配置 M-LAG 系统 MAC 地址<H3C>system-view[H3C]m-lag system-mac ?H-H-H MAC address2a7a-53ee-0100 Bridge MAC address[H3C]m-lag system-mac### 2、配置 M-LAG 系统编号…...

delphi idtcpserver 搭建tcp ,ssl协议服务端

如果想用indy idtcpserver实现tcp ssl,那么正是你需要的 首先生成证书: 2、windows生成pem证书 - 站着说话不腰疼 - 博客园 有证书后 idtcpserver 用的三个证书, IdServerIOHandlerSSLOpenSSL1.SSLOptions.CertFile = ca.crt IdServerIOHandlerSSLOpenSSL1.SSLOptions.…...

如何实现外观模式?

一、模式理解&#xff08;用快递驿站比喻&#xff09; 想象你网购了5件商品&#xff0c;分别来自不同快递公司。 外观模式就像小区门口的快递驿站&#xff0c;你不需要知道中通怎么分拣、顺丰怎么运输&#xff0c;只要到驿站报取件码就能拿到所有包裹。 在前端开发中&#xf…...

深入解析 Linux 文件系统权限:从基础到高级实践

引言 在 Linux 系统中&#xff0c;文件系统权限是保障数据安全和多用户协作的核心机制。想象这样一个场景&#xff1a; 你的服务器上有多个团队共享项目文件 财务数据必须严格保密&#xff0c;仅允许指定人员访问 开发团队需要共同编辑代码&#xff0c;但禁止随意删除他人文…...

GZ036区块链卷一 EtherStore合约漏洞详解

题目 pragma solidity >0.8.3;contract EtherStore {mapping(address > uint) public balances;function deposit() public payable {balances[msg.sender] msg.value;emit Balance(balances[msg.sender]);}function withdraw() public {uint bal balances[msg.sender…...

医药流通行业批发公司IT运维转型:Prometheus+Grafana监控Spring Boot 3应用实践

一、引言&#xff1a;医药流通行业IT运维挑战与工具换代需求 在医药流通行业批发领域&#xff0c;业务的核心在于供应链的高效运转、订单处理的精准及时以及库存管理的动态平衡。随着互联网医疗的兴起和电商平台的渗透&#xff0c;传统医药批发企业正加速向数字化、智能化转型…...

编程助手fitten code使用说明(超详细)(vscode)

这两年 AI 发展迅猛&#xff0c;作为开发人员&#xff0c;我们总是追求更快、更高效的工作方式&#xff0c;AI 的出现可以说改变了很多人的编程方式。 AI 对我们来说就是一个可靠的编程助手&#xff0c;给我们提供了实时的建议和解决方&#xff0c;无论是快速修复错误、提升代…...

金融大模型

FinGPT 数据集&#xff1a;https://github.com/AI4Finance-Foundation/FinGPT/tree/master/fingpt/FinGPT-v3 FinGPT v3 系列是在新闻和微博情绪分析数据集上使用 LoRA 方法进行微调的LLM&#xff0c;在大多数金融情绪分析数据集上取得了最佳分数。 FinGPT v3.1 使用 chatgl…...

【Pandas】pandas DataFrame infer_objects

Pandas2.2 DataFrame Conversion 方法描述DataFrame.astype(dtype[, copy, errors])用于将 DataFrame 中的数据转换为指定的数据类型DataFrame.convert_dtypes([infer_objects, …])用于将 DataFrame 中的数据类型转换为更合适的类型DataFrame.infer_objects([copy])用于尝试…...

011_异常、泛型和集合框架

异常、泛型和集合框架 异常Java的异常体系异常的作用 自定义异常异常的处理方案异常的两种处理方式 泛型泛型类泛型接口泛型方法、通配符和上下限泛型支持的类型 集合框架集合体系结构Collection Collection集合Collection的遍历方式认识并发修改异常问题解决并发修改异常问题的…...

QTSql全解析:从连接到查询的数据库集成指南

概览 与数据库的有效集成是确保数据管理效率和应用性能的关键&#xff0c;Qt框架就提供了强大的QtSql模块&#xff0c;使得开发者能够轻松地进行数据库操作&#xff0c;包括连接、查询执行以及结果处理等 一、引入QtSql模块 首先&#xff0c;需要在项目中引入QtSql模块&…...

docker快捷打包脚本(ai版)

直接进入主题&#xff1a; 用这个脚本前提是你本地可以拉镜像仓库的镜像&#xff0c;并且在 本地有了&#xff0c;然后将所有的镜像tag写在一个文件中&#xff0c;和下面docker_tags.txt 对应&#xff0c;文件叫什么&#xff0c;脚本里对应改什么&#xff0c;给小白说的 #!/bi…...

分布式防护节点秒级切换:实战配置与自动化运维

摘要&#xff1a;针对DDoS攻击导致节点瘫痪的问题&#xff0c;本文基于群联AI云防护的智能调度系统&#xff0c;详解如何实现节点健康检查、秒级切换与自动化容灾&#xff0c;并提供Ansible部署脚本。 一、分布式节点的核心价值 资源分散&#xff1a;攻击者难以同时击溃所有节…...

TBE(TVM的扩展)

算子 张量 一个张量只有一种数据类型 在内存中只能线性存储&#xff0c;最终形成一个长的一维数组 晟腾AI的数据格式 AIPP是对我们常见的数据格式转化成AI core支持的数据格式 广播机制 TVM TBE的第一种开发方式&#xff1a;DSL TBE的第二种开发方式&#xff1a;TVM TBE的第…...

Jenkins配置的JDK,Maven和Git

1. 前置 在配置前&#xff0c;我们需要先把JDK&#xff0c;Maven和Git安装到Jenkins的服务器上。 &#xff08;1&#xff09;需要进入容器内部&#xff0c;执行命令&#xff1a;docker exec -u root -it 容器号/容器名称&#xff08;2选1&#xff09; bash -- 容器名称 dock…...

核心案例 | 湖南汽车工程职业大学无人机操控与编队技术实验室

核心案例 | 湖南汽车工程职业大学无人机操控与编队技术实验室 为满足当今无人机行业应用需求&#xff0c;推动无人机技术的教育与实践深度融合&#xff0c;北京卓翼智能科技有限公司旗下品牌飞思实验室与湖南汽车工程职业大学强强联手&#xff0c;共同建设无人机操控与编队技术…...

【阻抗匹配】

自动匹配的实现&#xff1a; 检测反射信号&#xff1a;通过传感器&#xff08;如定向耦合器&#xff09;监测反射功率或驻波比&#xff08;SWR&#xff09;&#xff0c;判断是否失配。控制单元&#xff1a;利用微控制器或专用芯片&#xff08;如FPGA&#xff09;分析检测数据&a…...

micro常用快捷键

micro常用快捷键 以下是 micro 编辑器 的常用快捷键整理&#xff0c;按功能分类清晰&#xff0c;方便快速查阅&#xff1a; 1. 基础操作 快捷键功能​Ctrl S​保存文件​Ctrl Q​退出编辑器​Ctrl O​打开文件​Ctrl E​打开命令栏&#xff08;输入命令&#xff09;​Ctr…...

DNS域名解析服务

目录 DNS系统 DNS系统的作用 DNS系统的类型&#xff08;服务器分类&#xff09; 1. ‌递归解析器&#xff08;Recursive Resolver&#xff09;‌ 2. ‌根域名服务器&#xff08;Root Name Server&#xff09;‌ 3. ‌顶级域服务器&#xff08;TLD Name Server&#xff09;…...

Linux的目录结构

倒根树状结构 【注意】 / 表示根目录&#xff0c;相当于Windows的C盘 进入跟目录命令&#xff1a; cd / /bin&#xff1a;存放的系统命令或二进制文件&#xff0c;如&#xff1a;cd ls cp等 /sbin /usr/bin /dev&#xff1a;存放的设备节点文件 &#xff0c; 驱动文件 /…...

【Python】Python 100题 分类入门练习题 - 新手友好

Python 100题 分类入门练习题 - 新手友好篇 - 整合篇 一、数学问题题目1&#xff1a;组合数字题目2&#xff1a;利润计算题目3&#xff1a;完全平方数题目4&#xff1a;日期天数计算题目11&#xff1a;兔子繁殖问题题目18&#xff1a;数列求和题目19&#xff1a;完数判断题目21…...

Three.js 系列专题 7:性能优化与最佳实践

内容概述 随着 3D 场景复杂度的增加,性能优化变得至关重要。Three.js 项目可能因几何体数量、纹理大小或渲染设置而变慢。本专题将介绍减少 draw call、优化纹理和使用调试工具的最佳实践。 学习目标 学会减少 draw call 和几何体复杂度。掌握纹理压缩与内存管理。使用 Stat…...

特权FPGA之Johnson移位

完整代码&#xff1a; module johnson(clk,rst_n,led,sw1_n,sw2_n,sw3_n);input clk; //时钟信号&#xff0c;50MHz input rst_n; //复位信号&#xff0c;低电平有效 output[3:0] led; //LED控制&#xff0c;1--灭&#xf…...

聊聊 CSS

先补充一些概念 C/S&#xff08;客户端/服务器&#xff09;&#xff1a;要下载到本地才能用 需要安装、偶尔更新、不跨平台 B/S&#xff08;浏览器/服务器&#xff09;&#xff1a;在浏览器输入网址就可以使用 无需安装、无需更新、可跨平台 [!NOTE] B/S 架构优点如此之多&am…...

域名系统DNS

一 概述 域名系统DNS是互联网使用的命名系统&#xff0c;用来把便于人们使用的机器名称转换为IP地址&#xff0c;比如我们熟知的www.baidu.com,www.sina.com&#xff0c;这些域名的背后都对应着一个又一个的IP地址。由域名转换为IP的过程我们称为解析&#xff0c;解析的过程大…...

大模型ui设计SVG输出

你是一位资深 SVG 绘画设计师&#xff0c;现需根据以下产品需求创建SVG方案&#xff1a; 产品需求 约拍app 画板尺寸&#xff1a; 宽度&#xff1a;375px&#xff08;基于提供的HTML移动设计&#xff09;高度&#xff1a;812px&#xff08;iPhone X/XS 尺寸&#xff09; 配…...