×

濒临灭绝鸟类探测器开源分享

消耗积分:0 | 格式:zip | 大小:0.04 MB | 2022-10-26

526774

分享资料个

描述

介绍:

由于非法狩猎和运动狩猎,有几种濒临灭绝的鸟类可以通过技术解决方案得到拯救。

根据《自然》杂志的当前讨论 [1],如果采取行动避免这种物种灭绝,可以减轻多少物种灭绝,鸟类生活 [2] 加强了这种灭绝,它大约可以减轻 40%。

pYYBAGNX_DCAQP0ZAAEVcaN23WA250.png
 

我发现的类似解决方案是基于提高对问题的认识。忽略这些解决方案,我可以找到:

  • 使用带 GPS 的项链。缺点:佩戴在动物身上的项圈和传感器会对动物造成伤害或不适。在电池的情况下,它们可能会爆炸。https://www.gps-collars.com/
  • 无人机智能传感。缺点:它们会对动物产生意想不到的碰撞或倒塌并伤害它们。
  • 识别鸟鸣。缺点:系统复杂繁琐,很难在一个地方长期维护。

在后者的情况下,除了加强我们的理论外,它还让我们有机会制作一个易于复制、节能且功能强大的系统。

解决方案:

使用 QuickFeather 开发套件中包含的英飞凌 IM69D130 PDM 数字麦克风,我们将获得音频信号,使用 SensiML,我们可以通过神经网络,指示我们听到的鸟的类型。

poYBAGNX_DeAVXE7AA0TxWYFae4310.png
 

显示在一个简单的 Web 应用程序中检测到的鸟类的信息。

poYBAGNX_DqAKC-AAAFFDAP2etk552.png
 

连接图:

我们将项目基于以下架构:

pYYBAGNX_D2Af9YYAACJnOAih7Q400.png
 

我们将使用 QuickFeather 套件并通过 Simple Stream Gateway 将其连接到设备和 AWS,该信息将显示在 Web 应用程序中。

硬件:

把它想象成我们使用 QuickFeather 作为 ESP32 的 AI Shield。

pYYBAGNX_EKATbTNAAkCp0IOG1Y894.png
 

开发环境设置:

由于我使用我的计算机对许多不同的组件进行编程,我真的很喜欢能够隔离我用来编程的环境。在这种情况下,为了进行应用程序的开发并能够正确使用 QORC SDK,我将所有东西都安装在一个 Docker 容器中,该容器可以简单地打开和关闭以编译程序。除了在不同的机器上很容易重现。

我已将容器上传到 Docker Hub,因此您也可以根据需要使用它。

下面是容器编译qf_ssi_ai_app示例程序的示例

poYBAGNX_EWAenKqAAGWCxOgwME783.png
 

QuickFeather Burner v1(闪光器):

除了在 docker 上将所有内容编译到开发环境中,我决定创建一个 GUI 来轻松编程 QuickFeather,而无需命令行。

该程序与 Windows 10 兼容,您可以在 QuickFeather Burner v1 文件夹中找到可执行文件。

否则,您可以在存储库中看到此代码。

QuickFeather 燃烧器 v1

pYYBAGNX_EiAPpfXAADL34F7j3s638.png
 

先决条件,在 pc 上安装 python3 并在 PATH 中可用。

poYBAGNX_EuAAspDAABNghlim-c369.png
 
  • Install Dep :第一次打开时,按下按钮安装程序的依赖项。
  • 刷新端口:刷新连接到电脑的串行端口。
  • 浏览 Bin 文件:搜索 bin 中的文件。
  • 程序:在所选设备上对 bin 进行编程,一旦您完成闪烁设备,您应该会看到“成功”响应。

遵循这个过程:

 

该程序的功能纯粹是从命令行加速设备的闪存过程。

捕获数据:

为了获得可靠的我国鸟鸣数据,并能够对设备进行正确的测试,决定使用这个“数据库”的歌曲作为模型训练的输入。

数据:(网页是西班牙语,所以我留下谷歌翻译的版本)

对于这个测试,我决定使用以下 6 只随机鸟类的数据。

  • 铍蜂鸟
  • 墨西哥木匠
  • 墨西哥芬克
  • 红眼龙
  • 裁缝
  • 扎纳特市长

鸟类:

如果您想更深入地了解该项目,它位于 Data Capture Lab Project 文件夹中。

Near-Extinct-Bird-Detector/Data Capture Lab Project at master · altaga/Near-Extinct-Bird-Detector (github.com)

设置 QuickFeather:

为了设置设备并能够使用 QuickFeather 对我的音频进行采样,我遵循了 SensiML 官方教程。

  • 使用 QuickFeather 和 SensiML 处理音频数据
  • 在这种情况下,由于设备将通过 WiFi 工作,我决定使用 SensiML 提供的 ESP32 接口通过 WiFi 发送所有数据。更多细节在:ESP32 接口

https://github.com/sensiml/esp32_simple_http_uart

特别是如果您想查看项目并自己编译它,它将位于该文件夹中。数据采集​​实验室

Near-Extinct-Bird-Detector/Data Capture Lab at master · altaga/Near-Extinct-Bird-Detector (github.com)

如果您只想开始从您的设备进行测量,编译的 bin 将位于文件夹中。数据采集​​实验室箱

Near-Extinct-Bird-Detector/Data Capture Lab Bin at master · altaga/Near-Extinct-Bird-Detector (github.com)

捕获数据示例:

 

捕获数据:

要对数据进行采样,请获取鸟网页提供的音频(GitHub 中的音频)并使用 QuickFeather 捕获它们。

pYYBAGNX_FCAHnMZAAIVZmtZYlc711.png
 

标签数据:

对于数据标注,在每帧捕获的数据中,选择鸟鸣中最显着的片段,同时选择它们没有唱歌的片段为 Normal 类别(没有鸟鸣,来自背景自然的纯噪声,在这种情况下“沉默”)

这是墨西哥木匠的歌曲的一个例子:

pYYBAGNX_FOANpxHAAKLioAfcak460.png
 

SensiML:

在这种情况下,在训练模型时,请使用以下设置,因为它们是给我最好结果的设置。

poYBAGNX_FWAUGBuAADhdv5lX4s047.png
 

生成的模型产生的混淆矩阵为:

poYBAGNX_FiANFrVAAC_S5kAhP4635.png
 

6只鸟的识别结果是:

pYYBAGNX_FuAIeFjAAEKEH8CqsQ560.png
 

由于单片机的限制,需要保证单片机能检测到的鸟类很少。

测试模型:

使用ESP32 Interface y Simple-Streaming-Gateway用一些鸟类测试模型。

 

尽管该模型似乎毫无意义地检测了多只鸟,但实际上它主要检测的是我们想要的鸟。然而,为了证明这一点,我们必须对几次检测进行平均,以显示它是如何正确检测到鸟的。

ESP32 接口:

SensiML 视频系列中解释了这个 ESP32 接口。

这个 ESP32 项目的所有代码都在 esp32_simple_http_uart 文件夹中,要编译它并在 ESP32 上烧写它,你必须使用 ESP-IDF vscode 插件。

该项目需要的唯一设置如下。

在 esp32_simple_http_uart/sdkconfig 的第 135 行输入您的 wifi 凭据并编译代码。

CONFIG_EXAMPLE_CONNECT_WIFI=y
# CONFIG_EXAMPLE_CONNECT_ETHERNET is not set
CONFIG_EXAMPLE_WIFI_SSID="YOURSSID"
CONFIG_EXAMPLE_WIFI_PASSWORD="YOURPASS"
CONFIG_EXAMPLE_CONNECT_IPV6=y
# end of Example Connection Configuration

完成此操作后,您可以毫无问题地将其连接到 Simple-Streaming-Gateway。

简单流式网关:

为了查看我们的 QuickFeather 正在阅读的内容,请安装 SensiML 提供的 SSG 示例。

为了让系统保持安装状态并且不必在计算机上运行 SSG,我决定将其完全安装在 Raspberry Pi Zero W 上

pYYBAGNX_IWAXmgGAAmopZZuYSg022.png
 

在这里您可以看到平台:

poYBAGNX_IeAKTxBAAEPO5LgpAE869.png
 

SSG 到 AWS 物联网:

在这种情况下,为了将我们的设备与 AWS IoT 通信,我决定稍微修改 SSG 代码以实现与 AWS IoT 的 MQTT 连接,我们将利用 SSG 使用 Python 后端工作的事实.

SSG 中要修改的文件是 Simple-Streaming-Gateway/sources/base.py

添加了 AWS IoT 的 MQTT 代理。

*添加您的 AWS IoT 终端节点和您将向其发送数据的主题。

EndPoint = "XXXXXXXXXXXXXXX.iot.us-east-1.amazonaws.com" 
sub_topic = 'birds-detected'

由于 AWS 的安全性,有必要创建客户端证书和私有证书,以便将设备与平台通信。

  • 首先,我们必须访问我们的 AWS 控制台并查找 IoT 核心服务:
poYBAGNX_IqAYpN0AACmF_HybIw415.png
 
  • 获取您的 AWS 终端节点,保存它。
pYYBAGNX_I2AZG5XAACmYPcBhkI627.png
 
  • 在侧面板中选择“Onboard”选项,然后选择“Get started”。
poYBAGNX_JCAWk5tAAEFpw-DBxY271.png
 
  • 选择“开始”。
pYYBAGNX_JOAHHbyAAD9NOxoATU288.png
 
  • 在“选择平台”中选择“Linux/OSX”,在 AWS IoT DEvice SDK 中选择“Python”,然后单击“下一步”。
pYYBAGNX_JqAHk-WAACqQappLYY418.png
 
  • 在名称处,输入任何名称,然后单击“下一步”。
poYBAGNX_J2AE7xUAACjy7lLsZg075.png
 
  • 在“Download connection kit for”点击“Linux/OSX”按钮下载凭证包(我们稍后会用到)并点击“Next Step”。
