×

企鹅计数和监测开源分享

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

分享资料个

描述

问题

废弃的网,海洋塑料污染。海温上升,海洋热浪。海岸侵蚀和洪水破坏了筑巢栖息地。被野猫、狗、鼬和老鼠捕食。对于小蓝企鹅(毛利语中的 kororā)来说,情况非常糟糕。

挑战之一是了解这些压力对人口的影响。测量种群的主要方法是在大型殖民地进行人口普查,在繁殖季节检查筑巢箱(对于科罗拉来说,可以在 6 月至 3 月的任何地方),或者定期巡逻海滩以抽样种群 - 这些方法都没有真正提供人口的重要指标。也有一些研究附加了标签来跟踪个人。

小蓝企鹅的困境(kororā)

在澳大利亚被称为“仙女”企鹅,在新西兰被称为“小蓝”企鹅或毛利语名称“kororā”。新西兰自然保护部 (DOC) 将 kororā 归类为“下降/处于危险中”。这个物种是所有企鹅中最小的,只有 1 公斤重。

Kororā 遍布新西兰和澳大利亚的南部和东南部。

海上威胁包括导致窒息的渔网和海洋塑料污染。海洋热浪导致海面温度升高,这迫使鱼进入更深的水域,这意味着企鹅必须走得更远,潜入更深的地方寻找食物,近年来导致饥饿和大量死亡。本文显示提供了有关此问题的更多信息。

新西兰的海洋热浪问题继续恶化 kororā 的困境 -

大规模死亡变得越来越普遍和恶化 -

企鹅在海上度过了很多时间,但也经常返回陆地。在筑巢和繁殖期间,它们返回同一区域,它们、它们的蛋和小鸡在此期间特别容易受到伤害。由于海平面上升、越来越高强度的风暴和潮汐影响筑巢地点,海岸侵蚀(过去冬天在穆里怀非常严重)。

陆上引进的哺乳动物捕食者,如野猫、野狗(经常被主人带入企鹅栖息地)、猫、鼬科动物(白鼬、黄鼠狼、雪貂)和老鼠吃鸡蛋并杀死小鸡和成年人。在澳大利亚,狐狸也构成严重威胁。

解决方案

这些问题的部分解决方案是检测、监控和保护企鹅何时何地上岸。检测通常是通过寻找被占用的洞穴或在退潮时在沙滩上寻找指纹来完成,但这些方法不可扩展,企鹅经常和筑巢的地方往往偏远,而且企鹅从黄昏上岸,这使得这项任务对人类来说很困难去完成。

解决方案是使用 AI 自动执行此过程,并使用无线电 (Lora) 报告此过程。

穆里怀企鹅项目

穆里怀企鹅项目是一个由志愿者管理的团体,旨在为企鹅康复和保护提供监测、捕食者控制和诱捕、筑巢箱以及教育和筹款。

他们认为鼓励企鹅回到穆里怀南部海湾是一场漫长的比赛,但团队正在取得进展,科罗拉开始在部署的 20 个盒子中筑巢。该团队过去常常在退潮时在沙滩上看到捕食者的踪迹,经过两年的诱捕,这些踪迹开始消失,而科罗拉又回到海湾筑巢。

自动监控和计数如何提供帮助?

一系列低成本、长寿命的摄像机可以帮助提醒企鹅保护组织注意企鹅在筑巢地点附近的存在,并引发行动以部署更多的诱捕措施,并向当地人提供有关它们存在的教育,并让狗远离该地区。

潜在地,相机还可以用于检测捕食者和威胁的存在,例如狗、猫和鼬类(白鼬、黄鼠狼、雪貂)和警报保护者。

长期和更大地理区域上岸的监测数字可能有助于种群研究并有助于改善对鸟类的保护。

项目至今

该项目还没有完成,挑战仍然存在(见下文),但有以下几点:

  • 使用 Seeed、Roboflow 和 YoloV5 的 K1100 套件开发的 POC
  • Seeed (SenseCAP A1101) 即将推出低成本、工业品质的 AI 传感器。
  • 我参观了偏远的穆里怀南部海湾;
  • 与当地专家讨论企鹅的行为和项目;

我毫不怀疑这个项目值得在即将到来的新西兰夏季进行,那时企鹅更容易进入,对企鹅的影响也更小(例如,一旦小鸡长出雏形)。

项目挑战

这个项目的挑战相当大,主要是由于企鹅居住的地方,以及经历了有记录以来新西兰最潮湿的冬天。

新西兰奥克兰西海岸的企鹅生活在非常偏远且难以到达的海湾。由于捕食和干扰,它们很少出现在当地人口稠密的地区(它们曾经是常见的地方)

进入这些地区的通道受到严格控制,并且是通过私人土地,其中土地所有者提供了与当地环保组织的接触。由于这个原因,以及每年收集训练图像的时间一直很困难。

