【发布时间】:2021-05-22 02:41:11
【问题描述】:
我正在制作一个刷牙应用程序,我想在其中跟踪一个人刷牙的时间。为此,我构建了一个牙刷跟踪器,一个口腔跟踪器,还开发了一个算法来确定牙刷是否在嘴里(我假设这意味着这个人正在刷牙)。
现在,我只需要添加一个计时器,它可以实时计算人们刷牙的时间,并将其显示在视频源上。如果用户暂停刷牙,定时器也应该暂停;如果用户恢复刷牙,定时器也应该恢复。我该怎么做?
我检测刷牙时间的逻辑如下:
- 提取牙刷边界框的顶点
- 提取嘴巴的最左、最上、最右和最下点,并提取它们的坐标
- 找出这两个矩形是否重叠(我正在使用一个名为
shapely的库来做这件事 - 如果您有一个不需要使用库的更原始的解决方案,那就太好了) - 如果它们重叠,则启动计时器;如果不是,请暂停计时器。这是我不知道该怎么做以及需要帮助的步骤。
这大概是我的代码的样子:
from shapely.geometry import Polygon
import cv2, face_recognition, time
brush_time = 0
video_capture = cv2.VideoCapture(0)
while True:
ret, frame = video_capture.read()
'''
Code for extracting the toothbrush's coordinates (using Yolo),
and the mouth's coordinates (using the face_recognition library)
...
...
...
'''
p1 = Polygon([(mouth_left_x, mouth_left_y), (mouth_top_x, mouth_top_y), (mouth_right_x, mouth_right_y), (mouth_bottom_x, mouth_bottom_y)])
p2 = Polygon([(brush_top_left_x, brush_top_left_y), (brush_top_right_x, brush_top_right_y), (brush_bottom_left_x, brush_bottom_left_y), (brush_bottom_right_x, brush_bottom_right_y)])
if p1.intersects(p2):
##############################################
# This is where I want the timer logic to be #
# start_time = time.time() #
# end_time = ???? #
##############################################
brush_time = end_time - start_time
text = 'Brushed teeth for {} seconds'.format(str(brush_time))
【问题讨论】:
-
问题是定时器还是检测?好的,你检测到刷子但你怎么确定刷子在里面?你只会数时间吗?刷子也只能留在里面。复杂的任务,但值得支持
-
是的,确实很复杂。这就是为什么,为了简单起见,把一些东西作为初稿拿出来,我做了一些假设。每当两个物体(牙刷和嘴巴)的边界框相交时,我就假设这个人正在刷牙。有了这个假设,我现在正在尝试构建一个计时器来跟踪该人刷牙的持续时间。
-
所以你想在交叉路口开始时启动计时器并在完成时停止?这似乎很容易
-
我希望计时器持续检测刷牙活动;它应该在用户暂停刷牙几秒钟时暂停,并在用户恢复刷牙时恢复。只有当满足以下两个条件之一时,计时器才会停止并输出总刷牙时间:(1)达到给定的最大刷牙时间(例如,3 分钟),或(2)用户没有连续刷了一些阈值持续时间(例如,15 秒)。这就是我的想法。
标签: python-3.x opencv deep-learning computer-vision face-recognition