如何使用图像处理计算课堂会话期间学生的在场时间

问题描述 投票:0回答:1

我正在尝试计算使用面部识别的学生的总存在时间。这样,在课程结束时我可以得到两件事:1,学生在场的总时间。 2,他出现的时间,以及他不在场的时间(即9:00-9:20(现在),9:20-9:22(不存在),9:22-9 :42(本次))

这就是我这样做的方式。

在40分钟的课程中,python文件在每2分钟后运行40秒。

每次文件运行时,它都会将列表数据结构中存在的学生的ID存储在DB中。我在表中创建了totaClassTime / 2列,因为文件在每2分钟后运行一次。在课程结束时(40分钟后),它从DB读取数据并计算总存在时间并将其保存在DB中。

有没有更好的方法来完成所有这些我不必在表中创建classTime / 2列?另一个含糊不清的问题:

如果对于学生我们从DB获取此数据:

9:00  9:02  9:04  9:06  9:18  9:10  9:12  9:14  9:16...  
  p    p     -      p     -    p      p    p      p ...

当计算总存在时间时,它将从9:00到9:02增加时间,然后它将9:02-9:04视为缺勤时间,并且在9:04-9:06中相同。但是学生可能会出现在9:04-9:06之间。我搜索了很多但是找不到准确计算存在时间的方法。

python database image-processing logic
1个回答
0
投票

您可以将每个观察结果存储在一行而不是一列中。这样的表看起来像这样:

 classId | studentId | observationTime | present
----------------------------------------------------
     1           1           9:00            p
     1           1           9:02            p
     1           1           9:04            -
     1           1           9:06            p
     1           1           9:08            -
     1           1           9:10            p
                       ...

然后,为了评估学生的在场时间,可以按时间选择和排序包含特定班级中该学生观察的所有行。这可以通过类似于这个的select语句来实现:

SELECT observationTime, present FROM observations WHERE classID='1' AND studentID='1' ORDER BY observationTime

现在,您可以简单地遍历结果集,并且此查询会像以前一样计算存在时间。

您可以通过定义您的观察被视为有效的时间范围来解决您在9:04-9:06之间具有不清楚状态的学生的问题。

您已经将班级拆分为两分钟(从9:00到9:02,从09:02到09:04等等)。现在,您可以说9:00观察在09:00到09:02的时间范围内有效,09:02观察从09:02到09:04的时间段有效,依此类推。这使您能够清楚地解释示例中的数据:09:04观察在09:04到09:06之间有效。由于学生在09:04未被观察,因此他被认为缺席了这个位置。在09:06的下一次观察中他出现了,所以我们认为他是从09:06到09:08的班级。

显然,学生并没有真正离开09:04和09:06之间的全部时间,除非他在09:06准确地在座位上实现了。但是,由于我们每隔几分钟只看课程,我们只能以两分钟的分辨率来说明学生的存在。

您基本上每两分钟在一个时间点对类的状态进行采样,并假设它代表整个两分钟的类状态。

© www.soinside.com 2019 - 2024. All rights reserved.