ONVIF Java SDK 实战:网络摄像头接入与 PTZ 控制
简介这份 ONVIF JAVA SDK 面向从事网络摄像头接入、安防平台开发及物联网视频集成的 Java 工程师帮助开发者快速理解并实现 ONVIF 协议中的设备发现、媒体配置、PTZ 控制等核心能力。压缩包共 1157 个文件以 1147 个 java 源码为主体辅以 5 个 jar 依赖库、2 个 gradle 构建脚本及 gradlew、bat、properties 等工程配置文件整体约 2.32MB结构完整可直接导入构建。Demo 仅演示核心功能复杂场景仍需研读源码但 ONVIF 本质是 UDP 加 HTTP 加 XML 的组合难点在于字段繁琐而非技术深度适合具备一定网络编程基础的开发者深入定制。目前已有 656 人学习下载读者可借此掌握协议交互流程、字段组织方式与设备对接思路为二次开发和问题排查提供可复用的代码参考。1. 从一份 ONVIF JAVA SDK 压缩包说起网络摄像头接入到底难在哪手里拿到一个名为ONVIF JAVA SDK.zip的包第一反应往往不是兴奋而是犯嘀咕——ONVIF 协议栈在 Java 生态里一直是个尴尬地带C 语言有 gSOAP 生成的完整框架Python 有 zeep、onvif-zeep 这类现成轮子Java 这边要么依赖老旧的 Axis2 生成一堆臃肿 stub要么自己手写 SOAP 报文拼到怀疑人生。这份 SDK 的价值就在于它把设备发现、能力协商、媒体配置、PTZ 控制、事件订阅这些网络摄像头接入的脏活累活打包好了让你不用从 WSDL 开始啃。它适合两类人一是做安防平台、NVR 客户端、视频管理系统的后端开发者需要在 Java 服务里直接对接海康、大华、宇视等品牌的网络摄像头二是做设备集成测试、批量配置工具的工程师想用代码替代网页后台的重复点击。下面我按实际拆包和跑通的顺序把这份资源从结构到落地讲清楚。2. 拆开压缩包ONVIF JAVA SDK 的目录结构与核心模块2.1 先看目录树判断它属于哪一类 SDK拿到包先别急着 import解压后第一件事是看目录结构。常见的 ONVIF Java SDK 有两种形态一种是纯协议栈只提供 SOAP 客户端和 WSDL 生成的类另一种是带封装层的完整工具包额外提供设备管理器、媒体管理器、PTZ 管理器。这份包从命名和典型组织方式看大概率属于后者。解压后一般能看到类似这样的布局ONVIF JAVA SDK/ ├── lib/ # 依赖 jar 包 │ ├── onvif-core.jar │ ├── soap-client.jar │ └── ... ├── src/ # 源码或示例 │ ├── main/java/ │ │ └── com/onvif/ │ │ ├── device/ # 设备管理 │ │ ├── media/ # 媒体配置 │ │ ├── ptz/ # 云台控制 │ │ └── event/ # 事件订阅 │ └── test/java/ ├── wsdl/ # 协议描述文件 ├── samples/ # 示例代码 └── README.md判断重点看wsdl/目录是否完整。ONVIF 的核心服务有 Device、Media、PTZ、Event、Imaging、Analytics 等如果 WSDL 只覆盖了 Device 和 Media那 PTZ 和事件订阅就得自己补。另一个看lib/里的 SOAP 实现如果是 Axis2注意它和 JDK 版本有兼容坑如果是自己实现的轻量 SOAP 客户端通常更干净但功能边界要自己确认。2.2 核心模块的职责划分这份 SDK 的模块划分基本对应 ONVIF 的服务分类理解每个模块的职责比死记 API 更重要模块对应 ONVIF 服务主要职责deviceDevice Service设备发现、能力查询、系统时间、网络配置、用户管理mediaMedia Service获取媒体配置、视频源、编码器配置、流地址生成ptzPTZ Service云台方向控制、预置位、巡航eventEvent Service事件订阅、拉取通知、属性状态查询imagingImaging Service图像参数调节亮度、对比度、曝光设备发现走的是 WS-Discovery基于 UDP 组播不需要知道摄像头 IP 就能扫到局域网内的设备。媒体配置是后续所有操作的基础——你得先拿到 Profile才能生成 RTSP 流地址才能控制 PTZ。事件订阅则依赖设备是否支持 PullPoint 或 Basic Notification很多低端摄像头只支持其中一种这是后面踩坑的重灾区。2.3 依赖环境与版本确认在动手写代码前先把环境对齐。这份 SDK 通常要求 JDK 8 或以上如果用了 Axis2 做 SOAP 层JDK 11 以上可能会遇到 JAXB 模块被移除的问题。我一般会先建一个干净的 Maven 工程把lib/下的 jar 用mvn install:install-file装进本地仓库或者直接看有没有提供 pom。依赖里常见的组合是!-- 典型依赖组合具体版本以包内 lib 为准 -- dependencies dependency groupIdorg.apache.axis2/groupId artifactIdaxis2-kernel/artifactId version1.7.9/version /dependency dependency groupIdcommons-discovery/groupId artifactIdcommons-discovery/artifactId version0.5/version /dependency dependency groupIdorg.slf4j/groupId artifactIdslf4j-api/artifactId version1.7.36/version /dependency /dependencies如果包内没有 pom就把lib/下所有 jar 加到 classpath。注意 Axis2 需要axis2.xml配置文件通常在lib/或resources/下漏了会在初始化 SOAP 客户端时报ConfigurationException。这一步别偷懒环境不对后面全是玄学问题。3. 跑通第一个设备发现、连接与获取 RTSP 流地址3.1 WS-Discovery 设备发现ONVIF 的设备发现不走 HTTP而是 WS-Discovery基于 UDP 组播地址239.255.255.250:3702。SDK 里一般会封装一个DeviceDiscovery或DiscoveryManager类。下面是一个典型的发现流程// 设备发现示例发送 Probe 消息并收集响应 import com.onvif.device.DeviceDiscovery; import com.onvif.device.DiscoveredDevice; public class DiscoveryDemo { public static void main(String[] args) throws Exception { // 创建发现实例默认组播地址和端口 DeviceDiscovery discovery new DeviceDiscovery(); // 设置超时时间单位毫秒局域网一般 3000 足够 discovery.setTimeout(3000); // 开始探测返回发现的设备列表 ListDiscoveredDevice devices discovery.probe(); for (DiscoveredDevice dev : devices) { // 设备服务地址后续所有 SOAP 请求都发往这个 endpoint System.out.println(Endpoint: dev.getEndpoint()); // 设备类型和硬件信息部分设备可能为空 System.out.println(Type: dev.getType()); System.out.println(Scopes: dev.getScopes()); } } }逻辑说明probe()内部构造了一个 WS-Discovery 的 Probe SOAP 消息通过 UDP 组播发出然后监听单播回复。参数上setTimeout太短会漏设备太长会拖慢启动局域网 3000ms 是经验值。getEndpoint()返回的是设备服务地址通常是http://ip/onvif/device_service这个地址是后续所有操作的入口。如果发现列表为空先确认摄像头和本机在同一网段且摄像头开启了 ONVIF 功能——很多品牌默认关闭需要在网页后台手动打开。3.2 建立设备连接与能力查询拿到 endpoint 后下一步是建立设备连接并查询能力。ONVIF 的能力查询GetCapabilities决定了这台设备支持哪些服务是后续选型的关键依据// 建立设备连接并查询能力 import com.onvif.device.DeviceClient; import com.onvif.device.Capabilities; public class DeviceConnectDemo { public static void main(String[] args) throws Exception { String endpoint http://192.168.1.100/onvif/device_service; // 创建客户端传入设备服务地址 DeviceClient client new DeviceClient(endpoint); // 如果设备开启了认证需要设置用户名密码 client.setCredentials(admin, password123); // 查询设备能力 Capabilities caps client.getCapabilities(); // 媒体服务地址后续媒体操作要用 System.out.println(Media: caps.getMediaEndpoint()); // PTZ 服务地址为空说明设备不支持云台 System.out.println(PTZ: caps.getPtzEndpoint()); // 事件服务地址 System.out.println(Events: caps.getEventEndpoint()); // 设备信息 System.out.println(Manufacturer: client.getDeviceInformation().getManufacturer()); System.out.println(Model: client.getDeviceInformation().getModel()); } }逻辑说明setCredentials设置的是 HTTP Digest 认证的用户名密码ONVIF 设备普遍用 Digest 而非 BasicSDK 内部会自动处理 401 挑战。getCapabilities()返回的对象里getMediaEndpoint()和getPtzEndpoint()是后续操作的 base URL如果 PTZ 地址为空说明这台设备不支持云台后面就不用试了。getDeviceInformation()返回厂商、型号、固件版本调试时先打印出来方便对照设备手册。注意有些设备的能力查询需要认证有些不需要如果报 401 先检查凭据。3.3 获取 Profile 与生成 RTSP 流地址媒体服务的核心是 Profile一个 Profile 代表一路可用的媒体配置包含视频源、编码器、分辨率等。获取 RTSP 地址的流程是先列出 Profile再根据 Profile 生成流地址// 获取媒体 Profile 并生成 RTSP 地址 import com.onvif.media.MediaClient; import com.onvif.media.Profile; import com.onvif.media.StreamUri; public class MediaDemo { public static void main(String[] args) throws Exception { String mediaEndpoint http://192.168.1.100/onvif/media_service; MediaClient mediaClient new MediaClient(mediaEndpoint); mediaClient.setCredentials(admin, password123); // 获取所有 Profile ListProfile profiles mediaClient.getProfiles(); for (Profile profile : profiles) { System.out.println(Profile Token: profile.getToken()); System.out.println(Profile Name: profile.getName()); // 获取该 Profile 的流地址 StreamUri uri mediaClient.getStreamUri(profile.getToken()); System.out.println(RTSP URI: uri.getUri()); // 分辨率信息 System.out.println(Resolution: profile.getVideoEncoderConfiguration().getResolution()); } } }逻辑说明getProfiles()返回的列表里每个 Profile 的 token 是唯一标识后续 PTZ 控制、流地址获取都要用这个 token。getStreamUri()返回的 RTSP 地址通常带认证信息格式类似rtsp://admin:password192.168.1.100:554/Streaming/Channels/101。参数上有些设备支持多路 Profile主码流和子码流分开主码流分辨率高但带宽大子码流适合预览。如果getStreamUri()返回的地址无法播放先确认 RTSP 端口是否开放再用 VLC 手动测试地址是否有效。4. PTZ 控制与事件订阅从能看 to 能控、能感知4.1 PTZ 方向控制与预置位PTZ 控制是网络摄像头接入里最容易翻车的部分因为不同厂商对 ONVIF PTZ 的实现差异很大。基本流程是先获取 PTZ 配置再发控制命令// PTZ 控制示例连续移动与预置位 import com.onvif.ptz.PTZClient; import com.onvif.ptz.PTZConfiguration; public class PTZDemo { public static void main(String[] args) throws Exception { String ptzEndpoint http://192.168.1.100/onvif/ptz_service; PTZClient ptzClient new PTZClient(ptzEndpoint); ptzClient.setCredentials(admin, password123); // 获取 PTZ 配置拿到 Profile token ListPTZConfiguration configs ptzClient.getConfigurations(); String profileToken configs.get(0).getProfileToken(); // 连续移动x 为左右y 为上下z 为缩放范围 -1.0 到 1.0 // 向右移动速度 0.5 ptzClient.continuousMove(profileToken, 0.5f, 0.0f, 0.0f); Thread.sleep(1000); // 停止移动 ptzClient.stop(profileToken); // 设置预置位token 为预置位编号 ptzClient.setPreset(profileToken, preset1); // 调用预置位 ptzClient.gotoPreset(profileToken, preset1); } }逻辑说明continuousMove的三个参数分别是 x、y、z 轴速度范围 -1.0 到 1.00 表示该轴不动。调用后设备会持续移动必须显式调用stop才会停这是新手最容易忘的一步——不 stop 摄像头会一直转到底。setPreset和gotoPreset的 token 是预置位标识有些设备要求先setPreset再gotoPreset有些支持直接跳转。参数上速度值不要给太大0.5 左右比较稳给 1.0 有些设备会丢步或报错。4.2 事件订阅与通知拉取事件订阅让程序能感知摄像头的移动侦测、遮挡报警、数字输入变化等。ONVIF 事件有两种模式PullPoint 和 Basic Notification前者由客户端主动拉取后者由设备推送。PullPoint 更常用因为不需要公网回调地址// 事件订阅示例创建 PullPoint 订阅并拉取通知 import com.onvif.event.EventClient; import com.onvif.event.PullPointSubscription; import com.onvif.event.NotificationMessage; public class EventDemo { public static void main(String[] args) throws Exception { String eventEndpoint http://192.168.1.100/onvif/event_service; EventClient eventClient new EventClient(eventEndpoint); eventClient.setCredentials(admin, password123); // 创建 PullPoint 订阅超时时间 600 秒 PullPointSubscription sub eventClient.createPullPointSubscription(600); System.out.println(Subscription URL: sub.getSubscriptionUrl()); // 循环拉取通知 while (true) { // 拉取消息超时 10 秒 ListNotificationMessage messages sub.pullMessages(10); for (NotificationMessage msg : messages) { // 事件主题如 tns1:RuleEngine/CellMotionDetector/Motion System.out.println(Topic: msg.getTopic()); // 事件时间 System.out.println(Time: msg.getUtcTime()); // 事件数据 System.out.println(Data: msg.getMessage()); } } } }逻辑说明createPullPointSubscription创建一个订阅返回的 URL 是后续拉取消息的地址。pullMessages的参数是超时秒数设备会 hold 住请求直到有消息或超时所以这个值不要设太小否则空轮询太频繁。事件主题Topic是判断事件类型的关键移动侦测通常是CellMotionDetector/Motion遮挡报警是TamperDetector。参数上订阅有有效期到期前要续订否则会静默失效——这是生产环境里最隐蔽的坑之一。4.3 多设备批量接入的线程模型实际项目里很少只接一台摄像头批量接入时线程模型要提前设计。我一般用固定线程池每台设备一个独立线程负责发现、连接、订阅主线程只做调度和状态汇总// 批量接入的线程池示例 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class BatchConnectDemo { public static void main(String[] args) { // 固定 10 个线程对应 10 台设备 ExecutorService pool Executors.newFixedThreadPool(10); ListString endpoints getDeviceEndpoints(); for (String endpoint : endpoints) { pool.submit(() - { try { DeviceClient client new DeviceClient(endpoint); client.setCredentials(admin, password123); // 每台设备独立维护连接和订阅 client.getCapabilities(); // ... 后续操作 } catch (Exception e) { // 单台失败不影响其他设备 System.err.println(Device endpoint failed: e.getMessage()); } }); } pool.shutdown(); } }逻辑说明每台设备独立线程的好处是单台超时或异常不会阻塞其他设备。参数上线程池大小根据设备数量调整一般不超过 20太多会耗尽文件描述符。注意 ONVIF 的 SOAP 客户端不是线程安全的每台设备要独立创建客户端实例不要共享。如果设备数量超过 50建议加连接池和重试机制否则网络抖动会导致大量设备掉线。5. 避坑与排查ONVIF Java 接入的五个血泪经验5.1 设备发现不到任何摄像头现象probe()返回空列表但摄像头网页能打开。原因通常是三个一是摄像头 ONVIF 功能未开启很多品牌默认关闭二是本机防火墙拦截了 UDP 3702 端口三是摄像头和本机不在同一网段组播跨不了路由。解决先登录摄像头后台确认 ONVIF 已启用再检查本机防火墙放行 UDP 3702最后确认网段。如果还不行用 Wireshark 抓包看有没有收到 ProbeMatch 回复。5.2 认证失败报 401 或 500现象调用getCapabilities()或getProfiles()时报 401 Unauthorized 或 500 Internal Error。原因ONVIF 用 HTTP Digest 认证如果 SDK 的 SOAP 客户端没正确处理挑战就会反复 401。有些设备还要求密码不能含特殊字符或者用户名必须是admin。解决先确认用户名密码正确再用 curl 手动测试 Digest 认证是否通过。如果 SDK 支持开启 SOAP 日志看完整的请求响应报文定位是认证头没带还是密码错误。5.3 RTSP 地址拿到但无法播放现象getStreamUri()返回了地址但 VLC 或播放器打不开。原因一是地址里的认证信息没带或格式不对二是 RTSP 端口不是默认 554三是设备只允许单路连接已有其他客户端占用。解决先用 VLC 手动输入地址测试确认地址本身有效。如果地址带认证注意 URL 编码密码里的或:要转义。端口问题查设备手册有些设备 RTSP 端口是 8554。单路连接限制则要断开其他客户端再试。5.4 PTZ 控制无响应或报错现象调用continuousMove后摄像头不动或报ActionNotSupported。原因一是设备不支持 PTZ能力查询里 PTZ 地址为空二是 Profile token 不对PTZ 要用媒体服务的 Profile token三是速度值超出设备支持范围。解决先确认getCapabilities()里 PTZ 地址非空再用正确的 Profile token。速度值从 0.1 开始试逐步加大。如果设备支持 PTZ 但报错检查是否要先调用getConfigurationOptions获取支持的命令列表。5.5 事件订阅静默失效现象订阅创建成功但一段时间后收不到任何通知。原因ONVIF 订阅有有效期到期后设备自动终止订阅但不会主动通知客户端。解决在订阅到期前续订或者用定时任务定期重建订阅。我一般把订阅有效期设为 600 秒然后在 500 秒时续订。另外PullPoint 的pullMessages超时不要设太长否则续订线程会被阻塞。如果设备支持 Basic Notification可以考虑改用推送模式但需要公网回调地址。6. 进阶技巧用 ONVIF 做设备能力探测与自动化配置跑通基本流程后这份 SDK 真正省事的地方在于批量设备的能力探测和自动化配置。我一般会写一个探测脚本遍历网段内所有设备把能力、Profile、流地址、PTZ 支持情况导出成表格作为后续配置的依据。核心思路是先 WS-Discovery 发现设备再逐台查询能力最后把结果结构化输出。// 设备能力探测与导出示例 import com.onvif.device.DeviceDiscovery; import com.onvif.device.DeviceClient; import com.onvif.device.Capabilities; import com.onvif.media.MediaClient; import com.onvif.media.Profile; public class CapabilityProbe { public static void main(String[] args) throws Exception { DeviceDiscovery discovery new DeviceDiscovery(); discovery.setTimeout(5000); ListDiscoveredDevice devices discovery.probe(); // 输出表头 System.out.println(IP,Manufacturer,Model,Media,PTZ,Events,Profiles,RTSP); for (DiscoveredDevice dev : devices) { try { DeviceClient client new DeviceClient(dev.getEndpoint()); client.setCredentials(admin, password123); Capabilities caps client.getCapabilities(); String manufacturer client.getDeviceInformation().getManufacturer(); String model client.getDeviceInformation().getModel(); // 媒体服务 boolean hasMedia caps.getMediaEndpoint() ! null; boolean hasPtz caps.getPtzEndpoint() ! null; boolean hasEvent caps.getEventEndpoint() ! null; // 获取 Profile 和流地址 String rtsp ; int profileCount 0; if (hasMedia) { MediaClient mediaClient new MediaClient(caps.getMediaEndpoint()); mediaClient.setCredentials(admin, password123); ListProfile profiles mediaClient.getProfiles(); profileCount profiles.size(); if (profileCount 0) { rtsp mediaClient.getStreamUri(profiles.get(0).getToken()).getUri(); } } // 输出一行 CSV System.out.printf(%s,%s,%s,%s,%s,%s,%d,%s%n, dev.getEndpoint(), manufacturer, model, hasMedia, hasPtz, hasEvent, profileCount, rtsp); } catch (Exception e) { // 单台失败输出错误行 System.out.printf(%s,ERROR,%s%n, dev.getEndpoint(), e.getMessage()); } } } }这段代码的关键在于异常隔离——每台设备独立 try-catch单台失败不影响整体探测。参数上setTimeout(5000)给发现留足时间能力查询的超时用 SDK 默认值即可。输出的 CSV 可以直接导入 Excel 或数据库作为设备台账。我一般还会加一列固件版本方便后续批量升级时对照。另一个实用技巧是预置位批量配置。很多项目需要把摄像头统一转到某个角度再设预置位手动一台台点太慢。用 SDK 可以批量执行先continuousMove转到目标角度stop后setPreset整个过程用线程池并行几十台设备几分钟搞定。注意每台设备操作之间加 500ms 间隔太快有些设备会丢命令。从那以后我每次拿到新的 ONVIF SDK都强制先跑一遍能力探测脚本把设备台账拉出来再写业务代码。这样能提前发现哪些设备不支持 PTZ、哪些事件订阅模式不兼容避免写到一半才发现设备能力对不上。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Hadoop伪分布式集群扩展:Kafka与Sqoop集成实战指南

