从零玩转RFID:ESP32+RC522读卡器实战,搭建你的第一个门禁Demo
门禁卡、饭卡、宿舍楼卡、公交卡……这些东西大多数人天天用但很少会停下来想它到底靠什么和读卡器通信答案是RFID射频识别。我一直觉得RFID是零基础硬件玩家最容易获得成就感的项目之一不涉及复杂算法不要求焊接功底几十块钱的模块加一块常见的ESP32开发板就能把“刷卡”这个过程从“黑箱”变成“一眼看穿”的实验。这篇文章要做的就是带你从零开始把RFID的读卡原理、模块选型、ESP32接线、代码实现到一个小门禁Demo完整走一遍。无论你是刚接触单片机的新手还是想给自己的毕设/小项目加一个身份识别功能的老手都能从这里找到可以直接抄的作业。先预告一个结论等你亲手在串口里看到卡片UID弹出来的那一刻你对“门禁系统怎么就认卡”这件事的理解会立刻上升一个层次。1. 先搞清楚RFID射频卡到底是个什么东西1.1 两个线圈的“隔空对话”RFID全称Radio Frequency Identification射频识别。它的工作模式比我第一次接触时想象得简单得多。读卡器的线圈会持续向外发射一个特定频率的交变电磁场当卡片靠近时卡片内部的线圈感应到这个电磁场会通过电磁感应产生一个微弱的电流——这个电流恰好足够唤醒卡片内部的芯片。芯片醒过来之后以“改变自身负载”的方式把数据传回读卡器天线。读卡器检测到这个负载变化就能解出卡片返回的数据。这个过程有点像老师拿着点名册不停喊名字学生听到后举手示意“我在这”。卡片的“举手”就是改变线圈负载的调制动作。整张卡片内部没有电池所有能量都来自读卡器产生的电磁场所以叫“无源卡”。这也是为什么RFID卡可以做成薄薄一片塞进塑料卡片里几年都不需要充电。从物理原理到数字世界的转化就是靠这种“能量传递负载调制”的方式完成的。你不需要背下全部细节但脑子里要有一个画面读卡器在持续发电磁波卡片在蹭电并回答。理解了这一点后面排查问题会轻松很多。1.2 频率与协议为什么选13.56MHz这条线RFID按工作频率分成几个大类不同频段适合不同的场景我整理了一个对比表帮你快速建立坐标系频段典型频率读卡距离典型应用特点低频LF125kHz~134kHz1~10cm动物芯片、工业巡更便宜、抗干扰强、速率慢高频HF13.56MHz2~10cm门禁、公交、校园卡速率适中、支持加密、支持多功能卡超高频UHF860~960MHz1~10m物流仓储、ETC读距远、速率快、成本高这篇文章用的RFID读卡模块工作在13.56MHz高频段。这个频段是目前民用领域最普及的门禁卡、饭卡、公交卡基本都是这个频率。协议层面最常接触的是MIFARE系列代表作就是MIFARE Classic 1K也就是市面上最常见的S50卡片。MIFARE Classic 1K内部有1024字节存储分成16个扇区每个扇区4个块每个块16字节。块0比较特殊存着厂商信息和唯一的UID号码块3是扇区控制块存密钥和访问条件。中间那些块就是用户可以读写的数据区。这意味着卡片不仅能被“认出身份”还能在卡里存数据。很多门禁系统不仅读UID还会在卡里写余额、写权限有效期就是这个原因。有一点得提醒MIFARE Classic的加密算法在十几年前就被学界公开破解了安全性放在今天是远远不够的。但这不影响我们拿它学习RFID的基本工作流程实际商用系统早就不建议继续用Classic做高安全场景了。1.3 模块怎么选RC522、PN532到底什么关系新手搜索“RFID模块”时往往会看到RC522和PN532两个高频芯片方案还有一堆125kHz低频模块。这里给你一个直接可用的选型建议。RC522芯片模块是最常见、最便宜的选择支持SPI、I2C、UART三种接口多数商家把SPI接口用排针引出能读MIFARE系列卡实测读卡距离一般2~5cm。价格低到可以当耗材资料和例程铺天盖地Arduino生态里对应的库非常成熟。零基础入门基本就是它了。PN532芯片模块则更“高级”除了读卡还支持模拟一张卡片和点对点通信也就是能做手机NFC交互的玩法。接口也更灵活但价格大概是RC522的几倍玩法多也意味着学习曲线更陡。低频125kHz模块常见的是RDM6300这类负责配套低频ID卡和钥匙扣读卡距离同样很短但卡片便宜、协议简单很多老旧门禁还在用。如果你手里的卡是低频卡那RC522是读不了的需要先确认卡和模块的频率一致。我的结论很直接真正的零基础入门闭眼买RC522模块加几张S50白卡和钥匙扣。等你把基本流程跑通再考虑要不要升级到PN532去做更花哨的NFC玩法。2. 动手前的准备硬件与接线2.1 元件清单怎么备整套实验需要的硬件非常克制我按必要程度给你列一份清单ESP32开发板推荐带USB串口芯片的通用开发板买那种排针焊好的新手省事RC522 RFID读卡模块S50空白卡和钥匙扣各若干买模块时一般会附送杜邦线母对母至少6根长度10~15cm比较合适面包板可选接线方便很多预算方面一块ESP32五六十块RC522模块十几二十块几张卡加起来也就一杯奶茶钱。如果手头已经有一块Arduino Uno也可以先跑通RC522但ESP32的优势在于自带Wi-Fi后面把刷卡数据联网上报会非常方便。挑选RC522模块时注意看天线区域和背面的元件焊接。市面上一些廉价模块天线走线有瑕疵会导致读卡距离明显缩短甚至贴上去都读不到。如果到手发现读卡距离可怜优先怀疑天线质量换一家店铺的模块往往就好了。2.2 关键接线SPI引脚的坑RC522与ESP32之间最常用的是SPI接口SPI需要4根信号线加电源地线。最关键的是ESP32侧引脚的选择我用的接线表是这样的RC522引脚功能接到ESP32SDA/SS片选GPIO5SCK时钟GPIO18MOSI主出从入GPIO23MISO主入从出GPIO19RST复位GPIO223.3V电源正3V3GND电源地GND为什么选这组引脚因为ESP32在Arduino环境下的默认VSPI总线正好是GPIO18、GPIO19、GPIO23再配GPIO5做片选、GPIO22做复位库代码里几乎不用改任何引脚配置就能跑起来。初学者最容易踩的坑有三个一是把SDASS当I2C的SDA理解接错到别的引脚二是RST随便接了个不能用的引脚三是最常见的——把GND和3.3V接反模块当场冒烟。接线顺序我建议按“先电源地再信号线”来。先接好3V3和GND确认模块上的LED正常亮起再接SCK、MOSI、MISO、SDA、RST这几根信号线。千万别边接边通电免得短路。2.3 供电与电压兼容RC522模块的逻辑电平是3.3VESP32的GPIO也是3.3V两者之间不存在电平不匹配的问题可以直接对接。但很多RC522模块的历史遗留问题是某些商家出的模块兼容5V供电上面带了稳压电路导致新手误以为随便接5V都行。我的建议是统一接ESP32的3V3引脚这是最可靠的做法模块的功耗很低3V3完全带得动。另一个容易忽略的是杜邦线的长度和质量。SPI的时钟线在长线传输时容易受到干扰尤其是SCK这根线尽量别超过15cm。如果发现读卡时好时坏先缩短接线距离比换模块有效得多。3. 环境搭建与第一个读卡程序3.1 开发环境与库的选择开发环境我用的是Arduino IDE对零基础最友好。在“文件 - 首选项 - 附加开发板管理器网址”里填上ESP32官方支持包对应的地址然后在“工具 - 开发板 - 开发板管理器”里搜索ESP32并安装。整个过程需要一点网络下载时间装完后选择你自己的开发板型号和对应串口端口环境就算齐了。库方面在库管理器里搜索MFRC522会出现一堆同名结果。请选那个维护活跃、star数量最多、文档最全的版本装完后最简单的方式就是直接引用示例代码省得自己抄引脚配置。注意不同作者的MFRC522库在API上略有差异一旦编译报错优先检查是不是装错了库。3.2 完整代码读取卡片UID直接给你一个能跑的最小示例逻辑非常清晰不断探测有没有新卡进入射频场读到后把UID以十六进制格式打印出来。#include SPI.h #include MFRC522.h #define SS_PIN 5 #define RST_PIN 22 MFRC522 rfid(SS_PIN, RST_PIN); void setup() { Serial.begin(115200); SPI.begin(); rfid.PCD_Init(); Serial.println(RFID reader ready); } void loop() { // 检查是否有新卡片进入射频场 if (!rfid.PICC_IsNewCardPresent()) { return; } // 读取卡片序列号 if (!rfid.PICC_ReadCardSerial()) { return; } Serial.print(UID: ); String uidStr ; for (byte i 0; i rfid.uid.size; i) { if (i 0) uidStr ; if (rfid.uid.uidByte[i] 0x10) uidStr 0; uidStr String(rfid.uid.uidByte[i], HEX); } Serial.println(uidStr); // 结束本次通信 rfid.PICC_HaltA(); rfid.PCD_StopCrypto1(); }这里面的两个关键API值得解释一下PICC_IsNewCardPresent()在射频场中感应到新卡时返回true但它只负责“探测卡片在场”不负责读取数据PICC_ReadCardSerial()才真正把卡片的UID读到缓冲区。很多新手只调用了第一个函数发现UID永远是空的就是漏了第二步。rfid.uid.size表示UID的字节长度MIFARE Classic一般是4字节部分卡片是7字节。循环里把它格式化成两位十六进制前面补零是为了统一输出格式。如果你刷两张卡输出的UID前几位可能完全一样后面几位不同——这说明UID本身是卡片出厂时固化的通常不允许修改类似每张卡的身份证号。3.3 不只会读ID读写数据块的扩展读UID只是第一步真正让RFID卡片“有用”的是往卡里写数据。比如你要做一个小型签到系统可以在卡里存学号或者工号做一个门禁Demo可以在卡里写权限等级。写入之前需要先通过密钥认证。新卡默认的密钥是6个字节的0xFF也就是出厂时全部为1。认证代码如下MFRC522::MIFARE_Key key; for (byte i 0; i 6; i) { key.keyByte[i] 0xFF; } MFRC522::StatusCode status; status rfid.PCD_Authenticate( MFRC522::PICC_CMD_MF_AUTH_KEY_A, 4, key, (rfid.uid) ); if (status ! MFRC522::STATUS_OK) { Serial.print(Auth failed: ); Serial.println(status); return; }认证通过后就可以读块数据了。MIFARE_Read一次能读一个块也就是16字节缓冲区要分配18字节因为库会把算出的CRC校验码也放在后面。byte buffer[18]; byte blockAddr 4; byte size sizeof(buffer); status rfid.MIFARE_Read(blockAddr, buffer, size); if (status MFRC522::STATUS_OK) { for (byte i 0; i 16; i) { Serial.print(buffer[i], HEX); Serial.print( ); } Serial.println(); }写数据用MIFARE_Write一次写一个块准备一个16字节的数组即可byte dataBlock[16] {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; status rfid.MIFARE_Write(4, dataBlock, 16);注意块地址别乱写。0~3属于扇区0块0是厂商固定数据块3是密钥区从扇区1开始也就是块地址4以后才是自由数据区。你要是往块3写错东西整张卡就废了密钥一旦改掉后面的读写全部没戏。所以我的建议是练习读写只用块4到块7这一段等玩熟了再碰密钥区。4. 从“读ID”走向“刷卡应用”做一个简易门禁Demo4.1 权限白名单的思路读卡只是手段做应用才是目的。很多教程止步于“串口能打印出UID”但真正有意思的是拿UID做权限判断。一个最简门禁逻辑是这样的开机时从EEPROM或程序内置的数组加载“白名单”也就是允许通行的UID列表循环检测有没有新卡刷上来刷到卡后读取UID和白名单逐个比对命中则视为通过点亮绿灯、触发继电器或蜂鸣器响一声没命中则亮红灯并打印拒绝信息等待卡片离开回到检测状态避免同一张卡一直触发这里有一个新手常犯的错误只判断“UID是否在白名单内”却忽略了卡片离开检测。结果就是卡贴在读卡器上不动程序一秒钟触发几十次开锁动作。正确做法是做一个简单状态机当前状态为“等刷卡”时检测到卡就验证并跳转到“已刷卡”状态在“已刷卡”状态下直到读卡器检测不到卡才回到“等刷卡”。这样整个流程就顺畅了。还有一个安全层面的坑我必须单独说只认UID的验证模型很容易被绕过因为UID是明文可读的而且MIFARE Classic的密钥早已公开。要做更严谨的验证最好在卡的扇区数据区存储一个自定义的随机校验码或通行凭证读取后再次校验而不是单纯看UID。我这里的Demo只是学习用途用来理解RFID的读卡流程不是叫你拿这个逻辑去改装真正的门禁系统。4.2 状态反馈与防抖设计一个像样的刷卡体验必须要有清晰的反馈。模块上的小LED能显示通电但细节反馈还得靠你自己的设计。我给门禁Demo加了三样东西板载LED、蜂鸣器、串口日志。刷卡成功时LED亮绿灯或板载LED常亮1秒、蜂鸣器响一声短音失败时LED闪红灯或快速闪烁、蜂鸣器响两声长音。这能让使用者立刻知道刷卡结果不需要盯着电脑屏幕看。防抖设计同样重要。RC522的射频场检测是持续轮询的卡片靠近的一瞬间PICC_IsNewCardPresent()可能连续返回多次true。如果不做处理一次刷卡会被当成多次。我的处理方式是记录“正在处理的UID”只要这张卡还没被移走就忽略相同UID的重复请求。当卡片离开射频场并持续一段时间检测不到新卡后再清除这个记录。String lastUid ; unsigned long lastCardTime 0; void loop() { if (rfid.PICC_IsNewCardPresent() rfid.PICC_ReadCardSerial()) { String uid formatUid(); if (uid ! lastUid || millis() - lastCardTime 2000) { checkAccess(uid); // 执行白名单比对 lastUid uid; lastCardTime millis(); } rfid.PICC_HaltA(); rfid.PCD_StopCrypto1(); } }这里用millis()做时间差判断能避免完全依赖“等到卡离开”的状态检测。即使有人把卡一直贴在读卡器上超过2秒的静默期后重新刷依然可以触发验证。这个设计在实际使用中比纯状态机更省心。4.3 联网上报是ESP32的加分项门禁Demo跑通之后ESP32和Arduino Uno的差距就体现出来了ESP32自带Wi-Fi。你可以把每次刷卡事件通过MQTT协议发给服务器这样就不只是本地日志了而是真正的“联网刷卡系统”。一个很自然的扩展是刷卡成功后向MQTT主题推送一条消息内容是UID、时间戳和结果服务端收到后写进数据库前端就能实时看到刷卡记录。会议室签到、实验室上机登记、公司访客记录这类场景都能套用这个框架。联网还有一个好处白名单可以放在服务器端而不是烧死在本地代码里。ESP32每次刷卡时把UID发到服务端服务端返回“允许”或“拒绝”这样添加新用户不需要重新刷固件运营起来方便太多。当然这只是思路层面具体MQTT账号和服务器配置不在这里展开了后续我自己写了一篇单独的文章讲这块。5. 常见问题与排查技巧实录5.1 初始化失败串口打印出Communication failure这是最常见的问题没有之一。大概率是接线错误其次是模块损坏。我整理了一个排查顺序照着走基本能定位检查SDA/SS是否接到了GPIO5。很多库在初始化时会把SS引脚设为输出并拉高如果你接错了引脚片选信号根本没到模块。检查RST引脚是否接到了GPIO22。RST如果悬空或接错模块可能处于异常复位状态。检查3V3和GND是否确实有电压用万用表量一下模块电源引脚最直接。把模块从杜邦线上拔下来单独测试换一块已知正常的RC522模块交叉验证。还有一招很实用初始化失败后手动把RST引脚拉低再拉高做一次硬复位经常能救回来。digitalWrite(rstPin, LOW); delay(100); digitalWrite(rstPin, HIGH); delay(100); rfid.PCD_Init();这个硬复位操作放在setup()里PCD_Init()前面能解决一部分模块上电时序导致的初始化异常特别是ESP32上电速度比Arduino快模块还没准备好就被初始化了的情况。5.2 读卡距离短、时不时读不到RC522本身读卡距离就不远一般2~5cm。如果你发现卡必须死死贴上去才能读甚至贴上去都时好时坏从这几方面排查天线区域是否被金属遮挡。RC522的天线是印在电路板上的线圈靠近金属物体会严重吸收磁场能量。别把它放在金属桌面上测试用手拿着或垫高几厘米再试。杜邦线是否过长。SCK时钟线过长会引入噪声最好低于15cm。如果非要长距离走线考虑用屏蔽线或者换成I2C接口连接。卡片类型是否匹配。有些钥匙扣里封装的是低频ID卡RC522读不了。确认你手里的卡是13.56MHz的MIFARE卡买白卡时问商家一句“是S50吗”就行。模块天线本身有缺陷。排除了以上因素后换一个模块测试。如果你买的模块是特别便宜的散货天线线圈焊接不良的情况并不少见。5.3 刷一次卡触发两次、UID乱码触发两次的问题在4.2节已经给了处理方法核心就是加一个“当前正在处理的UID”缓存配合时间差过滤。乱码问题则要分两种情况看一种是串口打印出来的UID和卡片上印的不一样。这是因为卡片上有两个概念卡片表面印刷的号码不一定是UID可能是厂商在数据区写入的卡号这两者本来就不一样。R530模块读出来的UID才是芯片出厂固化的序列号。所以看到不一致不用慌这是正常现象。另一种是同一张卡每次刷出的UID每次都随机变化这往往是射频场不稳定或者读卡器与卡之间通信中断后重新建立的连接导致的。MIFARE Classic不会真的随机化UID而是你的程序在卡片未完整进入射频场时就开始读取读到的是不完整的数据。解决方法是先稳定读卡姿势或者增加一个简单的重复读校验连续读两次UID一致才采用。串口乱码还有一个常见原因是波特率不匹配。ESP32的Serial.begin(115200)对应的是串口监视器右下角也选115200如果你选的是9600打印出来的自然是一堆乱码。最后说点我自己的体会这块模块刚到手时我照着示例程序烧进去第一张卡贴上串口瞬间蹦出一串十六进制ID。那一刻确实有种“门禁在我面前裸奔”的错觉但紧接着我就意识到一个更重要的事情RFID不是魔法它只是把物理世界的“靠近”翻译成了数字世界的“字符串”。理解了这一层后面做门禁、做签到、做储物柜管理系统都不过是给这个字符串加上不同的规则而已。实操中也踩过几次坑。最让我印象深刻的是一次读卡不稳定折腾半天发现是模块贴在金属桌子上电磁场几乎被吸没了。把模块拿起来悬空之后一切恢复正常。这类问题在说明书里很难看到只有亲手做一遍才能体会到。如果你按这篇文章跑通了第一个读卡程序下一个阶段我建议做三件事第一去买几块不同形状的钥匙扣观察不同卡的UID差异第二把第3.3节的写卡代码跑通往卡里写入一段自己的标记数据再读出来第三放心大胆地把门禁Demo扩展成你身边真实需要的小工具比如实验器材借用登记、个人书屋的会员卡系统。注意所有实验请在合法合规的学习场景下进行别拿别人门禁卡或真实系统练手。ESP32加RFID这个组合真正的乐趣是让你有能力按自己的需求去定义“刷卡”的规则而不是去复制别人的规则。

