一、后端到摄像头(监控摄像头IOT)
前言:
开发流程从 后端到摄像头 打通是第一步,那么我们可以着手设计 后端实现 的具体步骤,确保能够稳定地接收和处理来自摄像头的视频流,并提供后续的功能扩展,如视频流转发、存储和控制。
1. 后端系统架构设计
在开始实现之前,我们需要先明确后端系统的基本架构和功能模块。主要包括以下几个部分:
- 视频流接入与处理模块:负责从摄像头接收视频流,解析和转码(如果需要)。
- 摄像头管理与控制模块:控制摄像头(如启动、停止、变更分辨率等)。
- 流媒体转发模块:负责将摄像头的视频流推送到 WebRTC 或流媒体服务器进行分发。
- 存储模块:存储视频流,并提供存档、回放等功能。
2. 后端实现步骤
2.1 摄像头视频流接入与处理
我们假设摄像头通过 RTSP 协议进行视频流传输(也可以是 WebRTC,具体取决于摄像头设备支持的协议)。后端需要能够接收这个视频流并进行处理。
使用 FFmpeg 或 Kurento(作为流媒体服务器)来接收和转发视频流。
- 如果使用 FFmpeg,可以通过命令行工具启动 RTSP 客户端,将视频流转发到流媒体服务器或者进行本地存储。
- 如果使用 Kurento,可以用 Kurento Media Server(KMS)来接收视频流,并通过 WebRTC 协议将其推送到 Web 端。
后端实现流程:
-
接收 RTSP 流:
- 使用 FFmpeg 或 Kurento 等工具,后端通过接口或命令行方式启动摄像头的视频流接入。
ProcessBuilder pb = new ProcessBuilder("ffmpeg", "-i", "rtsp://camera_ip_address/stream", "-c:v", "libx264", "-f", "flv", "rtmp://media_server/stream");
pb.start();
-
视频流转发:
- 如果你需要通过 WebRTC 向客户端推送视频流,可以通过 Kurento 等流媒体服务器实现,将 RTSP 流转为 WebRTC 流。
- 这一步通常需要创建一个 WebRTC PeerConnection,并将视频流从摄像头转发到浏览器客户端。
-
视频流存储:
- 使用 FFmpeg 或 Kurento 提供的功能,将流存储为 MP4 或 WebM 格式,供后续的回放和存档使用。
- 可以使用以下 FFmpeg 命令将视频存储到本地或云存储:
ffmpeg -i rtsp://camera_ip_address/stream -c:v libx264 -f mp4 /path/to/storage/video.mp4
-
视频流转码与处理:
- 如果需要将摄像头的视频流转码为更适合浏览器播放的格式(如 H.264 到 VP8),可以通过 FFmpeg 完成转码任务。
2.2 摄像头管理与控制
后端需要提供接口来控制摄像头的行为(例如:启动/停止视频流、调节分辨率、控制视角等)。通常,摄像头支持一些标准的控制协议(如 ONVIF、RTSP),或者提供自定义 API 接口。
关键步骤:
-
摄像头注册与配置:
- 在后端提供一个 摄像头管理模块,允许管理员添加、配置和管理摄像头设备。可以通过 REST API 接收摄像头的配置请求(例如,IP 地址、用户名、密码等)。
@RestController
public class CameraController {@PostMapping("/registerCamera")public ResponseEntity<String> registerCamera(@RequestBody CameraConfig config) {// 将摄像头配置信息存储在数据库cameraService.registerCamera(config);return ResponseEntity.ok("Camera registered successfully");}
}
控制摄像头:
- 后端可以通过 API 向摄像头发送控制命令,如启动视频流、改变分辨率、变更旋转角度等。这些控制通常通过 ONVIF 或 RTSP 相关协议实现。
@PostMapping("/startCameraStream")
public ResponseEntity<String> startCameraStream(@RequestParam String cameraId) {// 根据 cameraId 启动对应摄像头的视频流cameraService.startStream(cameraId);return ResponseEntity.ok("Camera stream started");
}
-
监控摄像头状态:
- 提供接口来查询摄像头的状态,例如,摄像头是否在线,视频流是否正常等。
2.3 视频流转发模块
如果要将视频流转发到前端浏览器,后端需要有一个模块来支持 WebRTC 或 流媒体服务器。
通过 Kurento 转发 RTSP 流到 Web 前端:
-
WebRTC 建立连接:
- 使用 Kurento Media Server 来处理 RTSP 视频流,并通过 WebRTC 将其转发到前端浏览器。
- 在后端实现 WebRTC 信令,完成客户端与服务端之间的连接。
-
流媒体服务器转发视频流:
- 如果不使用 WebRTC,后端可以将视频流推送到 流媒体服务器(如 Wowza 或 Nginx RTMP),并通过 RTMP 或 HLS 协议向 Web 端提供视频流。
2.4 视频存储模块
后端系统需要能够存储接收到的视频流,并提供回放、下载等功能。视频存储模块通常包括以下几个步骤:
-
视频存储:
- 将视频流保存为标准视频格式(如 MP4 或 WebM),并存储到本地或云存储服务中。
public void storeVideoStream(InputStream videoStream, String cameraId) {// 将流保存为文件File file = new File("/storage/" + cameraId + "_video.mp4");try (FileOutputStream out = new FileOutputStream(file)) {byte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = videoStream.read(buffer)) != -1) {out.write(buffer, 0, bytesRead);}} catch (IOException e) {e.printStackTrace();}
}
视频回放(点播):
- 后端应提供接口,支持根据摄像头 ID 和时间段检索存储的视频文件。
@GetMapping("/getVideo")
public ResponseEntity<Resource> getVideo(@RequestParam String cameraId, @RequestParam String timeRange) {// 根据摄像头 ID 和时间范围检索视频文件File videoFile = videoService.getVideoFile(cameraId, timeRange);return ResponseEntity.ok().body(new FileSystemResource(videoFile));
}
-
云存储集成:
- 可以将视频文件上传到 云存储(如 AWS S3、Aliyun OSS 等),并提供远程访问功能。
- 配置云存储 SDK(如 AWS SDK 或阿里云 SDK)并上传文件。
3. 后端开发技术栈
- 编程语言:Java(Spring Boot)
- 流媒体库/工具:
- FFmpeg:处理 RTSP 流、转码、存储等。
- Kurento Media Server:处理 WebRTC 连接,支持流转发、存储、视频处理。
- 数据库:用于存储摄像头信息、用户操作日志等。
- 消息队列(可选):用于解耦摄像头数据与其他模块之间的通信(如 Kafka、RabbitMQ)。
4. 开发计划与任务拆分
阶段 1:摄像头视频流接入与转发
- 实现接收 RTSP 流并转发到服务端。
- 选择使用 Kurento 或 FFmpeg 来接入视频流。
- 在服务端处理视频流转发(WebRTC 或流媒体协议)。
阶段 2:摄像头管理与控制
- 提供摄像头的管理接口(注册、启动、停止)。
- 实现控制接口(如启动视频流、控制视角)。
阶段 3:视频存储与回放
- 实现视频存储功能,并能够将视频保存到本地或云存储。
- 提供视频回放接口,支持按时间段、摄像头 ID 检索视频文件。
阶段 4:视频流转发到 Web 前端
在这一步,后端系统的目标是通过 WebRTC 或流媒体服务器将视频流推送到前端。下面详细描述如何完成这一阶段。
1. WebRTC 实现
如果选择使用 WebRTC,后端需要设置 WebRTC 信令服务,允许浏览器客户端和后端建立实时的点对点连接。具体步骤如下:
-
WebRTC 信令服务:
- 信令服务是 WebRTC 的核心,负责在客户端和服务端之间交换会话描述信息(SDP)和候选网络地址(ICE candidates)。这可以通过 WebSocket 实现。
@Controller
public class WebRtcSignalingController {private final WebSocketSession session;@MessageMapping("/webrtc/offer")@SendTo("/topic/offer")public String handleOffer(String offer) {// 接收到前端发来的 offer,转发给其他客户端return offer;}@MessageMapping("/webrtc/answer")@SendTo("/topic/answer")public String handleAnswer(String answer) {// 转发 answer 给客户端return answer;}@MessageMapping("/webrtc/candidate")@SendTo("/topic/candidate")public String handleCandidate(String candidate) {// 转发 ICE candidatereturn candidate;}
}
-
- 在此代码中,WebSocket 用于接收和转发信令消息。前端和后端通过这个信令交换 SDP 和 ICE 信息。
-
后端与 Kurento 配置 WebRTC 会话:
- 使用 Kurento Media Server (KMS) 来管理 WebRTC 会话,并将摄像头的视频流转发到浏览器客户端。
- 后端需要与 Kurento 配合,创建媒体管道和 WebRTC 端点,将摄像头的视频流通过 WebRTC 协议传输到客户端。
示例:使用 Kurento 的 Java API 创建 WebRTC 会话。
public class WebRTCService {private KurentoClient kurentoClient;private MediaPipeline pipeline;private WebRtcEndpoint webRtcEndpoint;public WebRTCService(KurentoClient kurentoClient) {this.kurentoClient = kurentoClient;}public void startWebRtcSession(String sdpOffer) {pipeline = kurentoClient.createMediaPipeline();webRtcEndpoint = new WebRtcEndpoint.Builder(pipeline).build();// Set up the SDP offer and return an SDP answerString sdpAnswer = webRtcEndpoint.processOffer(sdpOffer);webRtcEndpoint.gatherCandidates();// Send back the SDP answer to the clientreturn sdpAnswer;}public void stopWebRtcSession() {webRtcEndpoint.release();pipeline.release();}
}
-
- 在上面的代码中,
WebRtcEndpoint
是一个处理 WebRTC 媒体流的关键组件。通过processOffer
方法,后端将摄像头的流作为 WebRTC 流推送给前端。
- 在上面的代码中,
-
前端 WebRTC 连接:
- 在前端,使用 JavaScript 来与 WebRTC 服务端建立连接。前端需要通过 WebSocket 接收信令消息,创建 WebRTC 会话,进行媒体流的传输。
示例:前端使用 WebRTC 和 WebSocket 与后端建立连接。
const signalingSocket = new WebSocket("ws://server_address/webrtc");
signalingSocket.onmessage = (message) => {const signal = JSON.parse(message.data);if (signal.sdpOffer) {// Handle offer, create answerconst answer = await peerConnection.createAnswer();signalingSocket.send(JSON.stringify({ sdpAnswer: answer.sdp }));} else if (signal.iceCandidate) {// Handle ICE candidatepeerConnection.addIceCandidate(new RTCIceCandidate(signal.iceCandidate));}
};const peerConnection = new RTCPeerConnection();
peerConnection.onicecandidate = (event) => {if (event.candidate) {signalingSocket.send(JSON.stringify({ iceCandidate: event.candidate }));}
};// Add media stream from camera or video element to the connection
const mediaStream = await navigator.mediaDevices.getUserMedia({ video: true });
mediaStream.getTracks().forEach(track => peerConnection.addTrack(track, mediaStream));
2. 流媒体服务器转发
如果选择使用流媒体服务器(如 Wowza、Nginx RTMP 或 Kurento),后端需要将摄像头的视频流推送到这些服务器,并通过适合的协议(如 RTMP、HLS)进行流转发。
配置流媒体服务器:
例如,使用 Nginx 配置 RTMP 流:
- 在 Wowza 或 Nginx RTMP 上配置推流和播放端点。将摄像头的视频流推送到这些服务器,然后通过 RTMP 或 HLS 协议将流转发给 Web 客户端。
rtmp {server {listen 1935;chunk_size 4096;application live {live on;push rtmp://your-stream-server;}}
}
后端推送流到流媒体服务器:
- 后端通过 FFmpeg 或 Kurento 将 RTSP 流转发到流媒体服务器。例如,使用 FFmpeg 将 RTSP 流推送到 RTMP 服务器:
ffmpeg -i rtsp://camera_ip_address/stream -c:v libx264 -f flv rtmp://your-rtmp-server/live/stream
Web 客户端播放流:
- Web 客户端通过 HLS 或 RTMP 协议接收视频流。例如,可以通过 HTML5
<video>
标签播放 HLS 流:
<video id="video-player" controls><source src="http://your-rtmp-server/live/stream.m3u8" type="application/x-mpegURL">
</video>
-
或者,如果是使用 WebRTC,浏览器将通过 WebRTC 协议接收并播放视频流。
4. 开发阶段与任务拆分
阶段 1:视频流接入与推送
- 任务:
- 完成 RTSP 流的接入(使用 FFmpeg 或 Kurento)。
- 实现视频流转发到 WebRTC 或流媒体服务器(如 RTMP)。
阶段 2:摄像头管理与控制
- 任务:
- 完成摄像头的注册、启动、停止等控制接口。
- 实现摄像头的状态监控(例如摄像头在线/离线状态)。
阶段 3:视频存储与回放
- 任务:
- 完成视频流的存储模块,支持存档视频。
- 实现视频回放功能,支持按时间段和摄像头检索视频。
阶段 4:视频流转发与前端播放
- 任务:
- 实现 WebRTC 信令服务,并建立 WebRTC 点对点连接。
- 完成 Web 前端的播放器,支持实时视频播放(使用 WebRTC 或 HLS/RTMP)。
5. 后端开发工具和技术栈
- 编程语言:Java(Spring Boot)
- 流媒体库:
- Kurento Media Server:处理视频流转发和 WebRTC 会话。
- FFmpeg:接收、转码视频流,并推送到流媒体服务器。
- WebSocket:用于 WebRTC 信令服务。
- 流媒体协议:RTMP、HLS(如果选择流媒体服务器)。
- 数据库:存储摄像头配置、视频元数据、用户数据等。
总结
通过上述步骤和架构设计,你的后端将能够实现从摄像头接入视频流、处理视频流、转发到前端,并支持视频存储和回放。开发的顺序从 摄像头接入与处理、摄像头管理与控制 到 视频流转发与存储。选择 WebRTC 或流媒体服务器的具体实现方式可以根据实际的需求来定:WebRTC 更适合低延迟的实时应用,而流媒体服务器适合大规模广播和存储需求。
相关文章:
一、后端到摄像头(监控摄像头IOT)
前言: 开发流程从 后端到摄像头 打通是第一步,那么我们可以着手设计 后端实现 的具体步骤,确保能够稳定地接收和处理来自摄像头的视频流,并提供后续的功能扩展,如视频流转发、存储和控制。 1. 后端系统架构设计 在开始…...
H3C MPLS跨域optionB
实验拓扑 实验需求 如图,VPN1 和 VPN2 分别通过运营商 MPLS VPN 连接各自分支机构按照图示配置 IP 地址,VPN1 和 VPN2 连接同一个 PE 设备的私网 IP 网段存在地址复用,使用多 VRF 技术来防止 IP 冲突AS 100 和 AS 200 内部的公共网络中各自运行 OSPF 使 AS 内各设备的 Loo…...
微信小程序中momentjs无法切换中文问题处理
微信小程序中momentj.s无法切换中文问题处理. 表现为 使用 locale(“zh-cn”)无效。 处理方法 # 1、先删除 miniprogram_npm\moment\index.js # 2、将 node_modules\moment\min\moment-with-locales.min.js 复制到 miniprogram_npm\moment下 并重命名为index.js # 3、修改mi…...
Linux零基础速成篇一(理论+实操)
前言:本教程适合Linux零基础学习,也适合Linux期末考试的小伙伴,从头到尾理论与实操相结合,让你快速对Linux进行了解和掌握。 一、Linux概述 为什么要学习Linux操作系统? 完全免费-开源 任何用户均可下载使用 安全…...
【087】基于51单片机智能宠物喂食器【Proteus仿真+Keil程序+报告+原理图】
☆、设计硬件组成:51单片机最小系统LCD1602液晶显示MY1680语音播放模块DS1302时钟芯片SG90舵机AT24C02存储芯片LED灯按键设置。 1、设计采用STC89C52、AT89C52、AT89S52作为主控芯片; 2、系统采用DS1302时钟芯片实现对日期时间计时并通过LCD1602液晶显…...
全局流量管理:提升用户体验与保障服务稳定性
全局流量管理的工作原理 全局流量管理主要依赖于 DNS(域名系统)技术,通过将全球用户的访问请求引导至离他们最近的服务器或数据中心,极大减少了访问延迟和带宽负载,从而提升了用户体验。同时,GTM 还结合健…...
达梦数据守护搭建
主备库初始化 ./dminit path/dmdata/data db_nameDM01 instance_nameDMSVR01 port_num5236 page_size16 extent_size32 log_size500 case_sensitive1 SYSDBA_PWDDM01SYSDBA ./dminit path/dmdata/data db_nameDM02 instance_nameDMSVR02 port_num5236 page_size16 extent_size3…...
【C++】容器适配器全知道
亲爱的读者朋友们😃,此文开启知识盛宴与思想碰撞🎉。 快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。 目录 一、前言 二、什么是适配器 (一)现实生…...
企业资源规划系统(ERP)服务器上线项目实施指南
企业资源规划系统(ERP)服务器上线项目实施指南 项目背景 在当今竞争激烈的商业环境中,企业资源规划系统(ERP)已成为企业提升内部管理效率和响应市场变化的重要工具。为了实现业务流程的整合和优化,公司决…...
Kubernetes(k8s)离线部署DolphinScheduler3.2.2
1.环境准备 1.1 集群规划 本次安装环境为:3台k8s现有的postgreSql数据库zookeeper服务 1.2 下载及介绍 DolphinScheduler-3.2.2官网:https://dolphinscheduler.apache.org/zh-cn/docs/3.2.2 官网安装文档:https://dolphinscheduler.apach…...
嵌入式linux驱动框架 从0到1编写设备驱动 i2c_driver i2c_client
一、编写最简单的IIC驱动框架 在之前的文章中,我们已经深入探讨了I2C通信的基本原理、硬件架构以及时序等基础知识。现在,我们将进入一个更加实际和深入的层面,构建一个完整的I2C驱动程序,并阐述驱动框架的设计。这将帮助你不仅能…...
小程序canvas画环形百分比进度图
组件封装 component/canvas-ring目录下 canvas-ring.js <canvas style"width:{{canvasWidth}}px;height:{{canvasWidth}}px; margin:0 auto;position:relative" type"2d" id"myCanvas"><view class"circle-bar" style&quo…...
面试经验分享 | 北京渗透测试岗位
更多大厂面试经验的视频经验分享看主页 目录: 所面试的公司:安全大厂 所在城市:北京 面试职位:渗透测试工程师 面试方式:腾讯会议线上面试线下面试 面试过程: 面试官的问题: 1、说一下XSS有哪…...
安卓 SystemServer 启动流程
目录 引言 Android系统服务启动顺序 zygote fork SystemServer 进程 SystemServer启动流程 1、SystemServer.main() 2、SystemServer.run() 3、初始化系统上下文 4、创建系统服务管理 5、启动系统各种服务 总结 引言 开机启动时 PowerManagerService 调用 AudioSer…...
opencv存图速度测试
以下测试的图片,均为5488x3672分辨率的三通道彩色图。 分别使用opencv和halcon存图,测试速度,存100次取平均值,结果如下: image size:5488 3672 opencv jpg save time 0.12809s opencv bmp save time 0.02197s hal…...
[ffmpeg]编译 libx264
步骤 下载 libx264 git clone https://code.videolan.org/videolan/x264.git cd x264环境搭建 然后在开始菜单中找到并打开 x64 Native Tools Command Prompt for VS 2019 : 打开 msys2_shell.cmd -use-full-path 这时会打开 MSYS 的新窗口,先把一些汇…...
常见API
1.API 1.1API概述 什么是API API (Application Programming Interface) :应用程序编程接口 java中的API 指的就是 JDK 中提供的各种功能的 Java类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要…...
vscode写python,遇到问题:ModuleNotFoundError: No module named ‘pillow‘(已解决 避坑)
1 问题: ModuleNotFoundError: No module named pillow 2 原因: 原因1:安装Pillow的pip命令所处的python版本与vscode调用的python解释器版本不同。 如: 原因2:虽然用的是pillow,但是写代码的时候只能用…...
【mysql】id主键列乱了之后,重新排序(可根据日期顺序)
一、ID中断不连续的,重新设置为连续的ID alter table table_name drop id; alter table table_name add id int not null first; alter table table_name modify column id int not null auto_increment, add primary key(id); select * from table_name order by …...
SO-CNN-LSTM-MATT蛇群算法优化注意力机制深度学习多特征分类预测
SO-CNN-LSTM-MATT蛇群算法优化注意力机制深度学习多特征分类预测(多输入单输出) 目录 SO-CNN-LSTM-MATT蛇群算法优化注意力机制深度学习多特征分类预测(多输入单输出)分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matl…...
原点安全再次入选信通院 2024 大数据“星河”案例
近日,中国信息通信研究院和中国通信标准化协会大数据技术标准推进委员会(CCSA TC601)共同组织开展的 2024 大数据“星河(Galaxy)”案例征集活动结果正式公布。由工银瑞信基金管理有限公司、北京原点数安科技有限公司联…...
Hadoop
HDFS一键启动/停止 start-dfs.sh stop-dfs.sh 单进程启动/停止 $HADOOP_HOME/bin/hdfs,此程序也可以用以单独控制所在机器的进程的启停 hdfs --daemon (start|status|stop) (namenode|secondarynamenode|datanode)#例如启动namenode,去到需要启动的服…...
【Ambari】使用 Knox 进行 LDAP 身份认证
目录 一、knox介绍 二、Ambari配置LDAP认证 三、验证Knox网关 3.1YARNUI 3.2 HDFSUI 3.3 HDFS RestFULL 3.4 SparkHistoryserver 3.5 HBASEUI 一、knox介绍 Apache Knox网关是一个用于与Apache Hadoop部署的REST api和ui交互的应用程序网关。Knox网关为所有与Apache Ha…...
计算机网络习题( 第3章 物理层 第4章 数据链路层 )
第3章 物理层 一、单选题 1、下列选项中,不属于物理层接口规范定义范畴的是( )。 A、 接口形状 B、 引脚功能 C、 传输媒体 D、 信号电平 正确答案: C 2、在物理层接口特性中,用于描述完成每种功能的事件发…...
Windows系统中mt6.dll文件缺失是什么原因?mt6.dll文件缺失详解与修复指南
mt6.dll文件的作用 mt6.dll是一个动态链接库文件,它通常与特定的软件或游戏相关联,用于支持这些程序中的某些功能。虽然它并非Windows系统的核心文件,但对于依赖于它的程序来说,mt6.dll的缺失可能导致程序无法正常运行或启动。 …...
homebrew,gem,cocoapod 换源,以及安装依赖
安装homebrew /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 再按照成功提示配置环境变量 ruby 更新ruby到最新 brew install ruby 如果安装了会自动升级 安装完成后根据提示配置环境变量 再执行命令使其生效 s…...
uni-app开发商品详情页面实现
目录 一:功能描述 二:功能实现 一:功能描述 商品详情页主要展示商品的图片,基础信息,详细描述信息,以及销量,库存信息等。 首先在顶部以轮播图形式展示图片信息,下面展示商品价格和商品名称和描述信息,然后显示商品的关键卖点信息,最后展示商品详情信息。 二:功…...
mvn install:install-file jar 打入本地仓库
安装指定文件到本地仓库命令:mvn http://install:install-file -DgroupId : 设置上传到仓库的包名 -DartifactId : 设置该包所属的模块名 -Dversion1.0.0 : 设置该包的版本号 -Dpackagingjar : 设置该包的类型(很显然jar包) -Dfile : 设置该jar包文件所在的路径…...
亚式期权定价模型Turnbull-Wakeman进行delta对冲
Turnbull-Wakeman Model是一种用于定价和对冲亚式期权的数学模型。该模型由David Turnbull和Keith Wakeman在1990年提出,用于解决亚式期权的定价问题。 亚式期权是一种路径依赖类型的期权,其期权价格与标的资产价格某个期间内的平均值有关,假…...
Qt之CAN设计(十三)
Qt开发 系列文章 - CAN(十三) 目录 前言 一、CAN 二、实现方式 1.创建类 2.相关功能函数 3.用户使用 4.效果演示 5.拓展应用-实时刷新 总结 前言 Qt框架中并没有提供关于CAN接口的相关模块,需要用户自己根据CAN接口硬件模块&#…...
windows10/windows11运行ps1脚本报错的解决方法,签名错误解决方法
使用win10/win11运行ps1脚本时报错,提示“禁止运行此脚本”,错误如图所示: 此问题通常是由于windows默认的策略导致,解决方法是重新设置权限策略。 1. 设置windows配置 1). 使用管理员权限运行powershell 搜索power…...
在 Mac M2 上安装 PyTorch 并启用 MPS 加速的详细教程与性能对比
1. 安装torch 在官网上可以查看安装教程,Start Locally | PyTorch 作者安装了目前最新的torch版本2.5.1,需要提前安装python3.9及以上版本,作者python版本是python3.11最新版本 使用conda安装torch,在终端进入要安装的环境&…...
vulnhub matrix-breakout靶场
1.搭建靶机 这样就是装好了 获取靶机IP nmap -O 192.168.47.129/24 2.信息收集 dirb http://192.168.47.128 dirb 首页 81端口一个登录页面 gobuster dir -u http://192.168.152.154 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,txt,html gra…...
Hive SQL 窗口函数 `ROW_NUMBER() ` 案例分析
一文彻底搞懂 ROW_NUMBER() 和 PARTITION BY 1. 引言 在处理大规模数据集时,Hive SQL 提供了强大的窗口函数(Window Function),如 ROW_NUMBER(),用于为结果集中的每一行分配唯一的行号。当与 PARTITION BY 和 ORDER …...
windows C++ TCP客户端
demo有一下功能 1、心跳包 2、断开重连 3、非阻塞 4、接受数据单独线程处理 #include <iostream> #include <winsock2.h> #include <ws2tcpip.h> #include <windows.h> #include <string> #include <process.h> // 用于Windows下的线程相…...
【C++】初识C++之C语言加入光荣的进化(上)
写在前面 本篇笔记作为C的开篇笔记,主要是讲解C关键字(C98)连带一点点(C11)的知识。掌握的C新语法新特性,当然C是兼容C的,我们学习C的那套在C中也是受用。 文章目录 写在前面一、命名空间域1.1、命名空间域的定义与使用1.2、命名空间域的细节…...
Linux文件目录 --- 文件时间戳、atime、mtime、ctime、指定格式查看
三、文件时间戳 1. atime 文件最近被访问时间,是在读取文件或者执行文件时更改的,如果只cd进入一个目录然后cd . .不会引起atime的改变,要是使用ll命令进行查看后,再cd . . 离开就不同了。 2. mtime 文件最近内容修改时间,在目录中有文件…...
网页博客风格未完
实现类似的博客风格: 学习前端开发基础: HTML & CSS:掌握网页结构和样式设计的基础知识。JavaScript:增强网页的互动性和动态效果。响应式设计:确保您的博客在不同设备上都有良好的显示效果。 使用开源模板&#x…...
LeetCode 2545.根据第 K 场考试的分数排序:考察编程语言的排序
【LetMeFly】2545.根据第 K 场考试的分数排序:考察编程语言的排序 力扣题目链接:https://leetcode.cn/problems/sort-the-students-by-their-kth-score/ 班里有 m 位学生,共计划组织 n 场考试。给你一个下标从 0 开始、大小为 m x n 的整数…...
软考:系统架构设计师教材笔记(持续更新中)
教材中的知识点都会在。其实就是将教材中的废话删除,语言精练一下,内容比较多,没有标注重点 系统架构概述 定义 系统是指完成某一特定功能或一组功能所需要的组件集,而系统架构则是对所有组件的高层次结构表示,包括各…...
安卓环境配置及打开新项目教程,2024年12月20日最新版
1.去官网下载最新的Android Studio,网址:https://developer.android.com/studio?hlzh-cn 2.下载加速器,注册账号,开启加速器。网址:放在文末。 3.下载安卓代码,项目的路径上不能有中文,特别是…...
基于Spring Boot的电影售票系统
一、系统概述 该系统采用Spring Boot框架开发,充分利用其简化配置、快速部署和生产级别的性能监控等特点,为电影售票业务提供高效、可靠的技术支持。同时,系统采用前后端分离架构,前端使用Vue.js等框架,后端使用Sprin…...
【linux】 unshare -user -r /bin/bash命令详解
命令解析 unshare -user -r /bin/bash 是一个 Linux 命令,它用于在新的用户命名空间中运行一个进程(在这个例子中是 /bin/bash)。以下是这个命令的详细解释: 【1. 命令解析】 unshare: unshare 是一个工具,用于从调用…...
uniappX 移动端单行/多行文字隐藏显示省略号
在手机端不能多行省略使用 -webkit-line-clamp 属性所以移动端多行省略不会生效改为 lines 属性即可 /**单行文本溢出显示省略号*/ .text-ov1 {white-space: nowrap;overflow: hidden;text-overflow: ellipsis;height: auto; } /**APP多行文本溢出显示省略号*/ // #ifdef APP-…...
uniApp打包H5发布到服务器(docker)
使用docker部署uniApp打包后的H5项目记录,好像和VUE项目打包没什么区别... 用HX打开项目,首先调整manifest.json文件 开始用HX打包 填服务器域名和端口号~ 打包完成后可以看到控制台信息 我们可以在web文件夹下拿到下面打包好的静态文件 用FinalShell或…...
谷歌Gemini与Anthropic Claude对比测试引发争议:AI竞赛暗流涌动
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
RAF认证的具体内容是什么?
RAF认证 Responsible Animal Fiber RAF认证,负责任动物纤维标准,是一个致力于确保动物福利、环境可持续性以及产品质量合规性的透明、可追溯和可信赖的认证体系。该体系不仅涵盖了动物纤维的生产和加工环节,还注重从源头到最终产品的整个供应…...
《OpenCV计算机视觉》-对图片的各种操作(均值、方框、高斯、中值滤波处理)及形态学处理
文章目录 《OpenCV计算机视觉》-对图片的各种操作(均值、方框、高斯、中值滤波处理)边界填充阈值处理图像平滑处理生成椒盐图片均值滤波处理方框滤波处理高斯滤波处理中值滤波处理 图像形态学腐蚀膨胀开运算闭运算顶帽和黑帽 《OpenCV计算机视觉》-对图片…...
Java字符串的|分隔符转List实现方案
字符串处理 问题背景代码实现代码优化原因分析实现方案 注意事项异常处理Maven未识别异常 问题背景 在项目组对账流程中,接收对方系统的对账文件,数据以|为分隔符,读取文件内容,分条入库。 代码实现 Java中将字符串转给list&am…...
【机器学习】当教育遇上机器学习:打破传统,开启因材施教新时代
我的个人主页 我的领域:人工智能篇,希望能帮助到大家!!!👍点赞 收藏❤ 教育是人类社会发展的基石,然而传统教育模式往往难以满足每个学生的个性化需求。随着机器学习技术的兴起,教…...