write README
Former-commit-id: 634e6fd710478b787c344c3bbe85b6b2cbddf9d2
This commit is contained in:
50
README.md
50
README.md
@ -1,14 +1,40 @@
|
||||
状态管理逻辑:
|
||||
- 滑动窗口
|
||||
维护一个滑动窗口history,记录最近end_bounce_time内的状态。
|
||||
状态包括:时间,浓度,状态,当前截图
|
||||
这是一个基于传统图像处理方法的AI视觉滴定控制程序。
|
||||
|
||||
- 进入
|
||||
1. middle: predictor返回middle立即进入slow状态。
|
||||
2. about: 返回about,且处于middle则进入about状态
|
||||
3. end:返回end,置end_check标记开始检查
|
||||
## 操作步骤
|
||||
|
||||
- check
|
||||
1. middle: 进入middle的bounce_time后,在最近bounce_time内middle比例<70%返回fast状态。
|
||||
2. about:随着middle退出一起退出,不单独处理
|
||||
3. end:进入end之后的end_bounce_time,如果end_bounce_time内end比例<80%,则实验终止逻辑。否则从history中找到第二个end并继续check逻辑。
|
||||
1. 安装依赖
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
2. 校准光线
|
||||
1. 运行`vid_chk.py`,按任意键直到显示为目标摄像头,按下`q`
|
||||
2. 按`w`和`s`直到左上角参数在$0.01\sim 0.03$
|
||||
3. 按`q`后将控制台输出参数输入`main.py`
|
||||
3. 运行主程序
|
||||
|
||||
## 技术说明
|
||||
|
||||
### 变色预测
|
||||
|
||||
1. 前期分析
|
||||
透明的溶液,饱和度较低。粉色饱和度较高。故取HSV中的S分析,筛选$S_{\rm{fil}}S>\rm{sensity}$,再根据$\frac{S_{\rm{fil}}}{S}$判断变色区域大小,并避免背景干扰
|
||||
|
||||
2. 终点检测
|
||||
透明的溶液色相和变色后不同,即HSV中的H不同。但是任何单点包括平均值不足以反应溶液是否完全变色,故对图像H通道作直方图分析。刚到突变点时,直方图的最高峰位置右移,且位置和透明显著不同。随着继续滴加,峰值继续右移,并且从尖峰变为宽峰。
|
||||
|
||||
### 滴定控制
|
||||
|
||||
1. 前期
|
||||
滴入后溶液完全没有变色,可以采用高速滴加。当发现溶液有小区域变色时,稍微降低速度,避免气泡、搅匀等因素干扰。
|
||||
2. 中期
|
||||
滴入后,溶液发生变色,且在数秒内褪色。这时候距离终点约$1\sim 2\,\rm{mL}$,采用较慢的滴定速度($0.05\,\rm{mL/s}$),且每次滴入后等待$1\sim 2\,\rm{s}$。
|
||||
3. 末期
|
||||
滴入后,溶液大范围变色,且在数秒至十秒左右褪色。这时继续减慢滴入速率($0.02\,\rm{mL/s}$),并每次滴入后终点检测,如认为变色则等待数秒后重新判断。持续4次后,认为到达滴定终点,汇报数据。
|
||||
|
||||
**意外处理**
|
||||
|
||||
中期检测可能存在误判。检测符合中期条件后,立即进入中期模式。如果在`bounce_time`内判定为中期的样本过少,则退出。`bounce_time`使用滑动窗口处理。
|
||||
|
||||
特别地,为了避免在末期意外退出,连续2次判定终点成功后,禁用该退出。
|
||||
|
||||
类似地,末期也有退出处理,连续判定终点3次以上,禁用退出。
|
BIN
ch340_gui.exe
Normal file
BIN
ch340_gui.exe
Normal file
Binary file not shown.
@ -1 +0,0 @@
|
||||
f3beccf0b1e66d017cf3a9c35c1f0a50476f25b6
|
@ -1,5 +1,5 @@
|
||||
numpy
|
||||
opencv-python
|
||||
pyserial
|
||||
matplotlib
|
||||
PySide6
|
||||
scipy
|
||||
requests
|
Reference in New Issue
Block a user