Compare commits

...

9 Commits

Author SHA1 Message Date
84b4437b76 update patch js
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6s
2026-04-24 09:46:18 +08:00
4511cf46e8 patch js
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6s
2026-04-24 09:41:24 +08:00
30c95f3f39 优化移动端尾图
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6s
2026-04-24 09:32:54 +08:00
7d70e994f9 拆分尾图
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 7s
2026-04-24 09:30:57 +08:00
f3b18233a4 Merge branch 'main' of git.flt6.top:flt/qrhs
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 7s
2026-04-24 00:52:24 +08:00
d83a58952f 优化 2026-04-24 00:52:18 +08:00
flt
098d331174 更新 .gitea/workflows/demo.yaml
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 4s
2026-04-19 19:04:12 +08:00
8b076c66c6 Merge branch 'main' of git.flt6.top:flt/qrhs
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 5s
2026-04-19 19:02:44 +08:00
952709fa62 zhinenghua1 2026-04-19 19:02:35 +08:00
4 changed files with 293 additions and 2 deletions

View File

@ -9,9 +9,23 @@ jobs:
- name: Check out repository code - name: Check out repository code
uses: https://gitee.com/mirror-actions/checkout@v4 uses: https://gitee.com/mirror-actions/checkout@v4
- run: cd ${{ gitea.workspace }} - run: cd ${{ gitea.workspace }}
- name: Insert post image
run: |
set -euo pipefail
post_content="$(cat post.html)"
find . -type f -name "*.md" -print0 | while IFS= read -r -d '' file; do
{
printf '\n'
printf '%s\n' "$post_content"
} >> "$file"
done
- run: npx refs-cli - run: npx refs-cli
- name: patch js path
run: |
find dist -type f -name "*.html" -exec sed -i 's|/js/|/qrh/js/|g' {} +
find dist -type f -name "*.html" -exec sed -i 's|/data\.js|/qrh/data.js|g' {} +
- name: copy exports to www - name: copy exports to www
run: | run: |
mv /var/www/qrh /var/www/qrh.bak rm -rf /var/www/qrh
mv ${{ gitea.workspace }}/dist /var/www/qrh mv ${{ gitea.workspace }}/dist /var/www/qrh
- run: echo "🍏 This job's status is ${{ job.status }}." - run: echo "🍏 This job's status is ${{ job.status }}."

253
docs/智能化实验.md Normal file
View File

