电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
创作
电子发烧友网>电子资料下载>电子资料>智能对讲机开源设计

智能对讲机开源设计

2023-06-19 | zip | 0.00 MB | 次下载 | 5积分

资料介绍

描述

 

我们这个名为 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 是因为这样做,我们可以轻松访问每个平台(iOSAndroid、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 号引脚。)
 

 


下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1山景DSP芯片AP8248A2数据手册
  2. 1.06 MB  |  532次下载  |  免费
  3. 2RK3399完整板原理图(支持平板,盒子VR)
  4. 3.28 MB  |  339次下载  |  免费
  5. 3TC358743XBG评估板参考手册
  6. 1.36 MB  |  330次下载  |  免费
  7. 4DFM软件使用教程
  8. 0.84 MB  |  295次下载  |  免费
  9. 5元宇宙深度解析—未来的未来-风口还是泡沫
  10. 6.40 MB  |  227次下载  |  免费
  11. 6迪文DGUS开发指南
  12. 31.67 MB  |  194次下载  |  免费
  13. 7元宇宙底层硬件系列报告
  14. 13.42 MB  |  182次下载  |  免费
  15. 8FP5207XR-G1中文应用手册
  16. 1.09 MB  |  178次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234315次下载  |  免费
  3. 2555集成电路应用800例(新编版)
  4. 0.00 MB  |  33566次下载  |  免费
  5. 3接口电路图大全
  6. 未知  |  30323次下载  |  免费
  7. 4开关电源设计实例指南
  8. 未知  |  21549次下载  |  免费
  9. 5电气工程师手册免费下载(新编第二版pdf电子书)
  10. 0.00 MB  |  15349次下载  |  免费
  11. 6数字电路基础pdf(下载)
  12. 未知  |  13750次下载  |  免费
  13. 7电子制作实例集锦 下载
  14. 未知  |  8113次下载  |  免费
  15. 8《LED驱动电路设计》 温德尔著
  16. 0.00 MB  |  6656次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935054次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537798次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420027次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234315次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233046次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191187次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183279次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138040次下载  |  免费