add Video
Former-commit-id: 2fd1cb10f278ed37633d49afeb065246db2176fa
This commit is contained in:
56
main.py
56
main.py
@ -21,7 +21,6 @@ class MAT:
|
||||
self.ch340 = ch340.CH340()
|
||||
self.bounce_time = bounce_time
|
||||
self.total_volume = 0
|
||||
self.start_time = 0
|
||||
self.middle_time = 0
|
||||
|
||||
atexit.register(self.ch340.stop)
|
||||
@ -38,7 +37,7 @@ class MAT:
|
||||
def ch340_init(self):
|
||||
self.ch340.push(speed=1,t=1)
|
||||
self.ch340.pull(speed=1.2,vol=3)
|
||||
self.control_logger.info('已初始化')
|
||||
self.control_logger.info('电极位置已初始化')
|
||||
|
||||
def ch340_push(self, speed=0.1):
|
||||
self.ch340.push_async(speed=speed, t=1)
|
||||
@ -58,6 +57,9 @@ class MAT:
|
||||
if not suc:
|
||||
self.control_logger.error("无法从摄像头捕获帧")
|
||||
return None
|
||||
# 录制当前帧到视频文件
|
||||
if hasattr(self, 'capFile') and self.capFile.isOpened():
|
||||
self.capFile.write(im)
|
||||
|
||||
ret,rate = self.predictor(im)
|
||||
if ret is None:
|
||||
@ -136,8 +138,13 @@ class MAT:
|
||||
self.endpoint_logger.warning("异常情况,colored超过90%但最后状态是transport")
|
||||
self.endpoint_logger.info(f"疑似滴定终点: {self.colored_volume:.2f} ml")
|
||||
|
||||
t = f"Stat: {ret}, rate: {round(rate,2)}, Vol: {val:.2f} ml"
|
||||
if self.middle_time > 0 and (now - self.middle_time)<self.bounce_time:
|
||||
t += f", MIDCHK"
|
||||
if self.colored_time is not None and (now - self.colored_time) < self.bounce_time:
|
||||
t += f", ENDCHK"
|
||||
cv2.putText(im,
|
||||
f"State: {ret}, rate: {round(rate,2)}, Vol: {val:.2f} ml, typ: {'slow' if self.typ else 'fast'}",
|
||||
t,
|
||||
(10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (10,215, 255) if self.typ else (255,255,255), 2)
|
||||
cv2.imshow("Frame", im)
|
||||
cv2.waitKey(1)
|
||||
@ -159,20 +166,28 @@ class MAT:
|
||||
|
||||
def __del__(self):
|
||||
self.cap.release()
|
||||
if hasattr(self, 'capFile') and self.capFile.isOpened():
|
||||
self.capFile.release()
|
||||
cv2.destroyAllWindows()
|
||||
|
||||
|
||||
def run(self,quick_speed = 0.2,slow_speed = 0.05):
|
||||
def run(self,quick_speed = 0.2,slow_speed = 0.05, cap_dir="Videos"):
|
||||
self.running = True
|
||||
self.typ = 0
|
||||
self.last = 0
|
||||
self.start_time = time.time()
|
||||
self.speeds = (quick_speed, slow_speed)
|
||||
if cap_dir is not None:
|
||||
vid_name = f"{cap_dir}/{datetime.now().strftime('%Y%m%d_%H%M%S')}.mp4"
|
||||
else:
|
||||
vid_name = "Disabled"
|
||||
|
||||
# 记录实验开始
|
||||
experiment_params = {
|
||||
"视频源索引 ": self.videoSourceIndex,
|
||||
"防抖时间 ": self.bounce_time,
|
||||
"快速模式速度": f"{quick_speed} ml/次",
|
||||
"慢速模式速度": f"{slow_speed} ml/次"
|
||||
"慢速模式速度": f"{slow_speed} ml/次",
|
||||
"录制视频 ": vid_name
|
||||
}
|
||||
self.system_logger.info("实验参数:")
|
||||
for key, value in experiment_params.items():
|
||||
@ -180,6 +195,23 @@ class MAT:
|
||||
|
||||
speed = self.speeds[self.typ]
|
||||
|
||||
# 获取摄像头的帧率和分辨率
|
||||
fps = int(self.cap.get(cv2.CAP_PROP_FPS)) or 30
|
||||
width = int(self.cap.get(cv2.CAP_PROP_FRAME_WIDTH))
|
||||
height = int(self.cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
|
||||
|
||||
# 初始化视频录制器
|
||||
if vid_name != "Disabled":
|
||||
fourcc = cv2.VideoWriter_fourcc(*'avc1')
|
||||
self.capFile = cv2.VideoWriter(vid_name, fourcc, fps, (width, height))
|
||||
if not self.capFile.isOpened():
|
||||
self.system_logger.error(f"无法打开视频录制器: {vid_name}")
|
||||
del self.capFile
|
||||
else:
|
||||
self.system_logger.info(f"视频录制已初始化")
|
||||
|
||||
self.ch340_init()
|
||||
|
||||
while self.running:
|
||||
if self.total_volume % 12 == 0:
|
||||
self.ch340_pull() # 抽取12ml
|
||||
@ -195,7 +227,12 @@ class MAT:
|
||||
if self._pred() is None:
|
||||
self.control_logger.error("预测失败,跳过当前帧")
|
||||
continue
|
||||
|
||||
|
||||
# 释放视频录制器
|
||||
if hasattr(self, 'capFile') and self.capFile.isOpened():
|
||||
self.capFile.release()
|
||||
self.system_logger.info(f"视频录制完成: {vid_name}")
|
||||
|
||||
# 实验结束,记录结果
|
||||
experiment_results = {
|
||||
"总体积 ": f"{self.total_volume:.2f} ml",
|
||||
@ -212,12 +249,13 @@ if __name__ == "__main__":
|
||||
# 创建MAT类的实例并运行
|
||||
mat = MAT(
|
||||
videoSourceIndex = 1,
|
||||
bounce_time=1
|
||||
bounce_time=3
|
||||
)
|
||||
|
||||
mat.run(
|
||||
slow_speed = 0.05,
|
||||
quick_speed = 0.15,
|
||||
quick_speed = 0.15,
|
||||
cap_dir=None
|
||||
)
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user