掌纹识别实战:CNN模型、ROI提取与图像预处理全流程
简介这是一份讲解基于卷积神经网络CNN实现掌纹识别的PDF资料内容围绕生物识别技术与深度学习交叉应用展开适合机器学习、计算机视觉方向的学生及研究者参考学习。文档系统梳理了卷积层、池化层、全连接层等CNN核心组件并完整介绍掌纹识别中图像采集、预处理、特征提取与分类器设计等流程同时对比SVM、KNN等传统机器学习算法与CNN、RNN、LSTM等深度学习算法强调CNN在自动学习掌纹高级特征、缓解图像噪声与形变问题中的优势。资料还从特征学习、模型优化、数据增强三个层面说明深度学习方法在掌纹识别中的具体应用对理解算法原理与开展数据建模实验具有直接帮助。资源包为1个PDF文件大小仅1.54MB轻量易读已有195人学习适合作为课程拓展阅读或项目初期的概念梳理材料。1. 掌纹识别不难难的是数据一致性CNN 反而好选一份基于卷积神经网络的掌纹识别方案真正花时间的往往不是调网络而是把一张带着手指、带着背景的手掌照片稳定地切出同一块掌心区域。这类需求我接手过几次有个反直觉的结论把主流 CNN 换一圈最终准确率差别不大拉开差距的地方全在 ROI 提取和图像预处理上。同一只手在不同亮度、不同角度下多拍两次切出来的区域位置都不一样后面的模型再强也救不回来。下面只讲实操思路不铺数学推导从原始掌纹图到送入 CNN 训练需要经过哪些步骤超参怎么设以及最常见的几个翻车点。适合正在跑掌纹识别实验、卡在准确率上不去的开发者。2. 掌纹结构与 CNN 天然契合先看你的数据量再选网络2.1 掌纹特征的尺度跨度恰好匹配卷积层的层级结构掌纹区域里有主线、褶皱线、脊线、细节点还有不同粗细的纹理交织。传统做法是手动设计 Gabor 滤波器组提取多尺度纹理再配合降维和分类器。CNN 的天然优势是分层学特征浅层卷积核学到脊线和边缘中层组合出纹路片段深层看到的是整个掌心区域的布局。整个过程不需要手动挑滤波器参数训练收敛后特征自组织。这个特性意味着掌纹识别用不着非常深的网络。掌纹 ROI 一般是 128×128 或 224×224一个 6 到 8 层的小卷积网络就已经覆盖了大多数需要的特征尺度。如果数据集本身只有几百张图一上来就堆 ResNet 这类深网络效果反而更差因为参数太多样本喂不饱。2.2 分类和身份验证是两个出口别把最后一层抄错看论文时很多“掌纹识别”实际上做的是封闭集分类任务给定 N 个注册的人模型输出这人是谁。但真实业务更常见的是 1:1 身份验证给你两张掌纹判断是不是同一个人。这两种目标影响模型设计。分类任务最后接全连接层加 softmax损失用交叉熵验证任务则通常训练时也按分类去训但推理时取网络倒数第二层的特征向量做距离比对。这样训练简单又能拿到一个通用的掌纹特征表达。如果你照着论文代码把最后的 softmax 当成产品接口直接暴露新增一个人进去就得重训一次模型这在线上是没法接受的。任务类型输出形式常用损失适用场景新增用户掌纹分类人员 ID 概率交叉熵封闭注册集需要重训掌纹验证特征向量对比损失/三元组损失1:1 认证直接注册特征2.3 训练数据的规模下限与划分原则掌纹没有像人脸那样海量的公开资源可挖多数团队是自采数据。我的经验是每个身份至少采 5 到 10 张作为训练另留 1 到 2 张做注册模板验证时再单独拍 2 张。少于这个量模型很容易记住掌纹图里的固定光斑而不是真实纹路。划分数据时必须按人划分。同一个人的所有掌纹图片只能出现在训练集或测试集不能两边都放。按图片随机划分会让同一只手同时出现在训练和测试里测试准确率虚高十几个百分点这个坑我踩过后面排查起来非常迷惑。数据增强能缓解样本少的问题但不能替代按人划分的原则。每类样本量推荐网络路线预期效果5 张以下小 CNN 强正则 重增强勉强可实验不建议直接上线10~50 张小 CNN 或预训练特征 线性分类可以达到可用水平100 张以上ResNet/MobileNet 类网络跨设备鲁棒性明显提升3. 从原始手掌图到 ROI预处理的一整套可复现做法3.1 手掌分割与指根谷点检测先把 ROI 的锚点找出来ROI 提取是整个掌纹识别里最影响结果的一步。我常用的方案是先用最大连通域分割出手掌再用凸包缺陷找到手指之间的谷点拿食指和中指之间的谷点、无名指和小指之间的谷点作为两个锚点。import cv2 import numpy as np def find_palm_contour(gray): # 背景和手掌对比明显时Otsu 能直接分出前景 _, binary cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY cv2.THRESH_OTSU) contours, _ cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 手掌通常是画面里最大的连通域 return max(contours, keycv2.contourArea) def find_valley_points(hand_contour): # 凸包缺陷点就是手指间的凹陷处 hull cv2.convexHull(hand_contour, returnPointsFalse) defects cv2.convexityDefects(hand_contour, hull) if defects is None: # 意外情况轮廓太平滑时回退到极值点估计保住流程不断 return estimate_valley_by_extrema(hand_contour) valley_candidates [] for i in range(defects.shape[0]): _, _, far_index, depth_raw defects[i, 0] depth depth_raw / 256.0 far_point tuple(hand_contour[far_index][0]) valley_candidates.append((depth, far_point)) # 只保留凹陷最深的两个谷点 valley_candidates.sort(keylambda x: x[0], reverseTrue) return [p[1] for p in valley_candidates[:2]]这段代码的关键在于凸包缺陷。手指自然张开时指根之间形成凹陷凹陷最深的那几个点就是稳定的谷点。相比直接用图像边缘检测谷点对手指张开角度不敏感后续建立坐标系时更可靠。Otsu 分割要求背景灰度与手掌明显不同如果拍摄时有强反光或背景复杂需要先做背景差分或人工框选手掌区域不要直接套 Otsu。3.2 旋转对齐与 ROI 裁剪让同一只手每次都“站直”再切找到两个谷点之后把它们连成一条线以这条线的方向作为参考轴旋转图像。这样即使拍摄时手歪了、手指张开角度变了切出来的 ROI 也在大致相同的位置。def extract_roi(img, valley1, valley2, roi_scale0.7, roi_size128): # 两个谷点连线方向就是手掌的“水平轴” dx valley2[0] - valley1[0] dy valley2[1] - valley1[1] angle np.degrees(np.arctan2(dy, dx)) center ((valley1[0] valley2[0]) // 2, (valley1[1] valley2[1]) // 2) # 绕连线中点旋转把手掌摆正 rot_matrix cv2.getRotationMatrix2D(center, angle, 1.0) aligned cv2.warpAffine(img, rot_matrix, (img.shape[1], img.shape[0])) # ROI 边长取两个谷点距离的 0.7 倍能包住主线和大部分褶皱 dist np.linalg.norm([dx, dy]) side int(dist * roi_scale) x0 int(center[0] - side // 2) # y 方向略微向下偏移避开指尖区域 y0 int(center[1] - side // 3) roi aligned[y0:y0 side, x0:x0 side] return cv2.resize(roi, (roi_size, roi_size))roi_scale 是我常用的参数手掌比较修长的人可以调到 0.8容易拍到更多掌心纹理手指短粗的人建议降到 0.65否则会把指根附近的不稳定区域切进来。y0 的偏移量没有固定公式必须把每张 ROI 可视化检查一遍看到边缘切到手指就调小看到漏掉主线就调大。这一步宁可多花半小时画框也不要直接进训练。3.3 灰度归一化与对比度增强压掉光照差异同一个人的掌纹在不同光照下灰度均值和方差差异很大。如果直接喂网络模型会把亮度当成身份特征来学。def normalize_roi(roi): gray cv2.cvtColor(roi, cv2.COLOR_RGB2GRAY) # CLAHE 提升主线和脊线的局部对比度比全局直方图均衡更不容易过曝 clahe cv2.createCLAHE(clipLimit2.0, tileGridSize(8, 8)) eq clahe.apply(gray) # 标准化到近似零均值、单位方差消除整体亮度偏移 mean eq.mean() std eq.std() 1e-6 norm (eq - mean) / std return (norm * 255).astype(np.uint8)选 CLAHE 而不是普通直方图均衡化的原因是掌纹图像常有局部阴影全局均衡会把阴影边缘过度放大产生虚假纹理。CLAHE 在 8×8 的局部块内做对比度限制能保留主线细节又不把阴影噪声一起增强。3.4 数据增强位置微扰为主翻转别乱用掌纹增强和通用图像增强不一样。颜色抖动对灰度图没意义水平翻转要特别小心部分数据集里左右手混采翻转后纹路方向发生变化标签语义被破坏。增强项参数范围说明旋转±10°已经做过对齐角度过大反而切出非 ROI 区域平移±5%模拟 ROI 定位的轻微偏差缩放0.95~1.05对应不同手掌大小高斯模糊0~1.5模拟轻微失焦亮度扰动±0.2配合灰度归一化做二次扰动4. 用 CNN 训练掌纹分类模型网络配置、训练循环和日志判读4.1 网络结构选择数据量决定深度掌纹 ROI 是单通道灰度图纹理结构相对固定不需要很强的空间建模能力。我的习惯是先跑一个小网络验证数据管线准确率到了一定水平再考虑换大模型。import torch import torch.nn as nn class PalmNet(nn.Module): def __init__(self, num_classes100): super().__init__() # 输入 1x128x128三层卷积后特征图缩到 16x16 self.features nn.Sequential( nn.Conv2d(1, 32, 3, padding1), nn.BatchNorm2d(32), nn.ReLU(inplaceTrue), nn.MaxPool2d(2), nn.Conv2d(32, 64, 3, padding1), nn.BatchNorm2d(64), nn.ReLU(inplaceTrue), nn.MaxPool2d(2), nn.Conv2d(64, 128, 3, padding1), nn.BatchNorm2d(128), nn.ReLU(inplaceTrue), nn.MaxPool2d(2), ) self.classifier nn.Sequential( nn.AdaptiveAvgPool2d((1, 1)), nn.Flatten(), nn.Dropout(p0.3), nn.Linear(128, num_classes), ) def forward(self, x): return self.classifier(self.features(x))为什么把最后的全连接层换成了全局平均池化因为掌纹纹理的位置本身有浮动全局平均池化对特征位置不敏感能减少过拟合同时把参数量压下去。Dropout 放在全连接前对小数据集很关键。如果你的数据量到每类 100 张以上再考虑把特征提取部分替换成 MobileNetV2 或 ResNet 的预训练权重。4.2 最小训练代码从 Dataset 到早停import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader, Dataset from torchvision import transforms from PIL import Image class PalmDataset(Dataset): def __init__(self, paths, labels, trainTrue): self.paths paths self.labels labels self.train train self.basic transforms.Compose([ transforms.Resize((128, 128)), transforms.ToTensor(), transforms.Normalize(mean[0.5], std[0.25]), ]) self.aug transforms.Compose([ transforms.RandomRotation(10), transforms.RandomAffine(degrees0, translate(0.05, 0.05), scale(0.95, 1.05)), ]) def __len__(self): return len(self.paths) def __getitem__(self, idx): img Image.open(self.paths[idx]).convert(L) img self.basic(img) if self.train: img self.aug(img) return img, self.labels[idx] model PalmNet(num_classeslen(train_labels)) optimizer optim.AdamW(model.parameters(), lr1e-3, weight_decay1e-4) scheduler optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max50) criterion nn.CrossEntropyLoss() best_acc 0.0 patience 10 bad_epochs 0 for epoch in range(50): model.train() for imgs, labels in train_loader: optimizer.zero_grad() outputs model(imgs) loss criterion(outputs, labels) loss.backward() optimizer.step() # 每个 epoch 后跑一次验证保存最佳权重并做早停 model.eval() correct 0 total 0 with torch.no_grad(): for imgs, labels in valid_loader: outputs model(imgs) _, predicted torch.max(outputs, 1) total labels.size(0) correct (predicted labels).sum().item() val_acc correct / total if val_acc best_acc: best_acc val_acc torch.save(model.state_dict(), best_palm_net.pth) bad_epochs 0 else: bad_epochs 1 if bad_epochs patience: print(fearly stop at epoch {epoch}) break scheduler.step()训练超参里我习惯用 AdamW 而不是 Adam配合 weight_decay1e-4 能得到更好的收敛边界。学习率从 1e-3 起步配合余弦退火下降掌纹小数据集上通常 30 个 epoch 左右能收敛。早停的 patience 设 10 比较好太小容易被验证集的正常抖动误伤。注意验证集不能用增强只做 Resize、Tensor 化和 Normalize否则指标会偏。4.3 训练日志怎么读loss 下降不等于准确率上涨训练 loss 稳步下降但验证准确率纹丝不动这是小数据集最常遇到的情况。这时候先看是不是过拟合如果训练准确率接近 98% 而验证只有 70% 左右差距过大优先做两件事——增强 Dropout、加大 weight_decay。如果验证准确率在每个 epoch 之间大幅震荡先检查 batch size 是否太小以及数据集加载时有没有正确 shuffle不要急着调网络结构。另一个常见误判是把训练 loss 的绝对数值当作健康指标。掌纹分类的交叉熵 loss 和验证准确率不是线性关系loss 降到 0.3 以后准确率可能还在 92% 附近徘徊这很正常。真正需要警惕的是验证 loss 在下降一段后反弹那是过拟合拐点应该把早停触发点放到那里。5. 掌纹识别避坑准确率不涨时先查这五个拦路石5.1 训练准确率很高验证集却“揭穿”了你现象训练集准确率到 97% 以上验证集只有 72%且差距持续扩大。原因掌纹图像纹理重复度较高网络容易记住训练集里的固定光斑、指纹边缘和背景残留。样本量小的时候这个现象尤其严重。解决先加 Dropout 到 0.5把 weight_decay 从 1e-4 加到 5e-4同时检查 ROI 是否干净背景是否有固定噪点。如果这三刀下去没有明显变化再考虑减少网络参数量比如把三层卷积的通道数减半。数据增强必须在训练和验证之间做严格隔离验证集永远用原始预处理。5.2 同一只手两次采集被判成不同人现象模型训练准确率正常但做 1:1 验证时同一只手的两次拍摄被判定为不同人。原因ROI 定位不一致两次拍摄手指张开幅度不同谷点位置偏移切出来的区域差了十几个像素。CNN 对位置是敏感的ROI 边缘差一点特征就变了。解决回到预处理阶段把两次拍摄的 ROI 可视化叠在一起对比。如果边缘错位明显检查谷点检测在手指分开和并拢时是否稳定。另一个可靠做法是连续拍 3 帧取谷点坐标的平均值再做旋转对齐这能明显降低单帧抖动。5.3 换了一个采集设备模型整体失效现象训练用的是旧摄像头换新设备采集后验证准确率从 95% 掉到 60% 左右。原因传感器光谱响应、分辨率、灰度分布都变了模型学到的纹理特征带有原设备的“风格”。解决灰度归一化和 CLAHE 是基础但远远不够。最有效的是在训练数据里混入多设备数据如果暂时只有一台设备数据增强里加入轻微的高斯噪声和运动模糊模拟设备差异。不要指望一个模型能无损跨设备迁移掌纹识别在落地上必须把采集设备纳入训练变量。5.4 数据增强越加越多验证集反而变差现象把旋转、翻转、亮度、噪声全部打开后训练准确率下降验证准确率也跟着下降。原因增强强度超出真实数据分布模型被迫学习大量畸形样本。掌纹 ROI 已经做过旋转对齐再加强旋转会把本来就偏的 ROI 切出掌心区域水平翻转在左右手混合的数据集里会彻底破坏标签语义。解决用克制式增强。旋转在 ±5° 以内平移在 ±3%亮度扰动用小幅度先跑一版看验证集反应再逐步加强。注意每加一个增强项单独做一组对照实验不要把多个增强项一次性全加上。5.5 GPU 占用率只有百分之二三十瓶颈在预处理现象训练时 GPU 利用率上不去看时间分布大部分花在等待数据。原因掌纹图像小预处理反而成了瓶颈。OpenCV 的插值、CLAHE 都在 CPU 上执行如果 DataLoader 的 worker 数不够GPU 只能干等。解决把 num_workers 调到 CPU 核数的一半左右并确认预处理逻辑在 Dataset 里而不是在训练循环里。ROI 可以提前离线算好并保存成 numpy 数组训练时只做读取和 Tensor 化这样训练速度能提升一个量级。对我来说预处理和增强放离线还是在线不是一个风格问题而是直接决定训练效率的关键决策。6. 进阶从分类换成身份验证掌纹识别才更接近实际产品分类网络在固定注册集上表现不错但实际场景里人员增删是常态。新增一个人就重训整个模型这在生产环境很难接受。更通用的做法是把网络改成孪生结构训练一个掌纹编码器输出的 128 维向量能表达掌纹身份信息。做验证时直接比对两张图的向量距离就知道是不是同一个人。def contrastive_loss(vec_a, vec_b, is_same, margin1.0): # vec_a / vec_b 是 L2 归一化后的 128 维特征 distance torch.pairwise_distance(vec_a, vec_b, p2) if is_same: # 同一人的掌纹距离要被拉近 return distance.pow(2).mean() else: # 不同人的掌纹至少隔开 margin否则计入损失 return torch.clamp(margin - distance, min0.0).pow(2).mean()训练时从数据里构造正样本对和负样本对正样本对是同一只手的不同照片负样本对是不同人的照片。margin 设 1.0 是常用起点它会直接影响后续的判定阈值——margin 越大负样本对需要离得越远特征空间的余量越大。推理阶段注册用户的掌纹各跑一次编码器得到的向量存入特征库新用户只需追加一次编码不需要动模型参数。判定阈值怎么定不要盯着训练 loss 猜我的习惯是训练完成后把所有样本的特征向量两两算距离画出同人距离和异人距离的分布图。两个分布的交界处是初始阈值再根据业务对误识和拒识的容忍度向两侧微调。掌纹这个场景误识代价通常更高阈值我会往保守方向挪一点。这是踩过几次坑之后养成的习惯先看分布再定阈值永远不要拍脑袋。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Java停车场系统工程实践:高并发、硬件对接与状态机设计

Java停车场系统工程实践:高并发、硬件对接与状态机设计

简介:本资源是一份面向计算机专业本科生的Java毕业设计参考论文,聚焦停车场管理系统的完整开发实践,解决传统人工停车管理效率低、易出错、数据难追溯等痛点,适用于课程设计、毕设选题与SpringBoot项目学习者。文档为单个3.65MB的…

2026/10/10 12:02:38 阅读更多 →
统信UOS服务器手册深度解析:从PDF文档到生产级运维知识图谱

统信UOS服务器手册深度解析:从PDF文档到生产级运维知识图谱

简介:本资源是统信UOS服务器版V20系统的官方用户手册(PDF格式),面向Linux系统管理员、国产化替代项目实施人员及信创环境运维工程师,旨在提供开箱即用的操作指引与系统级管理规范。手册内容覆盖两大核心模块&#xff1…

2026/10/10 12:02:38 阅读更多 →
实时显示Token速度与命中率:OpenCode插件开发实战

实时显示Token速度与命中率:OpenCode插件开发实战

打开编辑器的时候,我第一件事永远是看右下角那行小字:Token速度现在是多少,命中率有没有掉。这个习惯是被自己写的一个OpenCode插件惯出来的。插件做的事情很简单——实时刷新显示Token速度、命中率,并且已经适配了V2版本的接口。…

