CentOS 7上RabbitMQ安装实操:Erlang版本匹配与避坑指南

先说我个人的结论:在 CentOS 7 上装 RabbitMQ,难度从来不在 RabbitMQ 本身,而在 Erlang 版本匹配、yum 仓库选择、还有各种启动期的小毛病。很多人跟着旧教程装到一半就卡住,不是因为命令敲错,而是没搞明白 CentOS 7 这套老环境下消息中间件生态的现状。这篇文章就是一份完整的实操记录,从环境准备到验证收尾,我把每一步为什么这么做、哪些坑容易踩都写清楚,适合刚接触 RabbitMQ 的新手,也适合被安装问题折磨过、想一次性捋明白的运维老手。

1. 先把版本兼容性搞清楚再动手

1.1 为什么在 CentOS 7 上装 RabbitMQ 总比想象中麻烦

CentOS 7 是典型的老牌服务器系统,默认 yum 源里的软件包普遍偏旧,尤其是 Erlang 这类依赖链比较长的运行时环境。RabbitMQ 本身是 Erlang 写的,所以它对 Erlang 版本有严格的下限要求。如果你直接yum install erlang,装到手的很可能是十几年前的老版本,要么版本过低无法启动新版 RabbitMQ,要么启动之后出现一堆奇怪的崩溃日志。

我之前在一台新机器上就吃过这个亏:图省事直接用系统源装了 erlang,然后下载最新版 RabbitMQ rpm,结果 rabbitmq-server 服务起来不到三秒就挂掉,日志里全是undefined function和badmatch之类的报错。后来一查才发现,系统源里 erlang 只有 R16 级别,最新 RabbitMQ 需要 Erlang 25 以上,这俩根本不是一个时代的产物。

所以安装前第一件事不是敲命令,而是先确定你打算装哪个版本的 RabbitMQ,再反推它需要哪个版本的 Erlang。这个顺序一旦反了,后期折腾的时间成本会非常高。

1.2 RabbitMQ 和 Erlang 的版本对应关系

RabbitMQ 官方维护了一份很详细的版本对照表,核心逻辑是:每个 RabbitMQ 大版本会声明它支持的 Erlang 主版本区间。下面这张表是我整理的常见对应关系,帮助你先建立概念:

RabbitMQ 版本建议 Erlang 版本区间
3.8.x21.3 ~ 23.x
3.9.x21.3 ~ 24.x
3.10.x / 3.11.x23.2 ~ 25.x
3.12.x25.x ~ 26.x
3.13.x25.x ~ 27.x
4.0.x26.2 以上

以 CentOS 7 为例,我当前实际部署用的是 RabbitMQ 3.12.x 配合 Erlang 25.x,这个组合在 CentOS 7 上很常见,也是官方明确支持的搭配。选择版本时可以遵循一个原则:别追最新的 RabbitMQ 大版本,选那种发布了一段时间、补丁版本完善、并且 Erlang 版本区间覆盖你的安装来源的版本。

当你确定了版本组合之后,接下来就是选择 Erlang 的安装来源。这里就引出了下一节的关键问题:在 CentOS 7 上,从哪里能拿到指定版本的 Erlang。

2. 安装 Erlang:这一步决定后面顺利不顺利

2.1 用官方 Erlang 仓库安装指定版本

在 CentOS 7 上安装 Erlang,我推荐优先使用官方 Erlang 仓库,而不是系统自带的源。虽然系统源也有 erlang 包,但版本完全不可控,也不一定跟 RabbitMQ 兼容。

具体做法是手动配置一个 yum 仓库文件。在/etc/yum.repos.d/下新建一个erlang.repo,写入如下内容:

[erlang-solutions] name=Erlang Solutions baseurl=https://packages.erlang-solutions.com/rpm/centos/7/x86_64 gpgcheck=1 gpgkey=https://packages.erlang-solutions.com/rpm/erlang_solutions.asc enabled=1

这里的baseurl指向的是 CentOS 7 对应架构的 Erlang 软件包目录。配置完成之后先导入 GPG 密钥:

