基于Intel Edison的智能声控灯:从模拟信号处理到自适应算法实战
1. 项目概述从“拍手开灯”到智能感知的起点如果你玩过Arduino大概率做过“声控灯”这个项目。它太经典了经典到几乎成了入门必做的实验。但今天我们抛开那些简单的“拍手亮灯”教程来聊聊如何用Intel Edison这块功能更强大的板子做一个真正有点“想法”的声控灯。Edison虽然已经不算新潮但它集成了双核Atom处理器和一颗微控制器性能远超普通的Arduino Uno这意味着我们可以处理更复杂的音频信号实现更智能的控制逻辑而不仅仅是检测一个阈值。这个项目的核心远不止是让灯响应声音。它关乎如何将一个物理世界的连续模拟信号声音通过传感器转化为数字世界可以理解的数值再通过我们编写的逻辑去驱动另一个物理设备灯。这中间涉及到模拟信号采集的稳定性处理、环境噪声的过滤、响应灵敏度的动态调整等一系列实际问题。我见过太多初学者做的声控灯要么“过于敏感”稍有风吹草动就乱闪要么“反应迟钝”用力拍手都没反应。问题出在哪往往是对模拟输入的理解停留在表面。所以这篇教程的目标是带你基于Edison和声音传感器搭建一个稳定、可调、甚至具备简单学习能力的声控灯系统。我们会从最基础的电路连接和代码读取开始逐步深入到去抖动算法、动态阈值校准最后尝试用Edison更强的处理能力实现一个根据环境噪音自动调整灵敏度的“自适应声控灯”。无论你是刚接触Edison还是想深化对模拟输入和实时控制的理解这个项目都能给你带来不少实操干货。2. 核心硬件选型与电路设计解析工欲善其事必先利其器。声控灯听起来简单但硬件选型和电路搭建的细节直接决定了后续功能的稳定性和扩展性。2.1 主控与传感器深度解析首先看主控板Intel Edison。它最大的优势在于其“双核”架构一个用于高性能计算的Atom处理器和一个用于实时控制的Quark微控制器。在Arduino IDE中编程时代码实际运行在Quark核心上这保证了类似Arduino的实时性。但同时我们可以利用Atom核心运行更复杂的后台进程比如通过Python进行数据分析或网络通信这是Uno做不到的。对于声控灯项目我们可以让Quark核心专心负责毫秒级的声音采样和灯控而Atom核心可以用于记录开关日志、或通过Wi-Fi上报状态为项目留下物联网升级的空间。传感器方面最常用的是声音传感器模块如KY-038或LM393比较器模块。这类模块通常输出两种信号模拟输出AO直接输出麦克风采集到的实时电压信号其幅值随声音强度连续变化。这是我们实现高级功能如测量分贝值、分析声音模式的基础。数字输出DO模块上有一个电位器可以设定一个阈值电压。当声音强度超过阈值时DO引脚输出高电平如3.3V或5V反之输出低电平。这提供了“开关量”的便捷但失去了细节。注意很多入门教程只教用数字输出接上线拧拧电位器就能用。但这恰恰是导致控制不精准的根源。电位器设定的静态阈值无法适应变化的背景噪音。因此本项目中我们将重点使用模拟输出AO将阈值判断的逻辑交给Edison的程序实现动态化和智能化。执行机构我们选用一个普通的LED灯和一个继电器模块。LED用于初步调试和视觉反馈。继电器模块则用于控制真正的220V灯具这是将项目实用化的关键一步。选择继电器模块时务必确认其控制电压与Edison的GPIO输出电压匹配通常是3.3V同时其负载能力如10A 250V AC要大于你所要控制灯具的功率。2.2 电路连接图与安全要点电路连接并不复杂但有几个关键点必须注意尤其是涉及高压部分时安全第一。低压部分Edison 传感器 调试LED连接声音传感器模块VCC- Edison的5V或3.3V引脚根据模块规格书选择通常5V兼容性更好。GND- Edison的GND。AO- Edison的任意一个模拟输入引脚例如A0。DO- 本例中暂不连接。调试LED长脚阳极通过一个220Ω的限流电阻连接到Edison的某个数字引脚如D13。短脚阴极直接连接到Edison的GND。高压部分控制真实灯具连接此部分操作涉及220V市电有触电风险请务必在完全断电的情况下操作并由具备电工知识的人员完成。将继电器模块视为一个电子开关。它有三个接线端公共端COM、常开端NO、常闭端NC。控制端继电器的VCC、GND、IN或SIG分别接Edison的5V、GND、和一个数字引脚如D12。被控端从墙壁开关或插座引出的火线L剪断。将断开的火线一端接继电器COM端另一端接继电器NO端。零线N和地线PE保持原样直接连接到灯具不要经过继电器这样当Edison给D12高电平时继电器吸合COM与NO接通火线通路恢复灯亮反之则灯灭。实操心得在连接高压电路前可以先用一个台灯确保灯泡是好的和继电器模块在完全断电的情况下接好线然后用一个5V手机充电器给继电器模块供电手动短接控制引脚到VCC来测试继电器能否正常吸合、台灯能否亮灭。这一步测试通过后再接入Edison控制系统可以极大降低风险。3. 基础代码实现与模拟信号解读硬件连接好后我们开始编写最核心的代码。第一步是学会如何正确地读取和解读声音传感器送来的模拟信号。3.1 初始化与模拟信号读取在Arduino IDE中为Edison板卡选择正确的型号和端口后我们开始编码。首先是一些基础定义和初始化// 引脚定义 const int soundSensorPin A0; // 声音传感器模拟输出接A0 const int ledPin 13; // 调试LED接D13 const int relayPin 12; // 继电器控制接D12 // 变量定义 int sensorValue 0; // 存储实时读取的模拟值 int baseline 0; // 环境噪音基线 unsigned long lastClapTime 0; // 上次检测到有效声音的时间 const unsigned long debounceDelay 200; // 防抖延时毫秒 void setup() { Serial.begin(115200); // 初始化串口用于调试输出 pinMode(ledPin, OUTPUT); pinMode(relayPin, OUTPUT); digitalWrite(relayPin, LOW); // 初始状态继电器断开灯灭 digitalWrite(ledPin, LOW); // 校准环境噪音基线采集一段时间内的平均值 Serial.println(Calibrating baseline noise level...); long sum 0; for (int i 0; i 500; i) { // 采集500个点 sum analogRead(soundSensorPin); delay(2); // 短暂延迟 } baseline sum / 500; Serial.print(Baseline calibrated to: ); Serial.println(baseline); } void loop() { // 核心循环 }在setup()函数中我们进行了一项关键操作基线校准。analogRead()函数会返回一个0到1023之间的整数对应0V到参考电压。在安静环境下这个值会稳定在一个水平这就是环境噪音的基线。后续判断是否有“有效声音”就是看实时读数是否显著地、持续地偏离这个基线。直接用一个固定数值比如300作为阈值是非常不科学的因为换个环境就可能完全失效。3.2 实现简单的阈值判断与状态切换接下来在loop()函数中我们实现最基础的逻辑读取数值与基线比较超过一定幅度则触发灯的状态切换并加入防抖处理。void loop() { sensorValue analogRead(soundSensorPin); // 读取当前声音强度 // 计算与基线的绝对差值 int difference abs(sensorValue - baseline); // 设置一个触发阈值例如比基线高50个单位 int triggerThreshold 50; // 获取当前时间 unsigned long currentTime millis(); // 判断逻辑差值超过阈值且距离上次触发已过防抖时间 if (difference triggerThreshold (currentTime - lastClapTime) debounceDelay) { // 触发动作 lastClapTime currentTime; // 更新触发时间 // 切换LED和继电器状态 digitalWrite(ledPin, !digitalRead(ledPin)); digitalWrite(relayPin, !digitalRead(relayPin)); // 串口打印调试信息 Serial.print(Triggered! Sensor: ); Serial.print(sensorValue); Serial.print(, Diff: ); Serial.println(difference); } // 可选定期微调基线适应缓慢变化的环境噪音 // baseline baseline * 0.995 sensorValue * 0.005; // 一阶低通滤波 delay(10); // 每次循环延迟10毫秒控制采样率约为100Hz }这段代码已经实现了一个可用的声控灯。debounceDelay是防抖延时这是避免因单次声音信号波动导致多次误触发的关键。例如一次拍手传感器可能会输出一串波动的峰值如果没有防抖程序会在极短时间内检测到多次“超阈值”导致灯被快速开关多次。加入(currentTime - lastClapTime) debounceDelay这个条件后在触发后的200毫秒内系统会忽略新的触发信号。注意事项triggerThreshold触发阈值的值需要根据实际环境测试调整。太敏感值太小容易误触发太迟钝值太大则需要很大声音。更好的做法是像校准基线一样让程序自动计算一个动态阈值例如设置为基线附近标准差的若干倍。我们将在进阶部分实现它。4. 进阶优化从“能响”到“好用”基础版本能工作但离“好用”还差得远。它主要有三个问题1. 静态阈值不适应环境变化2. 无法区分瞬时声音如拍手和持续噪音如说话3. 功能单一。下面我们利用Edison的能力逐一优化。4.1 动态阈值与噪声过滤算法静态阈值是声控灯体验差的罪魁祸首。解决方案是让程序自己学习环境噪音水平并动态设定触发阈值。这里我们引入一个简单的算法移动平均与标准差计算。我们不再只保存一个基线值而是维护一个最近一段时间采样值的窗口并实时计算这个窗口数据的平均值和标准差。触发阈值可以设为“平均值 N倍标准差”。这样在安静环境下标准差小阈值低对小声音敏感在嘈杂环境下标准差大阈值自动升高避免误触发。// 新增全局变量 const int windowSize 100; // 滑动窗口大小 int sensorWindow[windowSize]; // 存储窗口数据 int windowIndex 0; long windowSum 0; long windowSumSq 0; // 平方和用于计算标准差 void setup() { // ... 其他初始化代码 ... // 初始化滑动窗口 for (int i 0; i windowSize; i) { sensorWindow[i] analogRead(soundSensorPin); windowSum sensorWindow[i]; windowSumSq (long)sensorWindow[i] * sensorWindow[i]; delay(2); } } void loop() { int newValue analogRead(soundSensorPin); // 更新滑动窗口去掉最旧的值加入最新的值 int oldValue sensorWindow[windowIndex]; windowSum windowSum - oldValue newValue; windowSumSq windowSumSq - (long)oldValue * oldValue (long)newValue * newValue; sensorWindow[windowIndex] newValue; windowIndex (windowIndex 1) % windowSize; // 计算动态平均值和标准差 float dynamicMean (float)windowSum / windowSize; float variance (float)windowSumSq / windowSize - dynamicMean * dynamicMean; float dynamicStdDev sqrt(variance); // 设置动态阈值平均值 3倍标准差可根据灵敏度调整倍数 float dynamicThreshold dynamicMean 3.0 * dynamicStdDev; int triggerThreshold (int)dynamicThreshold; // 判断触发当前值超过动态阈值且是瞬时峰值可选增加上升沿检测 // 简单的瞬时检测当前值远高于前一个值 static int lastValue 0; int rise newValue - lastValue; lastValue newValue; if (newValue triggerThreshold rise dynamicStdDev) { // 增加上升沿条件 // ... 防抖和触发逻辑与之前相同 ... } // 串口输出监控信息调试时打开稳定后可关闭 // Serial.print(Val:); // Serial.print(newValue); // Serial.print(, Mean:); // Serial.print(dynamicMean); // Serial.print(, Th:); // Serial.println(triggerThreshold); delay(10); }这个算法显著提升了系统的适应性。windowSize的大小需要权衡太小则响应快但抗干扰差太大则响应迟钝。100个点约1秒数据是一个不错的起点。3.0是灵敏度系数数字越大越不敏感你可以根据实际情况调整。4.2 模式识别区分拍手与持续噪音有时我们希望灯只对特定的声音模式如两次快速的拍手做出响应而忽略说话、关门等声音。这需要更复杂的模式识别。一个相对简单的方法是检测声音信号的过零率和能量包络。对于拍手这样的瞬时脉冲其特点是短时间内信号快速越过基线高过零率并且信号能量有一个陡峭的上升和下降沿。我们可以设定时间窗口计算窗口内的过零次数和能量积分。// 新增变量用于模式识别 const int patternWindow 50; // 模式检测窗口大小50ms int zeroCrossCount 0; long energySum 0; unsigned long patternStartTime 0; bool detectingPattern false; // 在loop中动态阈值判断之后 if (newValue triggerThreshold) { if (!detectingPattern) { detectingPattern true; patternStartTime millis(); zeroCrossCount 0; energySum 0; lastValueForPattern newValue; // 需要记录上一个值用于过零检测 } // 计算能量近似为幅值平方 energySum (long)(newValue - dynamicMean) * (newValue - dynamicMean); // 过零检测简化版 if ((newValue dynamicMean lastValueForPattern dynamicMean) || (newValue dynamicMean lastValueForPattern dynamicMean)) { zeroCrossCount; } lastValueForPattern newValue; } else { if (detectingPattern) { // 模式窗口结束 unsigned long patternDuration millis() - patternStartTime; if (patternDuration 100) { // 只处理短时声音 // 判断是否为拍手模式高能量、中等过零率 if (energySum 100000 zeroCrossCount 2 zeroCrossCount 10) { // 符合拍手特征触发 // ... 触发灯状态切换 ... } } detectingPattern false; } }这段代码提供了一个思路框架。真正的模式识别需要更精细的参数调校和算法如模板匹配、机器学习。但对于区分拍手和说话能量和过零率的简单组合已经能起到不错的效果。4.3 功能扩展延时关闭与光敏联动一个实用的声控灯通常不是“开一下关一下”而是“开灯后持续亮一段时间如果期间没有新声音则自动关闭”。这需要加入延时关闭功能。// 新增变量 bool lightState false; unsigned long lightOnTime 0; const unsigned long autoOffPeriod 30000; // 自动关闭时间30秒 void loop() { // ... 前面的声音检测和触发逻辑 ... // 延时关闭逻辑 if (lightState) { if (millis() - lightOnTime autoOffPeriod) { // 超时自动关灯 digitalWrite(ledPin, LOW); digitalWrite(relayPin, LOW); lightState false; Serial.println(Light auto-off.); } } // 在触发开灯的地方需要更新状态和时间 // if (触发条件) { // lightState true; // lightOnTime millis(); // digitalWrite(ledPin, HIGH); // digitalWrite(relayPin, HIGH); // } }更进一步我们可以加入光敏电阻实现“只在光线暗的时候才启用声控”的功能白天即使有声音也不开灯更加节能智能。只需添加一个光敏传感器到模拟引脚在声音触发判断前先检查当前光照值是否低于设定的黑暗阈值。5. 调试技巧与常见问题排查实录即使按照教程一步步做你也可能会遇到各种问题。下面是我在多次项目中总结的“踩坑实录”和排查思路。5.1 信号不稳定与噪声干扰问题现象LED无故闪烁或者串口监视器里看到的传感器数值在安静时也跳动很大。可能原因1电源噪声。Edison的3.3V或5V输出如果同时给多个模块供电可能引入噪声。排查尝试单独给声音传感器模块用一块干净的电池如9V电池加降压模块供电观察信号是否变稳。解决在Edison的电源引脚和传感器VCC之间加一个10μF电解电容和0.1μF陶瓷电容并联进行滤波。可能原因2传感器本身噪声或接触不良。排查用手轻轻按压传感器上的麦克风元件和电位器如果使用DO看数值是否跳变。解决更换一个传感器试试。确保所有杜邦线插接牢固。可能原因3代码采样率过高或延迟不当。排查loop()中如果没有delay或延迟很短analogRead会以极高频率运行可能读到转换期间的中间值。解决加入delay(10);是合适的。对于EdisonanalogRead本身也需要一定时间。5.2 触发不灵敏或完全无反应问题现象需要非常用力拍手甚至喊叫才能触发或者怎么都没反应。可能原因1阈值设置过高。排查打开串口监视器观察安静时的基线值baseline和拍手时能达到的峰值。确保你的触发阈值设置在两者之间。解决降低triggerThreshold的值或者使用动态阈值算法。可能原因2传感器模拟输出AO引脚接错。排查确认接的是AO而不是DO。用万用表测量AO引脚对地电压拍手时看电压是否有变化。解决正确连接到Edison的模拟输入引脚如A0, A1...。可能原因3继电器模块或LED接线错误。排查先绕过声音控制逻辑写一个简单程序让D12或D13每隔一秒翻转一次看继电器和LED是否正常动作。解决检查继电器模块的输入信号是高电平触发还是低电平触发相应修改digitalWrite(relayPin, HIGH/LOW)。5.3 继电器动作但灯不亮高压部分问题问题现象能听到继电器“咔哒”声但灯具不亮。可能原因1继电器负载能力不足或触点氧化。排查用万用表通断档在继电器吸合时测量COM和NO端是否导通。解决更换一个更大功率的继电器模块或检查继电器触点。可能原因2高压线路接错。排查务必断电操作检查是否只控制了火线零线是否构成了回路灯具本身是否完好解决严格按照前文电路图确保继电器串联在火线中。可以先用一个低压小灯泡如12V测试整个控制回路是否正确。5.4 Edison特定问题问题现象程序上传失败或运行一段时间后死机。可能原因1Edison板卡驱动或配置问题。排查在Arduino IDE中是否正确选择了Intel Edison板卡和对应的COM端口解决确保已安装Intel Edison的板卡支持包。尝试通过Edison的调试串口FTDI线查看有无错误输出。可能原因2电源供电不足。排查Edison全速运行并驱动多个外设时功耗较大。解决使用额定电流2A以上的5V电源适配器通过Edison的DC接口供电避免仅通过USB供电。最后调试的黄金法则是分模块测试、逐步集成。先确保能正确读取声音数值再测试LED控制然后测试继电器低压控制最后再接入高压部分。每一步都通过串口打印关键变量来验证。把一个大问题拆解成若干个小问题逐个击破这是解决所有硬件项目疑难杂症最有效的方法。这个基于Edison的声控灯项目从基础的IO操作到进阶的信号处理涵盖了一个嵌入式互动项目最常见的环节。希望这些深入的原理剖析和实操细节能帮你做出一个不仅“能动”而且“聪明好用”的声控灯。

相关新闻

基于行空板与Python的迷你唱吧:音频处理与实时交互实现

基于行空板与Python的迷你唱吧:音频处理与实时交互实现

1. 项目概述:从一块板子到迷你唱吧的蜕变如果你手头有一块行空板,除了让它显示个温湿度、做个物联网开关,是不是偶尔也会觉得有点“大材小用”?毕竟,它本质上是一台运行着Linux系统、能跑完整Python环境的微型电脑。今…

2026/10/18 11:11:30 阅读更多 →
晶体负载电容调试实战:从原理到方法,解决嵌入式时钟精度与稳定性难题

晶体负载电容调试实战:从原理到方法,解决嵌入式时钟精度与稳定性难题

1. 项目概述:从“能用”到“精准”的跨越在嵌入式硬件开发,尤其是涉及微控制器、实时时钟、射频模块的电路设计中,晶体振荡器是系统的心跳来源。很多工程师,尤其是刚入行的朋友,常常会遇到一个现象:电路板上…

2026/10/18 18:09:11 阅读更多 →
OpenAI与Anthropic API对比:智能代码助手开发实战指南

OpenAI与Anthropic API对比:智能代码助手开发实战指南

1. 背景与核心概念在人工智能快速发展的今天,大型语言模型(LLM)已成为技术领域的热点。OpenAI作为行业的先行者,推出了GPT系列模型,而Anthropic作为后起之秀,其Claude模型也备受关注。近期,关于…