@ -0,0 +1,253 @@
自动滴定控制平台速查清单
===
这是一份面向最终用户的自动滴定控制平台操作速查表,帮助您零代码基础快速完成“采集-训练-滴定-分析”的完整实验闭环。
快速入门
---
### 启动软件
双击运行目录下的启动程序(如 `run_ui.bat`),软件会自动在浏览器中打开操作界面。
软件左侧为**导航栏**,用于切换页面;右侧为**主操作区**。
### 核心工作流
<!--rehype:wrap-class=col-span-2-->
- **第一步:数据采集** -> 组装并控制泵和相机,收集滴定过程中不同颜色/状态的照片。
- **第二步:人工整理** -> 将照片按状态分别放入不同名称的文件夹中。
- **第三步:模型训练** -> 调整“学习计划”,让 AI 认识这些颜色/状态。
- **第四步:自动滴定** -> 设置“终点规则”,让 AI 接管设备自动完成滴定并停止。
- **第五步:滴定回放** -> 事后查看历史视频和数据曲线。
第一步:数据采集
---
<!--rehype:body-class=cols-3-->
### 1. 硬件准备
| 检查项 | 状态说明 |
| ---- | ---- |
| `注射泵` | 确保电源开启,用 USB 数据线连接电脑。 |
| `摄像头` | 确保对准滴定瓶,且环境光线充足、稳定。 |
<!--rehype:className=show-header-->
*注意:如果未连接硬件,软件会自动隐藏“数据采集”和“自动滴定”菜单。*
### 2. 采集图像
<!--rehype:wrap-class=col-span-2-->
- 点击左侧导航栏进入 **【数据采集】** 页面
- **设置参数**:输入注射泵的`推注速度``体积`,以及相机的`抓拍间隔`
- **启动**:点击【滴液】按钮。泵开始推进设定的体积,相机自动连续拍照。
- **结束**:完成后点击【关闭相机】。**注意不是【停止】**
- **查看**:点击【打开目录】即可查看刚刚拍摄的照片。(也许窗口被最小化了)
- **重置**:点击【更换目录】将不同批次滴定过程分开。
<!--rehype:className=style-timeline-->
### 如果右侧没有显示目标摄像头
- 拖动`采集参数配置``摄像头编号`
- 点击`启动相机``关闭相机`,观察右侧预览。
<!--rehype:className=style-timeline-->
### 如果设置错了想停止
<!--rehype:className=style-arrow-->
- 点击【停止】,这不会关闭摄像头
<!--rehype:className=style-timeline-->
### 如果软件意外退出了,注射泵里还有溶液
- 点击【重置体积目录】
- 输入注射泵读数
<!--rehype:className=style-timeline-->
第二步:人工整理数据
---
<!--rehype:body-class=cols-1-->
AI 需要您亲自告诉它什么是“起点”,什么是“终点”。这是最重要的一步!
### 整理数据
- 打开您电脑上的项目文件夹,找到与启动程序在同一个文件夹内的 `data/` 目录。(如果不存在则创建)
- 在里面创建几个文件夹,用滴定状态命名(建议用英文,例如:`red` 代表红色起点,`blue` 代表蓝色终点)。
*注意:请直接在 `data/` 下创建文件夹,千万不要在 `clear` 或 `pink` 等分类文件夹里再创建子文件夹。*
- 打开刚才采集保存在 `Input/` 下的照片,根据实际颜色挑出来,分别复制放入您刚建好的对应状态文件夹中。
*提示:每个文件夹里的照片数量尽量差不多,不要有的放了几千张,有的只有几张,这样 AI 会“偏科”。*
<!--rehype:className=style-timeline-->
第三步AI 模型训练
---
<!--rehype:body-class=cols-2-->
准备好照片后,点击进入 **【模型训练】** 页面,告诉 AI 怎么学习。这些参数就像是给 AI 安排的“课程表”。
### 基础训练参数
| 参数名称 | 白话解释 |
| ---- | ---- |
| **模型文件名** | 模型名。如果输入以前用过的名字AI 会在原来基础上继续学。 |
| **训练轮数** | 数字越大(比如 100学得越细但耗时越长。 |
| **数据批大小** | 同时看几张照片。显卡好可以填大点(如 128普通电脑填小点如 32填太大电脑容易卡死。**<red>一定小于总照片数的四分之一</red>** |
| **学习率** | AI 纠正错误的步伐大小。太大容易“学偏”,太小学得慢,保持默认就好。 |
| **日志/保存间隔** | 每学多少次就在屏幕上打印一下成绩,或者把模型保存一下。 |
<!--rehype:className=show-header-->
### 高级训练参数
| 参数名称 | 白话解释 |
| ---- | ---- |
| **验证集比例** | 建议留 20% (0.2),如果数据集很小可以适度降低。 |
| **随机种子** | 一个魔法数字。只要这个数字不变,每次训练抽取的考试题都是同一批。 |
| **特征/隐藏层维度** | 决定 AI 大脑的复杂程度。一般不用改,除非你觉得 AI 实在学不会太复杂的图片。 |
| **加载到显卡** | 将训练集加载到显存。如果有独显,请勾选。 |
| **工作线程数** | CPU 越好数字可以越大,如果报错就改回 0。 |
<!--rehype:className=show-header-->
### loss值长期卡在0.6~0.7
loss值长期卡在0.6~0.7代表着模型完全没能学习到任何信息
- 检查图片分类是否有误。
### 最小训练参数
您至少需要填写以下内容
- 训练集路径
- 模型名称
### 是不是训练越久越好
不是在loss显著降低后再训练10轮左右就可以停止了。
### 训练的时挺好,实际完全离谱
这种情况被称为【过拟合】。可能由于以下原因
- 训练轮数过多
- 训练数据过少
- 训练数据偏置(一个类别很多,另一个很少)
- 单纯运气不好,修改种子再试试
### loss值反复严重波动
训练不稳定。
- 如loss已经显著降低停止训练
- 降低`学习率`
- 降低`数据批大小`
- 训练数据过少
第四步:全自动滴定
---
<!--rehype:body-class=cols-2-->
点击进入 **【自动滴定】** 页面。
### 推注控制参数 (左侧)
控制注射泵怎么滴液的参数:
| 参数名称 | 白话解释 |
| ---- | ---- |
| **滴定速度** | 注射泵推进的快慢,单位是 mL/min。越快滴得越猛。 |
| **单次时间** | 每次让泵推进几秒钟。 |
| **滑窗时长** | 告诉 AI“你不要看一眼就下结论往前倒带回忆过去 X 秒的画面一起综合判断”。可以防止短时间变色褪色导致误判。 |
| **保存图像** | 勾选后,不仅会让 AI 看,还会把每一滴过程的照片都存下来。 |
<!--rehype:className=show-header-->
### 终点判定参数 (右侧)
控制 AI 如何判断“滴定结束”的参数:
| 参数名称 | 白话解释 |
| ---- | ---- |
| **稳定判定时长** | 当 AI 认为到了终点时,必须持续盯着看 X 秒,确认颜色不再退回去,才真正叫停。 |
| **终点判定比例** | 在上面的“滑窗时长”内,如果超过这个比例(比如 60%的画面都被认作是终点颜色AI 才会进入判定倒计时。 |
| **滴液-检测间隔** | 滴进一滴液体后,等几秒钟再让 AI 去看画面。主要是给液体搅匀、反应变色的时间。 |
| **初始累计体积** | 设为注射器上的读数。 |
<!--rehype:className=show-header-->
## 自动滴定异常检查单
依次执行,如不满足则查下一条。
### 未能开始
**当 <red>运行程序后完全没变色就停止了</red> 查**
|1|2|
|-|-|
|当前帧|未显示溶液|
修改`摄像头编号`
|1|2|
|-|-|
|最近预测结果|终点类别|
|训练时loss |< 0.1|
[过拟合](#训练的时挺好实际完全离谱)
|1|2|
|-|-|
|如第2条不满足||
模型不好重新训练
|1|2|
|-|-|
|如第1条不满足||
|现象|可能原因|
|-|-|
|当前状态|wait|
终点类别设错了
### 误判严重
如果滴液入水瞬间变色后就停下了
- 加大滑窗时长】( 10
- 加大稳定判定时长】( 5
- 提高终点判定比例】( 80%
### 严重过量
** <red>如果溶液显著过量,但程序没能停下</red> 查**
|1|2|
|-|-|
|`单批体积`|大于1mL|
减小`单次时间``速度`
|1|2|
|-|-|
|`最近预测结果`|非终点类别|
|`近期分类结果分布`|非终点主导|
模型不好
|1|2|
|-|-|
|第二条不满足|
|最近预测结果|反复改变|
模型不好
第五步:结果回放与分析
---
<!--rehype:body-class=cols-2-->
### 滴定回放
- 选择您刚做完的实验
- 您将会看到滴定过程每一秒AI的状态和决策。
### 曲线分析
软件会自动为您画出一张图。横坐标是“体积”,纵坐标是“颜色状态的概率”。

23
post.html Normal file
View File

@ -0,0 +1,23 @@
## END
<!--rehype:wrap-style=text-align:center;-->
<img
src="https://flt6.top/today"
class="responsive-img"
/>
<style>
.responsive-img {
width: 50%;
height: auto;
display: block;
margin: 0 auto;
}
@media (max-width: 768px), (orientation: portrait) {
.responsive-img {
width: 100%;
}
}
</style>

View File

@ -2,4 +2,5 @@ flt QRH
=== ===
[实验](./docs/实验.md) <!--rehype:style=background:rgb(79 91 147);--> [实验](./docs/实验.md) <!--rehype:style=background:rgb(79 91 147);-->
<!--rehype:class=home-card--> [智能化实验](./docs/智能化实验.md) <!--rehype:style=background: #0F4954;-->
<!--rehype:class=home-card-->