Python图像识别源码实战:环境配置、推理链路与避坑指南
简介这份资源是面向人工智能与计算机视觉方向的 Python 图像识别项目源码包适合具备一定 Python 基础、希望动手实践深度学习与图像处理的学习者也可作为课程设计、毕业设计或入门练手的参考方案。压缩包共收录 109 个文件约 16.72MB其中 26 个 py 脚本承担核心识别逻辑18 个 cpp 与 6 个 prototxt 文件对应模型推理与网络结构配置另有 23 张 jpg、2 张 png 图片样本、4 段 mp4 与 1 段 avi 演示视频以及 pth 权重、pyc 缓存、md 说明和 bat、sh 运行脚本等辅助内容覆盖从数据到推理的完整链路。目前已有 1015 人学习下载具备一定参考热度。读者可从中获取可运行的识别代码、模型配置与权重文件、示例图片与视频素材并借助说明文档和脚本快速复现实验流程理解图像识别系统的目录组织与模块划分为后续二次开发或功能扩展提供基础。1. 拆开这个图像识别源码包之前先想清楚它能替你省掉哪三天的活如果你正在搜「人工智能 python 软件/插件」相关的资源大概率不是想从零推导卷积怎么反向传播而是手里有个具体活儿要么是课程设计要交一个能跑起来的图像识别 Demo要么是产品原型需要快速验证「拍一张图 → 返回类别」这条链路要么是老板丢来一句「用 AI 识别一下这批图片」然后你就得在三天内拿出东西。这个人工智能的图像识别系统python源码.zip就是冲这个场景来的——它把数据读取、模型加载、推理、结果输出这条主链路已经串好了你拿到手改的是配置和类别不是从import torch开始搭脚手架。它适合三类人刚学完 Python 基础想摸一次完整 AI 项目的新手、需要快速交付演示的开发者、以及想拿一份能读的代码当参考模板的熟手。不适合指望它直接上生产、扛高并发或者做工业级精度调优的人——那得另说。下面我按「先跑通、再改懂、最后避坑」的顺序把这份源码拆给你看。2. 环境与依赖把 Python 版本和推理后端先钉死2.1 为什么第一步不是打开代码而是锁版本图像识别类源码包翻车最多的地方不是模型本身而是环境。同一份代码在 Python 3.8 某旧版推理库上跑得好好的换到 Python 3.12 最新版torch.load可能直接报权重不兼容或者某个np.float别名被移除导致AttributeError。我一般拿到这类包的第一件事是看它有没有requirements.txt没有就自己反推。常见做法是建一个独立虚拟环境别往系统 Python 里装。命令如下# 创建虚拟环境python3.8 是这类源码包兼容性最稳的版本区间 python -m venv venv_imgcls # 激活Linux / macOS source venv_imgcls/bin/activate # 激活Windows venv_imgcls\Scripts\activate # 升级 pip避免老 pip 解析依赖时抽风 python -m pip install --upgrade pip逻辑说明venv把依赖隔离在项目目录里删掉文件夹就等于卸载干净不会污染全局。参数上venv_imgcls是环境名随便起但建议带项目含义方便你同时维护多个包时不搞混。激活后命令行前面会出现(venv_imgcls)看到这个前缀才说明后续pip install装对了地方。2.2 依赖清单怎么读、怎么装这类图像识别源码通常依赖四类库数值计算numpy、图像读写opencv-python 或 Pillow、深度学习框架PyTorch 或 TensorFlow、以及可选的界面库PyQt5 / tkinter。装的时候按「先框架后业务」的顺序因为框架体积大、耗时长先装它能把网络问题暴露在前面。# 先装深度学习框架CPU 版体积小、装得快适合先跑通 pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu # 再装图像与数值依赖 pip install numpy opencv-python pillow # 如果源码带界面补上 GUI 库 pip install pyqt5逻辑说明--index-url指定官方 CPU 轮子源避免默认源里拉到带 CUDA 的大包。参数上torchvision必须和torch版本对应别一个装 2.x 一个装 0.x否则torchvision.transforms会报符号找不到。如果你有独立显卡且确认驱动正常可以把cpu换成对应的 CUDA 版本但新手阶段我建议先用 CPU 跑通别一上来就跟显卡驱动较劲。提示装完先跑一句python -c import torch, cv2, numpy; print(torch.__version__)四个库都能 import 且打印出版本号再往下走。这一步能挡掉后面一半的「ModuleNotFoundError」。2.3 目录结构先扫一遍再动手解压后别急着python main.py。先看目录里有没有models/、weights/、data/、config这类文件夹。权重文件.pth、.pt、.h5通常单独放源码里用相对路径引用。如果权重缺失代码会在加载模型那一步报FileNotFoundError这不是代码错是资源没放对位置。常见做法是把权重放到源码里写死的那个路径下或者改配置里的路径指向你实际存放的位置。3. 跑通推理主链路从一张图到一行类别结果3.1 推理流程的四个阶段不管这份源码封装得多花哨图像识别的推理主链路永远是四步读图 → 预处理 → 模型前向 → 取结果。读图是把文件变成数组预处理是缩放、归一化、转张量让输入符合模型训练时的格式前向是把张量喂给模型拿到输出取结果是找最大概率对应的类别标签。源码里可能把这几步拆在多个函数里也可能塞在一个predict()里但骨架跑不掉。下面是一段典型的推理代码你可以对照源码看它是不是这个结构import torch import cv2 import numpy as np from torchvision import transforms # 1. 定义预处理必须和训练时一致否则精度断崖式下跌 preprocess transforms.Compose([ transforms.ToPILImage(), # numpy 转 PIL transforms.Resize((224, 224)), # 统一到模型输入尺寸 transforms.ToTensor(), # 转张量并归一化到 [0,1] transforms.Normalize( # 按 ImageNet 均值方差标准化 mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225] ), ]) # 2. 读图opencv 读进来是 BGR要转 RGB img cv2.imread(test.jpg) img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 3. 预处理 增加 batch 维度 input_tensor preprocess(img).unsqueeze(0) # 4. 加载模型并推理 model torch.load(models/model.pth, map_locationcpu) model.eval() # 切推理模式关掉 dropout/bn 更新 with torch.no_grad(): # 关梯度省内存 output model(input_tensor) # 5. 取最大概率类别 prob torch.softmax(output, dim1) conf, pred torch.max(prob, dim1) print(f类别索引: {pred.item()}, 置信度: {conf.item():.4f})逻辑说明transforms.Compose把多个预处理串成流水线顺序不能乱Resize必须在ToTensor之前。Normalize的均值和方差是 ImageNet 的通用值如果你的模型是在别的数据集上训的这两个参数要换成对应的否则输入分布对不上结果就是玄学。unsqueeze(0)是给单张图补一个 batch 维度因为模型默认吃四维张量[N, C, H, W]。model.eval()和torch.no_grad()是推理标配漏了前者可能结果不稳定漏了后者显存/内存白涨。3.2 类别标签怎么对上号模型输出的是索引比如pred3但你要的是「猫」还是「狗」。索引到名称的映射通常存在一个classes.txt或labels.json里顺序必须和训练时一致。常见坑是源码里写死了 1000 类ImageNet但你换了自己的模型只有 10 类结果索引越界或者全错。改的时候找到标签文件按行对应索引第 0 行就是索引 0。# 读取类别标签一行一个类别名 with open(classes.txt, r, encodingutf-8) as f: classes [line.strip() for line in f.readlines()] print(f预测类别: {classes[pred.item()]})逻辑说明strip()去掉行尾换行符encodingutf-8防止中文类别名乱码。参数上如果你的标签文件是 JSON 格式就换成json.load但核心是「索引顺序 训练顺序」这个对不上后面全白搭。3.3 批量推理怎么改单张跑通后实际用的时候往往是一整个文件夹的图。把上面的逻辑包一层循环即可但要注意别每张图都重新加载模型——模型加载一次就够循环里只做读图和前向。import os model torch.load(models/model.pth, map_locationcpu) model.eval() img_dir images/ for fname in os.listdir(img_dir): if not fname.lower().endswith((.jpg, .png, .jpeg)): continue path os.path.join(img_dir, fname) img cv2.cvtColor(cv2.imread(path), cv2.COLOR_BGR2RGB) tensor preprocess(img).unsqueeze(0) with torch.no_grad(): out model(tensor) conf, pred torch.max(torch.softmax(out, dim1), dim1) print(f{fname} - {classes[pred.item()]} ({conf.item():.4f}))逻辑说明os.listdir遍历目录endswith过滤非图片文件避免读到.DS_Store或缩略图缓存导致imread返回None再崩在cvtColor。模型加载提到循环外这是批量推理和单张推理最大的性能差别放里面每张图都重新读权重慢十倍不止。4. 换模型、换类别、换输入尺寸改哪里不会崩4.1 换自己的模型要动哪几个点很多人拿到源码后想换成自己训练的模型结果一换就报错。核心要改三处权重路径、类别数、输入尺寸。权重路径好改类别数决定模型最后一层全连接输出维度输入尺寸决定预处理里的Resize目标。这三者必须和你的训练配置一致。配置项源码默认示例改成自己的改错后果权重路径models/model.pthmodels/my_model.pthFileNotFoundError类别数1000你的实际类别数输出维度不匹配报错输入尺寸224×224训练时的尺寸精度下降或 shape 报错归一化参数ImageNet 均值方差你数据集的均值方差结果偏差大但不报错表格里最后一行最阴——归一化参数错了不会报错只会让准确率莫名其妙地低属于典型的「代码能跑但结果不对」的坑。4.2 输入尺寸不一致时的处理策略如果你的模型训练时用的是 299×299而源码预处理写的是 224×224直接改Resize就行。但要注意有些模型对输入尺寸有硬性约束比如某些网络下采样多次后要求能被特定数整除改之前确认一下模型结构。常见做法是先用训练时的尺寸跑通后再尝试其他尺寸做对比。# 改预处理尺寸和训练配置对齐 preprocess transforms.Compose([ transforms.ToPILImage(), transforms.Resize((299, 299)), # 改成你训练时的尺寸 transforms.ToTensor(), transforms.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]), ])逻辑说明Resize接受元组时按(高, 宽)顺序传单个数则短边缩放到该值、长边等比。参数上如果你不确定训练尺寸去看训练脚本里的transform定义或者看模型第一层卷积期望的输入通道和后续特征图尺寸反推。4.3 置信度阈值什么时候该说「我不确定」分类模型永远会输出一个最大概率哪怕这张图是纯噪声。实际用的时候置信度低于某个阈值就应该返回「无法识别」而不是硬给一个类别。这个阈值没有标准答案常见做法是拿一批已知答案的图跑一遍看正确样本的置信度分布取一个能挡掉大部分错误的下限。THRESHOLD 0.6 # 低于这个值认为不可信 if conf.item() THRESHOLD: print(f{fname} - 无法确定最高置信度仅 {conf.item():.4f}) else: print(f{fname} - {classes[pred.item()]} ({conf.item():.4f}))逻辑说明THRESHOLD是经验值0.6 偏保守0.5 偏宽松。参数上如果你的场景宁可错杀不可放过就调高宁可给个结果也不要「无法识别」就调低。这个值要结合业务容忍度定不是技术问题。5. 避坑与排查那些让代码「能跑但不对」的细节5.1 现象代码不报错但预测结果全是同一个类别原因最常见的是预处理归一化参数和训练时不一致或者读图通道顺序错了BGR 当 RGB 用。模型收到的输入分布完全偏离训练分布输出就退化成常数。另一个可能是权重根本没加载成功模型还是随机初始化状态。解决先打印输入张量的均值和范围确认在合理区间归一化后大致在 -2 到 2 之间。再确认cv2.cvtColor那步没漏。最后检查权重加载后有没有打印模型参数做对比或者用一张训练集里的图测训练集都预测错说明权重或预处理有问题。5.2 现象换了自己的模型后报size mismatch for fc.weight原因模型最后一层全连接的输入维度和权重文件对不上。通常是你改了类别数但没改模型定义或者加载的权重和当前模型结构不是一套。解决确认模型定义里的类别数和权重文件匹配。如果是自己训练的权重加载时用strictFalse先跳过不匹配的层看能不能跑但这只是诊断手段正式用还是要结构对齐。# 诊断用跳过不匹配的键看哪些层对不上 state torch.load(models/my_model.pth, map_locationcpu) model.load_state_dict(state, strictFalse)逻辑说明strictFalse会忽略缺失或多余的键打印出来能看出是哪一层维度不一致。参数上正式加载还是用strictTrue让问题暴露出来。5.3 现象批量推理跑到一半内存爆了原因循环里累积了计算图或者没释放中间张量。虽然推理用了no_grad但如果代码里某处不小心保留了输出引用或者图片没做尺寸限制大图累积起来照样吃内存。解决确认torch.no_grad()包住了前向每轮循环结束把大变量置None读图后先Resize再转张量别拿原图直接进模型。如果图特别大读进来先缩放到合理尺寸再处理。5.4 现象中文类别名打印出来是乱码原因标签文件编码和读取编码不一致Windows 下常见 GBK 文件用 UTF-8 读。解决读标签文件时显式指定编码或者用chardet探测。最稳的做法是把标签文件统一转成 UTF-8 保存。# 尝试多种编码读取 for enc in [utf-8, gbk, gb18030]: try: with open(classes.txt, r, encodingenc) as f: classes [l.strip() for l in f.readlines()] break except UnicodeDecodeError: continue逻辑说明按顺序尝试编码哪个能读通用哪个。参数上gb18030是gbk的超集兼容性更好放最后兜底。5.5 现象GPU 上跑得好好的换 CPU 就报错原因权重保存时绑定了 GPU 设备CPU 加载时找不到对应设备。或者代码里写死了.cuda()调用。解决加载时加map_locationcpu并把代码里所有.cuda()改成条件判断。device torch.device(cuda if torch.cuda.is_available() else cpu) model torch.load(models/model.pth, map_locationdevice) model model.to(device) input_tensor input_tensor.to(device)逻辑说明map_location告诉加载器把权重映射到哪个设备torch.cuda.is_available()做运行时判断这样同一份代码在两种环境下都能跑。参数上device对象后续要同步应用到模型和输入张量漏一个就会报设备不一致。6. 把推理封装成可复用接口一个predict()函数收口所有细节跑通脚本之后真正好用的做法是把所有细节收进一个函数外部只传图片路径、拿结果。这样你后面接界面、接服务、接批量任务都只调这一个入口不用每次复制粘贴预处理代码。import torch import cv2 import numpy as np from torchvision import transforms class ImageClassifier: def __init__(self, model_path, classes_path, input_size224, deviceNone): # 设备自动选择没 GPU 就用 CPU self.device device or torch.device( cuda if torch.cuda.is_available() else cpu ) # 加载模型并切推理模式 self.model torch.load(model_path, map_locationself.device) self.model.eval() self.model.to(self.device) # 读取类别标签 with open(classes_path, r, encodingutf-8) as f: self.classes [line.strip() for line in f.readlines()] # 预处理流水线尺寸可配 self.preprocess transforms.Compose([ transforms.ToPILImage(), transforms.Resize((input_size, input_size)), transforms.ToTensor(), transforms.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]), ]) def predict(self, img_path, threshold0.0): # 读图并转 RGB img cv2.imread(img_path) if img is None: return {error: 图片读取失败} img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 预处理 前向 tensor self.preprocess(img).unsqueeze(0).to(self.device) with torch.no_grad(): output self.model(tensor) # 取结果 prob torch.softmax(output, dim1) conf, pred torch.max(prob, dim1) conf_val conf.item() # 阈值判断 if conf_val threshold: return {label: 无法确定, confidence: conf_val} return { label: self.classes[pred.item()], confidence: conf_val, index: pred.item(), } # 使用示例 clf ImageClassifier(models/model.pth, classes.txt, input_size224) result clf.predict(test.jpg, threshold0.6) print(result)逻辑说明类初始化时把模型、标签、预处理都准备好predict只负责单次推理。threshold作为参数传入而不是写死方便不同场景调不同值。返回字典而不是直接打印是为了后面接界面或 API 时能直接序列化。参数上input_size默认 224如果你的模型是别的尺寸实例化时传对应值即可不用改类内部代码。这个封装的价值在于你后面想加批量、加界面、加 HTTP 接口都只围绕predict这一个方法做预处理和模型加载的细节再也不用碰。我一般还会在__init__里加一句打印确认模型加载成功、类别数对得上避免静默失败。从那以后我每次拿到新的图像识别源码包都强制先跑一张训练集里的图验证精度再跑一张训练集外的图看泛化两步都过了才往业务里接。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

滴滴出行行程单模板2024:企业报销与财务审核的标准化实操

滴滴出行行程单模板2024:企业报销与财务审核的标准化实操

简介:这份模板专为企业行政、财务及差旅管理人员设计,用于规范记录员工使用滴滴出行的每一笔行程,解决出行数据散乱、报销凭证不全等问题。模板包含姓名、工号、部门、行程起止日期、起终点、车型、里程及金额等关键字段,并附有20…

2026/10/12 14:12:26 阅读更多 →
Boss直聘Python岗位数据清洗与可视化实战

Boss直聘Python岗位数据清洗与可视化实战

简介:这是一份面向高校计算机与数据科学专业学生的期末大作业级Python数据可视化实战项目,聚焦Boss直聘招聘平台真实岗位数据的采集、清洗、分析与多维可视化呈现,助力初学者掌握从爬虫到商业图表输出的完整数据分析链路。资源包共26个文件&a…

2026/10/12 14:12:26 阅读更多 →
汽车DFMEA表格设计指南:结构、评分与落地实践

汽车DFMEA表格设计指南:结构、评分与落地实践

简介:这份资源是一份面向汽车行业设计阶段的DFMEA(设计失效模式与影响分析)表格文档,适合汽车设计工程师、质量管理人员及项目核心小组成员参考使用,用于系统识别和评估设计中的潜在缺陷与风险。资源包内共1个doc文件&…

2026/10/12 14:12:26 阅读更多 →

最新新闻

螺旋天线仿真:先定法向模还是轴向模,再谈绕线与参数优化

螺旋天线仿真:先定法向模还是轴向模,再谈绕线与参数优化

简介:这是一份面向天线设计与射频工程领域学习者与从业者的技术文献,包体为单个PDF文档,压缩包仅181KB。文档围绕螺旋天线的仿真与设计展开:先说明螺旋天线的金属螺旋线结构与同轴线馈电方式,介绍辐射方向与螺旋线圆周…

2026/10/12 19:15:55 阅读更多 →
open-code-review:轻量级开源协作契约实践指南

open-code-review:轻量级开源协作契约实践指南

1. 这不是代码审查工具,而是一套可落地的开源协作契约“open-code-review”这个标题乍看像某个新发布的 GitHub Action 或 CLI 工具,但实际翻遍主流包管理器、GitHub Trending 和技术社区讨论,都找不到一个叫这个名字的成熟项目。它没有 READ…

2026/10/12 19:15:55 阅读更多 →
OpenJDK 12 Windows编译实战:VS 2019+CMake精准构建指南

OpenJDK 12 Windows编译实战:VS 2019+CMake精准构建指南

1. 项目概述:为什么还要亲手编译 OpenJDK?这真不是“复古行为艺术” OpenJDK 12 Visual Studio 2019 编译过程——看到这个标题,不少同行第一反应是:“现在谁还自己编译 JDK?直接下个二进制包不香吗?”我…

2026/10/12 19:15:55 阅读更多 →
Python+itchat实现微信群打卡自动统计工具

Python+itchat实现微信群打卡自动统计工具

1. 项目缘起与整体设计思路1.1 这个工具到底解决什么问题先说说这个项目的来龙去脉。当时的情况是,某个线上协作小组每天需要在群里汇报健康状态或者任务进度,类似“打卡”的动作。群里有几十号人,靠人眼去翻聊天记录、核对谁没发、谁发漏了&…

2026/10/12 19:15:55 阅读更多 →
从零搭建代码评审自动化流水线:open-code-review 实战与调参经验

从零搭建代码评审自动化流水线:open-code-review 实战与调参经验

1. 从零搭建一套代码评审自动化流水线,我为什么盯上了 open-code-review代码评审这件事,做过的都懂。项目小的时候,两三个人互相看看代码,提两句意见,也就过去了。可一旦团队规模上来,分支多了,…

2026/10/12 19:15:55 阅读更多 →
冰雹数列深度解析:3n+1猜想、27号航程与Python验证

冰雹数列深度解析:3n+1猜想、27号航程与Python验证

这个系列聊到第三篇,我想把一个特别耐玩的数列摊开来讲:3n1数列,很多人也叫它冰雹数列。规则简单到一句话就能说完——遇到偶数就除以2,遇到奇数就乘3再加1,然后重复这个过程。你会得到一个忽大忽小、看起来毫无章法&a…

2026/10/12 19:14:54 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 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/11 10:45:37 阅读更多 →
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/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →