目录

介绍

配置Raspberry Pi

修改代码

运行害虫消除器

下一步


在这里,我们修改了在Pi设备上启动MDDNNPython代码。然后,我们演示视频文件上的驼鹿检测。然后,我们向读者展示了如何通过发出响亮的声音来触发连接的扬声器来吓跑害虫。最后,我们对该系列作了简要介绍,并提出了进一步的改进建议。

  • 下载源34.8 KB
  • 下载模型-26 MB(外部链接)

介绍

野蛮的野生生物可能给企业和房主带来痛苦。鹿、驼鹿甚至猫等动物都会对花园、庄稼和财产造成破坏。

在本系列文章中,我们将演示如何在Raspberry Pi上实时(或近实时)检测有害生物(例如驼鹿),然后采取措施消除有害生物。由于我们不想造成任何伤害,我们将通过播放巨大的噪音来吓跑害虫。

欢迎您下载该项目的源代码。我们假设您熟悉Python并且对神经网络的工作原理有基本的了解。

上一篇文章中,我们开发了一种运动检测器,并将其与训练有素的DNN分类器结合在一起。在本文中,我们将修改我们的Python代码以在Raspberry Pi设备上执行有害生物检测,并使最终的解决方案能够播放响亮的声音以将有害生物吓走。

配置Raspberry Pi

首先,我们需要配置我们的边缘设备。我们将使用具有16 GB内存的Raspberry Pi 3B +。操作系统将是Raspberry Pi OS32位)。可以通过PIP通道安装Python OpenCV库。

要播放声音,我们将使用Pygame库。该软件包已预安装在Raspberry Pi设备使用的大多数操作系统上。假设我们将使用3.5毫米耳机插孔播放声音,因此请使用默认配置Pi设备上输出音频。

请注意,这旨在作为概念证明。如果您试图构建一个商业性的害虫检测器,则可能需要使用JetsonCoral类的东西。他们提供价格合理的原型板和可用于生产的硬件——因此,一旦您的产品准备就绪,就很容易进入批量生产。

修改代码

要播放声音并在Pi设备上测试检测算法,我们需要编写一些其他代码。

首先,我们将使用Pygame混音器模块创建一个声音播放器:

from pygame import mixerclass SoundPlayer:def __init__(self, sound_file):mixer.init(44100, -16, 2, 2048)self.sound = mixer.Sound(sound_file)def play(self):self.sound.play()

接下来,我们需要一个类来衡量应用程序的帧处理速度:

import timeclass FPS:def __init__(self):self.frame_count = 0self.elapsed_time = 0def start(self):self.start_time = time.time()def stop(self):self.stop_time = time.time()self.frame_count += 1self.elapsed_time += (self.stop_time-self.start_time)def count(self):return self.frame_countdef elapsed(self):return self.elapsed_timedef fps(self):if self.elapsed_time==0:return 0else:return self.frame_count/self.elapsed_time

现在,我们可以修改上一篇文章中开发的VideoPD类,以播放声音并评估检测速度:

class VideoPDSound:def __init__(self, md, pd, thresh, sp):self.md = mdself.pd = pdself.thresh = threshself.sp = spself.fps = FPS()def play(self, file_path):capture = cv2.VideoCapture(file_path)md_name = 'Motion objects'cv2.namedWindow(md_name, cv2.WINDOW_NORMAL)cv2.resizeWindow(md_name, 640, 480)counter = 0play_dt = 10.0curr_time = time.time()play_time = curr_time - play_dt - 0.1detect_count = 0while(True):    (ret, frame) = capture.read()if frame is None:breakcounter = counter + 1#if (counter % 3) != 0:#    continueself.fps.start()self.md.process(frame)objects = self.md.objects()l = len(objects)pests = []if l>0 :for (i, obj) in enumerate(objects) :(roi, (class_num, class_conf)) = self.pd.detect(frame, obj)if (class_num>0) and (class_conf>=self.thresh) :pests.append(roi)self.fps.stop()if l>0:Utils.draw_objects(objects, "OBJECT", (255, 0, 0), frame)k = len(pests)if k>0:detect_count = detect_count + 1Utils.draw_objects(pests, "PEST", (0, 0, 255), frame)curr_time = time.time()dt = curr_time - play_timeif dt>play_dt :self.sp.play()play_time = curr_time# Display the resulting frame with object rectscv2.imshow(md_name, frame)#time.sleep(0.01)if cv2.waitKey(1) & 0xFF == ord('q'):breakcapture.release()cv2.destroyAllWindows()    f = self.fps.fps()return (detect_count, f)