rpm --import https://packages.erlang-solutions.com/rpm/erlang_solutions.asc

然后刷新缓存并查看可用的 Erlang 版本:

yum clean all yum makecache yum list available erlang --showduplicates

如果你看到列出来的版本里有 25.x 或 26.x,说明仓库配置成功了。接下来直接安装你需要的版本即可。这里我以 Erlang 25.x 为例:

yum install -y erlang-25.*

安装完之后检查版本,确认 Erlang 能正常输出版本号:

erl -version erl -eval 'erlang:display(erlang:system_info(otp_release)), halt().' -noshell

第二条命令会直接输出 OTP 的发布版本号,比如"25"或"26"。这个信息比erl -version更准确,因为erl -version有时候输出的只是启动器版本。

2.2 如果官方仓库不可用,可以用零依赖 Erlang 包兜底

有些内网环境访问外网受限,或者官方仓库在国内网络下速度太慢,这时候我比较推荐另一种方案:使用 RabbitMQ 官方团队发布的零依赖 Erlang rpm 包。这类包把 Erlang 运行环境整体打包,不需要再去解决一堆依赖,直接yum localinstall就能装。

具体操作是先从提供该 rpm 包的页面下载对应 CentOS 7 的包,然后执行:

yum localinstall -y erlang-25.3.2.16-1.el7.x86_64.rpm

这种方式的好处是版本非常明确,不容易出现仓库版本漂移的问题。而且它内部已经把运行时所需的依赖都处理好了,基本不会报缺依赖。

我个人在干净环境里测试过,零依赖包和官方 Erlang 仓库安装出来的 Erlang,对 RabbitMQ 来说没有本质区别,选哪个取决于你的网络环境。如果两种方式都不可行,也可以考虑源码编译 Erlang,但我不建议在生产环境这么干,编译耗时长、依赖复杂,后续维护成本也高。

2.3 安装完 Erlang 后先确认三件事

Erlang 装完之后,别急着装 RabbitMQ,花三十秒确认三件事:

第一,Erlang 版本能满足 RabbitMQ 的要求。用上面提到的erl -eval命令确认 OTP 版本,如果装的是 3.12.x 的 RabbitMQ,OTP 至少得是 25。

第二,确认命令路径。安装后erl命令一般在/usr/bin/erl或/usr/local/bin/erl下,确保它在 PATH 里。后期如果 RabbitMQ 启动报找不到 Erlang,大多是 PATH 问题。

第三,确认/usr/lib/erlang目录存在且权限正常。有些公司模板机做了安全加固,会把/usr/lib下的目录权限改得很严格,导致 RabbitMQ 无法读取 Erlang 运行库。

这三件事都确认完了,才进入真正安装 RabbitMQ 的阶段。

3. 安装 RabbitMQ Server 本体

3.1 准备官方 yum 仓库

RabbitMQ 提供了官方仓库,核心配置指向 packagecloud 或 GitHub Releases,这两种方式在社区中使用频率最高。我这里以配置 yum 仓库的方式为例,新建/etc/yum.repos.d/rabbitmq.repo:

[rabbitmq-server] name=rabbitmq-server baseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/el/7/$basearch repo_gpgcheck=1 gpgcheck=1 enabled=1 gpgkey=https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt

配置好后刷新缓存,然后安装:

yum clean all yum makecache yum install -y rabbitmq-server

这种方式的优势是后续升级方便,yum update rabbitmq-server就能直接更新。但需要注意,如果网络访问 packagecloud 不畅,这个仓库配置了也白搭,安装时会一直卡在下载环节。

3.2 直接下载 rpm 包安装的兜底方案

如果你在 pakagecloud 下载很慢,我更推荐直接下载 rpm 包本地安装。先到 RabbitMQ 官方发布页面找到对应 CentOS 7 的 rpm 包,比如rabbitmq-server-3.12.14-1.el7.noarch.rpm,然后执行:

wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.12.14/rabbitmq-server-3.12.14-1.el7.noarch.rpm yum localinstall -y rabbitmq-server-3.12.14-1.el7.noarch.rpm

