📌  相关文章
📜  门| Sudo GATE 2020 Mock I(2019 年 12 月 27 日)|问题 10(1)

📅  最后修改于: 2023-12-03 15:28:47.216000             🧑  作者: Mango

门 | Sudo GATE 2020 Mock I(2019 年 12 月 27 日)|问题 10

你是一家大型电子设备公司的软件开发人员,现在正在为一款新型智能门锁系统编写代码。

此门涵盖了人体红外线传感器和照相机,以便在有人在门前时检测到他们并捕捉他们的照片。

你需要编写一个函数来模拟智能门锁系统的工作。函数将接受一个二维数组作为参数,其中包含若干帧的照片。每个照片以二维数组表示,其中每个元素表示一个像素点的灰度值。

门锁系统具有一项称为“身份验证”的功能,该功能根据前面几幅照片中的活动来确定它是否应打开门。具体来说,它将搜索连续帧的序列,并尝试找到包含门前区域的连续帧的子序列(我们将其称为身份验证序列)。

如果找到此类型的子序列,则首先将在身份验证序列中对每帧进行活动检测。如果发现没有人在门前,系统将拒绝打开门,否则系统将使用身份验证序列中的最后一帧中的图像数据来检查访问者的身份。

函数应返回字符串“开”或“关”来指示门的状态。如果设备找到身份验证序列并检测到有人在门前,则门将打开;否则将不会打开。

下面是你需要实现的函数的框架:

def smart_door_lock(frames):
    # your code here

输入格式:

  • 一个二维数组,$frames$,$frames_i$代表第i帧图像。$frames_{i,j}$ $1 \leq i \leq n$, $1 \leq j \leq m$表示像素(j, i)的灰度值,其中$f1$是最早的帧。
  • 门的位置始终为每个照片的正中央。

输出格式:

  • 一个字符串“开”或“关”。
样例输入

输入:

[[[1, 1, 1, 1, 1, 1, 1, 1],
  [1, 1, 1, 1, 1, 1, 1, 1],
  [1, 1, 1, 1, 1, 1, 1, 1],
  [1, 1, 1, 1, 1, 1, 1, 1],
  [1, 1, 1, 1, 1, 1, 1, 1]],
 [[1, 1, 1, 1, 1, 1, 1, 1],
  [1, 1, 1, 1, 1, 1, 1, 1],
  [1, 1, 1, 1, 1, 1, 1, 1],
  [1, 1, 1, 1, 1, 1, 1, 1],
  [1, 1, 1, 1, 1, 1, 1, 1]],
 [[0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0]],
 [[1, 1, 1, 1, 1, 1, 1, 1],
  [1, 1, 1, 1, 1, 1, 1, 1],
  [1, 1, 1, 1, 1, 1, 1, 1],
  [1, 1, 1, 1, 1, 1, 1, 1],
  [1, 1, 1, 1, 1, 1, 1, 1]],
 [[1, 1, 1, 1, 1, 1, 1, 1],
  [1, 1, 1, 1, 1, 1, 1, 1],
  [1, 1, 1, 1, 1, 1, 1, 1],
  [1, 1, 1, 1, 1, 1, 1, 1],
  [1, 1, 1, 1, 1, 1, 1, 1]]]

样例输出

说明

对于此输入,身份验证序列将是frames [0],frames [1],frames [2]和frames [3]。这是因为它们中的任何一帧都不包含经过门前的任何人。因此,系统拒绝打开门。

如果将第三个帧由全黑图像更改为全白图像,则系统应打开门,因为存在包含在身份验证序列中的帧,其中有人出现在门前。

思路

本题是一个模拟的题目,需要我们按照题目要求,模拟智能门锁系统的工作。

简单分析一下,我们需要按照题目要求,先找到连续帧的序列,然后再进行检测。我们可以按照以下步骤来实现:

  1. 从前往后遍历所有帧,找到所有包含门的连续帧序列。
  2. 对于所有的连续帧序列,继续遍历检测帧,直到检测到第一张人的照片,或者遍历完所有帧。
  3. 如果检测帧中没有找到人,则认为这个连续帧序列是无效的,否则认为这个连续帧序列是有效的。
  4. 如果存在有效的连续帧序列,则返回“开”,否则返回“关”。

在实现的过程中,我们需要对图像数据进行处理,找到门的位置。我们还需要实现图像的简单处理方法,例如计算整个图像的平均灰度值或计算区域内的人数等。这些处理方法可以使用OpenCV等图像处理库来实现。

代码

以下是我实现的代码。