Hadoop伪分布式集群扩展:Kafka与Sqoop集成实战指南

1. 伪分布式集群再扩展:为什么要在已有环境里加Kafka和Sqoop走到这一步,说明你前面已经在一台虚拟机或者Docker容器里把Hadoop伪分布式集群跑起来了,HDFS能存文件,YARN能调度任务,MapReduce也能跑通。这个阶段其实已经…

2026/10/17 8:59:29 阅读更多 →
基于昇腾NPU的GRPO强化学习实战:从数独任务到奖励函数设计

基于昇腾NPU的GRPO强化学习实战:从数独任务到奖励函数设计

我最近在昇腾NPU上完整跑通了一套GRPO强化学习训练流程,任务很简单:教一个小尺寸的开源语言模型解决9x9数独。选这个题不是因为难度高,而是因为数独是一个“规则极其清楚、奖励极其机械”的推理任务——你根本不需要人去打分,写一…

2026/10/17 8:59:29 阅读更多 →
神经网络观测器与自适应滑模的无人船轨迹跟踪Matlab复现详解

神经网络观测器与自适应滑模的无人船轨迹跟踪Matlab复现详解

开学那阵子搞论文复现,导师丢给我一篇 IEEE 的无人船轨迹跟踪论文,标题看着挺唬人:“基于神经网络观测器自适应滑模的无人船轨迹跟踪”。当时我第一反应是,这又是一个“照猫画虎”的仿真复现,跑个图就完事了。结果真正…

2026/10/17 8:59:29 阅读更多 →

最新新闻

内置ALC的音频前置放大器D2538A和D3308

内置ALC的音频前置放大器D2538A和D3308

应用领域D2538A和D3308是两款内置ALC(音频限幅器)的前置音频放大器芯片,其中D2538A为单通道,D3308为双通道,它特别适用于胎心仪、个人医疗防护、立体声收录机、盒式录音机等涉及音频放大与限幅的产品方案。功能介绍音频…

2026/10/17 17:26:23 阅读更多 →
FAIR风险量化实战:从模糊判断到可校准的年化损失建模

FAIR风险量化实战:从模糊判断到可校准的年化损失建模

简介:本资源是一份面向信息安全从业者、风控工程师与技术决策者的FAIR风险量化分析实战指南,聚焦解决企业级信息风险难以精准建模与量化评估的痛点。文档系统拆解FAIR框架核心要素(威胁源、脆弱性、资产、影响)、风险计算模型、蒙…

2026/10/17 17:26:23 阅读更多 →
CISSP 备考指南:八大知识域拆解与易错点复习清单

CISSP 备考指南:八大知识域拆解与易错点复习清单

简介:CISSP官方学习手册第九版是面向信息安全从业者及备考CISSP认证考生的权威参考资料,由信息安全领域专家编写,系统覆盖安全与风险管理、资产安全、安全工程、通信与网络安全、身份与访问管理、安全评估与测试、安全运营及软件开发安全等知…

2026/10/17 17:26:23 阅读更多 →
Flink + Iceberg 本地环境搭建实战:版本选型、Catalog 配置与常见问题排查

Flink + Iceberg 本地环境搭建实战:版本选型、Catalog 配置与常见问题排查

1. 为什么值得搭一套 Flink Iceberg 的本地环境大数据圈子里有个很现实的现象:很多团队用着 Hive 或者纯对象存储做数据湖,白天跑批还凑合,一到近实时场景就露馅——写入延迟高、小文件泛滥、Schema 变更要停服、回溯历史数据得全量重跑。Fl…

2026/10/17 17:26:23 阅读更多 →
OWASP Top 10实战指南:从注入防御到安全左移的开发者必修课

OWASP Top 10实战指南:从注入防御到安全左移的开发者必修课

1. 为什么每个开发者的书架上都该有一份OWASP Top 10如果你写过哪怕一个带登录功能的页面,或者调过任何一个对外暴露的接口,那你其实已经在网络安全的风险敞口里了。很多刚入行的朋友觉得“安全”是安全工程师的事,自己只要把业务逻辑跑通就行…

2026/10/17 17:26:23 阅读更多 →
Flink流处理实战:状态管理、时间语义与生产调优指南

Flink流处理实战:状态管理、时间语义与生产调优指南

1. 这不是“又一篇Flink教程”,而是一份流处理老兵的实战手记Flink流处理框架总结——这七个字背后,藏着过去五年里我参与过的12个实时数仓项目、7套IoT设备告警系统、3个金融风控实时决策链路的真实沉淀。它不是教科书式的概念罗列,也不是AP…

2026/10/17 17:25:23 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →