行空板Python实战:GNSS模块连接与NMEA协议解析全攻略
1. 项目缘起为什么要在行空板上折腾卫星导航最近在捣鼓一个户外数据采集的小项目核心需求是设备能自主记录精确的地理位置和时间戳。市面上现成的GPS模块和开发板方案很多但要么体积功耗感人要么二次开发不够灵活。直到我看到了行空板这块集成了丰富传感器和Python环境的国产开源硬件让我眼前一亮——它本身没有GPS但预留了标准的UART串口这不正好是连接外置GNSS模块的绝佳平台吗用Python在行空板上实现卫星导航听起来像是个“缝合怪”项目但实际意义不小。行空板基于高性能微控制器运行着阉割版的MicroPython其交互性和易用性远超传统的嵌入式C开发。这意味着你可以用写脚本的方式快速解析NMEA协议、处理经纬度数据、甚至结合板载的Wi-Fi/蓝牙做数据回传或地理围栏开发效率是指数级提升。对于物联网原型验证、教育实验、或者需要快速集成定位功能的创客项目来说这无疑是一条捷径。不过这条路也并非一片坦途。MicroPython的生态和性能与桌面Python有差距GNSS模块的选型、供电、天线摆放都直接影响定位效果NMEA数据的实时解析与处理也需要一些技巧。接下来我就结合自己的踩坑经历把从硬件连接到软件解析再到数据应用的完整链条拆解清楚。2. 硬件选型与连接不只是“接上线”那么简单实现卫星导航功能硬件是地基。行空板作为主机我们需要为其挑选一个合适的“眼睛”——GNSS模块。2.1 GNSS模块怎么选市面上常见的模块主要分两类纯GPS模块和支持多模如GPS北斗GLONASS的GNSS模块。对于国内项目强烈建议选择支持北斗的模块因为在国内上空北斗卫星的可见性和信号强度通常更有优势定位速度和精度会更好。我这次选用的是ATGM336H这是一款性价比很高的国产模块支持GPS、北斗、GLONASS、Galileo、QZSS五大系统。除了定位系统还要关注几个关键参数刷新率常见有1Hz、5Hz、10Hz。对于车辆导航、无人机等高速移动物体高刷新率很重要。但对于大多数数据记录应用1Hz完全足够功耗也更低。定位精度模块标称的定位精度如2.5米CEP只是一个理想值。实际精度受天线、环境、天空开阔度影响巨大。通信协议绝大多数模块都通过UART串口输出标准的NMEA-0183协议数据这是我们的软件能够解析的前提。需要确认模块的默认波特率常见的是9600或115200。供电电压行空板的GPIO口输出电压通常是3.3V务必选择支持3.3V逻辑电平的模块否则需要电平转换。注意购买模块时最好选择已经焊接好邮票孔或排针的版本并顺便买一条配套的“GPS有源天线”。天线至关重要其增益和性能直接决定了能否在室内或城市峡谷中收到信号。2.2 与行空板的物理连接行空板提供了多个UART接口我们通常使用UART1或UART2因为它们对应的引脚已引出到边缘的Grove接口或排针上方便连接。以使用UART1为例它的引脚对应关系是TX(行空板发送端) - 连接 GNSS模块的RX(接收端)RX(行空板接收端) - 连接 GNSS模块的TX(发送端)GND- 连接 GNSS模块的GND3V3- 连接 GNSS模块的VCC这里有一个极易出错的点交叉连接。行空板的TX应该接模块的RX行空板的RX接模块的TX这样数据才能正确收发。接反了会导致通信完全失败。我的习惯是先用杜邦线连接好再用万用表通断档确认TX-RX是交叉相连的。供电方面务必确认模块的电流需求。大部分GNSS模块在工作时峰值电流可能达到50mA行空板的3.3V输出引脚需要能提供足够的电流。将天线连接到模块的“天线接口”上并尽可能将天线放置在金属遮挡少、天空视野开阔的位置。车窗边、屋顶、户外是理想环境。3. 软件环境搭建与串口通信硬件连通后下一步就是在行空板的MicroPython环境中编写代码来读取数据。3.1 行空板Python环境初探行空板开机后可以通过USB连接电脑使用Mu Editor、Thonny等支持MicroPython的IDE进行编程。首先我们需要导入必要的机器machine模块来操作硬件。from machine import UART, Pin import timeUART类用于串口通信Pin类用于控制引脚虽然本项目不一定用到但常备无患time用于延时和计时。3.2 初始化UART并读取原始数据初始化UART1参数需要与你的GNSS模块匹配。假设模块波特率为9600。# 初始化UART1波特率96008位数据位无校验1位停止位 # TX引脚是行空板上的Pin.8 RX引脚是Pin.9根据行空板具体型号确认 uart1 UART(1, baudrate9600, txPin(8), rxPin(9)) uart1.init(9600, bits8, parityNone, stop1, timeout1000)timeout参数设置为1000毫秒很重要它指定了读取数据时的超时时间。设置一个合理的超时可以避免read()函数一直阻塞。接下来我们可以尝试循环读取原始数据while True: if uart1.any(): # 检查是否有数据在缓冲区 raw_data uart1.read() # 读取所有可用数据 if raw_data: # 将字节数据转换为字符串 try: data_string raw_data.decode(utf-8) print(data_string, end) except UnicodeDecodeError: # 偶尔会有乱码直接跳过 pass time.sleep(0.1) # 短暂休眠避免CPU占用率100%运行这段代码如果一切正常你应该在串口终端里看到源源不断的、以$符号开头的文本数据流例如$GNGGA,114153.00,3110.76123,N,12123.45678,E,1,08,1.01,45.6,M,,M,,*6A $GNRMC,114153.00,A,3110.76123,N,12123.45678,E,0.05,120.5,270324,,,A*7D这就是NMEA-0183协议数据。每一行称为一个“语句”以逗号分隔不同字段以*后跟两位校验和结束。不同的语句前缀如GGA,RMC包含了不同类型的信息。3.3 处理串口读取中的坑在实际操作中直接read()可能会遇到问题。因为NMEA数据是持续不断发送的read()函数可能会在一条语句的中间被调用导致读到的数据是半条语句解析时就会出错。更稳健的做法是使用readline()方法它会一直读取直到遇到换行符\n从而保证每次获取的都是一条完整的NMEA语句。修改上面的读取部分while True: # 使用 readline 确保读取完整的一行 raw_line uart1.readline() if raw_line: try: line raw_line.decode(utf-8).strip() if line.startswith($): # 简单过滤有效数据 print(line) # 这里可以调用解析函数 # parse_nmea_sentence(line) except Exception as e: print(Decode error:, e) time.sleep(0.05)使用readline()并检查起始字符$能极大地提高数据处理的可靠性。4. NMEA协议解析从字符串到有意义的信息拿到了原始的NMEA字符串下一步就是从中提取出我们关心的经纬度、时间、速度、卫星数等信息。我们需要根据不同的语句类型来编写解析函数。4.1 认识核心NMEA语句对于基础定位应用最常用的两条语句是GxGGA(Global Positioning System Fix Data)全球定位系统定位信息。它提供了最核心的定位结果包括时间、纬度、经度、定位状态、使用的卫星数量、水平精度因子(HDOP)、海拔高度等。x可以是N(GNSS)、P(GPS)等取决于模块输出配置。GxRMC(Recommended Minimum Specific GNSS Data)推荐最小定位信息。它包含了时间、定位状态、纬度、经度、地面速率速度、地面航向对地真北方向角、日期、磁偏角等。RMC语句的特点是包含了日期和速度对于轨迹记录应用非常有用。4.2 编写GGA语句解析函数我们来详细解析一条GNGGA语句$GNGGA,114153.00,3110.76123,N,12123.45678,E,1,08,1.01,45.6,M,,M,,*6A字段索引示例值含义0$GNGGA语句头1114153.00UTC时间格式为hhmmss.ss23110.76123纬度格式为ddmm.mmmmm3N纬度半球N(北纬)或S(南纬)412123.45678经度格式为dddmm.mmmmm5E经度半球E(东经)或W(西经)61定位状态0无效1单点定位2差分定位等708正在使用的卫星数量81.01水平精度因子(HDOP)值越小精度越高945.6海拔高度10M海拔高度单位米......后续字段大地水准面起伏等常为空注意经纬度的格式是“度分”格式。需要将其转换为通用的十进制度数。转换公式为十进制度数 度 分 / 60例如3110.76123- 度 31分 10.76123- 十进制纬度 31 10.76123/60 31.17935383基于此我们可以编写解析函数def parse_gga(nmea_line): 解析GGA语句 if not nmea_line.startswith($GNGGA) and not nmea_line.startswith($GPGGA): return None # 不是GGA语句 parts nmea_line.split(,) if len(parts) 10: return None try: # 解析时间 utc_time parts[1] if utc_time: hour int(utc_time[0:2]) minute int(utc_time[2:4]) second float(utc_time[4:]) time_str f{hour:02d}:{minute:02d}:{second:05.2f} else: time_str None # 解析纬度 lat_str parts[2] lat_dir parts[3] if lat_str and lat_dir: lat_deg float(lat_str[0:2]) lat_min float(lat_str[2:]) latitude lat_deg lat_min / 60.0 if lat_dir S: latitude -latitude else: latitude None # 解析经度 lon_str parts[4] lon_dir parts[5] if lon_str and lon_dir: lon_deg float(lon_str[0:3]) # 经度度数是3位 lon_min float(lon_str[3:]) longitude lon_deg lon_min / 60.0 if lon_dir W: longitude -longitude else: longitude None # 定位状态 fix_status int(parts[6]) if parts[6] else 0 # 卫星数量 satellites int(parts[7]) if parts[7] else 0 # HDOP hdop float(parts[8]) if parts[8] else 99.9 # 海拔 altitude float(parts[9]) if parts[9] else 0.0 return { sentence: GGA, time: time_str, latitude: latitude, longitude: longitude, fix_status: fix_status, # 0无效1有效 satellites_used: satellites, hdop: hdop, altitude: altitude, raw: nmea_line } except (ValueError, IndexError) as e: print(f解析GGA语句出错: {e}, 原始数据: {nmea_line}) return None4.3 编写RMC语句解析函数同样地我们解析GNRMC语句$GNRMC,114153.00,A,3110.76123,N,12123.45678,E,0.05,120.5,270324,,,A*7D字段索引示例值含义0$GNRMC语句头1114153.00UTC时间2A状态A有效定位V无效定位33110.76123纬度4N纬度半球512123.45678经度6E经度半球70.05地面速率节8120.5地面航向度9270324UTC日期格式为ddmmyy10磁偏角通常为空11磁偏角方向12A模式指示A自主定位D差分等RMC解析函数与GGA类似但增加了速度、航向和日期的解析。速度单位是“节”(knots)1节1.852公里/小时通常我们需要转换一下。def parse_rmc(nmea_line): 解析RMC语句 if not nmea_line.startswith($GNRMC) and not nmea_line.startswith($GPRMC): return None parts nmea_line.split(,) if len(parts) 13: return None try: # 状态检查 status parts[2] if status ! A: return {sentence: RMC, status: Invalid, raw: nmea_line} # 解析时间 (同GGA) # 解析经纬度 (同GGA代码复用略) # ... # 地面速率节 - 米/秒 speed_knots float(parts[7]) if parts[7] else 0.0 speed_ms speed_knots * 0.514444 # 转换系数 # 地面航向 course float(parts[8]) if parts[8] else 0.0 # 解析日期 date_str parts[9] if date_str: day int(date_str[0:2]) month int(date_str[2:4]) year 2000 int(date_str[4:6]) # 假设是20xx年 date_formatted f{year:04d}-{month:02d}-{day:02d} else: date_formatted None # 模式指示 mode parts[12][0] if parts[12] else N # N无数据 return { sentence: RMC, status: Valid, time: time_str, # 从前面解析得来 latitude: latitude, longitude: longitude, speed_knots: speed_knots, speed_ms: speed_ms, course: course, date: date_formatted, mode: mode, raw: nmea_line } except (ValueError, IndexError) as e: print(f解析RMC语句出错: {e}) return None4.4 整合解析与主循环现在我们将读取和解析整合到一个主循环中并设计一个简单的数据管理器可以选择性地输出或存储我们需要的信息。class SimpleGPS: def __init__(self, uart_port1, baudrate9600): self.uart UART(uart_port, baudratebaudrate, txPin(8), rxPin(9)) self.uart.init(baudrate, timeout1000) self.last_fix {latitude: None, longitude: None, time: None, altitude: None} self.current_data {} def update(self): 读取并解析最新的一行数据 raw_line self.uart.readline() if not raw_line: return False try: line raw_line.decode(utf-8).strip() except UnicodeDecodeError: return False # 根据语句类型调用不同的解析器 if line.startswith($GNGGA) or line.startswith($GPGGA): data parse_gga(line) if data and data[fix_status] 0: # 定位有效 self.last_fix.update({ latitude: data[latitude], longitude: data[longitude], time: data[time], altitude: data[altitude] }) self.current_data[gga] data return True elif line.startswith($GNRMC) or line.startswith($GPRMC): data parse_rmc(line) if data and data[status] Valid: self.current_data[rmc] data # 可以用RMC的数据更新位置如果GGA没收到 if self.last_fix[latitude] is None: self.last_fix.update({ latitude: data[latitude], longitude: data[longitude], time: data[time] }) return True return False def get_last_fix(self): 获取最后一次有效定位信息 return self.last_fix.copy() # 主程序 gps SimpleGPS() print(开始监听GPS数据...) try: while True: if gps.update(): fix gps.get_last_fix() if fix[latitude]: print(f位置: {fix[latitude]:.6f}, {fix[longitude]:.6f}, 时间: {fix[time]}, 海拔: {fix[altitude]}m) time.sleep(0.1) # 控制循环频率 except KeyboardInterrupt: print(\n程序退出)这个简单的类封装了串口通信和基础解析并维护了最后一次有效定位的信息。在主循环中我们不断调用update()方法一旦解析到有效数据就打印出来。5. 进阶应用与性能优化基础解析跑通后我们可以基于此构建更实用的应用并解决一些实际遇到性能问题。5.1 应用场景一轨迹记录器一个典型的应用是将定位数据连同传感器数据如行空板上的加速度计、温湿度传感器一起以固定时间间隔记录到SD卡或文件中。import json import os def log_track_point(gps_data, sensor_dataNone, filename/sd/track.log): 记录一个轨迹点到文件 log_entry { timestamp: time.time(), # 系统时间戳 utc_time: gps_data.get(time), lat: gps_data.get(latitude), lon: gps_data.get(longitude), alt: gps_data.get(altitude), speed: gps_data.get(speed_ms), course: gps_data.get(course), hdop: gps_data.get(hdop), sats: gps_data.get(satellites_used) } if sensor_data: log_entry.update(sensor_data) # 以JSON格式追加写入方便后续处理 try: with open(filename, a) as f: f.write(json.dumps(log_entry) \n) except OSError: print(写入文件失败请检查SD卡)在主循环中可以设置一个定时器例如每5秒记录一次有效定位点避免数据过于密集。同时要注意文件系统的写入操作比较耗时频繁写入可能会阻塞GPS数据的读取导致数据丢失。可以考虑使用缓冲区积累一定数量的点后再批量写入。5.2 应用场景二简单的导航与地理围栏利用解析出的经纬度可以计算两点之间的距离如使用Haversine公式或者判断当前点是否进入/离开某个预设的圆形或矩形区域地理围栏。这对于资产追踪、电子打卡等应用非常有用。import math def haversine_distance(lat1, lon1, lat2, lon2): 计算两个经纬度坐标之间的球面距离米 R 6371000 # 地球平均半径单位米 phi1 math.radians(lat1) phi2 math.radians(lat2) delta_phi math.radians(lat2 - lat1) delta_lambda math.radians(lon2 - lon1) a math.sin(delta_phi/2)**2 math.cos(phi1)*math.cos(phi2)*math.sin(delta_lambda/2)**2 c 2 * math.atan2(math.sqrt(a), math.sqrt(1-a)) return R * c def in_geofence(current_lat, current_lon, fence_center_lat, fence_center_lon, radius_m): 判断当前点是否在圆形地理围栏内 distance haversine_distance(current_lat, current_lon, fence_center_lat, fence_center_lon) return distance radius_m5.3 性能优化与常见问题排查在MicroPython环境下性能是需要考虑的问题。解析NMEA字符串、进行浮点数计算如Haversine公式都是CPU密集型操作。优化解析逻辑在主循环中避免在每次update时都进行完整的字符串分割和浮点转换。可以先进行简单的头部检查startswith只有确定是需要处理的语句类型才进行完整解析。使用_thread模块谨慎对于更复杂的应用可以考虑使用_thread模块创建一个单独的线程来负责读取串口数据并放入队列主线程从队列中取出数据进行处理和记录。但这会显著增加代码复杂度且MicroPython的线程支持有限容易引入同步问题。对于大多数应用单线程配合非阻塞读取readlinewith timeout已经足够。内存管理持续运行的程序要注意内存泄漏。避免在循环中不断创建大的对象如长列表。使用gc.collect()可以手动触发垃圾回收但不宜过于频繁。冷启动与热启动GNSS模块在完全断电后首次定位冷启动可能需要几十秒到几分钟。如果只是短暂断电热启动因为星历数据部分保存定位会快很多。在程序初始化后需要有一个等待有效定位的状态判断而不是立即认为定位失败。“漂移”与精度问题静态时坐标在小范围内跳动是正常现象这是由卫星信号的多路径效应、大气延迟等造成的。可以通过软件滤波来平滑数据例如取一段时间内的坐标平均值。HDOP值是一个很好的参考HDOP2.0时定位精度会显著下降此时的数据可信度较低。6. 天线摆放、供电与信号质量提升实战硬件部署是决定项目成败的最后一步也是新手最容易忽略的一环。6.1 天线定位系统的“耳朵”GNSS天线分为有源和无源两种。有源天线内部集成了低噪声放大器LNA能显著增强微弱的卫星信号是绝大多数模块的标配。使用时请注意朝向天空天线接收面通常是陶瓷片一面必须朝向天空尽可能无遮挡。金属物体会严重屏蔽信号所以不要放在金属盒内或紧贴金属表面。远离干扰源尽量远离行空板、电源模块、电机驱动器等可能产生电磁噪声的部件。可以将天线通过延长线引到设备外部。固定牢固在移动应用中天线的晃动会影响信号接收。使用磁吸底座或3M胶将其牢固粘贴在车顶、外壳顶部等位置。6.2 供电稳定性的影响GNSS模块对电源噪声非常敏感。不干净的电源会导致模块工作不稳定甚至无法定位。独立LDO供电如果条件允许不要直接从行空板的3.3V引脚取电而是使用一个独立的低压差线性稳压器LDO为GNSS模块供电。这能有效隔离数字电路的噪声。电源去耦在模块的VCC和GND引脚之间尽可能靠近引脚的地方焊接一个10uF的钽电容和一个0.1uF的陶瓷电容用于滤除高低频噪声。很多模块板上已经集成如果没有自己加上会大大提升稳定性。检查电压用万用表测量模块供电引脚的实际电压确保在额定范围内如3.3V±0.2V。电压过低会导致模块无法启动或频繁重启。6.3 实战信号调试技巧当你发现定位慢、卫星数少、HDOP值高时可以按以下步骤排查查看原始NMEA数据除了GGA和RMC让模块输出GxGSV语句查看可见卫星信息。这条语句会列出天空中可以“看到”的每颗卫星的编号、仰角、方位角和信噪比SNR。信噪比是衡量信号质量的关键一般高于40dB-Hz算好信号低于30dB-Hz可能无法用于定位。通过GSV语句你可以直观地看到哪些方向的卫星信号弱。改变天线位置这是提升效果最直接的方法。哪怕只是将天线从桌面移到窗台卫星数和信噪比都可能大幅改善。耐心等待冷启动后模块需要时间下载星历数据。首次定位请给予至少1-2分钟时间。可以在程序中加入一个“等待有效定位”的循环直到fix_status变为1或GGA语句中的卫星数大于等于4再开始记录数据。检查波特率确保行空板UART的波特率与模块输出的波特率完全一致。如果不确定可以尝试常见的9600, 19200, 38400, 57600, 115200。有些模块支持通过特定指令修改波特率但需要查阅其数据手册。通过以上从硬件到软件从原理到实战的完整梳理你应该已经掌握了在行空板上用Python玩转卫星导航的核心技能。这个过程本质上是一个典型的嵌入式传感器集成案例其思路——硬件连接、协议解析、数据处理、应用开发——可以迁移到很多其他传感器上。最关键的是动手去试把模块接上看着终端里滚动的数据变成屏幕上的坐标点时那种成就感才是创客项目最大的乐趣。

