用Python批量生成PPT:内容与样式分离的自动化实践

1. 为什么我要自己动手做一个 PPT 生成工具

先说说我做这个项目的起因。我在一家做企业培训服务的公司待了快六年,岗位名义上是"课程研发",实际上干的事情非常杂——写课件、做讲义、剪视频、搭题库,其中占用时间最多、也最让人抓狂的,就是做 PPT。一个两小时的培训课程,配套的演示文稿少说六七十页,多则一百多页。每次课程迭代,内容改一遍,排版就得跟着重排一遍,改到最后人已经麻了。

市面上现成的工具我基本都试过。在线模板站、AI 一键生成、插件式排版助手,各有各的问题:要么模板好看但内容结构完全对不上,要么生成速度快但出来的东西千篇一律,要么就是免费版限制太多、导出还带水印。最关键的一点是,这些工具都默认你从零开始,而我的真实场景是——内容早就有了,我缺的是把内容高效、稳定、批量地变成一份结构清晰、风格统一的演示文稿。

所以我就动了念头,自己写一个。项目取名ppt-master,定位很明确:一个以内容为驱动、以模板为骨架、以脚本为引擎的 PPT 批量生成工具。它不追求"AI 帮你写内容",而是解决"内容已经有了,怎么快速、可控、可复用地变成 PPT"这个问题。适合的人群也很清楚:经常要做系列课件、周报月报、产品手册、项目汇报的职场人,尤其是那些内容结构相对固定、需要反复出稿的场景。

这篇文章我会把整个项目的设计思路、技术选型、核心实现、踩过的坑,全部摊开讲一遍。不是教程式的"第一步第二步",而是把我做决策时的真实考量、试错过程、以及最后沉淀下来的可复用方案,完整地分享出来。如果你也受够了重复排版,这篇应该能帮你省下不少时间。

2. 整体设计思路与方案选型

2.1 核心需求拆解:我到底要解决什么问题

动手之前我先把需求列了一遍,避免写着写着跑偏。梳理下来核心诉求有这么几条:

  • 内容与样式分离:内容用结构化文本描述,样式由模板控制,改内容不动样式,换样式不动内容。
  • 批量生成:一次输入能产出多份 PPT,比如一个系列课有十二讲,每讲一份,共用同一套模板。
  • 可版本管理:内容源文件是纯文本,能进 Git,能 diff,能回滚,不像二进制 PPT 文件那样改了就说不清。
  • 风格统一:字体、配色、页边距、页眉页脚这些全局元素,一处定义处处生效。
  • 可扩展:以后想加图表、加表格、加图片占位,不用推倒重来。

这五条里,内容与样式分离是根,其他几条都是它的自然延伸。想清楚这一点之后,技术路线其实就收窄了很多。

2.2 技术路线对比:为什么最后选了 python-pptx

我评估过三条路线,这里做个对比,方便你判断自己的场景适合哪条。

路线代表方案优势劣势适用场景
模板填充基于现成 PPT 模板做占位符替换上手快,样式完全可控模板改版成本高,占位符管理麻烦页数少、结构固定的单份文档
代码生成python-pptx 等库直接操作对象模型灵活度极高,可编程控制每个元素需要写代码,样式要自己定义批量、结构化、需版本管理
中间格式转换Markdown/HTML 转 PPT写作体验好转换损耗大,精细排版难控内容为主、排版要求不高的场景

我最终选了python-pptx这条代码生成路线。原因很直接:我的内容结构是高度规整的(标题、要点、备注、配图位),这种规整性正好适合用代码来描述;而且 python-pptx 直接操作 PPT 的对象模型,意味着我对每一个文本框、每一行文字、每一个色块都有完全的控制权,不会出现"转换出来跟预期不一样但又改不动"的情况。

提示:如果你的内容结构非常不规整,或者你对排版精细度要求不高,中间格式转换那条路可能更省事。选路线之前先想清楚"内容规整度"和"排版精细度"这两个维度。

2.3 架构分层:三层结构让项目不失控

项目我分了三层,这个分层是后面所有代码组织的基础:

  • 内容层(Content Layer):用 YAML 或 Markdown 描述每一页的内容,包括标题、正文要点、备注、图片引用。这一层是纯数据,跟 PPT 无关。
  • 模板层(Template Layer):定义全局样式,包括母版、配色方案、字体族、字号阶梯、页边距、页眉页脚规则。这一层是纯配置。
  • 渲染层(Render Layer):读取内容层和模板层,调用 python-pptx 把数据渲染成 PPT 文件。这一层是纯逻辑。

三层之间通过明确定义的数据结构通信,互不越界。这样做的好处是,任何一层出问题都能快速定位——是内容写错了,还是模板配错了,还是渲染逻辑有 bug,一目了然。我见过太多项目把这三样揉在一起,改一个字体颜色要翻遍整个代码库,那种痛苦我不想再经历第二次。

2.4 为什么用 YAML 而不是 JSON 或纯 Markdown

内容层我选了 YAML,这里说下理由。JSON 的问题是写起来太啰嗦,引号和括号满天飞,人工维护容易出错;纯 Markdown 的问题是表达能力有限,遇到"这一页要分两栏""这个要点要标红"这类结构化需求就力不从心。YAML 刚好卡在中间:结构清晰、可读性好、支持嵌套、注释友好,而且 Python 生态里解析 YAML 的库非常成熟。

举个内容层的例子,一页幻灯片大概长这样:

- type: title_content title: "第三章 客户沟通的核心原则" bullets: - "先听后说:让对方把话讲完再回应" - "共情优先:先认可情绪,再处理问题" - "给选择题:不要只给判断题" notes: "这一页重点讲三个原则,配合案例展开" layout: bullet_color: "#2C3E50" highlight: [0]

type决定用哪个渲染模板,title和bullets是内容,notes是演讲者备注,layout是这一页的局部样式覆盖。结构一目了然,非技术人员稍微学一下也能改。

3. 核心细节解析与实操要点

3.1 内容层的数据结构设计

内容层的设计是整个项目的地基,我在这上面反复改了三版才定下来。第一版太简单,只能表达标题加要点;第二版太复杂,引入了太多嵌套,写起来累;第三版才找到平衡点。

核心思路是:用type字段做多态分发。每一种页面类型对应一个渲染函数,内容层只需要声明"我是什么类型",渲染层负责"怎么画"。目前支持的类型有这么几种:

  • title_slide:封面页,包含主标题、副标题、日期、作者。
  • section:章节过渡页,只有一个大标题。
  • title_content:最常用的内容页,标题加要点列表。
  • two_column:两栏对比页,左右各一组要点。
  • table:表格页,用二维数组描述数据。
  • image_text:图文页,一边图片一边文字。
  • summary:总结页,带编号的要点回顾。

每种类型的字段定义我都写在一个 schema 文件里,渲染前先做一次校验,字段缺失或类型不对直接报错,避免渲染到一半崩掉。这个校验步骤看起来多余,实际上救了我很多次——尤其是内容多的时候,一个字段名拼错,没有校验的话要等到打开 PPT 才发现。

3.2 模板层的样式系统怎么搭

模板层我设计了一套"样式令牌"(design token)机制,灵感来自前端开发里的 CSS 变量。所有样式值都定义在一个中心配置文件里,其他地方只引用令牌名,不写死具体值。

tokens: color: primary: "#1A5276" secondary: "#2874A6" accent: "#E67E22" text: "#2C3E50" muted: "#7F8C8D" font: title: "思源黑体" body: "思源宋体" mono: "JetBrains Mono" size: h1: 40 h2: 28 body: 18 caption: 12 spacing: margin_top: 0.6 margin_left: 0.8 line_gap: 1.4

这样做的好处是,换一套配色只需要改color下面那几行,全篇 PPT 跟着变。我之前给不同客户做定制版,就是靠切换令牌文件实现的,同一份内容,换个令牌文件,出来的风格完全不同,效率提升非常明显。

注意:字号阶梯一定要提前定好,不要边做边加。我一开始没定阶梯,做到后面出现了 17、19、21 这种零碎字号,视觉上很乱。后来强制自己只用阶梯里的值,整体观感立刻统一了。

3.3 渲染层的核心逻辑

渲染层是整个项目最核心的部分,我把它拆成了三个模块:布局计算、元素绘制、样式应用。

布局计算负责算每个元素的位置和尺寸。python-pptx 用的是英寸(Inches)和 EMU(English Metric Units)作为单位,1 英寸等于 914400 EMU。我封装了一层单位转换,内部统一用英寸思考,输出时转成 EMU。页面尺寸默认用 16:9,也就是 13.333 英寸宽、7.5 英寸高,这是目前最通用的比例。

元素绘制负责把内容变成 PPT 里的形状。文本框、图片框、表格、线条,每种元素都有对应的绘制函数。这里有个细节值得说:python-pptx 的文本框默认有内边距,如果不处理,文字位置会跟预期差几个像素。我的做法是统一把内边距设为零,然后自己用坐标控制位置,这样精确度更高。

样式应用负责把令牌值套到元素上。字体、字号、颜色、加粗、对齐,逐项设置。这里最容易踩的坑是中文字体——python-pptx 设置字体时,如果只设了font.name,中文可能不生效,因为中文字体走的是另一个属性。解决办法是同时设置东亚字体属性,这个后面在问题排查里会详细讲。

3.4 实操心得:三个让我少走弯路的习惯

做这个项目的过程中,我养成了三个习惯,分享给你:

  • 先做最小可运行版本:不要一上来就追求功能齐全。我第一版只支持title_content一种类型,能跑通"读 YAML 出 PPT"这个闭环,再逐步加类型。这样每一步都有正反馈,不会写到一半失去动力。
  • 每加一个功能就写一个测试用例:PPT 这种二进制产物不好直接断言,我的做法是渲染后检查对象模型——比如"这一页应该有 5 个文本框""第一个文本框的文字应该是 XXX"。这些断言帮我挡住了很多回归 bug。
  • 保留中间产物:渲染过程中我把计算好的布局数据 dump 成 JSON,出问题时对着 JSON 看,比对着 PPT 猜快得多。

4. 实操过程与核心环节实现

4.1 环境准备与依赖安装

环境这块没什么特别的,Python 3.9 以上就行,我实测 3.9 到 3.12 都能跑。核心依赖就两个:python-pptx负责操作 PPT,PyYAML负责解析内容文件。另外我用了Pillow来处理图片尺寸,因为图文页需要按图片实际比例算占位。

pip install python-pptx PyYAML Pillow

如果你打算把项目做成命令行工具,可以再加个click或argparse,我用的argparse,因为标准库不用额外装。项目目录结构我建议这样组织:

ppt-master/ ├── content/ # 内容层,放 YAML 文件 ├── templates/ # 模板层,放令牌配置 ├── output/ # 渲染产物 ├── src/ │ ├── parser.py # 内容解析与校验 │ ├── renderer.py # 渲染核心 │ ├── layouts.py # 各页面类型布局 │ └── tokens.py # 令牌加载 └── main.py # 入口

这个结构的好处是内容、模板、代码、产物四者物理隔离,找东西不用翻。

4.2 从 YAML 到 PPT 的完整链路

整个链路我拆成五步,每一步都有明确的输入输出:

  1. 加载令牌:读templates/tokens.yaml,构建令牌字典。
  2. 解析内容:读content/xxx.yaml,逐页解析,做 schema 校验。
  3. 初始化演示文稿:创建Presentation对象,设置页面尺寸。
  4. 逐页渲染:根据每页的type分发到对应布局函数,绘制元素。
  5. 保存输出:写入output/xxx.pptx。

这里重点说第 4 步。以最常用的title_content为例,布局函数大概长这样:

def render_title_content(slide, page, tokens): # 标题区 title_box = slide.shapes.add_textbox( Inches(tokens["spacing"]["margin_left"]), Inches(tokens["spacing"]["margin_top"]), Inches(11.7), Inches(1.0) ) tf = title_box.text_frame tf.text = page["title"] apply_font(tf.paragraphs[0], tokens, level="h2") # 正文区 body_box = slide.shapes.add_textbox( Inches(tokens["spacing"]["margin_left"]), Inches(1.8), Inches(11.7), Inches(5.0) ) bf = body_box.text_frame bf.word_wrap = True for i, bullet in enumerate(page["bullets"]): p = bf.paragraphs[0] if i == 0 else bf.add_paragraph() p.text = f"• {bullet}" apply_font(p, tokens, level="body") if i in page.get("layout", {}).get("highlight", []): p.runs[0].font.color.rgb = hex_to_rgb(tokens["color"]["accent"])

apply_font是我封装的辅助函数,负责把令牌里的字体、字号、颜色一次性套到段落上。注意bf.paragraphs[0]这个细节——python-pptx 新建文本框时默认已经有一个空段落,第一个要点要复用它,否则会多出一个空行。

4.3 参数计算:位置和尺寸怎么定

布局里最费脑子的就是算位置。我总结了一套自己的算法,核心是栅格化。把页面想象成一个网格,横向 12 列,纵向按内容自适应。

以 16:9 页面为例,宽 13.333 英寸,左右各留 0.8 英寸边距,可用宽度就是 11.733 英寸。12 列的话每列约 0.978 英寸。标题区固定占顶部 1.0 英寸,正文区从 1.8 英寸开始,底部留 0.5 英寸,可用高度约 5.2 英寸。

正文要点的行高怎么算?我用的是"字号乘以行距系数"。比如正文字号 18 磅,行距系数 1.4,那么每行占 25.2 磅,换算成英寸是 0.35 英寸。5.2 英寸大概能放 14 行。如果要点超过 14 行,就要么缩小字号,要么分页。我在渲染前会做一次预计算,超了就自动降级字号,降到 14 磅还放不下就报警提示分页。

提示:这个"预计算 + 自动降级"的机制非常实用。人工排版时经常出现"最后一页塞不下"的尴尬,有了它,工具会自己处理,你只需要关注内容本身。

4.4 中文字体处理的实操细节

中文字体是 python-pptx 的一个经典坑,我在这里卡了整整一个下午。问题现象是:代码里明明设了"思源黑体",生成的 PPT 打开却是默认的宋体。后来查资料才明白,PPT 的字体设置分两套属性,一套管拉丁字符,一套管东亚字符,font.name只设了前者。

解决办法是直接操作 XML。python-pptx 的每个 run 对象底层都有 XML 元素,我写了个函数往里面注入东亚字体属性:

from pptx.oxml.ns import qn def set_east_asian_font(run, font_name): rPr = run._r.get_or_add_rPr() ea = rPr.find(qn('a:ea')) if ea is None: ea = rPr.makeelement(qn('a:ea'), {}) rPr.append(ea) ea.set('typeface', font_name)

调用的时候,拉丁字体和东亚字体都设一遍,中文就正常了。这个函数我建议你直接抄走,能省你半天时间。

4.5 批量生成的实现

批量生成是我做这个项目的核心诉求之一,实现起来其实不复杂。入口脚本接收一个内容目录,遍历里面所有 YAML 文件,每个文件生成一份 PPT。如果多个文件共用一套令牌,就只加载一次令牌,循环渲染。

def batch_generate(content_dir, template_path, output_dir): tokens = load_tokens(template_path) for yaml_file in Path(content_dir).glob("*.yaml"): pages = parse_content(yaml_file) prs = build_presentation(pages, tokens) out_path = Path(output_dir) / f"{yaml_file.stem}.pptx" prs.save(out_path) print(f"生成完成: {out_path}")

我实测过,一个十二讲的系列课,每讲约 60 页,总共 720 页,全量生成耗时不到 40 秒。这个速度对于日常迭代来说完全够用,改完内容重新跑一遍就行,比手动改快太多了。

5. 常见问题与排查技巧实录

5.1 渲染结果与预期不符的排查思路

这类问题最常见,我的排查顺序是固定的:先看内容层,再看令牌层,最后看渲染层。

内容层的问题通常是字段名拼错、缩进不对、列表格式写错。YAML 对缩进极其敏感,多一个空格少一个空格结果完全不同。我的建议是编辑器里开启 YAML 语法高亮和缩进提示,能挡掉大部分低级错误。

令牌层的问题通常是令牌名引用错了,或者值格式不对。比如颜色值忘了写#,字号写成了字符串。我在加载令牌时会做一次类型检查,颜色必须是#开头的六位十六进制,字号必须是数字,不符合直接报错。

渲染层的问题通常是坐标算错、元素重叠、层级不对。这时候前面说的"dump 布局 JSON"就派上用场了,对着数据看,很快能定位。

5.2 常见问题速查表

我把踩过的坑整理成了一张表,遇到问题先查这张表,能解决八成情况。

问题现象可能原因解决方法
中文显示为宋体只设了拉丁字体同时设置东亚字体属性
文字位置偏移文本框有默认内边距将内边距统一设为 0
要点多出空行复用了默认空段落第一个要点用 paragraphs[0]
图片变形未按原始比例缩放用 Pillow 读原始尺寸算比例
颜色不生效颜色值格式错误检查是否为 #RRGGBB 格式
表格列宽不均未显式设置列宽按内容比例分配列宽
生成文件打不开保存时文件被占用关闭已打开的 PPT 再生成
批量生成串页令牌对象被复用污染每份文档重新构建令牌副本

5.3 独家避坑技巧

除了上面这些通用问题,还有几个是我自己摸索出来的经验,常规文档里不会写:

  • 文本框自动调整要关掉:python-pptx 的文本框有个auto_size属性,默认可能开启,会导致文字多了框自动变大,破坏布局。我统一设成None,完全由我控制尺寸。
  • 段落间距用 space_after 而不是空行:很多人喜欢用空段落制造间距,这样一旦调整行距就全乱了。正确做法是设置段落的space_after属性,间距独立于内容。
  • 图片先压缩再插入:如果内容里有大图,直接插入会让 PPT 文件体积暴涨。我的做法是渲染前用 Pillow 把图片压到合适分辨率,实测能把文件从几十兆压到几兆。
  • 输出文件名加时间戳:批量生成时如果文件名固定,容易覆盖旧版本。我在输出文件名里加了时间戳,方便回溯,也避免误覆盖。

5.4 性能优化的几个点

项目跑起来之后我又做了一轮性能优化,主要是三个方向:

  • 令牌只加载一次:批量生成时,令牌文件只读一次,缓存在内存里,避免重复 IO。
  • 图片尺寸缓存:同一张图片在多页复用,尺寸只算一次,缓存起来。
  • 延迟保存:所有页面渲染完再统一保存,而不是每页保存一次,减少磁盘写入。

优化之后,前面说的 720 页场景,耗时从最初的近两分钟降到了 40 秒以内。对于日常使用来说,这个速度已经感觉不到等待了。

6. 这套方案还能怎么扩展

项目做到现在这个程度,基本能满足我自己的需求了,但我知道它还有不少可以延伸的方向。比如内容层可以接入表格数据源,从 CSV 或数据库直接读数据生成图表页;比如模板层可以支持多套主题,一键切换;比如渲染层可以加一个预览模式,生成缩略图方便快速检查。

我最近在试的一个方向是内容复用。同一份内容,既能生成 PPT,也能生成 Word 讲义和 PDF 手册,三份产物共用一套内容源。这个思路一旦跑通,内容维护的成本还能再降一个台阶。具体做法是在内容层和渲染层之间加一个中间表示层,把内容抽象成与输出格式无关的结构,然后针对不同格式写不同的渲染器。这个我还在摸索,等成熟了再单独写一篇。

如果你也在做类似的事情,我的建议是先把"内容与样式分离"这一条做扎实,其他的扩展都是水到渠成。反过来,如果这一条没做好,后面加什么功能都是在给自己挖坑。我自己就是先踩了这个坑,返工了一次才想明白的。

相关新闻

量化交易框架WonderTrader依赖库编译避坑指南

量化交易框架WonderTrader依赖库编译避坑指南

简介:这是为 Ubuntu 22.04 与 gcc 11.4 环境预编译的 WonderTrader 依赖库,面向需要在本地编译量化交易框架的 C 开发者。资源将官方默认依赖路径 /home/mydeps 改为通过环境变量 MyDependsGcc 指向自定义目录 /deps/wtcpp,并同步修改 CMakeL…

2026/10/20 5:53:19 阅读更多 →
LFM2.5-24B-A2B完全解读:24B MoE推理大模型为何只激活2B参数就能跑本地Agent

LFM2.5-24B-A2B完全解读:24B MoE推理大模型为何只激活2B参数就能跑本地Agent

大模型基础模型推理模型本地部署模型量化 【免费下载链接】LFM2.5-24B-A2B-GGUF 项目地址: https://ai.gitcode.com/hf_mirrors/unsloth/LFM2.5-24B-A2B-GGUF 点击查看 免费下载 LFM2.5-24B-A2B-GGUF 是 Liquid AI 开源的 24B MoE 推理大模型的 GGUF 量化仓库&…

2026/10/20 5:53:19 阅读更多 →
ASP+SQL旅游管理系统部署避坑指南:从IIS配置到数据库还原

ASP+SQL旅游管理系统部署避坑指南:从IIS配置到数据库还原

简介:这套ASPSQL旅游管理系统设计资料面向计算机相关专业毕业生、Web开发初学者及需要完成课程设计的人群,覆盖用户管理、旅游线路展示、在线预订、后台管理、安全性与性能优化等核心模块,可帮助理解ASP动态页面与SQL Server数据库的协同开发…

2026/10/20 5:52:19 阅读更多 →

最新新闻

artcraft类创作工具技术架构与交互设计实战指南

artcraft类创作工具技术架构与交互设计实战指南

1. 从"artcraft"这个名字说起:一个被低估的创作工具定位问题第一次看到"artcraft"这个词,我脑子里蹦出来的第一反应是"艺术"加"手艺"的组合。这不是一个随便拼出来的名字,它暗示了一种很具体的产品气…

2026/10/20 6:27:33 阅读更多 →
从自由发挥到受控执行:大模型Skill机制实战

从自由发挥到受控执行:大模型Skill机制实战

1. 先弄明白:Skill到底解决的是什么问题1.1 大模型能力的边界在哪里如果你用过几款主流的大模型对话工具,就会发现一个奇怪的现象:让模型帮你"解释一段代码""写个正则表达式"很容易,但让它"按团队规范自…

2026/10/20 6:27:33 阅读更多 →
JavaFX+SSM架构实战:桌面客户端与数据服务端的高效整合

JavaFX+SSM架构实战:桌面客户端与数据服务端的高效整合

简介:这是一份融合 JavaFX 与 SSM 框架的 ERP 系统完整项目,面向需要将桌面 GUI 与企业级后端整合开发的 Java 学习者、毕业设计或项目实战人群,既能学习界面设计,也能掌握经典后端框架的落地方式。资源共包含 2 个文件&#xff1…

2026/10/20 6:27:33 阅读更多 →
Python与API文本分析实战:从文本清洗到工程化部署

Python与API文本分析实战:从文本清洗到工程化部署

AI应用的潜力,有一大半藏在文本里。文本分析这个方向,我自己前前后后折腾过不少方案,从早期的正则规则、词频统计,到开源模型微调,再到现在用 Python 接各类大模型 API 做文本分析,最大的感受是&#xff1a…

2026/10/20 6:27:33 阅读更多 →
IPv4报文头部详解:字段、分片与网络排查核心知识

IPv4报文头部详解:字段、分片与网络排查核心知识

做网络排查做得久了,你会发现一个特别有意思的现象:很多人能把TCP的三次握手、四次挥手讲得天花乱坠,可一旦你把抓包工具里的一帧数据展开,让他逐字节解释一下IPv4头部,他反而会卡壳。TCP、UDP这些传输层协议太出名&am…

2026/10/20 6:27:33 阅读更多 →
STM32 bxCAN实战:从物理层到过滤器配置与调试排障

STM32 bxCAN实战:从物理层到过滤器配置与调试排障

做嵌入式这几年,UART、I2C、SPI都是老朋友,但真正让我觉得“像个通信工程师”的,是开始啃STM32的CAN外设之后。原因很简单:在汽车、机器人和工业现场,CAN总线是默认的“老大哥”,而它在微控制器上的硬件实现…

2026/10/20 6:26:33 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 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/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练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 阅读更多 →