太阳能电池板YOLO高变焦检测:24577张数据集训练实战
简介面向太阳能光伏板检测与YOLO模型训练的实际需求这份压缩包针对高变焦太阳能电池板图像场景提供了带有标签的光伏板检测标注数据集能帮助开发者和研究人员快速获得规范标注样本降低从图像采集、清洗到标注的重复工作。压缩包为zip格式共2000个XML标签文件整体约620.88MBXML文件内记录了光伏板目标的位置框与类别信息可配合图像转换为YOLO训练所需的数据结构也便于脚本批量解析与格式整理。目前已有538人学习或下载适合处于中高级阶段的深度学习使用者也适用于光伏电站巡检、组件故障筛查等项目场景。数据集源于高变焦拍摄环境标签覆盖不同视角、光照与背景细节丰富有利于强化模型对裂纹、污渍、遮挡等微小缺陷的识别能力同时打包好的目录便于直接整理、划分训练集与验证集帮助提升光伏板自动检测系统的迭代效率与准确率有效支撑实际运维中的缺陷定位与告警判定。1. 太阳能电池板检测为什么绕不开高变焦先看清这24577张图的真正价值光伏板检测这几年在无人机巡检和分布式电站运维里需求量很大。拿到这份带标签的24577张图像多数人会直接跑yolo训练但真正决定模型能不能落地的不是数量而是「高变焦」这三个字。高变焦意味着太阳能电池板在画面里往往很小几十像素的板子在4K甚至8K的大图上挤成一片反光、阴影、倾斜视角再叠上去小目标检测的所有难点基本凑齐了。这篇笔记就围绕这个数据集讲怎么把2万多张图转成能训练YOLO的格式、参数怎么调、坑在哪里以及最后如何用切片推理把高变焦场景的检出率提上去。适合正在做光伏巡检的工程师也适合刚入门yolo的人拿这套带标签数据练手。2. 先弄懂数据再谈训练把24577张图的结构、标签和成像质量摸一遍2.1 拿到压缩包先做三件事解压、看目录、验标签先解压。文件名里的「yolo算法-太阳能电池板数据集-24577张图像带标签-太阳能光伏板检测-高变焦.zip」已经点明这是为YOLO准备的数据但压缩包内部的目录结构不能被名称代替。我拿到手的第一件事永远是先看目录和文件数unzip yolo算法-太阳能电池板数据集-24577张图像带标签-太阳能光伏板检测-高变焦.zip -d solar_panel_dataset cd solar_panel_dataset find . -maxdepth 2 -type d find . -maxdepth 2 -type f | wc -l把压缩包解压到 solar_panel_dataset 目录下用 find 列出两层以内的所有目录看是否已经按 images/ 和 labels/ 分好再用 wc -l 统计文件总数和标题里的24577对一下数量对不上说明可能有空目录或者分批压缩。常见做法是已经分好了 train/val 子目录但也常见只按原始拍摄批次分文件夹、标签全堆在一个目录里的情形先摸清再动手。第二步是验证标签能不能用。我遇到过一万多张图配的标签文件里有不少0字节文件训练时模型等于把这些样本当成了空背景val的mAP被拉低不少。用下面的命令把空标签和损坏图片都拎出来看看find labels -name *.txt -size 0 | wc -l python -c from PIL import Image import os bad [] for f in os.listdir(images): try: Image.open(os.path.join(images, f)).load() except Exception as e: bad.append((f, str(e))) print(f损坏图片数量: {len(bad)}) for f, e in bad[:20]: print(f, e) 第一条命令统计空标签文件的数量第二条遍历 images 目录逐张用 Pillow 加载。加载失败说明文件损坏或根本不是图这类样本要直接剔除并同步删除对应的标签文件。这里值得多说一句空标签本身并不总是要扔。如果一张图里确实没有光伏板它是很好的负样本但如果空标签是因为标注时漏标就会污染训练集。怎么区分下一个节结合类别统计一起说。2.2 标签分布统计类别单一不代表没坑这批数据集的检测目标大概率只有太阳能电池板一类但类别单一不等于可以跳过标签统计。YOLO格式的标签每行是「class cx cy w h」先统计类别数量、框的数量和空标签比例import os from collections import Counter label_dir labels counts Counter() sizes [] empty_files 0 for f in os.listdir(label_dir): path os.path.join(label_dir, f) if os.path.getsize(path) 0: empty_files 1 continue with open(path) as fp: for line in fp: parts line.strip().split() if len(parts) 5: cls int(parts[0]) counts[cls] 1 w float(parts[3]) h float(parts[4]) sizes.append((w * 640, h * 640)) # 按640基准近似像素宽高 print(各类别框数量:, dict(counts)) print(空标签文件数:, empty_files) print(框总数:, sum(counts.values()))这段脚本扫描 labels 目录下所有txt按类别统计框数量同时按640的基准把归一化宽高换算成近似像素值。换算像素宽高是为了快速判断小目标占比如果一半以上的框宽高都小于32像素后面训练时 imgsz 必须加大默认的640输入会对这些小目标很不友好。输出的大致结果值得重点看两个数一是空标签占比二是框的尺寸分布。如果空标签只有几十个直接剔除问题不大如果上千个我倾向于保留一部分做负样本但要在验证集里单独统计它们的表现避免模型学成「见图就框」。框尺寸分布还可以用一行排序命令输出极端值低于5像素的框基本是标注噪声训练前应该先洗掉python -c import os bad [] for f in os.listdir(labels): with open(os.path.join(labels, f)) as fp: for line in fp: p line.strip().split() if len(p) 5: continue w, h float(p[3]), float(p[4]) if w 0 or h 0 or w 1 or h 1: bad.append((f, p)) print(异常框数量:, len(bad)) print(bad[:20]) 这段检查每个标签文件的坐标是否越界或非正。w或h小于等于0说明标注时画反了或漏了坐标大于1说明归一化出错。归一化坐标越界在格式转换脚本里最容易出现后面第三章会写一个更完整的转换方案这里是先做体检。2.3 从EXIF看高变焦数据焦距、分辨率和拍摄距离「高变焦」不能只停留在文件名里图像本身的元数据能把拍摄方式说清楚。PIL读EXIF信息就够用python -c from PIL import Image import os sample os.listdir(images)[:5] for f in sample: im Image.open(os.path.join(images, f)) exif im.getexif() print(f) print( 分辨率:, im.size) print( 焦距:, exif.get(0x920A) if exif.get(0x920A) else 无) print( 厂商:, exif.get(0x010F) if exif.get(0x010F) else 无) 抽几张图看分辨率和焦距。如果普遍是4000×3000往上甚至8K的图那「高变焦」大概率指望远端的物理拍摄而不是数字裁切这也意味着训练推理时要非常注意长边尺寸直接resize到640会丢掉大量小目标。焦距信息还能辅助你判断同一张图里板子的尺度差异变焦到最长焦段拍的板子和广角端拍的板子在图中占的像素可能差十几倍。尺度差异大时训练集里必须保证每个尺度的样本数量相对均衡否则模型会倾向输出中等大小的框。摸完结构和标签下一步就是把它们整理成YOLO能直接吃的目录和格式。这一步不难但错一个斜杠就白跑一次训练。3. 把数据集喂给YOLO格式转换、目录划分与第一次训练3.1 VOC/COCO标注转YOLO格式一个通用的转换脚本无论压缩包里的标签是xml、json还是txt最后都要统一成YOLO的txt格式每行五个数class cx cy w h全部归一化到0到1之间。最常见的情况是原始数据用VOC格式xml发布这里给一个通用转换脚本按目录批量处理import xml.etree.ElementTree as ET import os def convert_voc(xml_path, out_txt, class_names): tree ET.parse(xml_path) root tree.getroot() width int(root.findtext(size/width)) height int(root.findtext(size/height)) lines [] for obj in root.findall(object): cls obj.findtext(name) if cls not in class_names: continue box obj.find(bndbox) xmin float(box.findtext(xmin)) ymin float(box.findtext(ymin)) xmax float(box.findtext(xmax)) ymax float(box.findtext(ymax)) cx (xmin xmax) / 2 / width cy (ymin ymax) / 2 / height bw (xmax - xmin) / width bh (ymax - ymin) / height lines.append(f{class_names.index(cls)} {cx:.6f} {cy:.6f} {bw:.6f} {bh:.6f}) with open(out_txt, w, encodingutf-8) as fp: fp.write(\n.join(lines)) class_names [solar_panel] xml_dir Annotations txt_dir labels os.makedirs(txt_dir, exist_okTrue) for f in os.listdir(xml_dir): if f.endswith(.xml): convert_voc(os.path.join(xml_dir, f), os.path.join(txt_dir, f.replace(.xml, .txt)), class_names)脚本逻辑是按VOC的xml结构解析出图片宽高和每个目标的边框转成归一化中心点坐标。注意宽高必须从xml里的size字段读不能从图片文件读——有的数据集图片被二次压缩过xml里记的还是原始分辨率用图片实际尺寸做归一化会让所有框整体偏移这个坑在第五章的避坑节里还会细说。四舍五入保留6位小数足够不需要更高精度。转换完记得抽样打开几个txt手工对照原图看看框对不对格式正确但语义错位的情况并不少见。如果原始数据是COCO的json逻辑是一样的只是把xml解析换成json里annotations数组遍历。3.2 划分train/val/test并生成data.yaml转换完后统一目录。最终目录结构按YOLO惯例组织solar_panel_dataset/ ├── images/ │ ├── train/ │ ├── val/ │ └── test/ ├── labels/ │ ├── train/ │ ├── val/ │ └── test/ └── data.yaml划分脚本用固定随机种子保证每次划分结果一致import os import random import shutil random.seed(42) images [f for f in os.listdir(images) if f.endswith(.jpg) or f.endswith(.png)] random.shuffle(images) n len(images) train images[:int(n * 0.8)] val images[int(n * 0.8):int(n * 0.9)] test images[int(n * 0.9):] for split, files in [(train, train), (val, val), (test, test)]: os.makedirs(fimages/{split}, exist_okTrue) os.makedirs(flabels/{split}, exist_okTrue) for name in files: src_img os.path.join(images, name) dst_img os.path.join(images, split, name) shutil.move(src_img, dst_img) txt_name name.rsplit(., 1)[0] .txt src_txt os.path.join(labels, txt_name) dst_txt os.path.join(labels, split, txt_name) if os.path.exists(src_txt): shutil.move(src_txt, dst_txt)按8:1:1切分两张图不会因为扩展名不一致而丢失配对标签。这里要注意划分必须在图片和标签都还在平铺目录时做如果已经按子目录分好要先把所有文件汇总再重划分。24577张图按8成训练就是将近两万张训练集足够大val留10%约2400张也够看趋势。划分完检查一下每个split下images和labels文件数是否一致差一个文件后面训练都会报FileNotFoundError。然后写data.yaml这是YOLO训练时的数据入口# data.yaml path: /absolute/path/to/solar_panel_dataset train: images/train val: images/val test: images/test nc: 1 names: 0: solar_paneltrain和val填的是相对于path的路径。最容易被坑的是path写相对路径然后训练命令换个工作目录就跑挂。我习惯写绝对路径或至少保证运行yolo命令的终端工作目录和path一致。nc必须和names的数量对应上只有光伏板一类就填1。如果你检查标签时发现类别数超过一个说明原始数据里还有别的目标names要按实际类别填不能想当然只写solar_panel。3.3 用YOLOv8跑通第一次训练命令与关键参数目录和配置都齐了第一次训练先用小模型和相对小的输入尺寸跑通流程别一上来就追求最优精度yolo detect train \ data../solar_panel_dataset/data.yaml \ modelyolov8s.pt \ epochs60 \ imgsz1280 \ batch16 \ projectruns \ namepanel_first_try参数含义model是预训练权重yolov8s在精度和速度之间比较均衡第一次跑通用s足够epochs先设60确认loss在降而不是震荡再往100加imgsz设1280而不是默认640理由是第二章统计的框尺寸——高变焦场景里小目标占多数640输入经过32倍下采样后小于20像素的目标在特征图上只剩不到1个像素点几乎不可分。batch16要结合显存调整后面避坑节细说。project和name决定训练日志、权重和曲线图的输出目录每次实验分开命名方便后面对比。跑完先别急着看mAP打开 runs/panel_first_try/ 下的 results.png重点看训练集和验证集的box_loss曲线两者收敛趋势是否一致。loss还在下降就说明epochs不够继续加val曲线在某个epoch后开始回升而train还在降说明过拟合开始早停或加大数据增强都行。第一次训练的目标不是最优精度而是确认数据链路、代码链路都能走通系数跑起来正常后再回头调。这里还要提一句如果你习惯用YOLOv5或v11命令结构几乎一样v5用python train.py --data ... --img 1280v11用yolo detect train且data.yaml完全兼容。换版本最要注意的是预训练权重别下错v8和v11的权重文件不能互相加载。4. 高变焦场景的检测精度瓶颈小目标、模糊与尺度变化4.1 为什么高变焦让YOLO「看不清」anchor和感受野的局限高变焦场景里光伏板在原始大图上经常只有二三十个像素宽这是目标检测最头疼的小目标问题。YOLO把输入图划分成网格每个网格负责预测中心点落在格内的目标而特征图经过多次stride下采样后小目标的信息量会锐减。以YOLOv8为例检测头分别在8倍、16倍、32倍下采样的特征图上做预测一个24像素的板子在32倍特征图上对应0.75个像素只能靠8倍那层特征图勉强响应。换句话说模型不是「不想检」是能用于判断的像素太少和反光、阴影叠加在一起后特征就更模糊了。很多人第一反应是调anchor但YOLOv8是anchor-free架构没有预设anchor需要聚类调anchor这步只对v5/v7适用。对v8来说真正有效的杠杆是输入分辨率、感受野和数据增强。另外光伏板本身纹理重复度高整片板子的边界在图像里是平行线簇目标与背景的区分度本来就低于行人、车辆这类纹理丰富的目标模型容易把板间缝隙、屋顶边缘误判成板子。这种情况下提升分辨率的作用比换更大的backbone来得直接后面两个小节按这个顺序展开。4.2 用imgsz调参先试这两步别急着换模型最直接的手段是提高训练和推理的输入分辨率。把imgsz从640提到1280小目标在特征图上的有效像素增加一倍AP的提升肉眼可见代价是训练显存大约翻四倍推理时间也成倍增加。一个务实的做法是先用imgsz960看趋势确认有效再上1280。我在光伏板项目里的经验是640到960通常能带来3到5个点的mAP提升960到1280的提升会变缓但高变焦极端案例的漏检率下降明显。imgsz显存占用趋势小目标AP推理耗时适用场景640低基准低预览、快速验证960中中中常规巡检1280高好高高变焦、小目标为主表格按我自己的经验整理不同显卡和batch下的具体数值差异很大但趋势是稳定的。还有一点容易被忽略yolo训练时默认letterbox会把长边缩放并补灰边保持宽高比不变。高变焦大图在letterbox后如果原图宽高比接近1那还好如果是超宽全景图缩到1280后小目标一样会丢。遇到这种情况我会把imgsz保持但配合第六章的切片推理来解决而不是盲目继续加大分辨率。4.3 数据增强的取舍mosaic、copy paste与mixup对光伏板的效果数据增强对高变焦场景是把双刃剑。Mosaic把四张图拼成一张等于变相缩小了目标尺寸对提升小目标鲁棒性有帮助但当光伏板密集时mosaic会把一块板子从中间切开导致标签框跨拼接边界模型学到的是半块板子特征。YOLOv8默认在最后10个epoch关闭mosaic原因是此时模型已经在收敛突然喂进来大量被切碎的目标会打断学习。如果你发现val的box_loss后期震荡可以检查是否mosaic影响过大。Copy paste类增强对太阳能电池板这种重复纹理的目标是友好的。光伏板单体形状高度相似把一块板子复制粘贴到图像空白区域相当于免费提供高质量样本对稀疏场景下的漏检改善明显。Mixup把两张图按透明度混合会让板子边缘和反光更糊我在这个场景下一般把mixup概率调低或直接关掉它对行人这类轮廓清晰的目标有效对边缘靠平行线定义的光伏板反而有害。增强参数在ultralytics里通过训练命令的 mosaic1.0、mixup0.0 这类参数直接控制不用改代码先跑个短epoch对比再定值。做对比实验时记得固定随机种子和除增强外的所有参数否则你分不清提升是增强带来的还是训练噪声。高变焦数据的增强策略没有银弹最可靠的做法是把几种组合各跑30个epoch看val曲线再选便宜的方案全量训练。5. 训练实践避坑指南损失函数、显存和标注质量的5条踩坑记录5.1 训练到一半损失函数变成NaN显卡和数据集谁背锅现象训练跑到第几百个iteration控制台输出loss的值突然变成nan或者inf然后整个batch直接跳掉收敛曲线从此永远缺一块。原因最常见的是学习率过大导致梯度爆炸其次是指标数据的异常值——某个标注框的宽或高是0或者归一化坐标越界计算CIoU时除数为0。用混合精度训练时半精度梯度遇到极小值也可能溢出。不能一上来就怀疑显卡先用排除法定位。解决先把学习率从默认的0.01降到0.001加一个warmup epoch如果还nan再查标注数据。用第三章的校验脚本把所有w或h等于0、坐标为负的标签筛出来单独洗掉。顺便把混合精度关掉跑10个epoch如果正常说明你的数据里有样本对fp16不友好——这种情况多出现在极端长宽比的框上。三步都试过还nan才需要考虑驱动和CUDA版本问题但概率很低。5.2 验证集mAP很高无人机实拍却一个都检不出现象训练时val mAP能到0.85看起来已经是可交付水平拿无人机或长焦相机实拍的照片一测漏检率非常高尤其是远处的小板子。原因数据分布不一致。这批数据集的高变焦样本可能集中在某个焦距段或特定光照而你的实拍照片是在不同高度、不同时间的强反光下拍的。另一个常见原因是推理时的预处理和训练不一致比如训练用了imgsz1280推理脚本却传了640小目标直接被下采样抹掉了。责任不在数据集本身而在于你的验证流程没有覆盖真实部署条件。解决把实拍图加入验证集单独统计一份高变焦子集的AP不要只看全量mAP。mAP是一个加权平均会把表现好的普通场景和表现差的高变焦场景混在一起。实拍图上如果只是模糊掉点先用6.1的切片推理跑一遍通常能拉回来不少如果还不行用这些实拍图做增量微调几百张就够不要重新训练全部数据。5.3 24577张全量训练跑不动先分清是显存不够还是CPU喂不饱现象训练刚启动就报CUDA out of memory或者显卡利用率一直在30%上下波动GPU长时间排队等数据。原因报了OOM的单纯是batch和imgsz组合超出了显存显卡利用率低则是数据加载链路有瓶颈。很多人把这两件事混为一谈以为是显卡不够好就往下降batch结果利用率继续上不去训得更慢。解决如果是OOM先降batch而不是降imgsz——小目标场景里分辨率比batch值钱。batch8配imgsz1280在消费级显卡上跑yolov8s是常见组合还不行就开梯度累积ultralytics里通过accumulate参数控制等效batch扩大几倍。如果是利用率低把workers从默认2提到8到12并把数据放到SSD上高变焦原图普遍很大从机械硬盘读4K图会成为瓶颈。判断方法很简单训练时nvidia-smi看GPU-Util如果很低同时CPU占用拉满就是数据加载的锅。5.4 高变焦图像里的标注框错位看起来没毛病训练就是掉点现象抽查标签时框贴着板子边缘肉眼看起来挺准但训练时val loss始终偏高个别batch的置信度混乱。原因高变焦图里光伏板边缘是斜的矩形标注框很难和倾斜板面完全贴合这是标注误差的物理来源人人都逃不掉。但更隐蔽的错误来自转换脚本有些原始数据的xml里width/height写的是图像原始分辨率图片本身被预处理压缩过或者标注时用了某款工具导出框坐标已经做过一次归一化又拿去做了一次除以宽高导致坐标整体偏移。解决写一个交叉校验脚本把标签框反算回像素坐标画在原图上批量输出几十张对比图人工扫一眼。重点看边缘贴合度和是否存在系统性偏移——比如所有框都往左上偏2个像素这通常不是标注者的手抖而是坐标转换时的坐标系问题。如果发现板子是倾斜的而框是正矩形严重不贴合唯一有效的方案是换旋转框标注或接受一定误差不要试图靠调loss去弥补标注的结构性缺陷。5.5 导出ONNX后精度下降检测框偏移和NMS阈值的关系现象PyTorch里测试一切正常导出ONNX后用onnxruntime或TensorRT推理框偶尔偏移几个像素部分重叠框被漏掉明明是同一块板子却输出两个框。原因PyTorch的NMS和ONNX里的NMS算子实现细节有差异输出shape固定的问题在动态输入时尤其明显。另一个常见原因是导出时的opset版本选得老某些算子被翻译成低效实现还有导出时把输入shape动态化推理框架处理letterbox的预处理又和训练时不一致导致框坐标没有被还原到原图尺寸。解决导出时固定输入shape不要用动态维度imgsz1280和训练保持一致opset选12或17都行选新型号别选太老的。导出后用同一张图对比PyTorch和ONNX的输出专门看小目标框偏移量和置信度差异。还有一个细节ONNX推理时如果后处理NMS的IoU阈值设得比训练时高密集排列的光伏板会保留大量重叠框看起来像精度下降其实是阈值没对齐。6. 验证与落地用切片推理和大图验证把高变焦收益榨干6.1 SAHI切片推理对大分辨率图像最直接的有效手段高变焦原图动辄几千万像素直接整图推理要么被letterbox缩掉小目标要么显存放不下。行业里最常见的做法是用切片推理把大图切成有重叠的多个小图分别推理后合并结果。用sahi库可以少写很多胶水代码命令行大致如下sahi predict --source drone_shot.jpg --model_path best.pt \ --model_type yolov8 --slice_width 640 --slice_height 640 \ --overlap_ratio 0.2 --postprocess_type NMSM \ --postprocess_match_threshold 0.5 --output_dir output/slice_width和slice_height是切片尺寸640和训练分辨率一致overlap_ratio取0.2给切片边缘的目标一个跨越两个切片的冗余防止目标正好被切在边界上。合并后处理用NMSM做跨切片的去重match_threshold控制重叠度多高算同一个目标。切片推理对高变焦小目标的提升非常明显代价是推理次数变多总耗时上升适合在巡检后处理阶段跑不适合实时视频流。6.2 用混淆矩阵和热力图定位系统性漏检训练结束后ultralytics会在验证集上自动生成混淆矩阵和各类曲线。混淆矩阵能看出模型把光伏板错分成了什么——如果光伏板和背景的混淆项特别高说明大量小目标被当成背景滤掉了重点补小目标样本如果错分成其他类说明类别定义在视觉上有歧义。热力图我一般不看抽象的GradCAM而是直接把验证集里置信度低于阈值的预测框画出来标注上真值框一眼就能看出漏检集中在图像哪个区域是图像上半部分的远景板子漏得多还是反光区域漏得多。这个分布直接决定下一步是调增强还是补数据。6.3 一个我保留的验证习惯每次训练完我不只看汇总指标我会固定挑三张图做人工验收一张普通光照的巡检图、一张高变焦极限距离的图、一张有强反光的图。三张图各跑一遍切片推理对照着看漏检和误检。这个习惯帮我挡掉过好几次「mAP高但实际不能用」的翻车交付也从侧面暴露过训练集里某个光照条件的样本偏少。调imgsz、增强策略这些参数时我也是拿这三张图的检出数量作为第一判断依据数值指标反而放后面。如果你也在做光伏板检测这个方向从拿到这份数据的第一天就保留一组固定的验收图后面每次实验都在同一标准下对比比反复刷新mAP数字实在得多。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

GANMaster人脸矫正实战:从模糊脸到公安标准证件照

GANMaster人脸矫正实战:从模糊脸到公安标准证件照

简介:本资源是一份面向深度学习初学者与计算机视觉实践者的GAN人脸生成与矫正实战教程,聚焦生成对抗网络原理落地与Python代码实现。资源包含4个核心文件(2个Python脚本、1份Markdown说明文档、1份LICENSE),总大小仅9K…

2026/10/11 0:31:53 阅读更多 →
FCOM参考PDF解析:从性能表到插值函数的工程化指南

FCOM参考PDF解析:从性能表到插值函数的工程化指南

简介:这是一份面向飞行机组、飞行学员及航空爱好者的FCOM(飞行操作手册)参考指南,聚焦B737机型日常运行中的关键操作程序与处置规范。内容涉及驾驶舱区域分工、起降标准动作、着陆后刹车冷却表查算、放行与天气及杰普逊资料认读、…

2026/10/11 0:31:52 阅读更多 →
Spring Boot实战:智慧养老院管理系统的架构设计与权限控制

Spring Boot实战:智慧养老院管理系统的架构设计与权限控制

从需求到落地:我如何用Spring Boot搭起一套智慧养老院管理系统去年年初接手了一个养老院管理系统的开发任务,机构那边的情况比较典型:三百多张床位,护理人员几十号人,老人的健康档案还停留在纸质登记,家属想…