相关新闻

基于STM32L4与Memory LCD的超低功耗电子怀表设计与实现

基于STM32L4与Memory LCD的超低功耗电子怀表设计与实现

1. 项目概述:从复古情怀到现代数字工艺最近在捣鼓一个挺有意思的小玩意儿,我把它叫做“DigiPclock”,直译过来就是“数字口袋钟”,但我更愿意称它为“电子怀表”。这玩意儿乍一听有点矛盾,怀表不都是机械的、带表链的吗…

2026/7/28 9:24:39 阅读更多 →
ESP32驱动ST7735彩屏制作太空人透明时钟:从SPI通信到UI动画全解析

ESP32驱动ST7735彩屏制作太空人透明时钟:从SPI通信到UI动画全解析

1. 项目缘起:从一块闲置彩屏到桌面小摆件手头有几块之前做项目剩下的ESP32开发板和1.14寸的ST7735彩屏,一直躺在零件盒里吃灰。某天刷到一些桌面透明时钟的创意,突然想到,能不能用这些现成的硬件,自己做一个有特色的桌…

2026/7/28 9:24:39 阅读更多 →
CVE-2023-21746已修复,LocalPotato仍可通过HTTP/WebDAV攻击:最新漏洞状态分析

CVE-2023-21746已修复,LocalPotato仍可通过HTTP/WebDAV攻击:最新漏洞状态分析