2026/10/10 12:01:37 阅读更多 →

最新新闻

Claude API接入与额度管理实战指南

Claude API接入与额度管理实战指南

我无法根据您提供的输入内容生成符合要求的博文。原因如下:项目标题“Claude 创业计划送产品与额度”缺乏明确的技术领域、具体功能、实现路径或业务场景指向,属于模糊的营销话术类表述,不符合“可拆解、可复现、可验证”的专业博文创作前提&…

2026/10/10 12:57:47 阅读更多 →
学术codex:助力学术研究与知识管理的智能工具解析

学术codex:助力学术研究与知识管理的智能工具解析

对于科研人员来说,文献工作往往伴随着两个极端的痛苦:一是搜索时的大海捞针,为了几篇核心文献,不得不花费数小时翻阅成百上千条琐碎的摘要;二是阅读时的翻译折磨,在专业术语和复杂的 LaTeX 公式间反复推敲&…

2026/10/10 12:57:47 阅读更多 →
sward与soular统一登录实战:OAuth2.0授权码模式与OIDC详解

sward与soular统一登录实战:OAuth2.0授权码模式与OIDC详解

sward和soular这两个名字放在一起,很多做了几年后端的朋友第一反应是“这不就是两个开源项目拼一个SSO教程吗”。但实际动手做一圈下来你会发现,真正的工作量不在“拼”,而在“想清楚谁管登录、谁管会话、谁管退出”这一层。这篇文章我不打算…

