Spark+HBase地铁客流分析:从CSV到分时报表完整链路
简介一套基于Spark的地铁大数据客流分析系统毕业设计源码包面向计算机相关专业学生、大数据初学者及毕业设计选题者围绕地铁客流统计、预测与调度优化场景展开。压缩包共194个文件约42.6MB按功能分为Java/Scala核心源码、Spark作业配置、SQL数据库脚本、CSV样例数据、系统设计文档及可视化素材等目录结构清晰便于按模块检索。目前已有259人学习下载。资源完整覆盖需求分析、系统设计、编码实现与测试部署流程涉及Spark SQL结构化查询、Spark Streaming实时处理、MLlib机器学习预测等关键技术并整合HBase存储、Logstash日志接入及数据预处理环节可帮助读者快速理解分布式大数据分析项目的工程化方法。附带的源码注释与测试数据更适合动手实践是完成毕业设计或入门Spark开发的实用参考资料。1. 基于Spark的地铁大数据客流分析从CSV原始数据到分时报表完整链路把几千万条地铁刷卡记录交给你你能在多长时间内算出“早高峰哪个站进站量最大”这种问题某地铁运营部门之前拿 Excel 处理这类需求一次要等一两个小时文件超过两百万行就直接卡死。这份基于 Spark 的地铁大数据客流分析系统就是专门为这种场景写的毕设级完整项目从原始 CSV 客流数据出发经过清洗、聚合落到 HBase再通过查询接口输出分时客流、断面客流和预测结果。适合正在做大数据方向毕业设计的学生也适合想快速搭一套 Spark HBase 离线分析 demo 的开发者。压缩包里源码、配置、样例数据、接口调试脚本都齐照着跑就能看完整链路。2. 架构与技术选型四层结构里为什么偏偏是 Spark 配 HBase2.1 系统分层采集、存储、计算、服务各干各的这套系统不是单机脚本而是按生产级大数据项目的套路拆成了四层。第一层是采集层负责把数据弄进来一批是 CSV 批量导入比如压缩包里的 szmc.net-metro.csv 这类历史客流数据另一批是通过 Logstash 采集 nginx 网关的访问日志用来跟踪数据更新和接口调用情况。第二层是存储层原始文件落在 HDFS 上聚合后的结果写进 HBase这样既能跑批又能支撑点查。第三层是计算层Spark SQL 做离线统计、Spark Streaming 做准实时客流、MLlib 做客流预测三者共用同一套 HBase 表。第四层是服务层对外提供 HTTP 查询接口search.http 和 szt-api.http 就是调试这套接口用的请求脚本前端或报表工具拿接口数据渲染图表。四层之间通过 HDFS 路径和 HBase 表解耦采集任务只负责往 HDFS 放文件计算任务监听路径或定时触发服务层只查 HBase。哪怕某天把 CSV 换成 Kafka 数据源也只需要改采集层和计算层入口HBase 表结构不用动。2.2 技术选型MySQL 加 Python 为什么扛不住这个场景如果只是几十万行数据MySQL 加 Python 完全够用写个 group by 就出来了。但地铁客流数据的特点是量大、字段杂、查询要求快一天上千万条交易记录按站点、时段、线路多个维度反复聚合还要支持“查某站某天 8 点到 9 点进站量”这类高频点查。方案覆盖数据量聚合能力点查能力运维成本MySQL Python百万级以内单机内存受限容易卡死一般低Spark 离线算 存结果 CSV千万级以上分布式吞吐高弱每次全扫中Spark HBase千万级以上分布式吞吐高强毫秒级 RowKey 查询中高结论很直接Spark 负责“算得动”HBase 负责“查得快”。Spark 把几千万条数据分布式聚合成结果集再按设计好的 RowKey 写进 HBase查询接口拿到站点和时间参数后走 RowKey 精确匹配整个过程不扫全表。2.3 核心数据模型HBase 表设计与 RowKey 规划项目里最关键的表是地铁客流聚合表主要存“某线路某站点某时段进出站量”这种统计数据。HBase 表设计如下表名列族主要列说明t_metro_flowcfline_code线路编码station_code站点编码in_cnt时段进站量out_cnt时段出站量period时间窗口如 08:00-09:00RowKey 设计是这套系统的关键。如果直接拿线路编码开头数据会全部压在同一台 RegionServer 上形成热点。常见做法是在 RowKey 前拼两位哈希盐值再拼线路、站点、日期、时段让写入分散到多个 Region查询时按盐值加已知条件组合成前缀扫描。建表时最好预分区避免 Region 频繁分裂HBase shell 下的建表命令大致长这样create t_metro_flow, {NAME cf, COMPRESSION SNAPPY, BLOOMFILTER ROW}, {NUMREGIONS 16, SPLITALGO UniformSplit}这段命令里COMPRESSION 设成 SNAPPY 是为了压缩磁盘占用LZO 也能用但 SNAPPY 在 Spark 和 HBase 两边都内置少一层依赖。BLOOMFILTER 设成 ROW 类型点查时能跳过大量不包含目标 RowKey 的 HFile。NUMREGIONS 按预估数据量调一般按数据量除以每个 Region 的合理容量来定16 个 Region 对毕设量级已经够用。SPLITALGO 用 UniformSplit 表示按 RowKey 范围均匀切分。3. 目录结构与数据流转解开 Graduation Design 压缩包里的每一份配置3.1 压缩包里的文件逐个看拿到压缩包打开后不只是源码还有配置文件、样例数据和调试脚本。把这些文件按作用理一遍整个系统的拼图就清楚了文件或目录作用hbase.commandHBase 建表、预分区、常用查询的命令行脚本跑 HBase shell 时直接贴进去logstash-nginx.configLogstassh 采集 nginx 访问日志的配置负责把接口访问记录送进后续分析链路szmc.net-metro.csv样例地铁客流数据包含卡号、进出站站点、交易时间等字段文件名前缀可整体替换成你自己的数据.editorconfig / .gitignore工程规范与版本忽略配置保持代码风格一致search.httpHTTP 接口调试脚本用 JetBrains 系 IDE 打开可以直接点着跑szt-api.http业务查询接口的请求脚本演示如何查分时客流和断面客流Graduation Design毕设文档目录包含需求分析、系统设计、数据库设计和测试说明注意 szmc.net-metro.csv 这一类文件名字里带城市前缀内容本身是一份脱敏后的客流样例不是让你原样当成生产数据用。做真实项目时把文件名的前缀和表结构里的线路字典换成自己城市的即可。3.2 logstash-nginx.config日志采集入口怎么配Logstash 在这个项目里承担的是辅助采集角色重点是 nginx 访问日志。配置一般分 input、filter、output 三段项目里的 logstash-nginx.config 核心逻辑大致如下input { file { path /var/log/nginx/metro-access.log start_position beginning sincedb_path /dev/null } } filter { grok { match { message %{IPORHOST:client_ip} %{GREEDYDATA:request} } } date { match [ timestamp, dd/MMM/yyyy:HH:mm:ss Z ] } } output { stdout { codec json_lines } }这段配置里start_position 设成 beginning 表示从文件头开始读适合第一次接入历史日志sincedb_path 指向 /dev/null 是为了每次重启 Logstash 都重新读一遍避免因为 sincedb 记录偏移导致漏数据毕设调试阶段特别好用。grok 里的 IPORHOST 和 GREEDYDATA 是正则模式分别匹配客户端 IP 和请求路径。date 插件把日志里的时间字符串解析成标准时间戳后续按小时窗口聚合就靠这个字段。output 先打成 json_lines 打到控制台确认日志格式没问题后再改成输出到 Elasticsearch 或直接落 HDFS。3.3 样例数据字段与清洗思路szmc.net-metro.csv 这类地铁客流数据字段一般包含交易卡号、线路编码、站点编码、进出站标志、交易时间等。原始数据直接进 Spark 之前必须清洗压缩包里虽然没有单独的清洗脚本但最合理的做法是用 pandas 做一次预处理减少 Spark 作业里处理脏数据的负担import pandas as pd df pd.read_csv(szmc.net-metro.csv, dtype{卡号: str}) df[交易时间] pd.to_datetime(df[交易时间]) df df.dropna(subset[站点编号, 进出站标志]) df[时段] df[交易时间].dt.hour.apply(lambda h: f{h:02d}:00-{h1:02d}:00) df.to_csv(metro_clean.csv, indexFalse, encodingutf-8)这里 dtype 把卡号强制转成字符串是为了防止长数字被 pandas 自动读成科学计数法丢掉精度这是刷卡数据最常见的坑。dropna 只保留站点编号和进出站标志两个关键字段非空的行脏数据大多集中在这两列。时段字段按交易时间的小时切分后续 Spark SQL 聚合直接按这个字段分组就行。清洗完的文件再上传 HDFS避免 Spark 每次作业都重复处理异常值。4. 核心模块拆解离线聚合、实时统计、预测与 HBase 写入的完整代码4.1 Spark SQL 离线聚合统计分时进出站量离线统计是整套系统的地基。把清洗后的 CSV 读成 DataFrame注册临时表用 SQL 按线路、站点、时段分组聚合这是 Spark SQL 最典型的用法也是这套系统里最核心的一段逻辑val spark SparkSession.builder() .appName(MetroFlowOffline) .enableHiveSupport() .getOrCreate() val df spark.read .option(header, true) .csv(hdfs:///data/metro/metro_clean.csv) df.createOrReplaceTempView(raw_flow) val result spark.sql( SELECT line_code, station_code, period, SUM(1) AS flow FROM ( SELECT line_code, station_code, concat( date_format(trade_time, HH:00), -, date_format(trade_time, HH:59) ) AS period FROM raw_flow WHERE in_out_flag IN (IN, OUT) ) t GROUP BY line_code, station_code, period ) result.write.mode(overwrite).saveAsTable(ods_metro_flow)这段代码里enableHiveSupport 是为了让 Spark 能读写 Hive 元数据表毕设如果没配 Hive 可以去掉这行改成直接 write.parquet 落到 HDFS。date_format 把交易时间格式化成小时字符串再拼成“08:00-08:59”这种时段标签保证 Group By 的分组键是可读的。WHERE 条件里 in_out_flag 过滤出进出站记录去掉异常类型。最后 saveAsTable 会把聚合结果注册成表方便预测模块直接读。4.2 Spark Streaming 准实时统计窗口内客流走势离线结果只能看昨天或上一小时想盯当前十分钟的进站高峰需要流处理。项目里常见的实现是 Spark Streaming 从 socket 或消息队列收实时刷卡记录按固定窗口聚合val ssc new StreamingContext(sparkConf, Seconds(10)) val lines ssc.socketTextStream(localhost, 9999) val flows lines.map(_.split(,)) .filter(arr arr.length 3) .map(arr ((arr(0), arr(1), computePeriod(arr(2))), 1L)) val windowed flows.reduceByKeyAndWindow( _ _, Seconds(300), Seconds(60) ) windowed.foreachRDD { rdd rdd.foreachPartition { part HBaseWriter.write(part) } } ssc.start() ssc.awaitTermination()这段逻辑里socketTextStream 从 9999 端口收数据方便本地测试生产环境可以换成 Kafka。reduceByKeyAndWindow 的三个参数分别是聚合函数、窗口长度和滑动间隔这里窗口 300 秒、滑动 60 秒表示每 60 秒输出最近 5 分钟的聚合结果。foreachPartition 里每个分区单独建 HBase 连接批量写入避免每条记录都创建一次连接这是流写入 HBase 的性能关键。4.3 HBase 批量写入与参数调优离线聚合结果写 HBase最怕逐条 put 导致写入慢、RegionServer 压力大。日常处理这种批量写通常用 BufferedMutator 攒一批再刷代码大致如下val putList new java.util.ArrayList[Put]() result.collect().foreach { row val rowKey s${salt(row.getAs[String](station_code))}_ s${row.getAs[String](line_code)}_ s${row.getAs[String](period)} val put new Put(Bytes.toBytes(rowKey)) put.addColumn(Bytes.toBytes(cf), Bytes.toBytes(flow), Bytes.toBytes(row.getAs[Long](flow).toString)) putList.add(put) if (putList.size() 500) { hTable.put(putList) putList.clear() } } if (!putList.isEmpty) hTable.put(putList)按 500 条一批提交每批刷一次比逐条 put 快一个数量级。RowKey 里第一个字段我加了盐值把不同站点的数据分散到不同 Region。如果数据量再大一个级别可以选择 HBase 的 BulkLoad 方式先按 HFile 格式生成文件再直接加载到表里跳过写 WAL 和 memstore 的过程适合一次性灌历史数据。毕设阶段用 BufferedMutator 已经足够。4.4 客流预测用 MLlib 线性回归做基线模型预测模块最常用的做法是拿历史分时客流训练模型预测未来同时间段客流。项目里选择线性回归做基线简单可解释跑通后再换更复杂的模型:import org.apache.spark.ml.regression.LinearRegression import org.apache.spark.ml.feature.VectorAssembler val train spark.sql( SELECT hour_index, flow FROM ods_metro_flow WHERE station_code A001 AND line_code L1 AND dt 2024-03-01 ) val assembler new VectorAssembler() .setInputCols(Array(hour_index)) .setOutputCol(features) val lr new LinearRegression() .setMaxIter(100) .setRegParam(0.01) val model lr.fit(assembler.transform(train)) model.write.overwrite().save(/model/metro/L1_A001)这里 hour_index 是小时编号比如 8 点对应 8flow 是历史同时段客流特征只有一维精度有限但胜在跑得快。setRegParam 设 0.01 是给模型加一点 L2 正则防止在少量训练数据上过拟合这是毕设里容易忽略的参数。模型保存到指定路径后预测任务每天定时读取前一天数据生成当天分时预测写回 HBase 的预测表接口层把预测值和实际值一起返回前端就能画对比曲线。5. 常见问题排查与避坑记录从环境崩溃到数据倾斜的五次翻车现场5.1 环境准备与启动顺序跑这套系统本地环境建议是 JDK 8、Scala 2.12、Spark 2.4 或 3.x 均可HBase 用 1.4 或 2.xHadoop 选与 Spark 兼容的版本组合。启动顺序有讲究先启动 Hadoop 的 HDFS再启动 HBase最后才提交 Spark 作业。HDFS 没起来就去跑 Spark 写表大概率会卡在连接元数据上。# 1. 起 HDFS start-dfs.sh # 2. 起 HBase start-hbase.sh # 3. 建表 hbase shell hbase.command # 4. 跑离线任务 spark-submit \ --class com.metro.offline.MetroFlowOffline \ --master yarn \ metro-offline.jar # 5. 起查询服务 java -jar metro-api.jar --server.port8080提交 Spark 任务时--master 如果用 local 模式跑通了不代表集群模式没问题。最省事的方式是先在 local[2] 下把任务调通再切 yarn这样可以把业务逻辑问题和环境问题分开排查。5.2 怎么确认任务真的跑通了Spark 任务日志一大堆新手经常看到 INFO 刷屏就以为成功了。判断标准是看三处一是 YARN 页面上 Application 状态变成 SUCCEEDED二是目标表 t_metro_flow 里能查到聚合结果三是接口服务日志里出现 200 响应。光看控制台 Stage 进度条走完是不够的任务可能在整个 Job 的最后一步写数据时失败。5.3 五条血泪踩坑记录第一坑提交作业直接 NoSuchMethodErrorSpark 和 Scala 版本对不上。现象是作业一启动就抛 java.lang.NoSuchMethodError提示某个 scala 包里的方法不存在。原因是本地编译用的 Scala 2.12集群上 Spark 自带的是 Scala 2.11两边二进制不兼容。解决方法是统一编译环境和运行环境的 Scala 版本或者在 pom.xml 里把 scala-library 依赖的 scope 设为 provided交给 Spark 运行时提供。第二坑HBase 写入热点一台 RegionServer 负载飙高。现象是写入任务跑得慢某个 RegionServer 的 CPU 长期 100%其他节点闲着。原因是 RowKey 直接拿线路编码开头数据全挤在少数 Region。解决方法是 RowKey 前拼两位盐值比如站点编码 hashCode 取模后补零让数据均匀散到不同 Region代价是查询时要多带一个条件算出盐值前缀。第三坑CSV 读出来中文全乱码。现象是 Spark 读进 DataFrame 后站点名称显示成乱码聚合结果没法看。原因是样例数据是 GBK 编码Spark 默认按 UTF-8 读。解决方法是读文件时加 option 指定编码写成 spark.read.option(encoding, GBK).csv(...)或者清洗阶段统一转成 UTF-8 再上传。第四坑离线任务 OOMExecutor 直接挂掉。现象是 Executor 日志频繁出现 GC 超时Container 被杀。原因是聚合前数据量太大某个站点数据特别多形成倾斜加上默认内存只有 1G。解决方法是调大 spark.executor.memory同时对热点 key 加随机前缀打散再做二次聚合等于先本地聚合一轮再全局聚合。第五坑HBase shell 连不上报 Connection refused。现象是执行 list 命令超时客户端连不上集群。原因是本地调试时只启动了 HBase 单进程或者 ZooKeeper 地址配成了 localhost 而服务端监听在内网 IP。解决方法是先跑 hbase zkcli 确认 ZooKeeper 正常再核对客户端 hbase-site.xml 里的 quorum 地址是否和集群实际监听地址一致。注意这些坑没有一个是“玄学”全部能从日志和配置里找到根源排查时按日志时间戳倒序看错误栈比乱试参数有效得多。6. 二次开发思路把单城客流系统改造成可扩展的分析底座6.1 从 CSV 换到 Kafka离线分析升级成实时链路现在这套系统是 CSV 导入加 Spark Streaming socket 测试改成生产可用只需要替换数据入口。用 Kafka 作为采集层缓冲Logstash 或 Flume 把刷卡记录送进 Kafka topicSpark Streaming 通过 createDirectStream 消费指定 topic断点续传和分区并行都交给 Kafka 处理。改动集中在采集层和流任务入口HBase 表结构不需要变。6.2 增加断面客流与满载率计算断面客流是地铁运营真正关心的指标计算思路是拿进出站记录做 OD 匹配得到每个乘客的乘车区间再统计每个区间段上同一时间经过的乘客总量。最简单的一版可以基于 Spark SQL 实现同一张卡同一个时间段内的进站和出站记录关联成 OD 对再把 OD 对和线路站点顺序表映射到断面最后按断面聚合得到满载率。这段逻辑建议独立成单独模块结果表单独设计因为它的查询模式和分时客流完全不同。6.3 让查询接口更通用参数化设计与索引优化查询接口目前是按站点和时段查改造方向是支持多条件组合比如线路加日期范围加时段区间。接口层把查询参数拼成 HBase Scan 的起始 RowKey 和结束 RowKey走前缀扫描。如果出现按站点反向查线路的需求就建一张站点到线路的映射表或者加二级索引。预测结果和实际结果建议分表存储接口层做一次 merge避免混合写入导致 RowKey 设计互相妥协。之前有一次我把 RowKey 设计成日期开头结果某天的数据全打到一个 Region线上查询从毫秒级退化到秒级最后被迫做数据迁移。从那以后我每次给 HBase 设计表结构都强制先按数据分布画一遍读写路径再写建表语句这份客流系统的二次开发你也按这个顺序来至少能避开我最疼的那次教训希望帮到你。本文还有配套的精品资源点击获取

相关新闻

VS工具集实战:环境配置、脚本使用与工程模板生成指南

VS工具集实战:环境配置、脚本使用与工程模板生成指南

简介:VS平台工具集.zip是一份面向Visual Studio开发者的平台工具集整合包,用于补充和更新VS的构建与编译组件,适合需要在Windows环境开展.NET/C开发、自定义MSBuild构建流程或调试工具链的工程师。压缩包共收录2000个文件,以1158个…

2026/10/19 5:30:22 阅读更多 →
拒绝破解商业软件,转向合规逆向工程

拒绝破解商业软件,转向合规逆向工程

抱歉,这个主题我没办法帮你写。你给出的标题里涉及“查壳”“改跳转”“破解”这类针对商业软件的逆向破解操作,这是典型的绕过授权、破坏技术保护措施的行为,既违反《著作权法》和《计算机软件保护条例》,也不符合主流价值观和内…

2026/10/19 5:30:22 阅读更多 →
YOLOv8s OpenVINO IR模型部署实战:从解压到推理的完整指南

YOLOv8s OpenVINO IR模型部署实战:从解压到推理的完整指南

简介:本资源为YOLOv8s-Detect模型转换后的OpenVINO推理模型包,面向需要在Intel平台部署实时目标检测的开发者与边缘计算实践者,尤其适合无人机、安防监控、智能交通等低延迟场景。压缩包共3个文件,包含xml与bin两类OpenVINO IR核心…

2026/10/19 5:30:22 阅读更多 →

最新新闻

论文查重与AI率检测全攻略:原理、工具与降重技巧

论文查重与AI率检测全攻略:原理、工具与降重技巧

每年到了毕业论文提交季,最让人焦虑的往往不是论文本身有多难写,而是“查重”那一关。更麻烦的是,近两年几乎所有高校都多了一条新指标:AI生成内容检测。也就是说,论文不仅要控制重复率,还要控制“AI率”。…

2026/10/19 6:07:40 阅读更多 →
AI生成论文查重工具与实用通过技巧:降重和去AI痕迹全解析

AI生成论文查重工具与实用通过技巧:降重和去AI痕迹全解析

现在的论文写作已经不太一样了。以前大家最担心的是“重复率太高”,特地用各种改写工具对付查重系统;现在又多了一件事,很多学校、期刊不仅要看重复率,还会用AI检测工具判断论文是不是“大模型生成的”。于是“AI生成论文查重工具…

2026/10/19 6:07:40 阅读更多 →
软件测试工程师转型AI教育:技能迁移与90天实操指南

软件测试工程师转型AI教育:技能迁移与90天实操指南

2026年了,软件测试从业者的职业讨论里,AI教育这个词出现的频率越来越高。它不再只是教育行业内部的话题,而是被很多测试同行看作“新出路”的关键词。所谓新路径,不是让你丢掉测试底盘去卷算法,也不是让你从零学做课件…

2026/10/19 6:07:40 阅读更多 →
测试工程师转型AI教育:能力迁移与实操路径

测试工程师转型AI教育:能力迁移与实操路径

去年底我参加了一个业内的线上交流,主题是测试工程师的技能树更新。会场上有位同行问了一个很现实的问题:如果自动化测试工具越来越智能,测试用例可以自动生成、自动维护,那我们这批人还剩下什么?当时我没法给出一个让…

2026/10/19 6:07:40 阅读更多 →
图表设计实战指南:从配色、布局到团队规范,提升图表可读性

图表设计实战指南:从配色、布局到团队规范,提升图表可读性

1. 从"diagram-design"这个标题里能读出什么第一次看到"diagram-design"这个标题,我脑子里蹦出来的第一个念头是:这大概率不是一个单纯的"画图工具"项目,而是一套关于"图表设计"的方法论或者设计系统…

2026/10/19 6:07:40 阅读更多 →
双目三维重建从标定到体积测量:误差链分析及5大避坑指南

双目三维重建从标定到体积测量:误差链分析及5大避坑指南

简介:一套聚焦三维重建完整链路的学习型示例工程,面向计算机视觉入门者以及机器人导航、增强现实方向的开发者,解决摄像头标定、双目立体校正和点云体积计算中的核心算法落地问题,整体使用C实现,便于理解底层计算过程。…

2026/10/19 6:06:39 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 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/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 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/19 2:54:50 阅读更多 →
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/18 12:16:16 阅读更多 →