现在,此代码通过调用self.fps.startself.fps.stop方法来监视检测过程的性能。请注意,我们仅评估检测算法的执行时间(运动检测和分类)。当在框架中检测到有害生物时,修改后的代码还会通过调用self.sp.play来播放声音。在现实生活中,很可能会在几个连续的帧中检测到驼鹿。我们不想每次在相机视图中出现驼鹿时都播放声音。

目的是发出可怕的声音一次,然后等待新的有害生物出现。该算法最多每10秒播放一次声音。所以,如果有一群恶意的驼鹿在我们的金盏花间游荡,我们会把它们全都吓跑——如果有必要的话,一次一只。

如果我们试图将一只驼鹿吓跑了,我们还可以保证它是否会坚持下去。如果我们的声音不足以使该驼鹿感到沮丧,只要该驼鹿在视觉范围内,我们每隔10秒钟播放一次相同的声音后,(希望)会消除烦恼。

我们还需要选择一种适合吓跑害虫的声音。让我们从Internet上获得许多免费的蜂鸣器声音中的一种。例如,这一个:buzzer.wav)。

运行害虫消除器

现在,我们准备在Raspberry Pi设备上运行除虫算法:

video_file = r"/home/pi/Desktop/PI_PEST/video/moose_1.mp4"md = MD(0.05, 0.1)
proto = r"/home/pi/Desktop/PI_PEST/net/moose.prototxt"
model = r"/home/pi/Desktop/PI_PEST/net/moose.caffemodel"
pd = PestDetector(proto, model, 128)sound_file = r"/home/pi/Desktop/PI_PEST/video/buzzer.wav"
scarer = SoundPlayer(sound_file)v_pd = VideoPDSound(md, pd, 0.99, scarer)
(detect_count, fps) = v_pd.play(video_file)
print("FPS = %s" % fps)

这是捕获的视频结果:

https://youtube.com/embed/o2Qd_L0V3uY

视频处理完成后,我们将在控制台中显示平均处理速度。对于此视频文件,其测量值为1112 FPS。比基于预训练的SSD模型的算法快一个数量级。(记得吗?速度大约为1.25 FPS)。我们的自定义算法几乎可以实时运行,而无需进行硬优化或并行处理。

下一步

在本系列文章中,我们演示了如何在Raspberry Pi设备上使用AI算法来消除现实生活中的户外环境中的有害生物。我们从开发代码开始,以使预训练的SSD模型支持对常见害虫的检测,例如牛、羊、甚至猫和狗。

然后,我们组装了一个异常害虫:驼鹿的图像样本数据集。我们应用了几种数据扩充方法来增强数据集。然后,我们开发了一个简单的小型DNN分类器模型,并在扩充数据集上对其进行了训练,其准确度高达97%。

最后,我们设计了一种基本的运动检测算法,并将其与DNN分类器结合在一起。完整的算法在视频文件上进行了测试,显示出惊人的1112 FPS的良好性能。

我们希望您发现本系列很有用,也希望它为您提供一些针对边缘设备开发有趣的AI应用程序的指导。该系列的主要目的是展示检测问题的概念性解决方案。

如果您打算部署商业性的害虫消除工具,那么下一步就是要做进一步的工作,以优化软件堆栈的性能。我们鼓励您尝试使此解决方案更好地工作。祝好运!

https://www.codeproject.com/Articles/5289754/Eliminating-Pests-with-a-Raspberry-Pi

