基于离线语音识别的智能化妆镜DIY:STM32控制与PWM调光调色温实战

news2026/5/21 5:59:50
1. 项目概述当化妆镜遇上智能语音作为一名折腾过不少智能家居和嵌入式项目的老玩家我最近完成了一个特别有意思的改造把家里那面普普通通的化妆镜升级成了能听懂人话的智能语音化妆镜灯。这玩意儿听起来好像有点“小题大做”但实际用起来那种解放双手、随心所欲控制光线亮度和色温的体验真的回不去了。你想想早上刚洗完脸手上还湿漉漉的或者正在涂精华、敷面膜这时候想调个光还得去摸开关、找旋钮多麻烦。而一句“小镜小镜打开镜子灯调到自然光模式”灯光应声而亮那种流畅感直接把化妆、护肤的仪式感和便捷性拉满。这个项目的核心就是通过一个语音识别模块赋予传统化妆镜“听觉”和“理解”能力让它能响应你的语音指令从而控制LED灯带的开关、亮度、色温冷暖光甚至模式切换。它不依赖于复杂的智能家居中枢如米家、HomeKit是一个独立、离线可用的“单机智能”设备成本低、隐私性好特别适合喜欢DIY和追求个性化体验的朋友。无论是技术爱好者想练手还是普通用户想给生活增添一点智能趣味这个项目都提供了一个清晰可行的路径。接下来我就把这套从思路到落地的完整方案包括硬件选型、电路连接、程序逻辑以及我踩过的坑和优化技巧毫无保留地分享出来。2. 核心方案设计与硬件选型解析给化妆镜加语音控制听起来高大上但拆解开来无非是“感知-处理-执行”三个环节。我们需要一个“耳朵”语音模块来听指令一个“大脑”主控MCU来理解并做决定最后是“手脚”驱动电路去执行开关灯、调光等操作。方案设计的关键在于如何在成本、易用性、性能和开发难度之间找到最佳平衡点。2.1 主流语音模块方案对比市面上能实现语音识别的模块很多但适合我们这种个人DIY项目的主要有以下几类1. 离线语音识别模块这是本项目的首选也是我最终采用的方案。它的最大优点是离线、低延迟、高隐私。模块内部固化了语音识别算法和一定数量的指令词条识别过程完全在本地完成不需要连接网络响应速度极快通常在0.2-0.5秒内而且你的语音数据不会上传到任何服务器。缺点是识别词条数量有限通常几十到上百条且需要提前训练或选择固化的指令。对于控制灯光这种场景几十条指令如“开灯”、“关灯”、“亮一点”、“暖光模式”完全够用。代表型号有LD3320、SYN7313以及新一代的CI110X系列、启英泰伦的模块。2. 在线语音识别模块如AIUI、思必驰等这类模块功能强大可以实现自然语言交互和连续对话识别率极高。但它必须连接Wi-Fi依赖云端服务器进行识别存在网络延迟、隐私顾虑以及需要配置网络等复杂步骤。对于“开关灯”这种简单、要求瞬时反馈的场景有点“杀鸡用牛刀”且增加了不稳定因素万一断网呢。因此不推荐在本项目中使用。3. 搭载麦克风的通用开发板如ESP32、树莓派Pico像ESP32本身有ADC和I2S接口可以外接麦克风再通过集成开源语音识别库如ESP-SR来实现。这种方式灵活度高但开发难度较大需要处理音频采集、降噪、特征提取和识别算法对新手极不友好识别效果和稳定性也远不如专用语音模块。我的选择与理由我最终选用了一款基于CI1102芯片的离线语音识别模块。原因有三第一它识别率高在中等噪音环境下如卫生间换气扇声音表现依然稳定第二它支持非特定人声识别即不用训练任何人用普通话下指令它都能听懂非常适合家庭共用场景第三它提供串口通信协议开发简单我只需要通过单片机读取它串口输出的指令代码即可。2.2 主控MCU与灯光驱动方案语音模块负责“听和翻译”主控MCU微控制器则是负责“思考和指挥”的大脑。它需要接收语音模块的指令然后输出相应的控制信号给灯光驱动电路。主控MCU选择对于灯光控制我们不需要很强的计算能力但需要稳定的IO口和PWM脉宽调制输出能力来调光。常见的Arduino UnoATmega328P、NodeMCUESP8266、STM32F103C8T6蓝色药丸都是不错的选择。Arduino Uno最简单生态丰富但PWM精度8位和引脚数量一般。ESP8266自带Wi-Fi为未来联网升级留有余地但本例中我们暂不用其网络功能。STM32性能强PWM精度高16位调光更细腻但开发环境稍复杂。 我选择了STM32F103C8T6因为它价格与Arduino相仿但拥有更多的IO口和更高精度的定时器可以实现非常平滑的亮度与色温过渡效果。灯光驱动方案化妆镜灯通常需要调节亮度和色温冷暖光。这意味着我们需要控制两组LED灯珠一组冷白光如6000K一组暖黄光如3000K。通过调节这两组灯珠的亮度比例就能混合出从冷白到暖黄之间的任意色温。驱动芯片直接使用MCU的PWM引脚驱动LED灯带是不可靠的电流可能不够也会损坏MCU。我们需要LED恒流驱动芯片。我选用的是两颗WS2812B不这里有个常见误区。WS2812B是智能RGB灯珠内部集成驱动虽然可以用但成本高且对于单纯调亮度和色温有点浪费。更经济专业的方案是使用恒流驱动芯片如PT4115、SM15103等。它们接受PWM信号输出恒流稳定且高效。我的方案我采用了更集成化的“PWM调光色温驱动板”。这种板子通常有两路PWM输入分别对应冷光和暖光接上对应的LED灯带即可。它内部已经集成了恒流电路和MOS管大大简化了我的接线工作。你可以在电商平台搜索“LED调光调色温驱动板”找到它。2.3 系统架构与信号流最终确定的系统架构如下输入层用户语音 - 麦克风 - 语音识别模块。处理层语音模块通过串口(UART)将识别到的指令码发送给STM32主控。STM32根据预设的逻辑解析指令。输出层STM32通过两路PWM引脚输出占空比可调的方波信号给调光驱动板。驱动板根据PWM信号的占空比来调节冷、暖光LED灯带的电流从而实现亮度与色温的控制。供电整个系统采用一颗12V/3A的直流电源适配器供电。12V直接供给LED灯带和驱动板。同时通过一个降压模块如LM2596将12V降为5V为STM32和语音识别模块供电。3. 硬件连接与电路搭建实操理论清晰后动手搭建是关键。这一步的细节决定了项目的稳定性和安全性。3.1 物料清单与工具准备核心物料离线语音识别模块CI1102或LD3320系 x1STM32F103C8T6最小系统板 x1PWM调光调色温LED驱动板 x1高显色指数LED灯带建议冷白、暖白各一米每米60珠 x212V/3A直流电源适配器 x1DC-DC降压模块12V转5V x1化妆镜一面需有边框可隐藏灯带导线、杜邦线、焊锡、热缩管若干。可选电容、电阻用于电源滤波和信号稳定。工具电烙铁、万用表、剥线钳、螺丝刀、热熔胶枪。3.2 分步接线详解与避坑指南接线是硬件部分的核心务必仔细。下图是核心接线示意图文字描述[电源流] 12V适配器正极 —— LED驱动板“VCC”端子 |—— 降压模块“Vin” —— 输出“5V” —— STM32“5V/VCC”引脚 语音模块“VCC” 12V适配器负极 —— LED驱动板“GND-”端子 |—— 降压模块“Vin-” —— 输出“GND” —— STM32“GND”引脚 语音模块“GND” |—— STM32“GND”引脚共地至关重要 [信号流] 语音模块“TX”引脚 —— STM32 “PA10” (USART1_RX) 引脚 语音模块“RX”引脚 —— STM32 “PA9” (USART1_TX) 引脚 注意模块的TX接MCU的RX模块的RX接MCU的TX STM32 “PA0” (PWM通道1) —— LED驱动板 “冷光PWM输入” STM32 “PA1” (PWM通道2) —— LED驱动板 “暖光PWM输入” LED驱动板 “冷光输出” —— 冷白LED灯带正极 LED驱动板 “暖光输出” —— 暖白LED灯带正极 LED驱动板 “COM-” —— 冷白 暖白LED灯带负极并联关键注意事项与实操心得共地共地共地这是所有电子项目中最重要也最易出错的一点。电源的GND、STM32的GND、语音模块的GND、驱动板的GND必须全部连接在一起形成一个共同的参考零电位。否则会导致信号紊乱、模块不工作甚至损坏。我习惯用万用表蜂鸣档在通电前把所有GND点都测一遍确保是通的。电源功率要留足余量。一米60珠的LED灯带在满亮度时功率大约12-15W。两米就是30W。12V*3A36W的电源刚好够用但为了长期稳定建议选择12V/4A或5A的电源。功率不足会导致灯光闪烁或亮度上不去。PWM频率选择。用于调光的PWM频率不能太低否则人眼会感到闪烁也不能太高否则某些驱动板可能响应不佳。一般选择200Hz 到 1kHz之间。我设置在500Hz效果很好。STM32的定时器可以轻松配置这个频率。语音模块的麦克风放置。麦克风不要直接对着喇叭或贴在镜面上容易引起回声和振动干扰。最好用海绵或硅胶套做个简易的减震支架让麦克风孔朝向用户方向并稍微远离镜体。实测下来这能提升约20%的识别率。线材处理。所有电源线12V、5V建议使用较粗的导线如AWG18。信号线PWM、串口可以用细线。所有焊接点务必牢固并用热缩管绝缘防止短路。在镜子背面布线时用扎带或线槽固定避免杂乱。4. 核心程序设计与逻辑实现硬件是躯体程序是灵魂。STM32的程序主要负责两件事与语音模块通信解析指令以及生成PWM信号控制灯光。4.1 串口通信与指令解析语音模块上电后会持续通过串口输出状态信息。当识别到有效指令时会发送一条预设的指令码。我们需要在STM32中设置串口中断来接收并解析这些数据。// 示例代码片段 (基于HAL库) #define VOICE_CMD_ON 0x01 // 假设“开灯”指令码 #define VOICE_CMD_OFF 0x02 // “关灯” #define VOICE_CMD_BRIGHTER 0x03 // “亮一点” #define VOICE_CMD_DARKER 0x04 // “暗一点” #define VOICE_CMD_COLD 0x05 // “冷光模式” #define VOICE_CMD_WARM 0x06 // “暖光模式” uint8_t voice_rx_buffer[10]; uint8_t cmd_received 0; // 串口中断接收回调函数 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if (huart-Instance USART1) { // 简单解析假设指令码是接收到的第一个有效字节 uint8_t cmd voice_rx_buffer[0]; cmd_received cmd; // 重新启动接收中断 HAL_UART_Receive_IT(huart1, voice_rx_buffer, 1); } } // 在主循环中处理接收到的指令 void handle_voice_command(void) { if (cmd_received ! 0) { switch(cmd_received) { case VOICE_CMD_ON: set_power_state(1); // 开启灯光 break; case VOICE_CMD_OFF: set_power_state(0); // 关闭灯光 break; case VOICE_CMD_BRIGHTER: adjust_brightness(10); // 亮度增加10% break; case VOICE_CMD_DARKER: adjust_brightness(-10); // 亮度减少10% break; case VOICE_CMD_COLD: set_color_temperature(COLD_MODE); // 设置为冷光模式 break; // ... 其他指令处理 default: break; } cmd_received 0; // 处理完毕清空指令 } }关键点你需要查阅你所购语音模块的串口协议手册。不同厂商的指令码格式可能不同有的是单字节有的是多字节带校验。上述代码是最简单的单字节指令示例。4.2 PWM调光与色温混合算法这是实现灯光无极调节的核心。我们定义两个全局变量brightness总亮度0-100%和color_ratio色温比例0-100%0代表全暖光100代表全冷光。// 全局变量 uint8_t brightness 50; // 初始亮度50% uint8_t color_ratio 50; // 初始色温中性冷暖各半 // 根据亮度和色温比例计算冷、暖光各自的PWM占空比 void update_pwm_output(void) { // 计算冷光分量总亮度 * 色温比例 uint16_t cold_duty (brightness * color_ratio) / 100; // 计算暖光分量总亮度 * (100 - 色温比例) uint16_t warm_duty (brightness * (100 - color_ratio)) / 100; // 将0-100的百分比映射到0-定时器自动重载值(ARR)的范围 // 假设ARR设置为999则PWM分辨率是0.1% uint16_t cold_pwm (cold_duty * 999) / 100; uint16_t warm_pwm (warm_duty * 999) / 100; // 更新定时器通道的捕获比较寄存器(CCR) __HAL_TIM_SET_COMPARE(htim2, TIM_CHANNEL_1, cold_pwm); // 冷光PWM __HAL_TIM_SET_COMPARE(htim2, TIM_CHANNEL_2, warm_pwm); // 暖光PWM } // 调整亮度函数 void adjust_brightness(int8_t delta) { int16_t new_brightness brightness delta; if (new_brightness 0) new_brightness 0; if (new_brightness 100) new_brightness 100; brightness (uint8_t)new_brightness; update_pwm_output(); } // 设置色温模式函数 void set_color_temperature(ColorMode mode) { switch(mode) { case COLD_MODE: color_ratio 90; // 冷光为主 break; case WARM_MODE: color_ratio 10; // 暖光为主 break; case NATURAL_MODE: color_ratio 50; // 自然光 break; } update_pwm_output(); }算法精髓update_pwm_output函数是实现平滑调光调色的关键。它确保了无论怎么调整总的光通量主观亮度主要由brightness控制而光的颜色冷暖感由color_ratio控制。两者解耦逻辑清晰操作直观。4.3 状态记忆与平滑过渡为了更好的用户体验我们还需要两个功能状态记忆断电再上电后灯光能恢复到上次关闭前的状态。这需要用到STM32的内部Flash或外置EEPROM如24C02来存储brightness和color_ratio。每次调整后写入上电时读取。平滑过渡当切换亮度或色温时不要让灯光突然跳变而是让PWM占空比在几十毫秒内渐变到目标值。这可以创建一个非常柔和、高端的视觉效果。// 简易平滑过渡函数线性插值 void smooth_transition(uint16_t target_cold, uint16_t target_warm, uint16_t duration_ms) { uint16_t current_cold __HAL_TIM_GET_COMPARE(htim2, TIM_CHANNEL_1); uint16_t current_warm __HAL_TIM_GET_COMPARE(htim2, TIM_CHANNEL_2); uint16_t steps duration_ms / 10; // 假设每10ms更新一次 if(steps 0) steps 1; float cold_step (target_cold - current_cold) / (float)steps; float warm_step (target_warm - current_warm) / (float)steps; for(int i0; isteps; i) { current_cold (uint16_t)cold_step; current_warm (uint16_t)warm_step; __HAL_TIM_SET_COMPARE(htim2, TIM_CHANNEL_1, current_cold); __HAL_TIM_SET_COMPARE(htim2, TIM_CHANNEL_2, current_warm); HAL_Delay(10); } // 确保最终值准确 __HAL_TIM_SET_COMPARE(htim2, TIM_CHANNEL_1, target_cold); __HAL_TIM_SET_COMPARE(htim2, TIM_CHANNEL_2, target_warm); }在update_pwm_output函数中计算完目标PWM值后不直接设置而是调用smooth_transition函数传入目标值和过渡时间如200ms即可实现平滑效果。5. 组装、调试与优化心得当电路焊好程序烧录进去就到了最激动人心的组装和调试阶段。这一步决定了项目的最终颜值和用户体验。5.1 镜内布局与走线美学灯带安装将冷白和暖白两条LED灯带紧密并排粘贴在化妆镜边框的内侧确保发光面朝向镜子中心。如果镜子是圆形可能需要使用柔光罩或导光板来让光线更均匀避免出现明显的颗粒感。粘贴前务必清洁边框。设备隐藏STM32最小系统板、语音模块、驱动板、降压模块等可以用双面胶或螺丝固定在镜子背面。建议将它们集中在一块亚克力板或塑料盒内再整体固定既整洁又安全。麦克风开孔在镜子边框或背板不显眼的位置钻一个直径约2-3mm的小孔将语音模块的麦克风对准此孔。可以用一小块防尘网布从内部贴住防止进灰。电源线管理预留好电源适配器的走线路径可以用理线槽或扣固定在镜子背面最后从镜子支架或底部引出。5.2 系统调试与功能验证上电后按以下顺序调试电源测试首先用万用表测量各模块供电电压是否正常STM32和语音模块是否为5V驱动板输入是否为12V。基础灯光测试暂时屏蔽语音程序写一个简单的测试程序让STM32输出固定的PWM测试冷、暖光灯带是否能分别点亮、调光是否平滑。串口通信测试将语音模块的TX线连接到USB转TTL模块的RX用串口助手如XCOM监听。对着麦克风说唤醒词和指令看串口是否能收到正确的指令码。这一步至关重要能确认语音模块本身是否工作正常。集成测试将语音模块与STM32连接烧录完整程序。逐一测试每条语音指令“打开镜子灯”、“调亮一点”、“切换到暖光”、“关闭灯光”。观察灯光响应是否正确、平滑。压力与稳定性测试在相对嘈杂的环境下如打开水龙头测试语音识别率。长时间运行如1小时触摸各芯片温度检查是否有异常发热。5.3 常见问题与排查实录在调试过程中我遇到了几个典型问题这里分享出来希望能帮你快速排雷问题现象可能原因排查步骤与解决方案上电后所有模块无反应1. 电源未接通或损坏。2. 电源线正负极接反。3. 主控芯片未正确复位或启动。1. 用万用表测量电源适配器空载输出电压。2. 检查所有电源接口焊接是否牢固极性是否正确。3. 检查STM32的BOOT0/BOOT1引脚是否处于正常启动模式通常都接地。灯带闪烁或亮度不稳定1. 电源功率不足。2. PWM频率设置过低100Hz。3. 驱动板与灯带接触不良。4. 地线干扰。1. 换用更大功率的电源测试。2. 将PWM频率提高到200Hz以上。3. 重新焊接驱动板输出端与灯带的连接点。4. 确保电源地、驱动板地、MCU地良好共地且导线足够粗。语音模块无反应串口无数据1. 模块供电错误非5V。2. 串口线接反TX/RX交叉。3. 模块未正确初始化或损坏。4. 麦克风被遮挡或损坏。1. 确认模块供电电压为5V±0.2V。2.务必确认模块TX接MCU RX模块RX接MCU TX。3. 查阅模块手册确认是否需要发送初始化指令。有的模块上电即工作有的需要。4. 对着麦克风吹气同时用示波器或逻辑分析仪测TX引脚看是否有数据波形。串口有数据但指令码解析错误1. 波特率不匹配。2. 数据格式不匹配数据位、停止位、校验位。3. 程序解析逻辑错误。1. 语音模块的波特率通常是9600或115200务必与STM32串口初始化设置一致。2. 检查双方串口配置8数据位1停止位无校验。3. 将串口接收到的原始数据打印出来与手册对照修正解析代码。语音识别率低1. 环境噪音过大。2. 麦克风安装位置不佳有遮挡、靠近风扇。3. 指令词设计不合理过于相似或拗口。1. 尽量在安静环境下使用或选择抗噪能力更强的语音模块。2. 重新调整麦克风位置和朝向避开噪声源和反射面。3. 优化指令词如用“亮一些”代替“亮一点”用“白光”代替“冷光”不同指令词音节差异尽量大。灯光切换时有可闻噪音1. PWM频率落在人耳可听范围20Hz-20kHz。2. 驱动板或灯带电感元件在特定频率下啸叫。1. 将PWM频率调整到1kHz以上通常能消除噪音。2. 在驱动板的电源输入端并联一个100uF的电解电容和一个0.1uF的瓷片电容进行滤波。5.4 进阶优化与扩展思路基础功能实现后你可以考虑以下优化让镜子变得更“聪明”增加触摸控制在镜子边框隐藏安装触摸传感器作为语音控制的补充实现轻触开关、长按调光。加入人体感应集成一个红外热释电传感器PIR当人靠近时自动亮灯离开后延时关闭非常省心。实现无线升级OTA如果主控用的是ESP32可以编写一个简单的Web服务器通过手机浏览器就能上传新的固件无需插线烧录。灯光情景模式在程序中预设几个情景如“化妆模式”高亮度、中性色温、“护肤模式”中低亮度、暖色温、“氛围模式”低亮度、暖色温通过语音一键切换。增加时间显示在镜子角落集成一块小型OLED屏显示时间、日期甚至天气预报需联网。这个项目最让我满意的地方不在于技术有多复杂而在于它完美地解决了真实场景下的一个小痛点。从构思、选型、焊接、编程到调试每一步都充满了动手的乐趣和解决问题的成就感。当最后对着镜子说出指令灯光如我所想般变化时那种感觉远比直接买一个智能产品要美妙得多。它不再只是一个工具而是我亲手创造的一个“伙伴”。如果你也心动了不妨就从准备一块语音模块和一面旧镜子开始吧。过程中遇到任何问题欢迎随时来交流那些踩过的坑或许正是通往成功的捷径。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2626263.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…