2026/10/18 17:30:48 阅读更多 →

最新新闻

ImageJ/Fiji精准裁剪指定像素大小:单张、堆栈与批量处理全攻略

ImageJ/Fiji精准裁剪指定像素大小:单张、堆栈与批量处理全攻略

前阵子帮一位朋友整理一批显微成像数据,需求听起来非常简单:把几十张共聚焦图片里感兴趣的区域全部统一截成 512512 像素,后面要喂给某个网络模型。结果他组里的同学手动框了一下午,导出的图片尺寸五花八门,500486、51…

2026/10/19 0:04:52 阅读更多 →
IT就业难背后:结构性错位与破局之道

IT就业难背后:结构性错位与破局之道

先聊点实在的。这两年只要打开社交平台,输入“IT就业难”这几个字,满屏都是吐槽贴:应届生投了几百份简历石沉大海,工作五六年的开发说“裸辞三个月找不到下家”,还有转行培训机构出来的朋友抱怨“包装了三年经验还是被…

2026/10/19 0:04:52 阅读更多 →
场地预约小程序毕设实战:SSM+微信小程序+MySQL数据库设计到避坑

场地预约小程序毕设实战:SSM+微信小程序+MySQL数据库设计到避坑

简介:面向毕业设计场景的场地预约小程序完整项目,基于微信小程序SSMMySql技术栈开发,适合计算机相关专业学生作为选题参考、功能扩展或二次开发起点。系统实现场地类型管理、场地管理、预约管理、取消申请与押金退回等功能,分为管…