2026/10/11 0:31:52 阅读更多 →

最新新闻

PCIe 4.0时代U.2连接器组装检测设备选型与工艺控制指南

PCIe 4.0时代U.2连接器组装检测设备选型与工艺控制指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 1:24:27 阅读更多 →
Phocinae-Largha-150M-v1 figures/ 图表资产指南:读懂 10 张基准图背后的数据、协议与证据链

Phocinae-Largha-150M-v1 figures/ 图表资产指南:读懂 10 张基准图背后的数据、协议与证据链

【免费下载链接】Phocinae-Largha-150M-v1 项目地址: https://ai.gitcode.com/hf_mirrors/Phocinae/Phocinae-Largha-150M-v1 点击查看 免费下载 本篇以 figures/ 目录的图表目录文档为核心,逐图讲解 Phocinae-Largha-150M-v1(144.3M 参数的…

2026/10/11 1:24:27 阅读更多 →
旧微信聊天找不到?WeChatMsg 本地导出记录永久保存,还能出一份年度聊天报告

旧微信聊天找不到?WeChatMsg 本地导出记录永久保存,还能出一份年度聊天报告

旧微信聊天找不到?WeChatMsg 本地导出记录永久保存,还能出一份年度聊天报告 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitco…

2026/10/11 1:24:27 阅读更多 →
基于Vue3+Flask的多模态环境天气监测系统

基于Vue3+Flask的多模态环境天气监测系统

一、 项目概述 1.1 系统简介 本项目是一个集成图像识别、数据分析、智能问答的现代化环境监测系统。系统采用Vue3Flask前后端分离架构,运用多模态深度学习技术,为用户提供实时空气质量监测、历史数据分析、城市对比、趋势预测、天气图像识别和智能问答…

2026/10/11 1:24:27 阅读更多 →
Vercel 零配置部署 Fastify:@vercel/fastify 适配器源码级解析与实战指南

Vercel 零配置部署 Fastify:@vercel/fastify 适配器源码级解析与实战指南

CLI后端云原生 【免费下载链接】vercel Develop. Preview. Ship. 项目地址: https://gitcode.com/gh_mirrors/ve/vercel 点击查看 免费下载 导读 本篇文章围绕 packages/fastify/CHANGELOG.md 展开,深入解读 vercel/fastify 这个 Vercel 官方适配器包的…

2026/10/11 1:24:27 阅读更多 →
qwerty-learner 完整指南:3 步在家免费练打字、背单词

qwerty-learner 完整指南:3 步在家免费练打字、背单词

qwerty-learner 完整指南:3 步在家免费练打字、背单词 【免费下载链接】qwerty-learner 为键盘工作者设计的单词记忆与英语肌肉记忆锻炼软件 / Words learning and English muscle memory training software designed for keyboard workers 项目地址: https://git…

2026/10/11 1:23:26 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 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/10 5:23:50 阅读更多 →
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/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练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/10 10:38:42 阅读更多 →