用Raspberry Pi消除害虫相关推荐

  1. raspberry pi_在月光下将Raspberry Pi变成蒸汽机

    raspberry pi Valve's Steam Machines aim to bring your Steam game library right into your living room ...

  2. 使用projectx / os和Raspberry Pi托管您自己的电子邮件

    有很多原因不希望将存储数据和运行服务的任务交给第三方公司. 隐私,所有权和避免滥用"获利"是最重要的. 但是对于大多数人而言,运行服务器的任务非常耗时,并且需要太多专业知识. 相反 ...

  3. 构建Raspberry Pi,脉冲传感器和LCD的心跳计数器

    我们的心率或脉搏是您的心跳每分钟的次数.正常心率因人而异.了解您的信息可以成为重要的心脏健康指标. 在本教程中,我们制作了一个心跳计数器,使用Raspberry Pi Zero在LCD上显示每分钟的心 ...

  4. 楼氏电子推出Raspberry Pi 开发工具包,为新物联网应用和行业语音整合提供支持

    新开发工具包捆绑了语音和音频功能测试.原型设计.调试以及整合到智能家居.消费技术.工业等新应用所需的所有硬件.附加开放软件和算法 伊利诺伊州伊塔斯卡--(美国商业资讯)--高级微型声学麦克风与扬声器. ...

  5. raspberry pi_如何保护您的Raspberry Pi

    raspberry pi Raspberry Pi和诸如此类的许多其他廉价计算机板已成为"物联网"或物联网革命的一部分. 互联网连接的计算设备已经超越了传统的服务器,台式机,笔记本 ...

  6. VLOG丨树莓派Raspberry Pi 3安装PLEX并挂载USB硬盘打造最牛的微型家庭影音服务器2018...

    视频介绍 树莓派3安装目前最流行的PLEX服务器,实现既能最大限度降低功耗,也能随时随地观看分享影片. 一.在树莓派下安装PLEX媒体服务器 1.在终端,将你的树莓派更新至最新 sudo apt up ...

  7. w ndows连接USB不正常,Raspberry Pi Zero W 连接电脑 – 针对Windows 10 缺少RNDIS驱动

    在网上有很多关于Raspberry Pi Zero连接电脑的帖子,但是发现在windows 10 系统上发现没有发现RNDIS 驱动,这个驱动在其他系统上会自动安装,但是在windows 10 上显示 ...

  8. Python3和Raspberry Pi最全面最直接的课程

    在一门课程中学习Python 3基础知识.高级Python.科学Python.Raspberry Pi.硬件和物联网项目  教程获取:Python3和Raspberry Pi最全面最直接的课程 – 云 ...

  9. 如何在5美元的Raspberry Pi上构建个人开发服务器

    In this article, you'll learn how to build a personal dev server by installing Git, Node.js, Rust, a ...

最新文章

  1. 强化学习入门教程(附学习大纲)
  2. 差异数据库的还原方法
  3. linux内核dentry结构学习
  4. 高并发系统数据库架构设计
  5. 获取当前周一日期_Excel工作表中最全的日期、时间函数,效率办公必备!
  6. 在HubSpot是如何应对Fat JAR困境的
  7. python多线程飞速写入文件
  8. 电力物联网智慧路灯充电桩传感器技术应用方案
  9. 解放原画师!Wav2Lip 用 AI 听音同步人物口型
  10. coreseek java_使用python测试sphinx(coreseek)做全文索引
  11. springboot 使用mybatis与mybatis-generator与druid (gradle构建)
  12. [bzoj3812]主旋律
  13. Eureka的自我保护机制
  14. Java程序员未来职业应如何规划?
  15. python内置函数之len()方法
  16. go语言开发工具sublime text3 + gosublime配置
  17. 纯正体验,极致商务 | 丽亭酒店聚焦未来赛道,实现共赢发展
  18. Python正则表达式匹配各种标准形式整理
  19. 百斗度输入法linux,爪哇语输入法
  20. BI中事实表和维度表的定义

热门文章

  1. 读保护_GD32VF103之片上flash读、写、擦除
  2. decimal转换为int_“System.InvalidCastException 指定的转换无效”问题的反思和总结
  3. oracle修改用户密码命令_oracle 11g dba用户秘密修改其他用户密码
  4. linux系统编译qt代码需要编译qt,linux下如何静态编译QT库,以及如何静态编译自己的程序...
  5. 如何查询以太信道接口_浅谈百兆千兆以太网物理层
  6. 设计海报|字符海报怎么玩?
  7. 设计灵感|怎么设计渐变海报更有趣味性?
  8. 新年春节海报素材精品,再也不怕老板催稿!
  9. 简单小清新植物点缀绿色花边边框,圣诞节花环节日PNG素材
  10. 促销海报灵感素材,不卖出去都难