这是一个基于传统图像处理方法的AI视觉滴定控制程序。

## 操作步骤

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次以上，禁用退出。