2026/10/10 12:57:47 阅读更多 →
网络时间同步进化简史:从NTP到PTP与逻辑时钟

网络时间同步进化简史:从NTP到PTP与逻辑时钟

网络世界里“时间错乱”这事,平时没人注意,一出事就是大新闻。我入行那会儿,第一次在产线上遇到数据库主从数据对不上、日志顺序全乱、证书校验失败,排查了整整一个下午,最后发现罪魁祸首竟然是宿主机时钟漂移了五分钟…

2026/10/10 12:57:47 阅读更多 →
Dbeaver实战:打通数据库连接、SQL调优与数据导入导出全流程

Dbeaver实战:打通数据库连接、SQL调优与数据导入导出全流程

简介:这是一份以 PDF 形式整理的 DBeaver 常用操作指南,面向需要日常连接与维护多种数据库的开发人员和数据库管理员,帮助读者快速掌握这款免费开源通用数据库工具的核心用法。文档围绕实际开发场景展开,重点讲解如何利用“打开声…

2026/10/10 12:57:47 阅读更多 →
LangGraph企业级落地:状态持久化、并发安全与生产部署实战

LangGraph企业级落地:状态持久化、并发安全与生产部署实战

1. 项目概述:这不是又一个“Hello World”式LangGraph教程LangGraph这个词最近在技术社区里出现的频率,已经快赶上“大模型微调”和“RAG优化”了。但说实话,我翻过不下二十个标着“LangGraph实战”的仓库和文章,八成停留在画几个…

2026/10/10 12:56:46 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* 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 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* 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 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* 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 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 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 阅读更多 →