注意yum localinstall会自动解析 rpm 的依赖,如果发现缺什么包,它会尝试从已配置的仓库中补齐依赖。在本地安装方式下,RabbitMQ 最主要的依赖就是 Erlang,而 Erlang 上一步已经装好了,所以正常情况下不会有额外的依赖提示。

如果本地安装时提示libcrypto.so.10之类的库缺失,这不是 RabbitMQ 的问题,而是系统基础库版本太旧。CentOS 7 默认装有 openssl 10 系列的库,正常情况下不会缺。真遇到这种情况,先执行yum install -y openssl补一下基础包再重试。

3.3 安装完成后看一眼关键文件

不管用哪种方式安装,装完之后我会习惯性检查几个关键路径,确保文件都放到位了。RabbitMQ 在 CentOS 7 上的主要目录分布如下:

路径作用
/etc/rabbitmq配置文件目录,rabbitmq.conf 在这里
/usr/lib/rabbitmq主程序目录,包含 bin 下的各种脚本
/var/lib/rabbitmq数据目录,mnesia 数据在这里
/var/log/rabbitmq日志目录,排错时最常看的地方

如果这几个目录都在,说明 rpm 包安装得很完整。接下来就可以启动服务了。

4. 服务启动、管理插件与初始配置

4.1 启动服务并设置开机自启

RabbitMQ 安装成功后,先用 systemd 启动服务:

systemctl start rabbitmq-server systemctl enable rabbitmq-server

启动之后立刻检查状态:

systemctl status rabbitmq-server

如果状态显示active (running),说明服务正常。但我建议不要只停留在这个层面,再执行一次节点健康检查:

rabbitmq-diagnostics -q ping

这条命令如果返回Pong,说明 RabbitMQ 节点真的活着,Erlang 虚拟机和 RabbitMQ 应用都正常启动。这是排错时最常用的诊断命令,比看 systemctl 状态更可靠。

4.2 启用 Web 管理插件并放行防火墙端口

RabbitMQ 自带一套 Web 管理界面,但默认没启用。开启它:

rabbitmq-plugins enable rabbitmq_management

启用成功后,RabbitMQ 会监听15672端口,这是管理界面的 HTTP 端口。除此之外,5672是 AMQP 协议端口,应用连接用它;25672是节点间通信集群端口。如果你的机器开了防火墙,需要放行这几个端口。

CentOS 7 默认是 firewalld,放行命令如下:

firewall-cmd --permanent --add-port=5672/tcp firewall-cmd --permanent --add-port=15672/tcp firewall-cmd --permanent --add-port=25672/tcp firewall-cmd --reload

如果系统用的是 iptables 而不是 firewalld,那就得自己加规则。我遇到过不少云主机镜像把 firewalld 停用、改用 iptables 的情况,这种情况下你执行 firewall-cmd 会直接报错,需要先确认当前的防火墙管理工具是哪一个。

放行之后,在浏览器里访问http://服务器IP:15672,如果页面能打开,说明管理插件正常运行。

4.3 创建用户、虚拟主机和权限

新装好的 RabbitMQ 默认只有一个guest用户,而且这个用户只能从 localhost 访问。线上环境肯定不能直接用这个账号远程连接,所以安装后的第一件事就是创建专属用户和虚拟主机。

比如创建一个管理员用户:

rabbitmqctl add_user admin 你的密码 rabbitmqctl set_user_tags admin administrator

administrator标签表示该用户拥有全部管理权限,可以登录管理界面、创建用户、管理虚拟主机等。接着创建虚拟主机:

rabbitmqctl add_vhost myvhost

虚拟主机在 RabbitMQ 里相当于一个独立的隔离空间,业务应用连接时指定的 vhost 就是这个东西。最后给用户授权:

rabbitmqctl set_permissions -p myvhost admin ".*" ".*" ".*"

这里三个".*"分别代表 configure、write、read 三种权限的正则表达式。".*"表示对该虚拟主机下的所有资源拥有全部权限。如果你只想让某个用户只能读,可以写"^$" "^$" ".*"等更细粒度的规则。

4.4 使用 rabbitmqctl 快速验证实例状态

配置完成后,我用一条命令组合来快速确认实例整体情况:

rabbitmqctl status

重点看输出中的这些信息:

  • Erlang version,确认和前面装的一致
  • RabbitMQ version,确认版本是你想要的
  • Listeners,确认 5672 和 15672 端口是否在正常监听
  • Memory、Disk Free,排除资源瓶颈问题

如果Listeners里 15672 缺失,说明管理插件没启成功;如果 5672 缺失,多半是 Erlang 分布式节点异常。这两个监听端口是判断 RabbitMQ 是否对外可用的最直接证据。

5. 安装全程最容易踩的坑和排查思路

5.1 远程访问 15672 页面,登录提示 guest 用户无法访问

这是一个非常经典的问题。你用浏览器访问管理界面,输入默认的 guest 用户,结果提示Login failed或者user 'guest' can only connect via localhost。

原因很简单:RabbitMQ 出于安全考虑,默认配置了loopback_users = [guest],也就是说 guest 账号只允许在服务器本机登录。这个限制从安全角度来说是合理的,我强烈不建议通过修改配置来放开 guest 用户。正确的做法就是按 4.3 节创建一个带 administrator 标签的新用户,然后用新用户登录。

如果你确实有某些内部工具只能用 guest 登录,需要自行评估风险后在/etc/rabbitmq/rabbitmq.conf里改成:

loopback_users = none

然后重启服务。但这样做等于关闭了默认安全屏障,生产环境千万不要这么干。

5.2 主机名解析导致节点一直起不来

RabbitMQ 启动时会用当前主机名拼出一个节点名,默认格式是rabbit@主机名。如果服务器的主机名在/etc/hosts里没有对应的本机解析,Erlang 节点之间通信就找不到对方,导致启动后状态异常或者直接退出。

我在本地虚拟机里就遇到过:虚拟机的主机名是node01,但/etc/hosts里只写了127.0.0.1 localhost,没有127.0.0.1 node01。RabbitMQ 启动后日志里反复出现epmd相关错误。

排查和解决办法很简单。先查看当前主机名:

hostname -s

然后把主机名加进 hosts 文件:

echo "127.0.0.1 $(hostname -s)" >> /etc/hosts

再重启 RabbitMQ:

systemctl restart rabbitmq-server

这个问题在新装系统上出现频率非常高,尤其是那些没有配置规范主机名的机器。装 RabbitMQ 之前把这一步做了,后面能省很多事。

5.3 端口监听异常,5672 没起来

RabbitMQ 服务状态显示 active,但应用连接 5672 超时,这种情况第一步就是看监听端口:

ss -lntp | grep -E '5672|15672|25672'

如果 15672 有监听但 5672 没有,常见原因是 RabbitMQ 应用没完全启动,或者 Erlang 节点配置异常。此时再执行:

rabbitmqctl stop_app rabbitmqctl start_app

强制重启 RabbitMQ 应用。如果还不行,就看日志:

tail -f /var/log/rabbitmq/rabbit@主机名.log

日志是最忠实的朋友。RabbitMQ 基本会把启动过程中的所有问题都写进这个日志文件,很多看起来诡异的问题,翻日志都能找到明确线索。

5.4 磁盘或内存告警导致生产者被阻塞

RabbitMQ 默认在内存使用率达到 40% 或磁盘剩余空间低于 50MB 时,会触发水印限制,阻塞生产者的消息发布。这在刚安装完、还没调优参数的机器上很容易被忽视。

我见过一台内存只有 2G 的小机器,跑了个小业务,没怎么用就报memory alarm,客户端一直收不到响应。查下来发现是默认的内存阈值对于这台小机器来说太高了。

解决办法是进入/etc/rabbitmq/rabbitmq.conf调整水印参数:

vm_memory_high_watermark_relative = 0.6 disk_free_limit_relative = 1.5

前者表示内存水位线提升到总内存的 60%,后者表示当磁盘剩余空间小于内存大小的 1.5 倍时触发告警。参数要根据实际业务量和机器配置来定,不要照搬。修改后重启 RabbitMQ 生效。

5.5 重装或升级后数据残留导致启动异常

如果你之前装过旧版 RabbitMQ,后来卸载了再重装新版,新版本启动时可能读到旧数据目录/var/lib/rabbitmq/mnesia中的残留文件,出现各种莫名其妙的冲突,比如认证失败、vhost 丢失、甚至节点直接无法启动。

遇到这种情况,如果确认旧数据没有保留价值,可以清空数据目录再重启:

systemctl stop rabbitmq-server rm -rf /var/lib/rabbitmq/mnesia systemctl start rabbitmq-server

清空之后,RabbitMQ 会以全新的状态启动,默认配置、默认用户都会恢复到初始状态。注意数据目录里还有日志和插件相关文件,如果只想清数据不想动日志,就只删mnesia目录。

6. 装完之后的日常维护与实用建议

6.1 给配置文件建立版本管理习惯

我强烈建议从安装完成的那一刻起,就把/etc/rabbitmq/rabbitmq.conf纳入配置管理。RabbitMQ 的集群配置、用户、权限、策略都可以通过配置文件或脚本管理起来,而不是手动敲一堆 rabbitmqctl 命令。

我自己常用的做法是:把初始化的 rabbitmqctl 命令写成一个 shell 脚本,放到/root/rabbitmq-init.sh里。这样换新机器、重装环境时,直接执行脚本就能恢复到一致的初始状态,不用每次手工敲。脚本大概长这样:

#!/bin/bash rabbitmqctl add_user admin '密码' rabbitmqctl set_user_tags admin administrator rabbitmqctl add_vhost /production rabbitmqctl set_permissions -p /production admin ".*" ".*" ".*"

这个脚本只负责用户和虚拟主机维度,更复杂的权限策略建议写到配置文件里管理。

6.2 关于端口和客户端连接的一些提醒

很多新手以为装完 RabbitMQ,只要 5672 端口能通就万事大吉。实际上客户端连接时还有一个很容易忽略的点:rabbitmqctl 和客户端代码里填写的 host、port、vhost、username 是否一致。我在排查生产问题时就发现过,代码里填的 vhost 名称是/production,但管理界面里创建的是production,结果客户端连不上,还白白查了半天网络。

另外,如果你在同一台 CentOS 7 上部署了多个 Erlang 应用,epmd可能会冲突。RabbitMQ 默认用端口 4369 做 Erlang 节点发现,如果其他 Erlang 服务占用了 4369,RabbitMQ 的节点通信会失败。排查端口时别忽略 4369。

6.3 个人经验:装完先跑一个最小验证再交给业务方

最后分享一个我自己的习惯:每次安装并配置完 RabbitMQ,我不会直接把它交给业务方,而是先做一轮最小验证。操作很简单,就是用官方客户端或者命令行工具在本机发一条消息、收一条消息。

在管理界面里,直接进入Exchanges和Queues页面,创建一个临时队列,然后用Publish message功能发一条测试消息,再查看队列里的消息数量是否增加;随后用Get message拉取这条消息。如果这一进一出都正常,说明 AMQP 协议通路、队列存储、消息持久化这几个核心链路都是好的,这时候再交给业务方接手,心里才有底。

安装 RabbitMQ 这件事本身不复杂,复杂的是隐藏在版本兼容、初始化配置、网络限制背后的各种细节。把前面这几步按顺序走完,排查思路也明确的话,CentOS 7 上部署 RabbitMQ 就不会再让你加班了。

相关新闻

OAuth2.0+JWT:服务端与客户端授权闭环实现详解

OAuth2.0+JWT:服务端与客户端授权闭环实现详解

简介:这套源码面向需要在Java环境里落地OAuth 2.0授权服务的开发者,以Maven和Apache OLTU库为基础,完整实现授权服务器与资源服务器,并把JWT作为访问令牌,覆盖授权码模式、令牌刷新、资源访问等核心流程。压缩包共221个…

2026/10/20 20:40:14 阅读更多 →
YOLOv3口罩检测工程落地:小目标识别与边缘部署鲁棒性实战

YOLOv3口罩检测工程落地:小目标识别与边缘部署鲁棒性实战

1. 这不是“又一个YOLO demo”,而是一次真实场景下的工程落地复盘去年冬天,某高校实验室接了一个社区防疫辅助系统的需求:在老旧监控摄像头画质模糊、光照不均、人员密集穿行的环境下,实时识别未规范佩戴口罩的行为。他们最初找来…

2026/10/20 20:39:12 阅读更多 →
分组交换的本质:不是路由器堆砌,而是机制与权衡

分组交换的本质:不是路由器堆砌,而是机制与权衡

1. 为什么“网络核心”不是路由器堆出来的——从一个被反复误解的章节讲起刚带完一届某高校《计算机网络》实验课,有位A同学在课后追着我问:“老师,第一章1.3节说‘网络核心由分组交换构成’,可我查了三本教材、看了五个视频&…

2026/10/20 20:39:12 阅读更多 →

最新新闻

AI Agent成本结构全解析:从API调用费到隐性人力的完整账本

AI Agent成本结构全解析:从API调用费到隐性人力的完整账本

先说一个我最近复盘的真实项目。某电商团队上线了一个订单查询与退换货的客服 Agent,第一周看账单,推理费一天几百块,负责人很高兴,觉得这玩意儿比招人划算多了。三个月后做财务复盘,把所有配套成本拉出来一算&#xf…

2026/10/20 21:19:04 阅读更多 →
7825张车身缺陷检测数据集:VOC+YOLO双格式标注与YOLOv5训练实践

7825张车身缺陷检测数据集:VOC+YOLO双格式标注与YOLOv5训练实践

简介:面向车身部件损坏与车体缺陷检测的VOCYOLO双格式数据集,对应7825张车辆图像的缺陷标注,涵盖划痕、凹陷、裂缝、破损、褪色等15类常见问题,可直接用于YOLO系列、Faster R-CNN等目标检测模型的训练与评估,服务汽车制…

2026/10/20 21:19:04 阅读更多 →
OpenClaw基于概念的解释:TCAV原理、实践与工程坑

OpenClaw基于概念的解释:TCAV原理、实践与工程坑

模型解释性最近几年都快被聊烂了,但每次有人跑来问我“OpenClaw 能不能做基于概念的解释”,我还是会一下子精神起来。这个问题问得比“你模型准确率多少”有价值多了,因为它背后真正想说的是:模型做判断的理由,能不能用…

2026/10/20 21:19:04 阅读更多 →
TensorFlow 2 复现 Facenet:MTCNN 对齐与三元组损失实战

TensorFlow 2 复现 Facenet:MTCNN 对齐与三元组损失实战

1. 为什么我最终选了 TensorFlow 2 来复现 Facenet1.1 从一次“翻车”的考勤机项目说起前两年我接了一个小活儿,帮一个做企业内训的朋友搞一套“刷脸签到”的演示系统。需求听起来不复杂:员工站在摄像头前,系统认出是谁,自动打勾。…

2026/10/20 21:19:04 阅读更多 →
上下文模式实战:从设计到落地的架构决策与避坑指南

上下文模式实战:从设计到落地的架构决策与避坑指南

1. 从“上下文模式”说起:一个被低估的架构决策第一次看到“context-mode”这个词,很多人会下意识觉得它是个抽象得没边儿的概念——上下文嘛,不就是程序运行时的环境变量、线程本地存储、或者某个框架里的配置对象?但如果你真的在…

2026/10/20 21:19:04 阅读更多 →
STM32智能台灯毕业设计:从硬件选型到PID调光完整实战

STM32智能台灯毕业设计:从硬件选型到PID调光完整实战

简介:本资源为嵌入式方向本科毕业设计「智能台灯」的完整开发套件,面向电子工程、自动化及物联网相关专业学生,解决智能硬件从原理设计到系统落地的全流程实践需求。压缩包含140个文件,总大小162.69MB,涵盖33张硬件调试…

2026/10/20 21:18:02 阅读更多 →

日新闻

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/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

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

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

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

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

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在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/20 10:02:08 阅读更多 →
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/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练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/20 9:50:45 阅读更多 →