2026/10/19 0:04:52 阅读更多 →
基于.NET9的多租户权限系统:数据权限与动态API落地实践

基于.NET9的多租户权限系统:数据权限与动态API落地实践

简介:这份资源是一套面向 .NET 与 Vue 全栈开发者的中台权限管理系统,后端基于 .Net9,前端采用 Vue3 Element Plus,并配套 uniapp uviewui 移动端方案,实现前后端分离。系统覆盖多租户隔离、数据权限、动态 Api、任务…

2026/10/19 0:04:52 阅读更多 →
悟空开源无代码平台实战:从实体建模到应用设计避坑指南

悟空开源无代码平台实战:从实体建模到应用设计避坑指南

简介:基于悟空开源无代码平台的多种应用设计源码,面向希望在不编写代码的情况下快速搭建CRM、HRM、财务系统、ERP、SRM等业务应用的企业与技术人员,通过拖放式界面和内置模板即可完成应用定制与部署。压缩包共697个文件,约10.74MB…

2026/10/19 0:04:52 阅读更多 →
多实例学习赋能YOLOv10:水下目标检测的弱监督新范式

多实例学习赋能YOLOv10:水下目标检测的弱监督新范式

简介:本资源是一套基于多实例学习与YOLOv10框架实现的水下目标检测(RUOD)完整项目代码包,面向计算机视觉方向的研究者、算法工程师及深度学习进阶学习者,聚焦解决水下图像因光照衰减、散射模糊、低对比度等导致的目标漏…

2026/10/19 0:03:49 阅读更多 →

日新闻

频率跟踪型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/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 阅读更多 →