CVE-2023-21746已修复,LocalPotato仍可通过HTTP/WebDAV攻击:最新漏洞状态分析 【免费下载链接】LocalPotato 项目地址: https://gitcode.com/gh_mirrors/lo/LocalPotato LocalPotato(也称为CVE-2023-21746 & HTTP/WebDAV&#xf…

2026/7/28 9:23:39 阅读更多 →

最新新闻

GTA5线上小助手:解锁洛圣都无限可能的免费开源神器

GTA5线上小助手:解锁洛圣都无限可能的免费开源神器

GTA5线上小助手:解锁洛圣都无限可能的免费开源神器 【免费下载链接】GTA5OnlineTools GTA5线上小助手 项目地址: https://gitcode.com/gh_mirrors/gt/GTA5OnlineTools 还在为GTA5线上模式的重复任务感到枯燥吗?想要自定义角色外观却无从下手&…

2026/7/28 9:40:45 阅读更多 →
快手7月资本与业务动作不断:老业务收权、新业务分家,电商能否破局?

快手7月资本与业务动作不断:老业务收权、新业务分家,电商能否破局?

【快手7月:资本与业务的双重震荡】 7月的快手,如同一台同时踩下油门和刹车的车。7月2日,快手旗下可灵AI宣布完成近30亿美元首轮融资,投后估值约180亿美元,腾讯是联合领投方之一。然而,四天后的7月6日深夜&a…

