由于非法狩猎和运动狩猎,有几种濒临灭绝的鸟类可以通过技术解决方案得到拯救。
根据《自然》杂志的当前讨论 [1],如果采取行动避免这种物种灭绝,可以减轻多少物种灭绝,鸟类生活 [2] 加强了这种灭绝,它大约可以减轻 40%。
我发现的类似解决方案是基于提高对问题的认识。忽略这些解决方案,我可以找到:
在后者的情况下,除了加强我们的理论外,它还让我们有机会制作一个易于复制、节能且功能强大的系统。
使用 QuickFeather 开发套件中包含的英飞凌 IM69D130 PDM 数字麦克风,我们将获得音频信号,使用 SensiML,我们可以通过神经网络,指示我们听到的鸟的类型。
显示在一个简单的 Web 应用程序中检测到的鸟类的信息。
我们将项目基于以下架构:
我们将使用 QuickFeather 套件并通过 Simple Stream Gateway 将其连接到设备和 AWS,该信息将显示在 Web 应用程序中。
把它想象成我们使用 QuickFeather 作为 ESP32 的 AI Shield。
由于我使用我的计算机对许多不同的组件进行编程,我真的很喜欢能够隔离我用来编程的环境。在这种情况下,为了进行应用程序的开发并能够正确使用 QORC SDK,我将所有东西都安装在一个 Docker 容器中,该容器可以简单地打开和关闭以编译程序。除了在不同的机器上很容易重现。
我已将容器上传到 Docker Hub,因此您也可以根据需要使用它。
下面是容器编译qf_ssi_ai_app示例程序的示例
除了在 docker 上将所有内容编译到开发环境中,我决定创建一个 GUI 来轻松编程 QuickFeather,而无需命令行。
该程序与 Windows 10 兼容,您可以在 QuickFeather Burner v1 文件夹中找到可执行文件。
否则,您可以在存储库中看到此代码。
先决条件,在 pc 上安装 python3 并在 PATH 中可用。
遵循这个过程:
该程序的功能纯粹是从命令行加速设备的闪存过程。
为了获得可靠的我国鸟鸣数据,并能够对设备进行正确的测试,决定使用这个“数据库”的歌曲作为模型训练的输入。
数据:(网页是西班牙语,所以我留下谷歌翻译的版本)
对于这个测试,我决定使用以下 6 只随机鸟类的数据。
鸟类:
如果您想更深入地了解该项目,它位于 Data Capture Lab Project 文件夹中。
为了设置设备并能够使用 QuickFeather 对我的音频进行采样,我遵循了 SensiML 官方教程。
https://github.com/sensiml/esp32_simple_http_uart
特别是如果您想查看项目并自己编译它,它将位于该文件夹中。数据采集实验室
如果您只想开始从您的设备进行测量,编译的 bin 将位于文件夹中。数据采集实验室箱
捕获数据示例:
要对数据进行采样,请获取鸟网页提供的音频(GitHub 中的音频)并使用 QuickFeather 捕获它们。
对于数据标注,在每帧捕获的数据中,选择鸟鸣中最显着的片段,同时选择它们没有唱歌的片段为 Normal 类别(没有鸟鸣,来自背景自然的纯噪声,在这种情况下“沉默”)
这是墨西哥木匠的歌曲的一个例子:
在这种情况下,在训练模型时,请使用以下设置,因为它们是给我最好结果的设置。
生成的模型产生的混淆矩阵为:
6只鸟的识别结果是:
由于单片机的限制,需要保证单片机能检测到的鸟类很少。
使用ESP32 Interface y Simple-Streaming-Gateway用一些鸟类测试模型。
尽管该模型似乎毫无意义地检测了多只鸟,但实际上它主要检测的是我们想要的鸟。然而,为了证明这一点,我们必须对几次检测进行平均,以显示它是如何正确检测到鸟的。
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 上
在这里您可以看到平台:
在这种情况下,为了将我们的设备与 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 的安全性,有必要创建客户端证书和私有证书,以便将设备与平台通信。
将以下文本复制粘贴到文档中并保存。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iot:*",
"Resource": "*"
}
]
}
这样,设备会将数据发送到 AWS IoT。
网页的部署是使用 ReactJS 和 AWS-SDK for javascript 完成的。
看一看!:
为了安全起见,为了安全地使用和使用 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 套接字接收传感器数据,因此在页面内定义很重要,这是我们将要接收的主题,在本例中为“鸟类检测”。
在以下文件中,输入您将订阅的主题的名称。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 连接。因此,可以将设备放置在这个地方进行试点测试。
当然,这只是为了尝试和保存所需的东西而做的一小部分努力,但第一步总是试图找到这些物种。物联网与人工智能一起为我们带来了自动化这一过程的可能性,并在其中变得更加确定。本质上,可以为更多种类的物种扩展和复制相同的过程,我还看到使用计算机视觉做同样事情的版本,在这种情况下的问题是为其提供动力。目前的目的是将 QuickFeather 和 SensiML 的音频功能推向极限,并为此找到一个有价值的应用程序。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !