专科毕设实战:工程技术人员考评系统设计与实现
简介本资源是一份面向专科计算机专业学生的毕业论文《工程技术人员考评系统设计与实现》聚焦企业人力资源管理中科技人才评价的数字化转型需求为初学者提供完整的Web应用型信息系统设计范例。论文涵盖系统数据建模、需求分析、三层架构设计、月计划考评/审核/记分/年度查询等核心模块的功能实现并结合WEB应用技术说明前端交互、后端逻辑与MySQL数据库协同方案适合作为课程设计参考或毕设选题拓展。资源为单文件DOC文档共1个Word文件283KB内容结构完整含摘要、目录、六章正文及参考文献章节清晰覆盖从理论依据到技术落地的全流程。目前已有109人学习下载读者可直接获取规范的论文写作框架、可复用的系统功能模块描述、典型考评业务流程梳理及技术选型逻辑助力快速掌握中小型管理信息系统的设计思路与表达规范。1. 为什么一个“考评系统”能撑起专科计算机毕业论文——从需求黑洞到可交付系统的实战闭环很多专科同学拿到“工程技术人员考评系统设计与实现”这个题目时第一反应是这不就是个带登录的表格录入网站写满50页Word就能交差但真正动手两周后90%的人卡在同一个地方系统跑不起来数据库连不上评分逻辑一改就崩答辩老师问“你这个‘考评’到底考了什么、怎么算分、谁来用”当场哑火。这不是功能堆砌问题而是对“工程技术人员”这一角色缺乏真实业务理解——他们不是坐办公室填表的文员而是在产线巡检、设备调试、故障响应中靠经验决策的一线力量他们的考评必须嵌入真实工作流比如一次PLC程序修改是否通过验收、某次焊接缺陷复检是否达标、交接班记录是否完整可追溯。本篇不讲空泛的“系统架构图”或“UML建模”而是带你用最精简的技术栈Python Flask SQLite Bootstrap从零构建一个能演示、能操作、能解释清楚每一分怎么来的考评系统。它不追求高并发但必须让答辩老师点开就能看到“张工上周完成3次设备校准2次达标1次返工综合得分86.5”——这才是专科毕设该有的落地感。2. 从业务场景反推数据模型为什么不用“用户-角色-权限”老套路2.1 工程技术人员考评的三个不可绕过的真实约束专科毕设最容易翻车的是把通用后台管理系统模板直接套用。但工程现场有硬性约束考评主体非IT人员车间主任、班组长可能只会用手机微信扫码看结果不会登录后台配权限考评动作强时效性设备突发故障后2小时内必须完成处置记录与自评超时自动降级评分依据必须可回溯不能只存一个“85分”得存下原始证据——比如一张带时间戳的现场照片、一段语音描述、一份签字确认的纸质单据扫描件。这些约束直接否定了RBAC基于角色的访问控制模型。我们改用轻量级职责绑定模型每个技术人员关联一个“岗位能力矩阵”矩阵里定义其被考核的维度如“电气安全规范执行”“传感器校准精度”每个维度绑定具体的证据类型照片/录音/签字单和时效规则如“校准记录需在操作后30分钟内上传”。2.2 数据库设计用3张表解决核心闭环不搞复杂ER图只建3张物理表覆盖全部主干流程-- 表1技术人员基础档案含岗位能力矩阵 CREATE TABLE technicians ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, position TEXT NOT NULL, -- 如自动化设备维护员 ability_matrix TEXT NOT NULL -- JSON字符串示例{电气安全: {evidence_type:photo,deadline_min:30}, 校准精度: {evidence_type:audio,deadline_min:15}} ); -- 表2考评任务由班组长发起带截止时间 CREATE TABLE evaluation_tasks ( id INTEGER PRIMARY KEY AUTOINCREMENT, technician_id INTEGER NOT NULL, task_type TEXT NOT NULL, -- 对应ability_matrix中的key如电气安全 deadline DATETIME NOT NULL, -- 任务截止时间 status TEXT DEFAULT pending -- pending/submitting/completed/overdue ); -- 表3考评证据与评分一次提交即一条记录 CREATE TABLE evidence_submissions ( id INTEGER PRIMARY KEY AUTOINCREMENT, task_id INTEGER NOT NULL, evidence_path TEXT, -- 本地路径如uploads/20240520_1423_zhangg_photo.jpg evidence_type TEXT, -- photo/audio/signature score REAL, -- 班组长打分0-100 comment TEXT, -- 手写评语 submit_time DATETIME DEFAULT CURRENT_TIMESTAMP );提示ability_matrix存JSON而非拆成多表是专科毕设的务实选择——避免外键级联导致调试崩溃且方便后期用Python字典直接解析。evidence_path不存URL因毕设演示环境无公网本地路径更可靠。2.3 关键逻辑验证如何确保“超时自动降级”不靠前端JS很多同学把截止时间校验写在前端答辩时被老师清空浏览器缓存就失效。正确做法是所有状态变更必须经后端校验。例如提交证据时Flask路由强制检查# app.py from datetime import datetime, timedelta import json app.route(/submit_evidence, methods[POST]) def submit_evidence(): task_id request.form[task_id] # 1. 先查任务详情 task db.execute(SELECT * FROM evaluation_tasks WHERE id ?, (task_id,)).fetchone() if not task: return 任务不存在, 404 # 2. 检查是否超时关键 now datetime.now() deadline datetime.strptime(task[deadline], %Y-%m-%d %H:%M:%S) if now deadline: # 自动降级分数上限压至60分且标记为overdue db.execute(UPDATE evaluation_tasks SET status overdue WHERE id ?, (task_id,)) return 任务已超时提交将按降级规则处理, 200 # 3. 正常保存证据... # 后续代码省略这段逻辑的意义在于让“超时”成为系统级事实而非UI提示。答辩时老师随便改手机时间系统依然坚挺——这是工程思维的起点。3. 前端交互设计用Bootstrap组件规避JavaScript手写陷阱3.1 为什么放弃Vue/React专科毕设的“够用”哲学有同学坚持用Vue写动态评分表结果卡在axios跨域、路由守卫配置上最后答辩前3天紧急换回纯HTML。真实建议用Bootstrap 5的原生组件少量jQuery100行代码搞定所有交互。原因有三毕设演示环境是本地Chrome无需兼容IE所有数据通过Flaskrender_template一次性注入无AJAX请求Bootstrap的>!-- templates/task_list.html -- div classrow {% for task in tasks %} div classcol-md-4 mb-3 div classcard h-100 border-left-4 {% if task.status overdue %}border-danger{% elif task.status pending %}border-warning{% else %}border-success{% endif %} div classcard-body h5 classcard-title{{ task.task_type }}/h5 p classcard-text small classtext-muted截止span idcountdown-{{ task.id }}/span/small /p !-- 倒计时JS仅渲染层不参与逻辑 -- script const deadline new Date({{ task.deadline }}); const now new Date(); const diffMs deadline - now; const diffMins Math.ceil(diffMs / 60000); document.getElementById(countdown-{{ task.id }}).textContent diffMins 0 ? 已超时 : ${diffMins}分钟; /script {% if task.status pending %} a href{{ url_for(submit_evidence, task_idtask.id) }} classbtn btn-primary btn-sm立即提交/a {% elif task.status overdue %} span classbadge bg-danger已超时/span {% else %} span classbadge bg-success已完成/span {% endif %} /div /div /div {% endfor %} /div注意倒计时用客户端JS仅作视觉提示绝不用于判断是否超时——后端校验才是唯一权威。这是新手最容易混淆的边界。3.3 证据上传页用Bootstrap File Input控件绕过FormData手写上传照片/录音是高频操作但专科同学常被FormData.append()和fetch的header设置搞崩溃。解决方案用Bootstrap内置文件输入后端直接接收request.files。!-- templates/submit_form.html -- form methodPOST enctypemultipart/form-data div classmb-3 label classform-label上传{{ task.task_type }}证据/label input classform-control typefile nameevidence_file accept{% if task.evidence_type photo %}image/*{% elif task.evidence_type audio %}audio/*{% else %}*/*{% endif %} required /div div classmb-3 label classform-label评分0-100/label input classform-control typenumber namescore min0 max100 required /div button typesubmit classbtn btn-success提交考评/button /form后端接收逻辑Flaskapp.route(/submit_evidence/int:task_id, methods[GET, POST]) def submit_evidence(task_id): if request.method POST: # 直接取文件对象无需解析FormData file request.files[evidence_file] if file and allowed_file(file.filename): # allowed_file()校验后缀 filename secure_filename(f{datetime.now().strftime(%Y%m%d_%H%M%S)}_{file.filename}) filepath os.path.join(app.config[UPLOAD_FOLDER], filename) file.save(filepath) # 直接保存 # 写入数据库 db.execute( INSERT INTO evidence_submissions (task_id, evidence_path, evidence_type, score, comment) VALUES (?, ?, ?, ?, ?), (task_id, filepath, get_evidence_type(file.filename), request.form[score], request.form.get(comment, )) ) db.execute(UPDATE evaluation_tasks SET status completed WHERE id ?, (task_id,)) return redirect(url_for(task_list))这套组合拳的价值在于把“上传功能”压缩成1个HTML标签3行Python把精力留给业务逻辑本身。4. 避坑指南专科毕设答辩现场最常被问倒的5个问题及血泪解法4.1 现象答辩时系统报错“sqlite3.OperationalError: database is locked”原因SQLite在Windows下对并发写入极其敏感而Flask默认开启多线程threadedTrue当多个请求同时写数据库如两人同时提交就会锁死。解决在Flask启动时强制单线程并关闭调试模式调试模式会额外触发重载线程if __name__ __main__: # 关键禁用多线程用单线程模拟真实部署 app.run(debugFalse, threadedFalse, host127.0.0.1, port5000)提示毕设演示环境不需要并发强行多线程反而制造麻烦。这是“够用”原则的典型体现。4.2 现象班组长登录后看不到自己管辖的技术人员列表原因数据库设计缺失“班组-人员”关联或查询SQL写成SELECT * FROM technicians未加WHERE team_id ?条件。解决在technicians表中增加team_id字段整数并在班组长登录后通过session存储其team_id所有查询加过滤# 查询时 team_id session.get(team_id) technicians db.execute(SELECT * FROM technicians WHERE team_id ?, (team_id,)).fetchall()注意不要用“管理员能看到全部”这种偷懒设计——答辩老师会追问“如果公司有20个班组你怎么保证A班组长看不到B班数据” 必须显式绑定。4.3 现象上传的照片在页面显示为乱码路径如uploads/20240520_1423_zhangg_photo.jpg但图片不显示原因Flask默认不提供静态文件服务evidence_path存的是相对路径但浏览器请求时没映射到/uploads/路由。解决添加静态文件路由将uploads文件夹暴露为可访问路径app.route(/uploads/filename) def uploaded_file(filename): return send_from_directory(app.config[UPLOAD_FOLDER], filename)并在HTML中用img src{{ url_for(uploaded_file, filenameevidence.filename) }}引用。血泪经验路径问题占专科毕设调试时间的40%务必在app.config[UPLOAD_FOLDER]中写绝对路径如os.path.join(os.path.dirname(__file__), uploads)。4.4 现象评分提交后历史记录页显示“None”而不是具体分数原因数据库字段score定义为REAL但插入时传了字符串85而非浮点数85.0SQLite弱类型导致读取异常。解决强制类型转换插入前做清洗score float(request.form[score]) # 确保是float db.execute(INSERT ... VALUES (?, ?, ?, ?, ?), (..., score, ...))玄学警告SQLite的类型“弹性”是双刃剑毕设阶段宁可多写一行float()也不要赌它自动转换。4.5 现象答辩老师用手机扫码打开系统页面排版全乱按钮点不动原因未启用Bootstrap的响应式视口viewport元标签或CSS未加载。解决在所有HTML模板的head中强制加入meta nameviewport contentwidthdevice-width, initial-scale1 link hrefhttps://cdn.jsdelivr.net/npm/bootstrap5.3.0/dist/css/bootstrap.min.css relstylesheet并确保Flask的static文件夹中存放了Bootstrap JS或继续用CDN。后悔药答辩前务必用真机微信内置浏览器测试PC端正常≠移动端可用。5. 让答辩老师眼前一亮的进阶技巧用Excel导出实现“可审计性”证明5.1 为什么Excel导出是专科毕设的“信任锚点”答辩老师最怕听到“系统里有数据”却无法独立验证。而Excel是所有人包括非技术评委都能打开、排序、筛选、求和的通用格式。导出一份《张工2024年5月考评汇总.xlsx》里面包含任务类型、提交时间、证据类型、评分、评语、是否超时——这就是最朴素的“可审计性”。它不炫技但直击工程文档的核心要求可追溯、可复现、可验证。5.2 用openpyxl实现零依赖导出比pandas更轻量专科毕设环境常无法安装pandas依赖太多openpyxl只需pip install openpyxl且API极简。导出逻辑封装为独立函数# utils/export.py from openpyxl import Workbook from openpyxl.styles import Font, PatternFill, Alignment from datetime import datetime def export_technician_report(technician_id, db): # 1. 查询该人员所有考评记录 records db.execute( SELECT t.task_type, e.submit_time, e.evidence_type, e.score, e.comment, CASE WHEN e.submit_time t.deadline THEN 是 ELSE 否 END as is_overdue FROM evidence_submissions e JOIN evaluation_tasks t ON e.task_id t.id WHERE t.technician_id ? ORDER BY e.submit_time DESC , (technician_id,)).fetchall() # 2. 创建Excel工作簿 wb Workbook() ws wb.active ws.title 考评汇总 # 3. 写入表头加粗背景色 headers [任务类型, 提交时间, 证据类型, 评分, 评语, 是否超时] for col_num, header in enumerate(headers, 1): cell ws.cell(row1, columncol_num, valueheader) cell.font Font(boldTrue) cell.fill PatternFill(start_colorDDEBF7, end_colorDDEBF7, fill_typesolid) cell.alignment Alignment(horizontalcenter) # 4. 写入数据行 for row_num, record in enumerate(records, 2): for col_num, value in enumerate(record, 1): ws.cell(rowrow_num, columncol_num, valuevalue) # 5. 自动调整列宽 for column in ws.columns: max_length 0 column_letter column[0].column_letter for cell in column: try: if len(str(cell.value)) max_length: max_length len(str(cell.value)) except: pass adjusted_width min(max_length 2, 50) # 限制最大宽度 ws.column_dimensions[column_letter].width adjusted_width # 6. 保存文件 filename freport_{technician_id}_{datetime.now().strftime(%Y%m%d_%H%M%S)}.xlsx filepath os.path.join(app.config[EXPORT_FOLDER], filename) wb.save(filepath) return filename5.3 在Flask中集成导出路由与前端按钮后端路由只需调用函数并返回文件app.route(/export_report/int:technician_id) def export_report(technician_id): filename export_technician_report(technician_id, get_db()) return send_from_directory(app.config[EXPORT_FOLDER], filename, as_attachmentTrue)前端按钮放在技术人员详情页a href{{ url_for(export_report, technician_idtech.id) }} classbtn btn-outline-secondary btn-sm i classbi bi-file-earmark-excel/i 导出Excel报告 /a关键细节as_attachmentTrue确保浏览器弹出下载对话框而非尝试在线打开EXPORT_FOLDER必须是绝对路径且Flask进程有写入权限Windows下建议设为C:/temp/exports。5.4 答辩话术如何把Excel导出讲成技术亮点不要说“我用了openpyxl”要说“老师工程考评的核心价值不是界面多漂亮而是数据能否被第三方独立验证。所以我实现了Excel导出功能——您现在就可以扫码打开系统点一下‘导出报告’生成一个标准Excel文件。在这个文件里每一行都对应一次真实考评动作包含时间戳、证据类型、人工评分和是否超时。您可以拿它去Excel里做任何分析比如筛选‘是否超时是’的记录统计张工本月超时率或者用SUMIF计算‘电气安全’类任务的平均分。这保证了整个考评过程不是黑匣子而是完全透明、可审计的。”这句话把工具选择openpyxl升维到工程理念可审计性瞬间拉开与“做了个登录页面”的同学差距。我带过的专科毕设项目里最常被低估的不是代码量而是对“工程”二字的理解深度。考评系统不是CRUD练习它是把抽象的“能力要求”翻译成可采集、可验证、可追溯的数据动作。那些在答辩时被追问“这个分怎么算的”而支吾的同学往往输在没想清楚班组长打分时依据的是他刚看过的现场照片还是系统里预设的算法答案必须是前者——因为工程现场没有银弹只有带着油污的手和带着温度的判断。所以我的习惯是每次写完一个功能就关掉IDE用手机微信扫码打开假装自己是第一次用的班组长点三遍“提交证据”再导出Excel用Excel的筛选功能查一遍数据是否自洽。这种笨办法比调一百次断点更接近真实。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

