智能办公桌安全系统

计算机视觉Roboflow工具的帮助下,有机会构建一个能够解决实际需求的项目。过去,已经看到了一些令人难以置信的项目,包括一个真空跟踪系统和一个乐谱播放器。以下是对未来项目Secure Desk的简短介绍。

Secure Desk是一个实时计算机视觉应用,它通过视觉驱动的密码和警报系统来保护办公桌。该应用的主要功能是在检测到人员后,如果他们不在30秒内输入密码,系统将发送推送通知。密码的长度是可配置的,通过手部数字输入。让观看一个简短的演示。

安全监控架构图

下面的图表展示了应用程序的部署方式。有一台计算机运行Python代码,处理模型推理和应用状态。这台计算机与一台摄像头位于同一网络,摄像头暴露了一个RTSP流,主机计算机会摄取这个流。当某些条件不满足时,应用程序会使用一个通知软件即服务工具,通过互联网发送推送通知。

构建模型

在开始一个新的计算机视觉项目时,重要的是要退一步,评估正在构建的系统的要求。思考模型需要做什么将帮助选择模型的类型,并架构将检测的内容。类别本体、数据收集和标记方法都是需要考虑的领域。让深入了解为Secure Desk构建模型的过程。

对于这个项目,使用了Roboflow平台来完成整个计算机视觉生命周期。围绕数据集、模型和部署的工具功能,是开始于图像并结束于完全部署的应用的完美匹配。

类别本体指的是计算机视觉系统可以在一帧中识别和理解的不同对象。这是包含在数据集中的类别集合,例如产品类型、部件或缺陷。Roboflow在类别本体方面有一些令人印象深刻的功能。

有了这些信息,这个项目使用了一个目标检测模型。这个模型负责两个任务:1. 检测办公桌附近的人员。2. 检测由手势组成的密码。目标检测模型将有一个类别用于人员,以实现对办公桌附近某人的检测。它还将有代表可能的代码手势的类别一、二、三、四和五,模型将检测这些类别。下面是一个本体的图片。

使用主动学习收集数据

在Roboflow中创建项目后,是时候开始收集数据了。为此,可以使用主动学习。可以使用主动学习智能地将数据上传到平台,无论是否拥有模型!

可以配置Roboflow应用程序从RTSP流中随机采样图像以获取应用程序中的一些初始数据。下面的代码片段展示了主动学习配置。

pipeline = InferencePipeline.init( model_id="secure-desk/0", api_key="", # 替换为Roboflow API密钥 video_reference="", # RTSP相机流URL。 on_prediction=on_prediction, active_learning_enabled=True, )

此配置在2%的帧上随机采样图像,并设置了一些最大限制和批处理策略。用户界面仍在演变,但主动学习也可以通过Roboflow API进行配置。有关主动学习的更多信息可以在中找到。

有了这个配置启用,可以使用该包从RTSP流中随机采样图像。可以使用下面的代码片段,但请注意,需要添加RTSP相机URL和API密钥。另一个提醒是使用“模型存根”来收集数据,这让可以在不训练模型的情况下随机收集生产数据。

提高数据多样性

一旦模型在一组初始图像上训练,可以开始尝试额外的方法来提高模型的性能。首先是添加更多样化的图像集。添加了红外图像,以给模型一个概念,即当灯光熄灭时人们是什么样子,还添加了空图像,以帮助模型理解没有对象被检测到的场景。

顺便说一下,可以在搜索栏中输入“红外”,以找到这些图像。在幕后,这个搜索栏使用CLIP嵌入进行相似性搜索。另一个有趣的使用空图像的例子是添加拳头的图像。这有助于解决拳头被检测为一的问题,如下所示。一旦数据集中有了拳头的空图像,这个问题就解决了,这显示了空图像在数据集中的重要性。

在标记和训练了各种图像后,模型能够以高置信度预测数字。这也可以在下面的混淆矩阵中看到,看到了70%置信度阈值下的真值和预测。这个混淆矩阵可以在Roboflow平台的“版本”标签下找到,并且对所有付费用户开放。

构建安全监控应用

有了模型,是时候编写应用程序了。所有代码都可以在中找到,但在这个博客文章中有一些有趣的要点值得注意。

感谢Roboflow Inference的帮助,设置一个实时推理管道就像几行代码一样简单。已经看到了上面的代码,使用了主动学习,但值得强调一些关键特性。首先,更换模型非常简单,而不需要更改任何其他代码。可以使用来自Roboflow Universe的模型、别名模型或自己训练的自定义模型。接下来,可以插入各种视频参考,包括RTSP流、网络摄像头,甚至是视频。最后,回调函数可以根据需求进行配置,并且发送结果和帧,用于对预测采取行动和向帧添加注释。

def on_prediction(results, frame): # 可以对推理结果做一些事情。 print(results) # 可以注释帧以显示 print(frame) pipeline = InferencePipeline.init( model_id=roboflow_model, # 使用来自宇宙、别名或自定义训练的任何模型 api_key=roboflow_api_key, video_reference=rtsp_url, # 使用RTSP流、视频文件或网络摄像头。 on_prediction=on_prediction, # 使用自己的回调函数,访问预测和帧。 )

另一个有趣的要点是,在构建Secure Desk时使用了跟踪器来积极检查是否正在输入代码序列。跟踪器是分配一个唯一的tracker_id的软件,帮助在多个帧中跟踪检测。这个应用程序需要一个跟踪器,以确保只计算一次输入的每个数字。

# 从监督中初始化跟踪器 tracker = sv.ByteTrack(match_thresh=2) # 将推理检测解析为监督数据模型。 detections = sv.Detections.from_inference(inference_results) # 创建全局集合以跟踪代码。 tracked_codes = set() # 将检测添加到跟踪器。 tracked_detections = tracker.update_with_detections(detections) # 如果是新的跟踪器ID,则将跟踪器ID添加到tracked_codes。 for tracker_id in tracked_detections.tracker_id: if tracker_id not in tracked_codes: tracked_codes.add(tracker_id) check_code_sequence(tracked_detections.class_id)

跟踪器非常强大,能够理解多个帧中的检测。在中有关于跟踪器的优秀文档。

将办公桌转变为安全办公桌是一个具有挑战性和乐趣的项目。Roboflow平台和工具帮助在三天内将这个应用程序投入生产,这要归功于开源工具和数据收集/标记网络应用程序。

推理对于使用主动学习功能的初始数据收集以及使用生产模型运行推理都很重要。监督对于跟踪帧和用应用程序特定的检测和反馈注释帧非常有用。

Roboflow平台提供了注释工具,减少了标记图像所需的时间,同时还提供了额外的功能,用于比较添加或删除数据如何改善或恶化计算机视觉模型。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485