基于树莓派Pico与TinyML的鸟类鸣叫识别物联网终端全栈开发指南

news2026/5/1 4:15:41
1. 项目概述与核心价值最近在折腾一个挺有意思的物联网项目叫“BirdWeather-PUC”。这个名字乍一看有点专业拆开来看“BirdWeather”直译是“鸟类天气”而“PUC”在项目语境里通常指“Processing Unit Controller”处理单元控制器。简单来说这是一个专门用于鸟类鸣叫识别与天气数据采集的智能硬件终端项目。它的核心目标是让任何一个对观鸟、生态监测或环境数据科学感兴趣的人都能以较低的成本和门槛部署一个7x24小时不间断工作的“自动观鸟站”。这个项目的魅力在于它的跨界融合。它不是一个单纯的硬件DIY也不是一个纯软件的算法应用而是将嵌入式开发、声学信号处理、机器学习和物联网数据上传完整地串联了起来。想象一下你在自家后院、阳台或者某个自然保护区里放置一个这样的小盒子它就能持续监听环境声音自动识别出其中有哪些鸟在叫同时记录下当时的温度、湿度、气压等环境参数最后把这些宝贵的数据同步到云端。这对于鸟类爱好者、生态研究者、甚至是想为社区增添一点科技趣味的开发者来说都是一个极具吸引力的实践。我之所以花时间深入研究并复现这个项目是因为它完美地击中了几大痛点低成本基于树莓派Pico这类廉价微控制器、低功耗适合太阳能供电的长期野外部署、高集成度声音与环境感知二合一以及开源可定制。接下来我将从设计思路、硬件选型、软件实现到部署调优为你完整拆解如何从零打造一个属于自己的BirdWeather-PUC站。2. 整体系统架构与设计思路拆解2.1 核心需求与方案选型一个理想的自动鸟类监测终端需要满足几个核心需求首先是持续的音频采集与边缘计算能力需要能实时处理音频流并进行鸟鸣识别其次是环境数据感知气象数据对于分析鸟类活动规律至关重要然后是低功耗与稳定性很多部署场景没有市电需要依靠电池和太阳能板长期工作最后是数据可靠上传与远程管理采集的数据需要能同步到云端进行可视化与分析。基于这些需求项目作者选择了以下技术方案主控单元树莓派 Pico W。选择它而非性能更强的单板计算机如树莓派4核心考量是功耗和成本。Pico W基于RP2040微控制器功耗极低空闲时仅几十毫瓦且具备Wi-Fi功能价格却只有树莓派4的几分之一。对于以“监听-识别-上传”为主要任务的终端来说其双核ARM Cortex-M0处理器和264KB的SRAM运行一个轻量化的鸟鸣检测模型是足够的。音频采集使用I2S接口的数字麦克风如INMP441。相比于模拟麦克风I2S数字麦能直接输出高质量的数字音频信号避免了额外的ADC转换电路和噪声引入简化了硬件设计也保证了音频输入的质量这对后续的识别准确率至关重要。环境传感器通常选用BME280。这是一颗集成了温度、湿度、气压三合一测量的传感器通过I2C或SPI通信精度高、功耗低且体积小巧非常适合嵌入式环境监测。边缘AI推理这是项目的技术核心。将训练好的鸟类识别TinyML模型通常是TensorFlow Lite for Microcontrollers格式部署到RP2040上运行。模型需要在有限的算力和内存下对音频片段的梅尔频谱图Mel-spectrogram进行快速分类。云端与数据流识别结果和环境数据通过Pico W的Wi-Fi以HTTP POST请求或MQTT协议发送到指定的云端服务器或物联网平台如BirdWeather自己的平台、Thingspeak或自建的服务器。这个架构的精妙之处在于平衡。它没有追求极致的识别精度那需要大型模型和强大算力而是在有限的资源约束下实现了“可用且实用”的自动化监测使得大规模、低成本部署成为可能。2.2 硬件电路设计详解硬件是项目的基石。虽然你可以直接使用面包板搭建原型但为了长期野外部署的稳定性设计一块PCB是更专业的选择。核心电路围绕树莓派Pico W的引脚展开。电源管理部分是整个硬件稳定工作的前提。由于可能采用锂电池太阳能充电板供电需要一个高效的电源管理电路。通常使用一款如TP4056的线性充电管理芯片为锂电池充电并搭配一个低压差稳压器LDO如AMS1117-3.3将电池电压3.7V-4.2V稳定到3.3V为整个系统供电。这里必须注意数字麦克风和传感器对电源噪声比较敏感在它们的VCC引脚附近一定要放置一个0.1uF和10uF的电容进行去耦。音频输入电路以INMP441为例。其关键连接如下VDD接3.3VGND接地。SCK时钟、WS字选择、SD数据分别接Pico W的I2S接口引脚例如GPIO26/SCK, GPIO27/WS, GPIO28/SD。L/R引脚接地设置为左声道模式。 INMP441是主模式设备需要由它来提供时钟给Pico W因此Pico的I2S需配置为从模式。麦克风的灵敏度由背面的焊盘选择默认状态焊盘开路灵敏度为-26dB适合大多数环境。传感器电路以BME280为例。其I2C接口连接非常简单VCC接3.3VGND接地。SCL、SDA分别接Pico W的I2C0或I2C1接口的对应引脚例如GPIO5/SDA, GPIO4/SCL。建议在SCL和SDA线上各加一个4.7kΩ的上拉电阻到3.3V以确保信号完整性。此外PCB上还应预留状态LED、复位按钮以及一个用于深度休眠唤醒的GPIO按钮接口。布局时应尽量将模拟部分麦克风与数字部分主控、电源分开减少干扰。注意在焊接或连接麦克风时静电防护非常重要。INMP441这类MEMS麦克风对静电敏感不当操作容易导致损坏。建议使用防静电手环并在焊接时最后连接麦克风。3. 固件开发与核心软件实现3.1 开发环境搭建与基础工程固件开发主要使用C/C语言在树莓派官方的Pico SDK环境下进行。首先需要在你的电脑Linux、macOS或WSL上安装好Pico SDK、CMake和GCC交叉编译工具链。创建一个基础的工程目录结构包含CMakeLists.txt、pico_sdk_import.cmake以及你的主源文件如main.c。在CMakeLists.txt中需要正确链接pico_stdlib、hardware_i2c、hardware_i2s等必要的库。我个人的习惯是使用VSCode配合CMake Tools插件进行开发编辑和编译体验都很流畅。项目初始化阶段首先要测试各个硬件模块是否正常工作。编写简单的测试程序I2S麦克风测试配置I2S为从模式以16kHz采样率对于鸟鸣识别通常足够从麦克风读取数据并通过串口打印出一些采样值观察是否有变化对着麦克风吹气。BME280测试使用一个现成的驱动库如pimoroni-pico库中的BME280驱动初始化传感器并读取温湿度气压值通过串口输出验证。Wi-Fi测试配置Pico W连接你的本地Wi-Fi尝试ping一个外网地址或者发送一个简单的HTTP GET请求到测试服务器确保网络连通性。这些基础测试通过后才能进行更复杂的集成。3.2 音频采集与预处理流水线鸟鸣识别模型通常处理的是音频的频域特征而非原始波形。因此我们需要在MCU上实现一个实时的音频预处理流水线。步骤一连续音频缓冲使用双缓冲Double Buffer或环形缓冲Ring Buffer来接收I2S数据。当其中一个缓冲填满时例如对应1秒钟的音频16000个样本将其标记为“就绪”供后续处理同时I2S继续向另一个缓冲填充数据。这确保了音频采集的连续性没有遗漏。步骤二生成梅尔频谱图这是最消耗计算资源的步骤。对于每一帧待处理的音频例如960个样本即60毫秒我们需要预加重应用一个高通滤波器如y[n] x[n] - 0.97*x[n-1]来增强高频部分。分帧加窗将音频帧乘以一个汉明窗Hamming Window以减少频谱泄漏。快速傅里叶变换FFT在RP2040上实现一个高效的定点数FFT算法。由于内存限制我们可能只能进行256点或512点的FFT。这决定了频率分辨率。计算梅尔滤波器组将线性频率标度的FFT结果通过一组三角重叠的梅尔滤波器映射到梅尔频率标度上。梅尔标度更接近人耳听觉特性也对鸟鸣这类生物声音的特征提取更友好。通常使用40-80个梅尔带。对数压缩计算每个梅尔带的能量并取对数或近似对数如log(1x)这可以压缩动态范围使特征更鲁棒。最终我们将得到一张二维的梅尔频谱图“图像”其宽度是时间帧数高度是梅尔带数。这就是输入给神经网络的张量。实操心得在资源受限的MCU上FFT和梅尔滤波器组的计算是性能瓶颈。务必使用查找表LUT来存储窗函数和梅尔滤波器系数避免实时计算三角函数和指数。同时探索使用Q格式定点数运算来代替浮点数可以大幅提升速度。3.3 TinyML模型集成与推理优化BirdWeather-PUC的核心智能在于其边缘AI模型。我们通常使用TensorFlow Lite for MicrocontrollersTFLite Micro来部署模型。模型获取与转换你需要一个预先在云端训练好的鸟类识别模型。这个模型通常是一个小型卷积神经网络CNN输入是固定大小的梅尔频谱图如[49, 40, 1]表示49个时间帧40个梅尔带1个通道输出是各类鸟以及“背景噪音”、“非鸟声音”等类别的概率。使用TensorFlow Lite转换器将.h5或.pb格式的模型转换为.tflite格式并进一步使用xxd工具或TFLite Micro提供的转换脚本将其转换为C语言字节数组嵌入到固件中。集成到固件在工程中引入TFLite Micro的库文件这是一个纯C的库需要稍作配置以适配Pico的编译环境。将模型数组声明为一个常量。初始化解释器tflite::MicroInterpreter分配张量内存Tensor Arena。这里有一个关键点Tensor Arena的大小需要仔细调优。分配太小会导致推理失败太大会浪费宝贵的内存。通常从模型所需的最小内存开始尝试逐步增加直到稳定运行。在代码中将预处理好的梅尔频谱图数据转换为一维数组复制到输入张量。调用Invoke()方法执行推理。从输出张量中读取各类别的得分应用一个阈值例如0.7只有当最高得分超过阈值时才认为检测到有效的鸟鸣并记录对应的鸟种。推理性能优化使用CMSIS-NN库如果TFLite Micro编译时启用了CMSIS-NN支持并且模型算子兼容它可以利用ARM Cortex-M系列处理器的特定指令进行加速显著提升推理速度。操作符裁剪使用TFLite的模型优化工具包尝试进行量化如INT8量化。量化后的模型体积更小、推理更快但可能会轻微损失精度。对于鸟鸣识别INT8量化通常是可接受的。调整输入分辨率如果模型输入频谱图尺寸过大可以考虑降低时间帧数或梅尔带数以牺牲一点精度换取更快的推理速度和更低的内存占用。3.4 数据上传、电源管理与状态机系统需要一个清晰的状态机来协调采集、识别、上传和休眠。主循环状态机设计typedef enum { STATE_SLEEP, // 深度休眠等待定时器或外部中断唤醒 STATE_COLLECT, // 采集一段时间的音频和环境数据 STATE_PROCESS, // 处理音频运行AI推理 STATE_UPLOAD, // 连接Wi-Fi并上传结果 STATE_ERROR // 错误处理 } system_state_t;低功耗策略深度休眠在STATE_SLEEP状态下调用sleep_ms()或更底层的休眠函数并配置RTC定时器在设定的间隔后唤醒例如每10分钟唤醒一次。此时大部分外设和CPU核心都会关闭功耗可降至微安级别。外设电源管理在进入休眠前通过GPIO控制一个MOSFET开关彻底切断对麦克风、传感器等外设的供电。唤醒后再重新上电初始化。这比单纯让外设待机更省电。Wi-Fi连接管理Wi-Fi连接和维持是耗电大户。策略是仅在STATE_UPLOAD状态下才连接Wi-Fi。上传完成后立即断开连接。可以考虑在信号好的地方适当增加单次上传的数据包大小减少连接次数。数据上传格式 上传的数据通常是一个JSON对象包含时间戳、设备ID、识别结果列表鸟种、置信度、环境数据温度、湿度、气压以及可能的原始音频片段用于云端复核。使用一个轻量级的JSON库如jsmn或手写序列化来构建这个数据包然后通过HTTP POST发送到云端API端点。注意事项网络通信必须要有重试和超时机制。野外环境网络不稳定一次上传失败是常态。代码中需要实现指数退避的重试逻辑并在多次失败后将数据暂存到外部EEPROM或Flash中如果硬件支持等待下次网络恢复时再上传避免数据丢失。4. 模型训练与数据集构建要点虽然项目本身侧重于部署但一个准确的模型是系统价值的核心。这里简要分享边缘侧鸟鸣识别模型训练的关键。数据集是关键你需要一个标注好的鸟鸣音频数据集例如Xeno-canto、BirdVox-DCASE或自定义采集的数据。数据需要处理成统一的格式如16kHz采样率单声道WAV文件并进行切片获取包含鸟鸣的片段正样本和不包含的片段负样本/背景音。数据增强为了提升模型的泛化能力必须对训练数据进行增强。包括时间拉伸和压缩轻微改变音频速度。音高偏移Pitch Shift。添加背景噪声如风声、雨声、城市噪音。随机增益调整。模型结构选择对于MCU部署模型必须小巧。常见的结构包括MobileNetV1/V2的1D或2D变体将频谱图视为图像输入。DS-CNNDepthwise Separable CNNTFLite Micro官方推荐的轻量模型结构。自定义的简单CNN几层卷积、池化最后接全连接层。结构可能像这样Conv2D - BatchNorm - ReLU - MaxPool - ... - Flatten - Dense。训练技巧使用梅尔频谱图作为输入特征。采用分类任务每个鸟种是一个类别外加“背景”或“未知”类别。损失函数使用分类交叉熵。由于不同鸟类的样本数量可能极不均衡常见鸟 vs 稀有鸟需要考虑使用类别权重或焦点损失Focal Loss来缓解。训练完成后务必在独立的测试集和真实野外录音上评估模型性能而不仅仅是验证集。模型量化训练浮点模型后使用TFLite的训练后动态范围量化或整数量化工具将模型转换为INT8格式。量化会引入微小精度损失但能极大减少模型体积和加速推理。务必在量化后重新评估精度。5. 系统集成、部署与实地调优5.1 外壳设计与环境防护一个可靠的野外部署离不开坚固的外壳。设计时需考虑防水防尘至少达到IP65等级。麦克风开孔处需要使用专业的防水透声膜如戈尔特斯声学布既能防止水汽进入又对声音衰减影响最小。散热与透气虽然功耗低但在阳光直射下密闭空间仍会升温。外壳需有散热设计同时防止结露。BME280传感器所在腔体最好有小的通气孔并用防尘网覆盖以确保气象数据准确。麦克风风噪处理野外风噪是音频采集的大敌。必须在麦克风开孔处安装一个泡沫防风罩甚至设计一个迷宫式风道来有效衰减风噪同时不影响鸟鸣频率的拾取。电源接口预留防水接口给太阳能板和电池。安装方式设计卡扣或螺丝孔便于固定在柱子、树干或墙面上。5.2 太阳能供电系统计算对于全年无休的部署太阳能供电是必须的。需要进行简单的能量预算计算日均功耗休眠电流假设为100uA (0.1mA) 3.7V。工作电流包含MCU、麦克风、传感器、Wi-Fi激活状态假设平均为120mA 3.7V。工作占空比假设每10分钟工作1分钟采集处理上传则占空比为10%。日均功耗估算休眠功耗0.1mA * 24h * 90% ≈ 2.16 mAh工作功耗120mA * 24h * 10% ≈ 288 mAh总功耗 ≈ 290 mAh / 天。电池容量选择考虑到阴雨天需要至少3-5天的续航储备。以5天计需要电池容量 ≥ 290mAh/天 * 5天 1450mAh。选择一块常见的18650锂电池容量约3000mAh绰绰有余。太阳能板功率选择假设平均有效日照时间为4小时/天。需要太阳能板在4小时内为电池补充一天消耗的电量290mAh并留有余量。所需充电电流290mAh / 4h ≈ 73mA。考虑到充电效率约70%实际需要板子提供约 73mA / 0.7 ≈ 104mA 的充电电流。在3.7V系统电压下所需太阳能板功率约为 3.7V * 0.104A ≈ 0.38W。为应对冬季日照减弱建议选择2W - 5W的太阳能板以确保在多数天气条件下都能保持电池满电。5.3 现场部署与参数调优部署不是一放了之需要现场调试增益校准通过软件调整I2S麦克风的数字增益或代码中的放大系数确保在典型环境声下音频信号的幅值在ADC量程的30%-70%之间既不过载也不至于太小。识别阈值调整模型输出的置信度阈值需要根据现场背景噪音水平进行调整。在非常安静的自然保护区阈值可以设低一些如0.6以提高灵敏度在城市公园背景噪音复杂阈值需要调高如0.8以减少误报。上传策略优化根据现场网络信号强度GSM/Wi-Fi调整上传重试次数和超时时长。信号极弱的地方可以改为每小时或每天集中上传一次数据减少频繁连接失败的耗电。日志与诊断固件中应保留一个通过串口输出的详细日志模式部署初期打开用于监控系统状态、识别结果和网络状况便于远程诊断问题。6. 常见问题排查与维护心得在实际部署和运行中你肯定会遇到各种问题。下面是一些典型问题及排查思路问题现象可能原因排查步骤与解决方案设备无法启动/无限重启1. 电源电压不稳或不足。2. 电池电量耗尽。3. 软件死循环或看门狗触发。1. 用万用表测量电池电压和LDO输出确保在3.3V±5%。2. 连接充电器或太阳能板检查充电管理芯片状态。3. 通过串口调试输出检查程序卡在哪个初始化步骤。启用硬件看门狗并确保及时喂狗。采集不到音频或全是噪声1. I2S接线错误或时钟不匹配。2. 麦克风损坏或供电异常。3. 防风罩过厚导致声音衰减严重。4. 软件采样率配置错误。1. 用逻辑分析仪检查I2S的SCK, WS, SD信号线是否有正确波形。2. 测量麦克风VDD电压更换麦克风测试。3. 临时移除防风罩测试。4. 核对代码中I2S配置的采样率与麦克风规格书是否一致。鸟鸣识别率极低1. 模型不适合当地鸟种。2. 现场环境噪音风、流水、昆虫干扰大。3. 音频预处理参数FFT点数、梅尔带数与模型训练时不匹配。4. 置信度阈值设置不当。1. 收集本地鸟鸣音频对模型进行微调迁移学习。2. 改进物理防风降噪措施或在软件中增加噪声抑制算法如谱减法。3. 确保部署的预处理代码与模型训练时的特征提取管道完全一致。4. 在后台查看原始置信度分数动态调整阈值。Wi-Fi频繁连接失败1. 信号强度弱RSSI低。2. Wi-Fi密码错误或网络配置变更。3. 路由器设置了MAC地址过滤。4. 并发连接数过多。1. 在代码中打印RSSI值考虑调整设备位置或增加外置天线。2. 重新检查Wi-Fi SSID和密码配置。3. 将设备的MAC地址加入路由器白名单。4. 简化上传协议使用更轻量的UDP或CoAP如果服务器支持并增加连接重试间隔。数据上传成功但云端收不到1. 服务器API地址或端口错误。2. 数据格式不符合服务器要求。3. 服务器防火墙或安全组规则限制。4. 设备时钟错误导致时间戳异常被服务器拒绝。1. 使用电脑上的curl或Postman工具模拟设备发送的数据包测试API是否正常。2. 仔细对照服务器API文档检查JSON字段名和类型。3. 检查服务器端的网络配置。4. 集成NTP客户端在每次上传前同步网络时间。电池耗电极快无法坚持一天1. 休眠模式未正确进入电流过大。2. Wi-Fi模块未彻底断电或关闭。3. 传感器、麦克风等外设休眠时未断电。4. 太阳能板功率不足或损坏未能有效充电。1. 使用电流表串联测量设备在“休眠状态”下的实际电流应低于1mA。检查代码中是否调用了正确的深度休眠函数。2. 确保在代码中调用了Wi-Fi断开和关闭射频的函数。3. 检查控制外设电源的MOSFET开关电路是否正常工作。4. 在晴天测量太阳能板的开路电压和短路电流判断其是否正常。清洁太阳能板表面。维护建议定期远程检查通过云端数据接收频率和设备心跳包监控设备在线状态。固件空中升级实现OTA功能至关重要。可以设计一个简单的Bootloader让设备定期从指定服务器检查并下载新的固件文件进行更新以便修复bug或升级模型。数据质量复核定期人工收听设备上传的原始音频片段评估识别准确性为模型迭代提供依据。物理维护每季度或每半年进行一次现场维护清理麦克风防风罩上的灰尘、蜘蛛网检查外壳密封性紧固安装支架。打造一个稳定运行的BirdWeather-PUC站是一个不断迭代和优化的过程。从最初的原型到最终能稳定运行数月的成品中间会遇到无数细节上的挑战。但当你第一次在云端看到设备自动识别并记录下一种稀有鸟类的鸣叫并与当时的气压变化关联起来时那种成就感是无可比拟的。这个项目不仅是一个技术实践更是连接技术与自然观察的桥梁。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2570899.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;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…