开源推理模型LongCat-Flash-Thinking-2601全解析:部署实战与避坑指南

开源推理模型LongCat-Flash-Thinking-2601全解析:部署实战与避坑指南

这两年推理模型几乎把AI圈子的热度重新点了一遍,前脚一堆带“Thinking”后缀的长思维链模型扎堆开源,后脚就有人把内部代号“龙猫”的项目LongCat-Flash-Thinking-2601放了出来。第一时间拉了权重、翻完仓库、跑了几轮benchmark,还在两种不同…

2026/10/18 18:24:57 阅读更多 →
用AI辅助开题报告写作:从选题到成稿的四层实战工作流

用AI辅助开题报告写作:从选题到成稿的四层实战工作流

深夜十一点,电脑前摊着导师三天前批回来的开题报告初稿,红笔批注比正文还长。最扎眼的那句写着:"你的研究意义写得太空,文献综述像课程作业,方法部分看不出你到底要怎么做。"屏幕的光映在脸上,脑…

2026/10/18 18:23:57 阅读更多 →
Huffman编码的字节对齐与MFC内存序列化实战

Huffman编码的字节对齐与MFC内存序列化实战

简介:本资源是一套基于C与MFC框架实现的Huffman无损压缩/解压缩完整工程,面向C初学者及Windows桌面应用开发学习者,解决数据压缩原理落地难、GUI交互缺失、工程结构不清晰等常见学习痛点。压缩包共46个文件,涵盖6个头文件&#xf…

2026/10/18 18:23:57 阅读更多 →

最新新闻

Canny边缘检测完全指南:原理、OpenCV实现与调参实战

Canny边缘检测完全指南:原理、OpenCV实现与调参实战

1. Canny 算法:为什么一提边缘检测,绕不开的就是它1.1 它到底是什么,能解决什么问题如果你是做图像处理或者视觉相关开发的,不管是工业质检、文档扫描、自动化测量,还是自动驾驶感知,只要提到“找边缘”&am…

2026/10/18 18:57:11 阅读更多 →
Android反编译工具包实战:从jadx、apktool到动态调试的完整流程

Android反编译工具包实战:从jadx、apktool到动态调试的完整流程

简介:在Android应用安全分析与逆向工程中,反编译是理解APK内部逻辑的核心手段。APK本质上是一个包含dex字节码、资源文件与签名信息的压缩包,反编译工具链通常围绕静态分析与动态调试两条线展开。静态分析工具如jadx、apktool、dex2jar各有侧…

2026/10/18 18:57:11 阅读更多 →
Vigilog开源日志分析框架:轻量级文本探针实现上下文关联告警

Vigilog开源日志分析框架:轻量级文本探针实现上下文关联告警

简介:Vigilog-开源是一款面向IT运维工程师、系统管理员及Java开发者的跨平台日志分析工具,专为高效处理海量应用程序与系统日志而设计,解决传统文本编辑器在日志检索、实时过滤与可视化识别上的低效痛点。资源包为zip格式,共21个文…

2026/10/18 18:57:11 阅读更多 →
基于贝叶斯的电力系统故障诊断MATLAB工程包详解与复现

基于贝叶斯的电力系统故障诊断MATLAB工程包详解与复现

简介:附件.zip内含一套基于贝叶斯方法的电力系统故障诊断实现方案,面向电力系统研究人员、电气工程专业学生以及从事状态检修的工程技术人员,帮助建立从数据采集到故障模式识别的完整诊断思路。压缩包共32个文件,以17个m脚本文件的…

2026/10/18 18:57:11 阅读更多 →
GitHub Trending深度观察:AI工具、本地优先与开发者体验趋势

GitHub Trending深度观察:AI工具、本地优先与开发者体验趋势

1. 2026年4月2日的Trending榜首,藏着三条清晰的信号早上照例刷了一遍GitHub Trending,周六的榜单通常比工作日更"诚心"——没有太多蹭热点的营销型项目,留下来的大多是开发者真正愿意花时间维护、或者确实解决实际痛点的东西。4月2…

2026/10/18 18:57:11 阅读更多 →
个人介绍PPT完整制作指南:内容规划、AI生成与演示演练

个人介绍PPT完整制作指南:内容规划、AI生成与演示演练

前阵子有个朋友找我救急,说第二天要参加一个竞聘答辩,PPT是从简历里复制粘贴出来的,每页塞了两三百字,字号还压得很小。我点开文件看了一眼,第一反应是:这不是在做自我展示,这是让评委参加一场阅…

2026/10/18 18:56:05 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 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/18 0:55:02 阅读更多 →
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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →