PostgreSQL uuid-ossp扩展安装指南:从Linux到Docker的避坑实战
简介PostgreSQL 的 uuid-ossp 扩展是数据库生成标准 UUID 的常用组件这份资源正适合需要在 PostgreSQL 中启用该扩展的 DBA 与后端开发者解决唯一标识符生成、分布式数据同步、微服务拆分等场景下的插件部署问题。压缩包体积仅 11KB共 5 个文件3 个 SQL 脚本负责扩展的安装定义、版本升级与旧版打包转换1 个 .so 动态库提供底层函数实现1 个 .control 控制文件声明扩展元数据文件结构清晰便于放入 PostgreSQL 扩展目录后由 CREATE EXTENSION 直接调用。资源目前已收获 467 人次学习下载。通过完整安装包读者可省去自行编译源码的繁琐环节快速在数据库中启用 uuid-ossp并配合 uuid_generate_v1()、uuid_generate_v4() 等函数生成不同版本的 UUID同时还能把 UUID 作为原生数据类型用于主键设计、表关联与查询。安装前只需确认 PostgreSQL 版本配套及 libuuid 等依赖已就绪即可减少踩坑对需要维护分布式系统、数据同步或微服务架构的读者来说这是一份理解并落地 UUID 机制的实用素材。1. 为什么一个UUID插件能让迁移脚本翻车如果你在维护PostgreSQL数据库大概率遇到过这样的场景从某个开源系统导入表结构SQL脚本里明明写着uuid_generate_v4()执行时报错“function uuid_generate_v4() does not exist”。或者从老项目备份还原后应用启动直接报错排查一圈发现是uuid-ossp扩展没装上。这个插件就是 PostgreSQL 官方的 UUID 生成扩展负责提供uuid_generate_v4()、uuid_generate_v1()等函数。它的安装本身不复杂但坑在于不同操作系统、不同 PostgreSQL 版本、不同容器环境下的路径和权限差异很大。这篇笔记会把 Linux、Windows、Docker 三种场景的安装步骤、常见报错和验证方法写清楚帮你少走弯路。2. 先搞清楚 uuid-ossp 是干什么的核心函数与选型对比2.1 uuid-ossp 提供的核心函数uuid-ossp扩展的核心价值是生成 UUID 字符串主要函数有下面几个函数名生成的 UUID 版本用途uuid_generate_v1()v1基于 MAC 地址和时间戳适合需要区分生成机器的场景uuid_generate_v1mc()v1v1 的变体使用随机 MAC 地址降低泄露物理地址的风险uuid_generate_v3(namespace, name)v3基于 MD5 哈希确定性生成适合根据业务 ID 生成固定 UUIDuuid_generate_v4()v4完全随机最常用适合主键uuid_generate_v5(namespace, name)v5基于 SHA-1 哈希确定性生成比 v3 更安全日常开发中 90% 的场景都只用uuid_generate_v4()。它不依赖任何外部状态每次调用返回一个随机 UUID碰撞概率极低作为分布式系统的主键非常合适。v1 版本有一个需要注意的点它会暴露数据库服务器的 MAC 地址和时间戳。从安全角度看如果 UUID 会出现在用户可见的 URL 或 API 响应中不建议用 v1因为攻击者可以从 UUID 推断出服务器的大致开机时间和物理网卡信息。我一般在内部系统、需要按时间粗略排序的场景才会考虑 v1。2.2 与 pgcrypto 的 gen_random_uuid() 对比从 PostgreSQL 13 开始pgcrypto扩展里的gen_random_uuid()函数被移到了核心功能中不再需要安装扩展就可以直接使用。这就引出一个选择问题既然核心已经支持为什么还要装uuid-ossp主要原因是存量系统兼容。很多老项目、第三方开源系统的建表 SQL 里直接写死了uuid_generate_v4()你不可能去改别人的业务代码。此时安装uuid-ossp是成本最低的解决方案。另一个原因是生态依赖。某些数据库迁移工具、ORM 框架在初始化时会主动检测uuid-ossp是否存在缺失会导致预检不通过。比如我遇到过某个基于 Django 的老项目迁移脚本里显式声明了django.contrib.postgres.fields.UUIDField底层SQL就是uuid_generate_v4()这种情况不装不行。2.3 版本选择UUID v4 做主键的两个隐含成本用 UUID v4 做主键有两个容易被忽略的成本。第一是存储空间UUID 本质是 16 字节比 int 自增主键大 4 倍在亿级数据量下表体积差异明显。第二是索引性能完全随机的 UUID 会导致 B-tree 索引频繁分裂因为新插入的值不会总在末尾。我的做法是如果只要求全局唯一、不要求有序性用 UUID v4 没问题但如果表数据量预计超过千万级且查询压力大考虑换成uuid_generate_v7()如果有第三方扩展支持或者使用雪花算法。不过这是后话先把uuid-ossp装好是第一步。3. Linux 环境安装 uuid-osspcontrib 包与 CREATE EXTENSION 标准流程3.1 安装 PostgreSQL contrib 包在 Linux 系统上安装uuid-ossp前提是 PostgreSQL 版本自带contrib模块。不同发行版包名略有区别但逻辑一致。以 Ubuntu/Debian 系为例# 先确认 PostgreSQL 版本 psql --version # 安装对应版本的 contrib 包 sudo apt-get install postgresql-contrib-14这一步执行完uuid-ossp.control文件会被放到 PostgreSQL 安装目录的share/extension目录下。可以通过下面的命令确认ls /usr/share/postgresql/14/extension/ | grep uuid预期输出是uuid-ossp.control、uuid-ossp--1.1.sql这样的文件。其中.control文件是扩展的控制文件定义了扩展名称、默认版本、依赖关系.sql文件是实际的安装脚本。需要注意如果你是用源码编译安装的 PostgreSQL需要额外编译 contrib 模块。在源码目录下执行cd postgresql-14.x/contrib make sudo make install我遇到过有人只编译了核心 PostgreSQL没编译 contrib结果CREATE EXTENSION一直报“control file not found”。这算不上 bug但要记住 contrib 是独立编译单元。3.2 在目标数据库中启用扩展安装完 contrib 包还需要在每一个需要使用 UUID 的数据库中手动执行CREATE EXTENSION。这步很多人会忘以为装完包就万事大吉。实际上 PostgreSQL 的扩展机制要求每个数据库单独启用。-- 连接到目标数据库 \c my_app_db -- 启用扩展 CREATE EXTENSION IF NOT EXISTS uuid-ossp; -- 验证安装结果 SELECT uuid_generate_v4();执行结果会输出一个类似d1a24e1e-3e44-4b42-9f34-7c1a17a6f7db的字符串说明扩展可用。IF NOT EXISTS是个好习惯。因为扩展在数据库中只能创建一次重复执行CREATE EXTENSION会报错 duplicate key value violates unique constraint。用IF NOT EXISTS可以在脚本重跑时自动跳过。3.3 权限问题非超级用户如何授权默认情况下只有超级用户或者被显式授权的用户才能创建扩展。实际生产环境中应用连接的数据库账号通常不是超级用户。这时有一个非常常见的翻车点应用启动执行建表脚本时CREATE EXTENSION报错permission denied to create extension uuid-ossp。解决办法有两种。第一种是在部署脚本里先用超级用户创建扩展再让应用用户使用。这是相对规范的做法因为扩展只需要创建一次不随业务数据变化。第二种是把创建权限授予应用用户但存在安全风险。我一般不建议在生产环境这么干除非这个用户实在没法通过其他方式管理。-- 用超级用户执行 GRANT CREATE ON DATABASE my_app_db TO app_user;这样app_user就有了在该数据库中创建扩展的权限。注意不要用GRANT ALL ON DATABASE这种宽泛授权权限最小化原则在数据库场景同样适用。3.4 指定 schema 安装与 search_path 陷阱多 schema 架构下CREATE EXTENSION默认把扩展安装到publicschema。如果应用连接的 search_path 不包含 public调用uuid_generate_v4()会找不到函数。-- 将扩展安装到指定 schema CREATE EXTENSION IF NOT EXISTS uuid-ossp WITH SCHEMA extensions_schema;前提是extensions_schema这个 schema 已经存在否则会报错 schema extensions_schema does not exist。可以先创建 schema 再创建扩展CREATE SCHEMA IF NOT EXISTS extensions_schema; CREATE EXTENSION IF NOT EXISTS uuid-ossp WITH SCHEMA extensions_schema;另外如果应用用户对extensions_schema没有 USAGE 权限调用函数时也会报 permission denied。我习惯在部署文档里明确规定扩展统一装在一个专门的 schema 下并GRANT USAGE ON SCHEMA extensions_schema TO app_user;。4. Windows 与 Docker 环境安装 uuid-ossp路径问题与容器化差异4.1 Windows 下的安装坑为什么 CREATE EXTENSION 找不到控制文件Windows 环境是uuid-ossp报错的重灾区。很多开发者是在 Windows 上用某发行版安装包装的 PostgreSQL执行CREATE EXTENSION时得到ERROR: could not open extension control file C:/Program Files/PostgreSQL/14/share/extension/uuid-ossp.control: No such file or directory这个报错直接指出了问题安装包里没有附带uuid-ossp扩展文件。原因在于该 PostgreSQL Windows 发行版默认没有把 contrib 模块编译打包进去。解决方案主要有三条路径按推荐度排序第一种用官方 EDB 安装包重新安装安装时在“Select Components”界面勾选确保包含 contrib 模块。重新安装后检查C:\Program Files\PostgreSQL\14\share\extension\下是否存在uuid-ossp.control。第二种如果你用的是某个社区分发的精简绿色版 PostgreSQL去官网下载同版本 EDB 安装包把share/extension/uuid-ossp*文件手动拷贝到当前实例的对应目录然后重启服务。这种方式可以解决问题但需要注意架构和版本严格匹配32位和64位不能混用。第三种放弃uuid-ossp改用 PostgreSQL 13 以上内置的gen_random_uuid()。Windows 下如果只是自己开发没有老项目兼容问题直接换是最稳妥的。我实践过最省时间的是第一种直接重新安装 EDB 版本。Windows 上的 PostgreSQL 生态里官方安装包的 contrib 支持最完善折腾少。4.2 Windows 下的验证与常见误操作安装完成后在 Windows 上还需要注意一个细节psql命令行的工作目录。如果你在 PowerShell 里执行psql没有反应通常是 PATH 环境变量没配好。可以这样运行# 在 PowerShell 中进入安装目录执行 psql cd C:\Program Files\PostgreSQL\14\bin .\psql -U postgres -d my_app_db进入 psql 后再执行CREATE EXTENSION然后SELECT uuid_generate_v4();如果返回 UUID 字符串说明 Windows 环境安装成功。一个常见的误操作是在 Windows 的 pgAdmin 中点击“新建扩展”下拉列表里看不到uuid-ossp就以为没装上。实际上 pgAdmin 的扩展下拉列表有时不刷新需要用 SQL 语句验证SELECT * FROM pg_available_extensions WHERE name uuid-ossp;如果有记录就说明扩展文件在磁盘上存在只是 pgAdmin 缓存未更新。4.3 Docker 容器内安装镜像自带与命名的选择Docker 容器运行 PostgreSQL 时uuid-ossp的可用性取决于镜像。使用官方镜像postgres:14、postgres:15时镜像内部已经预装了 contrib 模块直接进入容器执行CREATE EXTENSION即可。# 进入容器并执行 SQL docker exec -it my_postgres_container psql -U postgres -d my_app_dbCREATE EXTENSION IF NOT EXISTS uuid-ossp; SELECT uuid_generate_v4();Docker 场景有一个特别容易被坑的地方不要在 Dockerfile 里直接CREATE EXTENSION因为扩展是绑定在数据库实例上的而数据库初始化是在容器首次启动时才完成。正确做法是在初始化脚本目录/docker-entrypoint-initdb.d/下放置 SQL 文件或 shell 脚本# init-uuid.sql CREATE EXTENSION IF NOT EXISTS uuid-ossp;容器首次启动时官方镜像的 entrypoint 脚本会按文件名顺序执行该目录下的所有.sql和.sh文件。这比在 Dockerfile 中手动执行可靠得多因为初始化时机是确定的。如果用的是某些第三方优化镜像比如加了pgvector或postgis的镜像uuid-ossp通常也包含在内可以直接用。极少数精简镜像会缺失 contrib这时报错会指向/usr/share/postgresql下的.control文件。这种情况下不要试图去宿主机拷贝文件到容器里镜像下次重建就没有了应该基于官方镜像重新打一个镜像FROM postgres:14 RUN apt-get update apt-get install -y postgresql-contrib-144.4 Docker 升级实例后的扩展版本对齐问题如果在postgres:13上创建了uuid-ossp升到postgres:14后需要执行ALTER EXTENSION uuid-ossp UPDATE;这一步容易被忽略。如果不执行扩展的 SQL 脚本可能还是旧版本在新版本核心中与某些新函数定义产生冲突。报错通常是extension uuid-ossp has no update path这种情况在官方镜像升级时尤其常见因为pg_upgrade不会自动重新安装和升级扩展。升级前先pg_dump全量备份升级后在每个数据库执行ALTER EXTENSION uuid-ossp UPDATE;然后重新跑一遍引用 UUID 的关键查询做验证。5. 避坑清单uuid-ossp 安装失败与运行异常的 5 个真实场景5.1 报错 could not open extension control file现象是执行CREATE EXTENSION时报错找不到.control文件。原因contrib 包没有安装或者安装目录和当前 PostgreSQL 实例的目录不一致。多实例环境尤其常见——有多个 PostgreSQL 服务并存psql连接的实例和安装 contrib 的实例不是同一个。解决先确认当前服务对应的二进制目录用SHOW data_directory;来定位实例再用SELECT * FROM pg_available_extensions;查看当前实例可见的扩展列表。如果列表为空说明扩展文件不在这个实例的 search path 下需要安装对应版本 contrib 包并确保路径匹配。5.2 报错 permission denied to create extension现象非超级用户执行CREATE EXTENSION被拒绝。原因PostgreSQL 默认只允许超级用户创建扩展普通用户即使有数据库的建表权限也无法创建扩展。解决用超级用户执行创建操作。如果确实业务上需要在脚本里动态创建可以用GRANT CREATE ON DATABASE授权但要权衡风险。我在生产环境中基本不用这个授权而是把扩展安装单独放到初始化脚本阶段执行。5.3 报错 function uuid_generate_v4() does not exist现象扩展已经创建成功但应用执行 SQL 时仍提示函数不存在。原因当前search_path没有包含扩展所在的 schema。特别是多 schema 场景下扩展安装在extensions_schema而应用的 search_path 只包含public和app_schema。解决查看当前对象的实际 schemaSELECT n.nspname, p.proname FROM pg_proc p JOIN pg_namespace n ON p.pronamespace n.oid WHERE p.proname uuid_generate_v4;然后用完整路径调用函数或者修改search_pathSET search_path TO app_schema, extensions_schema, public;5.4 报错 extension uuid-ossp has no update path现象PostgreSQL 升级后执行ALTER EXTENSION uuid-ossp UPDATE报错或者CREATE EXTENSION时提示版本不匹配。原因部分uuid-ossp版本之间没有连续的升级脚本。比如从 1.0 到 1.1 有升级脚本但从 1.1 直接跳到一个大版本内的其他修订版本可能没有提供 update path。解决这种情况不需要死磕升级路径直接删掉扩展重新创建即可但要注意函数依赖关系。-- 先查看哪些对象依赖该扩展 SELECT * FROM pg_depend WHERE refobjid uuid-ossp::regclass;如果没有业务对象直接依赖执行DROP EXTENSION uuid-ossp; CREATE EXTENSION uuid-ossp;如果有依赖需要先处理依赖对象或者通过转储备份还原的方式规避这个场景。这里我一般走备份还原的路线避免手工解除依赖引发连锁问题。5.5 报错 permission denied for schema extensions_schema现象扩展创建在extensions_schema下普通用户调用uuid_generate_v4()时依然报权限不足。原因CREATE EXTENSION WITH SCHEMA只是把函数建在了那个 schema 下但用户对该 schema 没有 USAGE 权限。解决授权后再验证GRANT USAGE ON SCHEMA extensions_schema TO app_user; GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA extensions_schema TO app_user;注意GRANT ALL ON SCHEMA不是好选择它会给用户该 schema 下所有对象的全部权限在只读账号场景下会埋下隐患。6. 验证与进阶用法从「能跑」到「稳跑」的检查清单本节不写总结分享三个实际工作中从「能跑」升级到「稳跑」的验证方法以及一个主键设计的小技巧。6.1 用 pg_available_extensions 做安装状态巡检很多运维脚本只检查CREATE EXTENSION是否报错很少验证扩展是否真的可用。我的巡检习惯是用一个 SQL 同时检查扩展存在性和函数可执行性SELECT e.name, e.default_version, e.installed_version, (SELECT uuid_generate_v4()) IS NOT NULL AS func_available FROM pg_available_extensions e WHERE e.name uuid-ossp;这里installed_version列为空说明扩展尚未安装func_available为 false 说明函数调用异常。把这段 SQL 放到监控脚本里定期执行能提前发现实例迁移后扩展丢失的问题。6.2 验证 v1 与 v4 的输出格式与性能差异如果你有强迫症可以做一个快速对比验证-- 查看 v1 与 v4 的格式差异 SELECT uuid_generate_v1() AS v1_sample, uuid_generate_v4() AS v4_sample; -- 连续生成 10 万条做简单耗时对比 \timing on SELECT count(*) FROM ( SELECT uuid_generate_v4() FROM generate_series(1, 100000) ) t;v4完全随机v1前缀规律明显。性能上v4的随机数生成耗时略高于v1但差距在可接受范围。如果你的系统大量依赖 UUID 主键建议用pgbench做一次压测观察高并发下索引写入的表现。6.3 把 uuid-ossp 与 ORM 对接的实用配置以某 Python Web 框架为例模型里定义 UUID 主键时底层 SQL 会调用数据库的uuid_generate_v4()。很多人配置完 ORM 后测试建表一直报错查来查去发现是数据库连接串里指定了options-csearch_pathapp_schema而扩展函数在 public schema 下正好绕过了。这问题在多个项目里出现过解决方式也很简单连接串里要么不指定 search_path要么把所有涉及的 schema 都列上。6.4 主键设计的一个小习惯经历过几次 UUID 主键导致的索引膨胀问题后我现在的做法是区分「业务主键」和「物理主键」。uuid_generate_v4()生成的 UUID 作业务主键没问题但物理主键用一个自增的bigint。这样既享受了 UUID 的全局唯一性又控制了索引碎片化。从那以后我每次设计新表都会强制走一遍这个判断流程这个字段是否有跨系统引用、是否需要全局唯一、数据量级预算是多少然后再决定用 UUID 还是自增 ID。希望这篇笔记能帮到你至少在下次遇到uuid_generate_v4()报错时你能快速定位是扩展没装、路径不对还是权限问题。本文还有配套的精品资源点击获取

相关新闻

LSTM-Kalman融合:用神经网络补偿卡尔曼滤波建模盲区

LSTM-Kalman融合:用神经网络补偿卡尔曼滤波建模盲区

简介:本资源是一个面向机器学习与信号处理初学者的温度预测实践项目,聚焦LSTM神经网络与卡尔曼滤波器的协同建模方法,解决时间序列中噪声干扰下的高精度状态估计问题,适用于气象预测、工业传感数据校正等场景。压缩包共15个文件&a…

2026/10/18 12:40:33 阅读更多 →
Notepad++插件装不上?从安装包选型到插件管理器与emeet离线部署全排查

Notepad++插件装不上?从安装包选型到插件管理器与emeet离线部署全排查

简介:这是一份面向程序员与Web开发者的Notepad安装包,版本锁定在7.5.8,整合了插件管理器与emeet远程协作插件,既保留轻量高效、可自定义的编辑器特性,也适合用来替代系统记事本进行多语言代码编辑。资源包为ZIP压缩格式…

2026/10/18 12:40:33 阅读更多 →
PostgreSQL uuid-ossp扩展安装与UUID主键生成实战指南

PostgreSQL uuid-ossp扩展安装与UUID主键生成实战指南

简介:针对PostgreSQL的uuid-ossp扩展安装需求,该压缩包提供完整的插件安装文件,面向数据库管理员与后端开发者,用于快速生成符合标准的UUID唯一标识符,特别适用于分布式系统、多实例数据同步和微服务架构等需要全局唯一…

2026/10/18 12:39:32 阅读更多 →

最新新闻

Linux下NVML初始化失败:驱动与库版本不匹配的排查与修复指南

Linux下NVML初始化失败:驱动与库版本不匹配的排查与修复指南

1. 这个报错到底在说什么Failed to initialize NVML: Driver/library version mismatch这行字,但凡在 Linux 上跑过深度学习训练、折腾过显卡直通、或者手贱升级过一次系统内核的人,大概率都见过。它的字面意思很直白:NVML 初始化失败&#x…

2026/10/18 13:26:59 阅读更多 →
迈迪三维设计工具:SolidWorks国标件参数化建模加速方案

迈迪三维设计工具:SolidWorks国标件参数化建模加速方案

简介:迈迪三维设计工具集是专为SolidWorks平台开发的专业级机械设计辅助插件,面向机械工程师、产品设计师及高校相关专业师生,旨在提升标准件建模、结构设计与工程图生成效率。资源包共2000个文件,总大小211.97MB,涵盖…

2026/10/18 13:26:59 阅读更多 →
JDBC从入门到精通:连接、预编译、事务与连接池实战

JDBC从入门到精通:连接、预编译、事务与连接池实战

做Java开发的朋友,应该都对JDBC不陌生。它就像是Java世界和数据库之间的一座桥,不管是传统的业务系统,还是后面对接MyBatis、Hibernate这类ORM框架,底层真正干活的还是JDBC。可以说,只要你想在Java里操作数据库&#x…