2026/7/28 9:40:45 阅读更多 →
Claude Design:从副项目到百万人使用的工具,AI 时代设计师的破局之路

Claude Design:从副项目到百万人使用的工具,AI 时代设计师的破局之路

Claude Design:卷出来的「副项目」Claude Design 竟是一个卷出来的「副项目」,它的背后是两个工程师和一个设计师之间的故事。故事始于 2025 年 11 月 Opus 4.5 的发布,那时 Nate Parrott 是 Claude Code 那个 VS Code 项目里唯一的设计师&am…

2026/7/28 9:40:45 阅读更多 →
“百镜大战”雷声大雨点小,智能眼镜厂商为何纷纷舍弃高性能选择轻量化?

“百镜大战”雷声大雨点小,智能眼镜厂商为何纷纷舍弃高性能选择轻量化?

智能眼镜“待爆”,轻量化成新趋势2024年末起消费电子领域就流传“百镜大战”预言,然而一年半过去,智能眼镜品类仍雷声大雨点小。从业者认为“轻量化、长续航、高性能”的不可能三角是阻碍,当下智能眼镜产品出现分化,放…

2026/7/28 9:40:45 阅读更多 →
AI联盟与Anthropic技术路线解析:开发者选型指南

AI联盟与Anthropic技术路线解析:开发者选型指南

最近AI圈有个很有意思的现象:OpenAI牵头成立了一个"AI联盟",拉上了微软、谷歌、Meta等一众大厂,但偏偏缺了一个重量级玩家——Anthropic。这背后到底发生了什么?为什么Claude的创造者选择单飞?如果你以为这只…

2026/7/28 9:40:45 阅读更多 →
5个简单步骤:用AtlasOS彻底优化你的Windows系统性能

5个简单步骤:用AtlasOS彻底优化你的Windows系统性能

5个简单步骤:用AtlasOS彻底优化你的Windows系统性能 【免费下载链接】Atlas 🚀 An open and lightweight modification to Windows, designed to optimize performance, privacy and usability. 项目地址: https://gitcode.com/GitHub_Trending/atlas1…

2026/7/28 9:39:44 阅读更多 →

日新闻

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:43 阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑:把几百页的财报、法规、技术手册扔给向量库,问一个具体问题,搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了,要么藏在几十条结果的最下面。语义相似≠真正相关,这个…

2026/7/28 0:00:43 阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营,从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候,每天刷半小时抖音,手动把爆款视频的口播敲进备忘录,一条2分钟的视频得花十来分钟,碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:43 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/27 4:33:59 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/28 8:29:16 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/28 5:03:42 阅读更多 →

月新闻