相关新闻

REFramework 新手实战教程:从零编译注入,跑通你的第一个 Lua 脚本

REFramework 新手实战教程:从零编译注入,跑通你的第一个 Lua 脚本

REFramework 新手实战教程:从零编译注入,跑通你的第一个 Lua 脚本 【免费下载链接】REFramework Mod loader, scripting platform, and VR support for all RE Engine games 项目地址: https://gitcode.com/GitHub_Trending/re/REFramework REFra…

2026/10/18 1:29:46 阅读更多 →
STM32+华为云IoT+Qt跨平台智能家居系统实战

STM32+华为云IoT+Qt跨平台智能家居系统实战

/* 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 1:29:46 阅读更多 →
3步在M系列Mac上跑起本地AI绘图:SenseNova-U1.5-8B-MoT-8step-8bit快速部署教程

3步在M系列Mac上跑起本地AI绘图:SenseNova-U1.5-8B-MoT-8step-8bit快速部署教程

大模型媒体生成多模态本地部署模型量化模型蒸馏 【免费下载链接】SenseNova-U1.5-8B-MoT-8step-8bit 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/SenseNova-U1.5-8B-MoT-8step-8bit 点击查看 免费下载 想在 M 系列 Mac 上免云 GPU 跑本地 AI 绘图…

2026/10/18 1:29:46 阅读更多 →

最新新闻

2026年AI接口聚合服务深度横评:从调用稳定性看词元之河与硅基流动的中小团队适配度

2026年AI接口聚合服务深度横评:从调用稳定性看词元之河与硅基流动的中小团队适配度

2026年5月完成的一轮 AI 接口聚合服务实测横评,方法论为 72 小时连续压测、12 类典型调用场景模拟与 37 位一线开发者访谈。行业背景值得关注:据《中国AI基础设施白皮书(2026Q1)》,超过 68% 的中小技术团队在大模型应用…

2026/10/18 2:12:56 阅读更多 →
手工LL(1)编译器实战:从词法到语义的5层避坑指南

手工LL(1)编译器实战:从词法到语义的5层避坑指南

简介:本资源是一份完整的高校编译原理课程设计报告,面向计算机专业本科生及编译技术初学者,聚焦Pascal子集编译器的系统性实现与原理剖析。报告涵盖词法分析(含符号表构建与注释处理)、语法分析(自顶向下LL…

2026/10/18 2:12:56 阅读更多 →
香港公司注册怎么办理?

香港公司注册怎么办理?

一、香港公司注册是什么?有什么用? 香港公司注册,是指依据香港《公司条例》,向香港公司注册处提交申请,取得公司注册证书及商业登记证的法律程序。 对跨境卖家、外贸企业和品牌方而言,香港公司主要用于&…

2026/10/18 2:12:56 阅读更多 →
阿里钉钉Java集成实战:组织同步、消息推送与审批回调全链路落地

阿里钉钉Java集成实战:组织同步、消息推送与审批回调全链路落地

简介:本资源是一套面向Java开发者的企业级钉钉集成实战项目,聚焦阿里钉钉开放平台API在业务系统中的落地应用,适用于需实现组织通讯、审批流对接、消息推送及移动办公集成的中高级后端工程师。压缩包共174个文件,含32个核心Java源…

2026/10/18 2:12:56 阅读更多 →
力扣排序题复盘:核心模板、比较器陷阱与高效刷题路线

力扣排序题复盘:核心模板、比较器陷阱与高效刷题路线

说起力扣刷题,排序题目是我最早碰、也最晚想明白的一类。刚开始我以为"过一遍快排和归并就能应付",结果连续几道题把我按在地上摩擦——不是不会写排序,而是不知道题目想让我用什么排序、为什么这么排序、边界条件又藏在哪里。这篇…

2026/10/18 2:12:56 阅读更多 →
BLE OTA断连恢复设计:从参数配置到双Bank兜底的全流程指南

BLE OTA断连恢复设计:从参数配置到双Bank兜底的全流程指南

/* 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 2:11:56 阅读更多 →

日新闻

基于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/16 14:23:36 阅读更多 →