由于企鹅每年这个时候都会上岸繁殖和筑巢,因此需要格外小心,以免打扰企鹅。

随着 kororā 从黄昏到午夜左右上岸,要克服的最大挑战之一是能够在夜间监测广阔的海滩区域以及如何用 IR 灯照亮该区域 - 同时确保 IR 灯不会干扰企鹅。

这个挑战意味着我需要在 POC 中使用太阳能装置进行红外照明。

实地考察

在项目期间,我多次参观了海湾,并能够观察企鹅在巢穴中并坐在蛋上。下面的图片是在这些访问中拍摄的。

pYYBAGNQlK2AWX0EAAHNZjcVz1o749.png
企鹅在天然洞穴中 - 拍摄于 2022 年 9 月 11 日
 
pYYBAGNQlLCAOdUgAAEfH43-Frk331.png
崎岖不平的地形 - Muriwai NZ
 
poYBAGNQlLOAbPNdAAIP7ZsA58U905.png
海滩监测企鹅上岸的位置。
 
pYYBAGNQlLWAH0VCAAJUoeug0p4387.png
崎岖地形中的企鹅筑巢箱
 

用“代理”鸟测试 AI 模型

由于收集训练图像非常困难(直到新西兰夏季),并且定期进入海湾,我决定在我的财产的一个池塘上收集图像。这个池塘经常有两种鸭子(野鸭和天堂)和一种叫做 Pūkeko 的新西兰本土铁路。这将允许我在稍后部署到难以进入的南部海湾之前测试模型和设备。

此外,由于该项目的挑战之一是区分企鹅和海鸥,这将使我能够测试模型以区分物种。

虽然这些鸟不是夜间活动的(尽管在黄昏和黎明时非常活跃)并且与 kororā 有明显的不同,但我觉得它们将是测试 AI 模型、相机、图像采集和红外照明的“足够好”的代理.

poYBAGNQlLqACVDlAAeKEh6gNb8266.png
鸭子和 Pūkeko 的跟踪相机图像
 
pYYBAGNQlL2AJnVCAADAxrghsdY351.png
Roboflow 注释
 

训练数据采集

由于在 Grove AI 设备或移动设备上为企鹅或我的代理鸟获取训练数据是不切实际的,因此我使用了几种方法来捕获图像。

首先,我使用的是 Kogan(澳大利亚在线零售商)的廉价 Trail Camera -  这允许用于运动捕捉、视频、图像、夜视和视频捕捉的定时 - 使其适用 - 但是运动传感器的范围很短。

其次,我使用了一个很棒的相机,它是我为在 Wio 终端上使用和拍摄图像而设置的。请查看附加到该项目的代码库,该代码库显示了我如何在 Wio 终端上使用它。这是 Adafruits 的精彩指南 用于相机以及如何使用。

最后,我从网络上获取了图像,搜索尽可能多的与我的图像捕获相似的开源图像。我在 Penguin 模型中使用的所有图像目前都基于 28 张图像,我需要更多。

我还尝试使用 Dall-e AI -生成图像变体 - 实际上效果非常好(见下图左侧的原始图像和右侧的 4 个变体) . 这有助于提供更多的训练图像。

poYBAGNQlL-AYX9oAAHC_Ilcd3w264.png
Dall-e 图像上传和变体生成器,用于生成训练图像变体
 

一旦我有更多本地企鹅的图像,我将调整我的互联网来源图像,以模仿 AI 相机上提供的带有红外照明的照明。

太阳能设置

小蓝企鹅的一个非常方便的地方是它们是夜间活动的,只在傍晚上岸,从黄昏到午夜左右。这意味着设备可以在白天关闭,而电池正在充电并在晚上打开。

由于 Wio 终端没有强大的电源管理,我选择了一个超级简单的 POC 操作,使用 12v 定时器来打开和关闭设备的电池电源以及从午夜到黄昏的照明。这会将设备插入 PWM 充电控制器上的 USB 端口。

使用 Seeed - SenseCAP A1101 - LoRaWAN Vision AI 传感器部署模型后,由于电池寿命长,因此只需使用太阳能电池为红外照明供电。

pYYBAGNQlMKAaVfgAAIh9Wk5CmY955.png
简单的太阳能设置,带有 PWM 充电控制器和 12v TM 618-4 Sino 定时器
 

注释和训练模型

我按照这个 wiki 中的步骤进行操作,它使设置和培训变得超级简单。我使用 Roboflow 来注释图像。最后我只得到了 28 张图片——现阶段全部来自互联网。

https://wiki.seeedstudio.com/Train-Deploy-AI-Model-A1101-Grove-Vision-AI/

pYYBAGNQlMSAHQ70AAEoFMz5nXw076.png
Roboflow 注释 - 图片来源 Miles Holden - https://visuals.newzealand.com/assets/678356
 

我能够通过模型获得非常好的准确性——尽管训练数据非常有限。

地图 - 83.6%