pYYBAGNX_KCAF3jsAACqFr1NxSo522.png
 
  • 点击“完成”。
pYYBAGNX_KSAKkKhAACQEkO31ys531.png
 
  • 点击“完成”。
poYBAGNX_KeAFzpAAAC4S8Jk6bY715.png
 
  • 在横向栏上,在管理/事物部分内,我们可以看到我们已经创建的事物。现在我们必须设置那个东西的策略,让它在 AWS 中不受限制地工作。
pYYBAGNX_KmAe0OJAABezUeC0oo889.png
 
  • 在侧栏,在 Secure/Policies 部分我们可以看到我们的事物策略,点击它来修改它:
poYBAGNX_KyAEPX-AABQ7NtiKAY723.png
 
  • 点击“编辑政策文件”。
pYYBAGNX_K-AIo0BAACx-23OTlU259.png
 

将以下文本复制粘贴到文档中并保存。

{
"Version": "2012-10-17",
"Statement": [
    {
    "Effect": "Allow",
    "Action": "iot:*",
    "Resource": "*"
    }
]
}
pYYBAGNX_LKAQ0FbAACsbqIIffA137.png
 

这样,设备会将数据发送到 AWS IoT。

poYBAGNX_LSARRo_AAB-umEhjiI719.png
 

网页部署:

网页的部署是使用 ReactJS 和 AWS-SDK for javascript 完成的。

poYBAGNX_DqAKC-AAAFFDAP2etk552.png
 

看一看!:

AWS 认知:

为了安全起见,为了安全地使用和使用 AWS 服务,身份池凭证是通过 Cognito 服务实施的。

AWS IoT 和 Cognito 的访问密钥必须放在以下文件中。

Webapp/src/components/aws-configuration.js

var awsConfiguration = {
  poolId: "us-east-1:XXXXXXXXXXXXXXX", // 'YourCognitoIdentityPoolId'
  host:"XXXXXXXXXXXXXX-ats.iot.us-east-1.amazonaws.com", // 'YourAwsIoTEndpoint', e.g. 'prefix.iot.us-east-1.amazonaws.com'
  region: "us-east-1" // 'YourAwsRegion', e.g. 'us-east-1'
};
module.exports = awsConfiguration;

AWS IoT Web 套接字:

网页通过 AWS IoT 作为 Web 套接字接收传感器数据,因此在页面内定义很重要,这是我们将要接收的主题,在本例中为“鸟类检测”。

在以下文件中,输入您将订阅的主题的名称。WebApp/src/App.js

<IotReciever sub_topics={["birds-detected"]} callback={this.callBackIoT} />

数据后处理:

为了对传感器检测到的数据进行后处理,平均采集了 7 个样本。系统每次检测到积累了7个音频样本,就获取数据的统计模式,观察哪只鸟被检测到最多。显示此事件的信息。

const temp = JSON.parse(IoTData[1])
  in_array.push(parseInt(temp.Classification))
  console.log(in_array)
  if (in_array.length > 6) {
    let temps = this.state.birds

    if (flag && temps.find(element => element === (statisticalMode(in_array) - 1)) === undefined && (statisticalMode(in_array) - 1) !== 3) {
      flag = false
      temps.pop()
      temps.push(statisticalMode(in_array) - 1)
      this.setState({
        birds: temps
      })
    }
    else if (temps.find(element => element === (statisticalMode(in_array) - 1)) === undefined && (statisticalMode(in_array) - 1) !== 3) {
      temps.push(statisticalMode(in_array) - 1)
      this.setState({
        birds: temps
      })
    }
    in_array = []

网页演示:

在这里,我们可以看到平台如何正确检测到其中一只鸟:

 

完成品:

我在当地的森林中部署了这个项目,幸运的是那里有免费的 WiFi 连接。因此,可以将设备放置在这个地方进行试点测试。

pYYBAGNX_LyAT7BnAAV03YuoF4Q636.png
免费WiFi
 
poYBAGNX_MOACWaDABC4tN7HDVw061.png
设备打开
 
poYBAGNX_MmAYwBUAAeqLO_c6Jc476.png
3D打印案例
 
pYYBAGNX_M-AI8TNAAb4QAtU-HQ861.png
网关
 
poYBAGNX_DeAVXE7AA0TxWYFae4310.png
现场设备
 

最终演示:

 

结论:

当然,这只是为了尝试和保存所需的东西而做的一小部分努力,但第一步总是试图找到这些物种。物联网与人工智能一起为我们带来了自动化这一过程的可能性,并在其中变得更加确定。本质上,可以为更多种类的物种扩展和复制相同的过程,我还看到使用计算机视觉做同样事情的版本,在这种情况下的问题是为其提供动力。目前的目的是将 QuickFeather 和 SensiML 的音频功能推向极限,并为此找到一个有价值的应用程序。


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

评论(0)
发评论

下载排行榜

全部0条评论

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