新闻详情

新闻详情

首页 / 资讯中心 / 详情

单图3D关键点估计链路拆解:从2D升维到SMPL兼容输出

发布时间:2026/10/1 18:43:54来源:尧图网络
单图3D关键点估计链路拆解:从2D升维到SMPL兼容输出
简介面向计算机视觉与三维姿态估计方向的开发者这份资源聚焦从单一彩色图像中估计2D与3D人体关键点并生成与SMPL模型兼容的参数可服务于智能监控、虚拟现实、人机交互和动画制作等场景。资源包为zip压缩格式共10个文件总计47.79MB包含4个Python脚本、1个预训练模型权重、依赖清单、说明文档和图片样例从环境配置、模型调用到结果展示均有覆盖。核心内容涉及二维关键点检测、三维空间映射以及SMPL模型适配三个环节并给出实际项目落地时的数据处理与评估思路。目前已有128人学习下载适合希望快速掌握2D到3D关键点估计流程、并通过现成代码展开二次开发或课程设计的高年级本科生、研究生与工程师。1. 单图3D关键点估计2D升维到SMPL兼容输出这条链路坑比想象多从事人体姿态估计的从业者都有体会2D关键点检测已经相当成熟但一旦要输出3D坐标尤其是要和SMPL这类参数化人体模型对接问题就从“找像素”变成了“解优化”。这个项目正是从单一彩色图像估计2D3D关键点并输出与SMPL兼容的姿态参数仓库里带着模型权重文件和可直接运行的示例脚本。它适合两类人一类是做动捕、虚拟人驱动需要从单帧图像快速恢复三维姿态的开发者另一类是研究姿态估计算法想找一份能跑通全链路参考实现做对比实验的研究生。我下载它是因为想搞清楚一件事从一张普通照片到SMPL参数中间到底有哪些环节最容易翻车。实际跑过之后发现仓库的价值不只是模型精度而是把2D检测、3D升维、SMPL适配这条链路完整串了起来每一步怎么调试都有迹可循而且自带预训练的最小模型CPU环境下就能完成端到端验证。2. 仓库结构拆解五个核心文件如何串起整条3D关键点估计链路拿到压缩包解压后我习惯性地先把文件清单过一遍。这个项目没有把代码堆成一大坨而是按职责拆成了几个模块network.py负责网络结构common.py负责SMPL模型相关的公共逻辑utils.py承载预处理、后处理和可视化工具example.py是唯一的推理入口另外还有minimal_body_v1.pth权重文件、test_input.jpg示例图和requirements.txt依赖清单。先弄清楚每个文件的角色后面调试时才不会像无头苍蝇一样乱撞。2.1 文件分工network、common、utils、example 各自的职责边界从文件命名就能看出设计意图——每个文件承担明确的职责彼此之间通过函数调用衔接文件核心职责调试时最常用到的函数或逻辑network.py定义从图像到2D/3D关键点的网络结构前向传播入口、输出张量的组织方式common.pySMPL模型加载、参数化与关节索引映射build_smpl、keypoint2smplutils.py图像预处理、关键点后处理、可视化preprocess、heatmap_to_coords、visualizeexample.py推理主脚本串联全部环节main() 中的调用顺序minimal_body_v1.pth预训练权重torch.load 后的状态字典结构真正执行时调用顺序是example.py调用utils.preprocess把图像转成网络输入张量network.py前向得到原始输出再交给utils.heatmap_to_coords解码出2D关键点坐标最后用common.py里的SMPL模型把3D关键点转成姿态参数。我建议读代码时先只读example.py因为它把整条链路的调用顺序完整展示了出来。另一点需要注意model目录下通常放的是SMPL模型本体文件与权重文件minimal_body_v1.pth是两回事——前者是人体参数化模型的几何定义后者是卷积网络训练得到的权重两者缺一不可。2.2 requirements.txt 与运行环境最小依赖怎么搭最省事这个项目依赖的是标准深度学习姿态估计技术栈PyTorch 做网络前向OpenCV 做图像读写NumPy 做矩阵运算smplx库做SMPL模型加载和参数化。requirements.txt里的核心依赖大致是下面这些# requirements.txt核心依赖清单 torch1.9.0 torchvision0.10.0 opencv-python4.5.0 numpy1.19.0 smplx0.1.28如果你是首次搭建环境我建议用 Python 3.8 或 3.9先建虚拟环境再装依赖conda create -n keypoint3d python3.9 conda activate keypoint3d pip install -r requirements.txt注意smplx在smplx.create时需要本地的SMPL模型文件安装时不会自动下载需要手动放置。这是整个仓库里第一个容易卡住的地方。torch是否启用CUDA版本取决于你的机器如果是CPU环境默认版本也能跑只是速度慢。如果你需要GPU加速可以用pip install torch --index-url https://download.pytorch.org/whl/cu118单独安装再pip install -r requirements.txt安装其余依赖。装完先跑一次python -c import torch, cv2, smplx; print(ok)确认所有库都能导入。2.3 network.py 的设计逻辑为什么同时输出2D和3D是关键network.py的核心设计是骨干网络加多分支输出。骨干网络通常采用 Hourglass 或 ResNet 结构的特征提取器然后在顶端分叉成两条输出路径一条输出2D关键点的热图另一条输出3D关键点的坐标回归结果。这种设计的好处是一次前向同时拿到2D和3D结果避免两次推理带来的误差累积也要让网络在中间特征层共享信息——2D分支的监督信号可以强化特征提取3D分支则在这个特征基础上做三维坐标回归互相增强。# network.py 结构示意关键部分 import torch import torch.nn as nn class KeypointNet(nn.Module): def __init__(self, num_joints24): super().__init__() # 骨干网络用 ResNet50 的前三层做特征提取 self.backbone resnet50_backbone() # 2D 分支输出 24 张热图每张对应一个关节位置 self.head_2d nn.Conv2d(2048, num_joints, kernel_size1) # 3D 分支先全局平均池化再全连接回归三维坐标 self.head_3d nn.Sequential( nn.AdaptiveAvgPool2d(1), nn.Flatten(), nn.Linear(2048, num_joints * 3) ) def forward(self, x): features self.backbone(x) heatmaps self.head_2d(features) keypoints_3d self.head_3d(features) return {keypoints_2d: heatmaps, keypoints_3d: keypoints_3d}这里2D分支用卷积输出热图是标准做法每个通道对应一个关节热图的峰值位置就是2D关键点坐标。3D分支用全连接直接回归三维坐标输出形状是(batch, 72)即24个关节乘以3个坐标轴x、y、z。需要特别说明的是这个72维向量直接回归出的坐标通常是网络在一个固定输入尺寸下预测的归一化三维坐标而不是真实世界坐标系下的米制坐标。后处理时需要通过相机内参换算这部分在第4章单独展开。如果你想换成轻量级MobileNet骨干只需要替换resnet50_backbone()并保证输出特征维度对齐其余分支不用动。2.4 预处理与张量形状从BGR图像到网络输入的转换细节utils.preprocess做了三件具体的事颜色空间转换、尺寸缩放、归一化。典型实现如下# utils.py 预处理逻辑常见做法 import cv2 import torch import numpy as np def preprocess(image_bgr, input_size224): # 1. BGR 转 RGB保持通道顺序与训练一致 image_rgb cv2.cvtColor(image_bgr, cv2.COLOR_BGR2RGB) # 2. 缩放并记录缩放比例 h, w image_rgb.shape[:2] scale input_size / max(h, w) image_resized cv2.resize(image_rgb, (input_size, input_size)) # 3. 归一化到 [-1, 1]与预训练权重的统计口径一致 image_norm image_resized.astype(np.float32) / 127.5 - 1.0 # 4. HWC - CHW并增加 batch 维度 tensor torch.from_numpy(image_norm.transpose(2, 0, 1)).unsqueeze(0) return tensor, scale这里最容易被忽略的是scale返回值。网络输出的热图尺寸是224×224但原图可能是1280×720热图上解出的坐标必须乘回scale才能在原图上正确绘制。反过来3D坐标分支的输出不受scale影响因为它不是像素坐标而是三维空间坐标。这个“2D受缩放影响、3D不受缩放影响”的差异是新手最容易搞混的地方。3. 端到端推理从 test_input.jpg 到 2D3D 关键点的完整链路这一章把推理流程完整拆开。我以仓库自带的test_input.jpg为例从命令行入口到最终输出一条线走完。整个流程一共五步读图、预处理、网络前向、后处理解码、SMPL适配。3.1 运行 example.py 的正确入口与预期输出进入项目根目录后最直接的方式是执行python example.py --input test_input.jpg --checkpoint minimal_body_v1.pth --device cpu设备允许的话可以把--device改成cuda。首次运行时minimal_body_v1.pth会被torch.load加载代码会先打印权重文件的状态字典摘要再进入前向传播。正常推理结束后终端显示类似下面的信息Input image: test_input.jpg (1280, 720, 3) 2D keypoints shape: (24, 2) 3D keypoints shape: (24, 3) SMPL pose params shape: (72,) SMPL shape params shape: (10,) Visualization saved to output_3d.png如果你能看到这五行输出说明网络前向、坐标解码、SMPL适配都成功了。如果某一行报错下面3.2节会给出每一步的定位方法。有一点值得注意3D keypoints和SMPL pose params不是同一个东西。前者是网络直接回归出的三维坐标后者是经过优化后得到的SMPL姿态参数它们之间隔着一个迭代优化求解的过程。很多人在这一步产生误解以为拿到的72维就是网络的直接输出——实际上网络输出的是24×3的三维坐标common.py里再把这个坐标通过优化转为SMPL的theta参数。3.2 关键代码拆解网络前向、坐标后处理与SMPL参数生成example.py内部逻辑可以概括为五个步骤。核心代码大致是这个样子# example.py 核心流程精简后 import argparse import cv2 import torch from network import KeypointNet from common import build_smpl, keypoint2smpl from utils import preprocess, heatmap_to_coords, visualize def main(): parser argparse.ArgumentParser() parser.add_argument(--input, defaulttest_input.jpg) parser.add_argument(--checkpoint, defaultminimal_body_v1.pth) parser.add_argument(--device, defaultcpu) opt parser.parse_args() # 1. 读图并预处理 img cv2.imread(opt.input) tensor, scale preprocess(img) # scale 是坐标缩放因子 # 2. 加载网络权重 model KeypointNet() checkpoint torch.load(opt.checkpoint, map_locationopt.device) model.load_state_dict(checkpoint[model_state]) model.eval() # 3. 前向推理 with torch.no_grad(): out model(tensor) # 4. 从热图解码2D坐标注意乘回 scale keypoints_2d heatmap_to_coords(out[keypoints_2d]) * scale # 5. 3D坐标 SMPL适配 keypoints_3d out[keypoints_3d].squeeze(0).numpy() smpl_params keypoint2smpl(keypoints_3d) print(f2D keypoints: {keypoints_2d.shape}) print(f3D keypoints: {keypoints_3d.shape}) if __name__ __main__: main()解读这段代码时重点看两处。第一preprocess(img)返回了两个值第二个是坐标缩放因子。因为网络输入是固定尺寸而原图的分辨率是任意的热图解码出的坐标是在224尺度下的必须乘回scale才能映射回原图像素坐标。第二keypoint2smpl(keypoints_3d)内部做了关节索引映射和SMPL参数优化。如果你把keypoints_3d直接打印出来看到的是一个24×3的矩阵每行是一个关节在相机坐标系下的x、y、z坐标。这个矩阵要和JOINT_MAPPING里定义的关节顺序严格对齐否则后续SMPL优化出来的姿态就是错的。3.3 模型权重加载minimal_body_v1.pth 的状态字典结构权重文件名里的 minimal 暗示这是一个精简版模型参数量比完整模型小不少适合快速验证链路、在CPU上做 demo。加载时先确认torch.load返回的字典结构——它可能是裸state_dict也可能嵌套在{model_state: ..., optimizer_state: ...}里。快速检查方法python -c import torch; ckpt torch.load(minimal_body_v1.pth, map_locationcpu); print(type(ckpt)); print(list(ckpt.keys())[:5])输出如果是dict_keys([model_state, optimizer_state, epoch])这种嵌套结构就说明不能直接model.load_state_dict(ckpt)需要写model.load_state_dict(ckpt[model_state])。如果是dict_keys([backbone.conv1.weight, ...])这种直接是网络层名那才是裸状态字典可以直接加载。我接手别人训练的模型时第一步永远是看这个——权重文件结构不对后续所有推理都是空转。这个项目里大概率是嵌套结构因为example.py里用了checkpoint[model_state]的取法。4. SMPL参数与坐标系姿态、形状、相机的约定和常见误用成功跑通推理链路后下一步要处理的是“怎么把3D关键点坐标变成SMPL兼容参数”。这一章把SMPL参数空间、关节索引映射、相机内参三件事说透。这三件事如果理解不到位输出的3D结果即使数值正确可视化时也会出现各种奇怪问题。4.1 SMPL的参数空间theta、beta、trans 各管什么SMPL 模型把人体表示为三个参数组姿态参数 theta72维24个关节乘3个旋转自由度形状参数 beta10维主成分系数平移参数 trans3维。theta 决定人体各关节的旋转角beta 决定胖瘦高矮trans 决定人体在空间中的位置。这三个参数共同决定一个完整的人体网格。参数维度物理含义典型误用theta7224个关节的旋转角轴角表示把欧拉角直接塞进thetabeta10形状空间的主成分系数用零向量代替导致人体变成标准体型trans3全局平移忽略时人体整体偏移出画面在common.py中keypoint2smpl函数的核心任务是通过优化theta让SMPL模型投影的3D关键点与网络输出的3D关键点对齐。常见做法是用梯度下降迭代每一步计算当前SMPL关节位置与目标关键点位置的差距再更新theta、beta、trans三个参数。这个优化过程对初始值非常敏感如果初始化不当容易收敛到四肢扭曲的局部极小值。我强烈建议在进入优化前先打印一次初始SMPL模型的关节位置确认人体初始姿态接近直立而不是随机旋转。minimal_body_v1.pth里同时保存了网络权重和SMPL优化的默认初始值如果你换了自定义权重初始值也要重新评估。4.2 3D关键点到SMPL关节索引的映射关系网络输出的24个关节顺序不一定与SMPL的关节顺序一致这是最容易翻车的地方。比如网络输出的第0号关节是“头顶”而SMPL的第0号关节是“骨盆”。common.py通常会内置一个如下的匹配表# common.py 中的关节映射示意 JOINT_MAPPING { 0: pelvis, # SMPL 关节骨盆 1: left_hip, # SMPL 关节左髋 2: right_hip, # SMPL 关节右髋 3: spine, # SMPL 关节脊柱 4: left_knee, # SMPL 关节左膝 5: right_knee, # SMPL 关节右膝 6: left_ankle, # SMPL 关节左踝 7: right_ankle, # SMPL 关节右踝 # ... 其余关节映射按项目实际定义 }注意这个映射表是整条链路里我最关注的代码。如果映射错误3D关键点本身数值正确但SMPL模型会“扭曲”——比如左膝和右膝交换位置生成的人体姿态完全不像一个真人。调试时可以先打印网络输出的关节名与SMPL关节名列表人工核对一遍再跑优化。如果需要可视化验证可以在utils.py中增加一个绘制函数把每个关键点的索引值标在图像上对照测试图像中的人体部位逐一确认。这种可视化排错在姿态估计里是最直接有效的手段比盯着数字猜要快很多。4.3 相机内参在单图3D估计中的角色单图3D估计本质上是从二维图像恢复三维信息这是一个病态问题。相机内参焦距、主点在这里扮演“量尺”的角色2D像素坐标通过内参反投影到三维空间得到射线方向网络再沿射线预测深度。我的经验是这个项目训练时很可能假设了某个固定的相机焦距推理时若实际图像焦距不符3D坐标会整体偏大或偏小。调试时把相机内参打印出来# common.py 中相机参数的默认设置 camera_intrinsics { focal_length: 1000.0, # 项目训练时使用的默认焦距像素单位 principal_point: [112.0, 112.0] # 主点坐标近似为图像中心 }如果发现3D估计的距离明显不对比如把1.7米的人估成0.8米或3米优先检查这里。常见调整是让焦距与真实相机匹配先用图像的宽度像素数作为焦距初值对比两次推理结果观察3D人体高度是否趋向合理范围。还有一种实用的标定方法找一个身高已知的人体照片做测试微调focal_length直到预估身高偏差小于5%。这一步属于工程经验不同数据集训练的模型对焦距的敏感度不一样需要每次根据输出微调。5. 避坑清单单图3D姿态估计最容易翻车的五个现场这一章把我整理这个项目时踩过的五个典型问题按现象、原因、解决的顺序写出来。这些坑分散在预处理、模型加载、优化求解、设备适配、索引映射五个环节几乎每个都会让结果“看起来像是对的但实际上完全不能直接用”。5.1 输入图像尺寸不一致导致2D坐标整体偏移现象网络输出的2D关键点坐标与图像实际位置不对齐坐标值明显偏小或偏大画出来的骨骼点落在关节位置之外。原因utils.preprocess把输入图像缩放到固定尺寸缩放因子对坐标的影响没有在heatmap_to_coords中还原。不同输入图像分辨率不同缩放因子不一致直接导致坐标偏移。解决在heatmap_to_coords之后必须用原始图像宽高与网络输入尺寸的比例做坐标还原。我一般把缩放因子作为预处理函数preprocess的第二个返回值带出来在后处理时乘回去。这里一个隐藏的坑是如果热图解码用的是soft_argmax解码出的坐标是0到1的归一化值还需要额外乘上热图尺寸不能直接用scale一次搞定。5.2 SMPL模型文件缺失或版本不匹配现象build_smpl函数报FileNotFoundError或加载成功后输出的theta全是0SMPL模型生成一个“直挺挺”的僵硬人体。原因smplx.create需要加载SMPL模型文件文件缺失时直接报错如果文件版本不对比如用的是SMPL-X而不是SMPL或者性别参数不匹配加载过程不报错但关节数、姿态参数维度对不上优化根本没法启动。解决先确认smplx的模型文件路径是否正确官方SMPL模型文件需要手动放置确保路径与common.py中的配置一致。加载后检查SMPL模型的关节数是否为24即smpl.NUM_JOINTS 24若是23或52说明模型定义不兼容需要更换模型文件或调整网络输出的关节数。5.3 3D坐标“漂浮”在相机坐标系之外现象输出的3D关键点z值全为0或者人体整体不在相机视野内模型生成的姿态像悬浮在空中。原因网络输出的3D坐标是相对坐标需要加上全局平移trans才对应到世界坐标。keypoint2smpl如果没有正确初始化trans优化会从错误位置开始导致姿态看起来漂移。解决在SMPL优化前先用2D关键点的平均位置计算trans初始值让根关节落在图像中心附近、深度值处于合理范围比如1.5到3米。这相当于给优化器一个合理的起点收敛速度比零初始值快很多也更容易得到真实的人体姿态。5.4 CPU推理速度慢且内存占用高现象用--device cpu推理单张图耗时超过10秒内存占用持续上涨甚至出现卡死。原因minimal_body_v1.pth虽然是精简版但骨干网络仍是ResNet级别的参数规模SMPL优化的迭代次数默认可能偏大CPU上的矩阵运算本来就慢。解决先检查torch.cuda.is_available()有GPU就自动切换device。同时把SMPL优化迭代次数从100下调到50这一步对结果影响不大但推理耗时会显著下降。如果仍需CPU推理可以把输入分辨率从224降到160分辨率降下来之后网络前向和优化都要快不少代价是2D关键点精度轻微下降。5.5 2D与3D关键点索引错位导致姿态畸形现象2D关键点可视化正常但SMPL生成的3D人体姿态扭曲比如手肘反向、膝盖交叉。原因network.py输出的关节顺序、heatmap_to_coords解码后的关节顺序与JOINT_MAPPING中定义的顺序不一致导致同一个数值被赋值给了错误的关节。解决在调试阶段写一个最小的关节名打印脚本把2D关键点逐个画到图像上并标注索引号与网络输出的关节名对应检查确认索引一致后再进入SMPL优化。如果有测试集标注可以做一次自动对齐但前提是你清楚测试集与SMPL的关节顺序差异不能直接假设两者的第0号关节是同一个部位。6. 进阶验证技巧用最小模型做全链路自检与2D重投影验证跑通项目只是第一步真正能说明3D估计结果可信的是验证环节。这一章给两个验证技巧都不需要额外数据用仓库自带的test_input.jpg就能做。6.1 2D重投影误差一个数字判断3D估计是否可信重投影误差的核心思想是把估计的3D关键点通过相机内参投影回2D平面与原始2D检测结果比较距离。如果3D估计正确重投影点应与2D关键点高度重合偏差过大则说明3D估计有问题。def re_projection_error(keypoints_3d, keypoints_2d, camera): projected camera.project(keypoints_3d) error np.linalg.norm(projected - keypoints_2d, axis1).mean() return error我的判断标准是平均重投影误差小于图像宽度像素的2%说明3D估计精度在可接受范围超过5%就要回头查相机内参、关节映射或优化是否收敛。这个阈值是我在多个项目里试出来的经验值比你盯着3D坐标肉眼判断要可靠得多。重投影误差还可以逐关节打印哪个关节误差大就重点检查哪个关节的索引映射和相机参数。6.2 多视角一致性自检让同一姿态在不同视角下可对比如果你手头有同一人体的两张视角图像可以做更强的验证分别用两张图推理得到3D关键点再用姿态对齐算法比较两组3D坐标的一致性。误差小说明网络对视角变化不敏感泛化能力可靠。没有多视角数据时也可以在单张图上做小角度旋转后重新推理检查关键点相对位置是否稳定。这一招对判断模型是否过拟合特别有效——泛化好的模型不会因为图像旋转5度就输出完全不同的姿态。就我自己的习惯而言现在每次拿到新的人体姿态估计项目都会强制走一遍“输入图像 → 推理 → 重投影误差计算”的自检链路再检查一次关节索引映射。这两个动作帮我在多个项目里提前发现了模型配置的隐性错误也节省了大量后期调试时间。希望这几章的拆解和避坑记录能帮你少走弯路顺利把SMPL兼容的单图3D关键点估计链路用起来。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Office 30015-1025(5)错误本质:信任链断裂而非网络故障 2026/10/1 19:32:29

Office 30015-1025(5)错误本质:信任链断裂而非网络故障

1. 问题本质与真实场景还原:这不是网络故障,而是Office安装器的“信任链断裂” 你看到错误代码 30015-1025(5) ,紧接着弹窗提示 “Is your internet connection working?” —— 这个画面我太熟悉了。过去三年里,我在企业IT…

阅读更多 →
多模型工作台配置指南:两行配置接入DeepSeek、Qwen与GLM 2026/10/1 19:32:15

多模型工作台配置指南:两行配置接入DeepSeek、Qwen与GLM

1. 多模型工作台的核心思路与选型逻辑把DeepSeek、Qwen、GLM这三个模型塞进同一个工作台,听起来像是个挺唬人的工程,但实际操作下来,真正卡住大多数人的不是模型本身,而是配置层的抽象没做好。我前后折腾过不下五套多模型方案&…

阅读更多 →
多Agent编程流水线验收门禁:从假完成到真验证 2026/10/1 19:32:15

多Agent编程流水线验收门禁:从假完成到真验证

1. 为什么“说做完了”这件事值得单独做一条流水线 做过 AI 编程 Agent 的人大概都经历过这个场景:你给一个多 Agent 系统派了个任务,比如“把用户模块的单元测试补到 80% 覆盖率”,几个 Agent 分工协作,写代码的写代码、跑测试的…

阅读更多 →
产品命名四层过滤法:语义、发音、法律与工程实战指南 2026/10/1 19:32:14

产品命名四层过滤法:语义、发音、法律与工程实战指南

简介:本资源是一份面向市场营销从业者、品牌策划人员及高校相关专业学生的品牌命名策略分析资料,聚焦全球知名企业的经典命名实践,解决品牌命名中商标合规、国际识别、记忆度与文化适配等核心难题。文档为单个Word文件(.doc格式&a…

阅读更多 →
开源CRM系统深度解析:AEAI CRM架构、功能与部署实践 2026/10/1 19:32:14

开源CRM系统深度解析:AEAI CRM架构、功能与部署实践

1. 项目概述1.1 这套CRM到底解决了什么问题先聊点实在的。AEAI CRM这个名字,很多人第一次看到时都会愣一下,AEAI是“Application Engine AI”的缩写,它不是一个孤立的软件,而是一套基于配置化开发模式的应用平台产品线中的一员。和…

阅读更多 →
虚拟机连接不上网络排查:VMware网络模式、DNS与静态IP配置 2026/10/1 19:32:13

虚拟机连接不上网络排查:VMware网络模式、DNS与静态IP配置

1. 装完系统那一刻的断网:先把现象分到四类里晚上十一点,Ubuntu 22.04 装完,apt update卡在Connecting to archive.ubuntu.com,光标一动不动。这种场景我遇到过太多次了,第一反应千万别是"重装系统"——虚拟…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