精度 - 75.0%

召回 - 78.9%

pYYBAGNQlMeALby-AAICwZlyV28060.png
书呆子的 Roboflow 模型统计数据
 

部署和运行推理

我再次使用本教程中的标准代码 - https://wiki.seeedstudio.com/Train-Deploy-AI-Model-A1101-Grove-Vision-AI/并按照步骤使部署相对容易。我确实发现模型在加载时经常会失败,我需要重新启动或拔下 Wio 终端才能使其正确加载 - 我不确定这是为什么。

企鹅的行为很容易计数,因为当企鹅上岸时,它们会为树木或岩石划出一条 b 线,以摆脱海鸥和海豹的危险。这有助于确保我们可以准确地计算企鹅数量。

对于我的用例,Grove AI 相机模块有许多限制。

  • 低光 - 相机模块在低光下没有很好的图像;
  • IR 滤光片 - 如果使用 IR 照明,图像会完全褪色;
  • FOV - 相机的视野很窄(66 度),因此不适合覆盖更广泛的海滩区域;

我能够准确地推断出企鹅的图像(使用测试图像)。我还没有在我的“鸭子代理”设置上获得模型的有效结果。

通过 TTN 和 DataCake 进行 Lorawan 监控

另一个挑战是由于地形和海滩偏远且位于悬崖底部,是为了确保我们能够覆盖 Lora。Wio 终端 Lora 现场测试仪非常适合这一点,我能够轻松检查覆盖范围。

我将 Dragino LPS8 室内 LoRaWAN 网关与标准室内 ariel 一起使用。我从悬崖边缘到海滩大约 1.3 公里。使用 Wio Field 测试仪,我能够确认覆盖范围足够,但我计划购买室外天线以提高覆盖范围。

我已经设置了现场测试仪,将数据推送到 TNN 和 DataCake,以便对海湾的覆盖范围有一个很好的了解。

我还设置了 Wio 终端,根据 AI 模型对象检测将数据推送到 TTN。

poYBAGNQlMqAHJNZAALJD9tcvuk720.png
在海湾进行 Lora 信号测试。
 
poYBAGNQlM2APth1AAF3lyf2oSk946.png
从窗口查看到测试站点 - Dragino LPS8
 
pYYBAGNQlNCAOzu8AADZSn_C100411.png
使用 Wio Terminal Lora Field Tester 检查 Lora 覆盖范围
 

最终测试设置

在撰写本文时,我还没有在我的测试站点部署企鹅模型,并且正在用我的“代理”鸟在我的池塘上测试设置。这还不是完全防水的,所以我只在天气好的时候部署。到目前为止,我的代理鸟模型效果不佳,仅检测到了几次,我认为这是因为相机位于塑料容器中,因此图像不是很清晰,并且水中有反射,我还没有有很多训练数据。

我将继续改进这一点,并为“替补”鸟类收集更多的训练数据。我还有 TTL 和 Trail 相机也在运行以验证检测结果。我想说我离在企鹅试验场部署防水装置还有一段路要走。红外照明仍有工作要做(如果运动传感器被触发,目前由 TTL 相机或 Trail 相机提供)。

pYYBAGNQlNKAcTzrAAISA1HQMuU203.png
用于 Grove Vision AI、Lora E5 和另一个用于带 IR 的 TTL 相机的 Wio 终端的容器。
 
poYBAGNQlNaAAVFHAAUTCN_vi54052.png
用于验证和容器的 TTL 相机与 Grove Vision AI
 
poYBAGNQlNmAL403AAWGKpfpqo8403.png
设置在池塘上以测试设备和模型
 
 

后续步骤、增强功能和实验

如前所述,要克服的最大挑战是收集更多训练图像,我将在新西兰夏季完成这项工作 - 截至撰写本文时(2022 年 9 月 21 日),目前有许多企鹅在蛋上,所以我们希望能够在接下来的几个月里,每天都拍摄图像,因为它们的小鸡正在发育,而父母则出海觅食(我们需要等到鸡蛋孵化,因为我们不希望在它们坐在鸡蛋上时打扰它们)。

其他变化和实验:

  • 改进代理鸟模型并部署在我的池塘设置的防水测试。
  • 调查将相机模块或镜头更换成这样的东西 -
  • 对红外照明选项进行更多调查,以优化我可以覆盖多少海滩并仍然获得不错的推断。
  • 使用 Edge Impulses FOMO 模型进行调查 - 即将发布对 Grove Vision AI 的支持。
  • 看看是否可以使用 Edge Impulse Himax We I Plus 编译器部署模型(我不知道这是否可行)。

 

 

照片学分

https://visuals.newzealand.com/assets/389198 - 但尼丁新西兰

https://visuals.newzealand.com/assets/678356 - 迈尔斯霍尔登


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

评论(0)
发评论

下载排行榜

全部0条评论

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

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'企鹅计数和监测开源分享',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);