2026/10/18 13:26:59 阅读更多 →
如何查看电脑开机时间?四种系统自带方法实测与解读

如何查看电脑开机时间?四种系统自带方法实测与解读

1. 为什么非要搞清楚电脑的开机时间先说个场景,不知道你有没有遇到过:新装了一台电脑,或者刚重做完系统,总感觉开机慢得像老牛拉车。这时候你想评估一下到底是硬件不行,还是系统没优化好,最直接的一个指标就…

2026/10/18 13:26:59 阅读更多 →
Linux下NVIDIA驱动NVML版本不匹配报错排查与修复指南

Linux下NVIDIA驱动NVML版本不匹配报错排查与修复指南

1. 这个报错到底在说什么如果你在 Linux 环境下用nvidia-smi查显卡状态,终端冷不丁甩出一句Failed to initialize NVML: Driver/library version mismatch,那基本可以确定一件事:你机器上正在运行的 NVIDIA 内核驱动版本,和你当前…

2026/10/18 13:26:59 阅读更多 →
Java在线教育平台源码解析:DWD-DWS-DIM分层架构与毕设实战指南

Java在线教育平台源码解析:DWD-DWS-DIM分层架构与毕设实战指南

简介:这是一套面向Java开发者与教育信息化建设者的在线教育平台6.2版本完整设计源码,聚焦教学管理、课程学习、在线考试与数据治理等核心场景,适用于高校IT课程实践、教育类毕业设计或中小型在线教育系统二次开发。资源共69个文件&#xff0c…

2026/10/18 13:25:59 阅读更多 →

日新闻

基于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/18 0:00:55 阅读更多 →

周新闻

基于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/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 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/18 0:55:02 阅读更多 →
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 阅读更多 →