资料介绍
描述
介绍
野生动物监测对于跟踪动物运动模式、栖息地利用、人口统计、诱捕和偷猎事件和突围至关重要。通过保护野生动物,我们确保后代能够享受我们的自然世界和生活在其中的令人难以置信的物种。为了帮助保护野生动物,重要的是要了解物种在其生态系统中的相互作用,以及它们如何受到环境和人类影响的影响。
动物追踪数据帮助我们了解个人和种群如何在当地移动、跨越海洋和大陆迁移以及世代相传。
该项目的目的是建立一个野生动物监测系统。该项目简称为Wild A n I mal Tracker WAiT 。顾名思义,传感器节点等待野生动物的运动,并在检测到它时立即跟踪它的运动。该系统可以在需要动物追踪的国家公园、森林和森林附近的人类居住区实施。
我非常觉得这个系统的必要性。曾几何时,2003 年,我参观了印度的一个国家公园。在那里我想看到老虎,但我很少能看到老虎,我必须等待更长的时间才能看到它,因为当时没有系统来识别看到老虎的地方并通知我可以去看。许多游客在参观国家公园时甚至都看不到老虎,这种情况就会发生。如果我可以在可以看到老虎的不同可疑区域实施我的系统,系统可以在看到它时立即报告给控制办公室,以便游客/游客可以立即转移到野生动物园的地方,一睹美景动物。这只是一个例子。对于研究野生动物的研究人员来说,这个系统非常有用。
系统如何运作?
该系统的工作原理如下图所示。
能够在深度睡眠中捕获图像并对图像进行分类的传感器节点等待事件发生。当 PIR 运动传感器检测到任何动物活动时,就会发生该事件。当此事件发生时,处于深度睡眠模式的传感器节点将被唤醒并在 tinyML 模型的帮助下捕获图像并对图像进行分类。然后它连接到网络服务器并上传数据并再次进入睡眠状态。应用程序的用户可以看到上传到 Web 服务器的数据。系统还会发送电子邮件警报。
先决条件
在开始之前,请按照以下教程中的说明设置和测试 ESP32 CAM:
数据采集
使用默认的 ESP32 CAM 固件CameraWebServer.ino收集数据。为了构建模型,我收集了狮子和斑马的图像,如下所示。下图显示我已使用CameraWebServer.ino中的 Web 界面来捕获数据集的图像。
注意:我使用了我女儿的动物玩具 ;) 来制作这个模型。这仅用于测试目的,因为当前没有相同相机配置的野生动物图像。需要通过在真实条件下捕捉动物图像来构建真实动物图像模型。为此,需要构建一个传感器节点,该节点可以在真实条件下部署,仅用于收集动物图像并将其上传到 Web 服务器。在本文中,我已经指定了如何构建这种类型的传感器节点。为了使模型准确工作,捕捉真实状态的动物图像非常重要。
开发 tinyML 模型
登录Edge Impulse并创建一个项目 WILD_ANIMAL_TRACKER。现在转到数据采集,然后转到上传数据部分并通过指定标签上传图像。您可以一次为单个标签上传多张图片。例如选择所有狮子图像并指定狮子标签,然后单击开始上传按钮。
上传图片后。再次进入数据采集,您将看到所有上传的图像列表。
进入Impulse Design并使用下图所示的设置创建冲动,然后单击保存冲动按钮。
注意:仔细观察图中的所有设置。
接下来,转到图像选项卡,观察图像数据并单击保存参数按钮。
转到迁移学习选项卡,在神经网络 -> 神经网络架构下选择MobileNetV2 0.05。为此,请单击选择不同的模型。
然后选择MobileNetV2 0.05。
选择MobileNetV2 0.05很重要,因为 ESP32 CAM 资源较少。在这一步之后点击开始训练按钮。您将看到类似于下图的输出。
现在您可以转到实时分类选项卡来测试模型的工作方式。要测试,请在Classify existing test sample下选择要分类的图像,然后单击load sample按钮,如下图所示。
你会看到如下结果
您还可以转到模型测试选项卡并单击分类所有按钮以测试模型的测试数据。
发现一切正常后,转到部署选项卡,单击Arduino 库并向下滚动,然后单击构建按钮。这会将模型下载为Arduino库。
使用Edge Impulse构建的模型高效且准确,因为它使用的内存非常少,而不会影响准确性。感谢屡获殊荣的EON 编译器。
最后,可以通过单击构建按钮来部署模型。
在设备上测试模型
要在真实传感器节点(即 ESP32 CAM)上测试模型,您需要将此 zip 库包含到您的Arduino IDE 中。请按照此处给出的说明进行操作。包含库后,它必须如下所示。
在此之后从官方Edge Impulse存储库下载ESP32-Cam-Edge-Impulse示例。ESP32 -Cam-Edge-Impulse/Basic-Image-Classification/Basic-Image-Classification.ino示例将用于直接在 ESP32 CAM 上测试我们的模型。
现在在Arduino中打开草图Basic-Image-Classification.ino并确保包含上面使用Edge Impulse创建的库的头文件。您必须包含您自己模型的头文件。您可以在Arduino/libraries/Wild_Animal_Tracker_inferencing/src/Wild_Animal_Tracker_inferencing.h文件夹中找到它。
您必须为头文件使用与库文件夹中相同的名称。
现在取消注释我们正在使用的电路板的行,如下图所示。
现在在代码中提供您的 WiFi 设置。
上传草图启用设置,如下图所示。
现在您需要使用 USB 转 TTL 模块连接您的 ESP32 CAM,如下图所示。
注意:不要忘记将 ESP32 CAM 上的 IO0 引脚和 GND 引脚短接以启用上传。
将开发板连接到计算机后,按下 ESP32 CAM 背面的重置按钮,在Arduino中编译和上传代码。确保正确的 PORT 可用。
上传代码后,首先从 IO0 引脚和 GND 引脚上拔下电缆,然后按下 ESP32 CAM 上的复位按钮。现在打开串行终端,您将看到 IP 地址。打开网络浏览器并使用串行终端的 IP 地址来捕获图像。捕获图像后,您将在Arduino ide 的串行终端中看到分类结果。
构建传感器节点
下一步是上传为此项目构建的固件代码。(上传前短管脚并按下复位按钮)首先上传本项目提供的Wild_Animal_Tracker_Firmware.ino固件。断开您的电路板,移除所有电缆并制作电路,如下图所示。
注意:如果您没有电池,则可以使用 USB 转 TTL 模块为 ESP32 CAM 供电。仅将 USB to TTL 模块的 5v 和 GND 引脚连接到 ESP32 CAM 的 5v 和 GND 引脚。不需要其他连接。
在代码中,以下语句包含了我们使用Edge Impulse构建的 ML 模型
#include
我已经声明了以下变量
char animal[20];
const int pir_sensor = 13;
变量animal
存储分类结果,PIR 传感器连接到 ESP32 CAM 的引脚 13。
该classify()
函数进行推理。在此函数中,推理结果animal
使用以下代码存储在变量中。
if(result.classification[ix].value > 0.50000)
strcpy(animal, result.classification[ix].label);
在该 classify()
函数中,调用 send_data_webserver()
函数将数据发送到 Web 服务器。
send_data_webserver(animal);
该send_data_webserver()
函数接受一个参数,该参数是推理的输出,即检测到的动物。此功能连接到网络服务器上的页面并发布数据。将 IP 地址更改192.168.157.130
为您自己的 IP 地址。
void send_data_webserver(char animal[20]){
//Open a connection to the server
HTTPClient http;
http.begin("http://192.168.157.130/wild_animal_tracker/upload.php");
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
//format your POST request.
int httpResponseCode = http.POST("animal=" + String(animal));
if (httpResponseCode >0){
//check for a return code - This is more for debugging.
String response = http.getString();
Serial.println(httpResponseCode);
Serial.println(response);
}
else{
Serial.print("Error on sending post");
Serial.println(httpResponseCode);
}
//closde the HTTP request.
http.end();
}
我已经定义了在函数run_classifier()
中调用的setup()
函数。该run_classifier()
函数实际上调用classifier()
执行推理的函数并调用send_data_webserver()
将数据发布到 Web 服务器的函数。函数按以下顺序调用run_classifier()-->classifier() --->send_data_webserver().
以下是代码run_classifier().
void run_classifier(){
fb = esp_camera_fb_get();
if (!fb) {
Serial.println("Camera capture failed");
}
classify();
esp_camera_fb_return(fb);
}
最后在setup()
函数中,我借助以下代码启用了外部唤醒
esp_sleep_enable_ext0_wakeup(GPIO_NUM_13, 1);
此外部唤醒使用来自连接在 GPIO 引脚号上的 PIR 传感器的输入信号。13. 因此,当检测到运动时,ESP32 会唤醒,进行推理,将数据发送到 Web 服务器并再次进入深度睡眠。这样我们可以节省大量的电池电量。传感器仅在需要时执行处理,否则其余时间处于深度睡眠模式。
ESP32 在深度睡眠模式下消耗的能量非常少,并且可以用来节省大量电池能量并使传感器节点使用电池运行更长的时间,这已经得到了很好的研究。以下链接描述了 ESP32 板的深度睡眠功能。
带有 Arduino IDE 和唤醒源的 ESP32 深度睡眠
深度睡眠模式用于低功耗:在深度睡眠模式下,CPU、大部分 RAM 和所有数字外设都处于关闭状态。芯片中唯一保持通电的部分是:RTC 控制器、RTC 外围设备(包括 ULP 协处理器)和 RTC 存储器(慢速和快速)。该芯片消耗大约 0.15 mA(如果 ULP 协处理器通电)至 10µA。
要启用深度睡眠,请调用以下函数。
esp_deep_sleep_start();
该esp_deep_sleep_start()
函数将 ESP32 发送到深度睡眠。另请注意,在调用esp_deep_sleep_start()
函数之前,我已经调用WiFi.disconnect()
了函数,因为在进入睡眠模式之前断开 WiFi 连接很重要,否则唤醒 ESP32 将无法连接到 WiFi。
部署 Web 应用程序
现在下一步是安装 Web 服务器。此项目的 Web 服务器可以通过两种方式使用
- 本地计算机上的网络服务器
- 在 Internet 上托管空间的 Web 服务器
如果您购买托管空间,则无需安装 Web 服务器。您只需要将代码上传到该项目提供的网络服务器。如果您打算在本地计算机上安装网络服务器,那么我更喜欢 XAMPP 网络服务器。
在本地计算机上下载XAMPP 服务器,然后导航到htdocs
webservers 根目录中的文件夹并复制粘贴整个wild_animal_tracker文件夹。这是您的网络应用程序。它包含如下图所示的文件和目录。
打开DBController.php
文件并更改以下数据库设置
private $host = "localhost";
private $user = "root";
private $password = "";
private $database = "test";
安装 XAMPP 网络服务器后,请记住使用phpmyadmin
模块创建一个名为“test”的数据库,并创建下表来存储数据。
CREATE TABLE wild_animal_data ( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, animal_detected VARCHAR(30) NOT NULL, reading_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );
DBController.php
文件包含上传和检索数据的所有功能。完成所有设置后,您可以连接传感器节点,然后使用以下 URL 在浏览器中打开 Web 应用程序。
http://localhost/wild_animal_tracker/display.html
或者
http://192.168.157.130/wild_animal_tracker/display.html
请记住,这192.168.157.130
是您需要更改的系统 IP 地址。同样的 IP 地址也用于Arduino代码。如果您访问 Web 应用程序而不是在安装它的系统上,则需要 IP 地址。在 Windows 上,您可以使用ipconfig
命令,在 Unix/Linux 上,您可以使用ifconfig
命令来查找系统的 IP 地址。
由于 Web 应用程序也发送电子邮件警报,因此发送和接收电子邮件的设置也应更新。打开upload.php
文件并更新 sendAlert()
函数中的电子邮件设置。
//This function sends an e-mail alert
function sendAlert($animal){
$mail = new PHPMailer(true); // Passing `true` enables exceptions
date_default_timezone_set("Asia/Kolkata");
$dateTime = date("Y-m-d H:i:s");
try {
$mail = new PHPMailer;
$mail->isSMTP();
$mail->SMTPDebug = 2;
$mail->Host = "smtp.gmail.com";
$mail->Port = "587"; // typically 587
$mail->SMTPSecure = 'tls'; // ssl is depracated
$mail->SMTPAuth = true;
$mail->Username = "your_password";
$mail->Password = "your password";
$mail->setFrom("sender_email", "Wild Animal Tracker App");
$mail->addAddress("receipient_email", "receipient_name");
$mail->Subject = 'Alert! '.$animal.' has been detected';
$mail->msgHTML($animal. " has been detected at ". $dateTime);
$mail->AltBody = $animal. " has been detected at ". $dateTime;
//$mail->addAttachment('docs/brochure.pdf');
$mail->send();
echo 'Message has been sent!';
} catch (Exception $e) {
//error
echo "error: ". $e;
}
}
$mail->Host
如果您不使用 Gmail ,$mail->Port
请根据您的 SMTP 服务器进行更改。更新 $mail->Username = "your_password"
并 $mail->Password
使用您的电子邮件登录凭据。在$mail->setFrom()
函数中更新发件人的电子邮件地址,并在$mail->addAddress()
函数中更新电子邮件地址和收件人姓名。
如果您使用的是 Gmail SMTP 服务器,则还需要执行一个步骤。那就是您需要在 google 中允许不太安全的应用程序,否则网络应用程序无法发送电子邮件警报。您可以通过访问 URLhttps://myaccount.google.com/security
并使用您的 Gmail 帐户登录来启用它。
注意:仅在使用 GMail SMTP 服务器时才需要安全性较低的应用程序设置。如果您有自己的 Web 服务器和托管空间,您通常会在您的域中获得几个具有 SMPT 设置的电子邮件帐户。如果您使用 SMTP 设置和电子邮件地址在您自己的域上上传此 Web 应用程序,则此应用程序运行时无需指定任何安全设置。
结果
以下视频和图表显示了系统的输出。
视频说明:上述视频Sensor Node - Running Inference on EXTERNAL WAKEUP using PIR Sensor展示了 tinyML 模型的工作情况。在视频中,首先您会在之前检测到的 Web 应用程序界面中看到斑马的图像。传感器节点处于睡眠模式。在视频中,当我将手放在 PIR 传感器前时,这意味着传感器检测到了一些动物。现在 ESP32 摄像头被唤醒并捕捉到放置在摄像头前面的 Lion 的图像。ESP32 运行推理,对动物进行分类并在 Web 应用程序上上传数据,然后再次进入睡眠状态,如您在串行终端中看到的那样。结果也会立即在 Web 应用程序上更改,即传感器现在检测到 Lion 并且还会发送电子邮件警报。
下图显示了 tinyML 模型在串行终端上的执行,结果反映在 Web 应用程序中。
Web 应用程序有不同的部分来显示信息。
Web 应用程序仪表板当前显示检测到的动物的图像、检测到动物的日期和时间、数据库中 JSON 格式的最近 15 条记录以及检测到前五种动物的频率。目前界面显示动物的静态图像。还可以显示动物的实时图像,正在开发中。
下图显示了通过 Gmail 帐户发送的警报。
结论和未来范围
该项目可用作野生动物监测中非常有用的应用程序,当研究人员无法经常访问该位置时,它可以帮助对动物进行研究。研究人员可以对适用领域的动物进行研究。可以使用安装在特定区域中的设备 ID 来识别动物的位置。这个想法是为每个设备提供唯一的 ID。这样我们可以通过添加 GPS 传感器来减少设备的额外工作量,从而可以节省更多电量。
该项目是高度可定制的,因为可以根据用户要求轻松添加其他功能。该项目还可以定制上传动物的实时图像。我目前正在研究这个功能。例如,如果检测到狮子,传感器节点将通过创建另一个带有日期时间的子文件夹来自动将狮子图像上传到网络服务器上的狮子文件夹中。Web 界面也在开发中,它将允许生成完整的报告。
由于预算限制,我使用了 ESP32 CAM 板,它有其自身的局限性。但是,我计划使用Luxonis LUX-ESP32并利用它的深度 AI功能,这将使该项目的传感器节点更加强大和高效。我还计划使用 LoRa 网络,这将扩展该项目的连接性,并且还可以用于收集具有低功耗功能的位置数据,因为 LoRa 消耗的能量比 WiFi 低得多。已经证明 LoRa 可以在森林环境中使用。添加太阳能电池是另一个问题。
- 野生动物驱虫剂传感器开源硬件
- 基于Arduino Nano的TinyML空中森林火灾探测器 1次下载
- 野生动物探测器开源分享
- Xiraffe桅杆上的智能野生动物观测站
- 555定时器构成的野生动物驱避传感器
- 探讨高度计在健身追踪器中的作用 17次下载
- 动物群体逃生行为及群体虚拟仿真实验 11次下载
- 基于灰狼优化算法的机器人源定位追踪 5次下载
- 基于LoRa无线射频信号的行走追踪系统 8次下载
- 一种基于多智能体协同强化学习的多目标追踪方法 20次下载
- 使用OpenCV的视频对象实现运动物体检测追踪的资料说明 10次下载
- 蜻蜓微型无人机的介绍及用途 4次下载
- ADI民用无人机解决方案 19次下载
- 小Low成本,低功耗的一次性收音机1部分:发射机 15次下载
- 基于GPRS的温度远程监测系统设计 97次下载
- 雷达干扰追踪器(RIT),使用公开数据追踪军事雷达 703次阅读
- KUKA机器人WAIT FOR运用条件 2709次阅读
- 图解Java多线程中的wait()和notify()方法 2038次阅读
- 动态追踪威廉希尔官方网站 分类及其使用方法 2467次阅读
- 链路追踪系统SkyWalking的原理 3868次阅读
- 如何通过雷达追踪飞机 4900次阅读
- 什么是眼球追踪?为什么对VR如此重要? 7644次阅读
- OpenCV上八种不同的目标追踪算法 3.2w次阅读
- 光线追踪算法汇总 1.7w次阅读
- 运动物联网中惯性传感器承担着什么作用 2242次阅读
- 采用光电传感器的太阳追踪系统设计方案 6657次阅读
- 百度发布Visual DL 使得深度学习任务变得生动形象,实现可视分析 4775次阅读
- Festo以大自然为灵感设计各种仿生动物机器人 并且非常逼真 8409次阅读
- 从原理出发,交流异步/永磁同步电动机如何产生动力? 8488次阅读
- DRV2605:自动谐振追踪要点剖析 8892次阅读
下载排行
本周
- 1使用单片机实现七人表决器的程序和仿真资料免费下载
- 2.96 MB | 44次下载 | 免费
- 2联想E46L DAOLL6笔记本电脑图纸
- 1.10 MB | 2次下载 | 5 积分
- 3MATLAB绘图合集
- 27.12 MB | 2次下载 | 5 积分
- 4PR735,使用UCC28060的600W交错式PFC转换器
- 540.03KB | 1次下载 | 免费
- 5UCC38C42 30W同步降压转换器参考设计
- 428.07KB | 1次下载 | 免费
- 6DV2004S1/ES1/HS1快速充电开发系统
- 2.08MB | 1次下载 | 免费
- 7模态分解合集matlab代码
- 3.03 MB | 1次下载 | 2 积分
- 8美的电磁炉维修手册大全
- 1.56 MB | 1次下载 | 5 积分
本月
- 1使用单片机实现七人表决器的程序和仿真资料免费下载
- 2.96 MB | 44次下载 | 免费
- 2UC3842/3/4/5电源管理芯片中文手册
- 1.75 MB | 15次下载 | 免费
- 3DMT0660数字万用表产品说明书
- 0.70 MB | 13次下载 | 免费
- 4TPS54202H降压转换器评估模块用户指南
- 1.02MB | 8次下载 | 免费
- 5STM32F101x8/STM32F101xB手册
- 1.69 MB | 8次下载 | 1 积分
- 6HY12P65/HY12P66数字万用表芯片规格书
- 0.69 MB | 6次下载 | 免费
- 7华瑞昇CR216芯片数字万用表规格书附原理图及校正流程方法
- 0.74 MB | 6次下载 | 3 积分
- 8华瑞昇CR215芯片数字万用表原理图
- 0.21 MB | 5次下载 | 3 积分
总榜
- 1matlab软件下载入口
- 未知 | 935119次下载 | 10 积分
- 2开源硬件-PMP21529.1-4 开关降压/升压双向直流/直流转换器 PCB layout 设计
- 1.48MB | 420061次下载 | 10 积分
- 3Altium DXP2002下载入口
- 未知 | 233084次下载 | 10 积分
- 4电路仿真软件multisim 10.0免费下载
- 340992 | 191367次下载 | 10 积分
- 5十天学会AVR单片机与C语言视频教程 下载
- 158M | 183335次下载 | 10 积分
- 6labview8.5下载
- 未知 | 81581次下载 | 10 积分
- 7Keil工具MDK-Arm免费下载
- 0.02 MB | 73807次下载 | 10 积分
- 8LabVIEW 8.6下载
- 未知 | 65987次下载 | 10 积分
评论
查看更多