×

智能对讲机开源设计

消耗积分:0 | 格式:zip | 大小:0.00 MB | 2023-06-19

分享资料个

描述

 

我们这个名为 Human-firewall 项目的项目的目的是引入一种智能对讲机,能够在消息应用程序上通过按门铃的人的照片通知您,并实时提供对个人的评估。

通过这种方式,您会立即知道您是否可以信任相关人员,如果此人不值得信任,您将避免让自己、您的积蓄和您的家面临危险。

注意:我们的目标不是创建一个完全成熟的对讲机,而是创建一个可以连接到现有对讲机的原型。

从现有的对讲机中,我将捕获门铃输入,这将触发相机拍摄对象的照片,使用这张照片和一些幕后魔术(剧透:这是机器学习)我将把对象评估发送到房主。

使用 LAN 上的常识评估对象

此时,您可能会问:“您如何评价按对讲机的人?”。

我们选择了同行评审的方法,每个房主都能够对在他家敲门的人进行分类,这样就建立了一种常识。

这些知识将在同一网络上存在的所有对讲机之间共享,例如,即使您的邻居来到您家门口,也能正确检测到已被您的邻居标记的骗子。

公寓作为我们的目标环境

我们的项目真正在公寓中大放异彩,那里有多个建筑物,每个建筑物都有自己的对讲机,并且有共享网络(无线或有线无关紧要)。

 
poYBAGOSl22AKSHGAACxWAQrxyo162.jpg
 

这也可以用于较小的环境,但这会导致更差的检测率和减少智能对讲机的常识。

我们想象这也可以被店主用来保护他们的生意。

硬件与服务

对于我们的智能对讲机演示,我们采用了 Raspberry Pi 3(使用 Raspbian 作为其操作系统)作为我们的参考板,但只要可以建立与本地网络的连接,较新的版本也不错。

连同电路板,我们使用了 Pi Camera 模块 V2,它提供了按铃对象的高清图像。

您还需要一切才能为电路板提供能量(谁会猜到?)和一个模拟用户在门铃上输入的按钮。

云服务?不,谢谢,人类防火墙项目不需要它们,一切都将通过专门使用 LAN 来工作,这样我们就可以为将要使用(但永远不会存储)的敏感数据提供最高级别的隐私。

建筑学

 
pYYBAGOSl3CAdl6aAADNP8mwR7g364.png
架构的表示
 

我们的项目由三部分组成:

  • 从属子系统,用于捕获门铃输入拍照并与它们一起识别人。
  • 机器人子系统,托管公寓的电报机器人。
  • 主子系统,这是我们共享知识架构的焦点。

鉴于这三个子系统,我们有两种类型的板,主板和从板,但是,用户看不出主板和从板之间有任何区别。

所有的板子都应该在同一个 NATed WiFi/有线局域网中,不需要开放的互联网端口,除了机器人子系统使用的 Telegram 服务器的端口。

主控系统_

主板托管一个主子系统的实例,该子系统由一个 Web 服务器、一个 MQTT 代理组成,包含公寓的 Telegram 机器人,并使用从属子系统作为门铃。

Web 服务器用于与从站通信,并提供几个端点:

  • Identification endpoint: 使网络中新的slaves可以发现它正在扫描局域网。
  • Ring 端点:用于管理事件,当有人按响连接到网络的门铃时,master 会将照片和评估数据发送给 Telegram bot,允许它向用户通知事件并识别谁按铃。
  • 时间戳端点:当被询问时,它会给出数据库中的最后一个时间戳,让从属了解它们是否是最新的。
  • Recovery endpoints:允许slaves下载从给定时间戳到最后一个时间戳的反馈和识别数据。

这些端点由从系统使用,因此需要在任何从系统之前初始化主系统。

奴隶制度

从板仅包含从子系统的一个实例。

从属子系统由一个 SQLite 数据库组成,用于维护用户的反馈和一个内存中的特征向量数据库,以及一个磁盘副本以支持重启,这是我们表示人脸的方式。

反馈数据库使用复合键,由以下组成:

  • 特征向量,标识响铃的人,需要分类
  • 聊天 ID,用于识别提供反馈的人

使用此模式,即使在多个门铃和多个响铃事件中,一个用户也只能对响铃的人进行一次反馈,因此我们更新了用户对特定人给出的旧的且可能不正确的反馈,而不是添加到数据库更新的反馈。这样做是为了保持我们的分类有意义和可更新。

启动后,它将通过扫描网络定位标识端点来定位主控,然后,在找到主控后,它将启动恢复程序,检查其数据是否已更新并在必要时下载更新。

在找到主节点并更新数据库后,它将订阅 MQTT 代理以接收来自整个系统的新更新,并将等待本地环事件。

这个恢复过程在第一次初始化和灾难恢复的情况下都非常方便(例如,一个从属已经断电,可能以一个与主或其他从属相关的不同步的数据库结束)。

当本地响铃事件被拦截时(即当有人按从属门铃时),将捕获一张照片,并通过使用Dlibface_recognition库定位人脸并将其编码为特征向量。然后,slave 询问它本地的反馈数据库,看看是否有针对那个人的任何反馈;然后照片、电路板 ID 和反馈通过环端点发送到主板。

 
pYYBAGOSl3-AMVkRAAD5XIGmfMQ435.png
可视化门铃被触发时发生的情况
 

如果在任何时候收到来自 MQTT 代理的消息,其内容将被添加到反馈和编码数据库中,从而增加董事会知识。

机器人子系统

机器人子系统仅托管在主板上,用于与用户交互、通知他们响铃事件以及收集和分发他们的反馈。

通知通过使用 Telegram API 发送到用户的 Telegram 帐户。

我们选择使用 Telegram 是因为这样做,我们可以轻松访问每个平台(iOS、Android、Windows、Mac、Linux),而无需实施我们自己的移动应用程序和服务器基础架构,同时用户不会他心爱的设备上又装了一个应用程序。

Telegram 机器人使用聊天 ID 来识别用户,并使用通过散列面板序列号获得的面板 ID 来识别门铃。

机器人由用户在指定它将接收通知的门铃 ID 时进行配置,为了更加用户友好的应用程序,我们让用户为配置的每个门铃指定一个名称,这比 ID 更容易记住.

这些配置设置保存在用户数据库中,我们在其中存储用户聊天 ID 和配置的门铃。

当响铃事件被通知到主板时,它会通知机器人子系统,机器人子系统将向每个配置了门铃的用户发送通知,其中包含照片和人的分类,根据可用反馈计算出多数票与相应的事件板 ID。

然后用户可以在他们的手机上看到事件,如果系统找到了人的脸,那么用户还可以看到人的分类,如果以前的反馈可用,并给出他们自己的分类。

当给出分类时,bot 子系统会将消息发布到 MQTT 队列中,所有从属都订阅了该队列,其中包含聊天 ID、我们用来识别人员的特征向量和用户给出的分类。

技术

人脸识别库

dlib最先进的人脸识别库的接口,提供多种人脸定位算法和预训练的矢量化模型。

我们使用 HOG 模型 (O(#pixels)) 来定位人脸,而不是 dlib 的默认 CNN 模型,这是一种不太准确的模型,但CPU 密集度也较低。

为了计算编码,预训练模型基于 ResNet,一种深度 CNN

我们在欧几里得产品中使用 0.6 的阈值来检测两个编码是否指的是同一个人,规模有点高,但对于公寓来说是可以的。

蚊子和帕霍

我们选择Eclipse Mosquitto作为我们的代理,它是 MQTT 代理的开源实现。

Mosquitto 重量轻,适合在 CPU 时钟较低的设备上使用。

我们选择不持久存储消息,以免浪费磁盘空间。

我们选择的 MQTT 客户端是Eclipse Paho项目,它为多种编程语言(包括 Python)提供 MQTT 和 MQTT-SN 消息传递协议的开源客户端实现。

在 Raspberry Pi 3 上,dlib 的多进程执行会导致死锁,因此我们不得不使用以下变通方法强制在单线程上执行 dlib 库,该变通方法已包含在我们的设置脚本中:

export OPENBLAS_NUM_THREADS=1 
export OPENBLAS_MAIN_FREE=1

烧瓶

Flask是基于 Werkzeug 和 Jinja 2 的 Python 微框架。

我们使用它来托管主板 Web 服务器,因为它是一个可扩展的框架,可以轻松地针对多种用途进行定制。

对于项目的基本需求,我们只选择了 Flask 核心模块和一些使我们的 Web 服务器轻量级和快速的基本扩展。

python电报机器人

为了在 bot 子系统中与 Telegram 的 API(通过 HTTP)交互,我们选择了一个名为python-telegram-bot的社区制作的包装器

包装器实现了从发送消息到对话处理的广泛功能,同时防止出现同步问题。

它内存占用小,CPU 使用率低,因为它使用 webhook 来防止轮询 Telegram 的服务器。

如何部署和测试

  • 部署应用程序:获取master_scripts
    中的代码并执行 install.py 以设置主板。它既可以在装有 Ubuntu 的笔记本电脑上运行,也可以在装有 Raspbian 操作系统的 Raspberry 上运行。该脚本会要求您提供电报 API 密钥。如果要添加一个或多个slave,可以使用slave_scripts中的代码来实现。在 Raspbian 上,服务也被添加到 systemd 并在启动时启动。

  • 在电报上设置电路板:
    启动机器人并提供 /configure 命令,以命名和添加电路板
  • 使用门铃:
    按下门铃上的按钮以接收通知并留下反馈,一旦给出反馈,系统将使用它进行未来预测。(为了让我们的代码生效,门铃必须连接到树莓派上的 3 号引脚。)
 

 


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !