不久前,亚马逊刚刚推出了Deeplens。这是世界上第一个专门针对开发人员的深度学习相机。它使用机器学习算法,不仅可以检测对象运动和面部表情,还可以弹奏吉他等复杂的活动。尽管尚未正式推出Deeplens,但智能相机的概念已经诞生了。
今天,我们将根据深度学习创建一个相机,该相机将检测到鸟类并在相机屏幕上出现照片时自动拍摄照片。最终产品如下:
相机并不愚蠢,可能很聪明
我们不会将深度学习模块集成到相机中,而是将Raspberry Pi“挂钩”到相机,然后通过WiFi发送照片。基于“一切简单”(糟糕)的核心,我们只计划创建一个类似于当今Deeplens的概念原型。有兴趣的学生可以自己尝试一下。
接下来,我们将在Python中编写Web服务器,Raspberry Pi将使用该服务器将照片发送到计算机,或执行行为推理和图像检测。
我们在这里使用的计算机将具有更强的处理能力。它将使用称为Yolo的神经网络体系结构来检测输入图像并确定鸟是否出现在相机图像中。
我们必须从Yolo架构开始,因为它是目前最快的检测模型之一。该模型专门为TensorFlow(由Google基于Distbelief开发的第二代人工智能学习系统)留下了一个接口,因此我们可以轻松地在不同平台上安装和运行此模型。友好的提醒,如果您使用的是我们在本文中使用的迷你型号,也可以使用CPU检测它,而不仅仅是依靠昂贵的GPU。
接下来,让我们回到我们的概念原型…如果在框架中检测到一只鸟,那么我们保存图片并执行下一个分析。
测试和拍照
正如我们所说,DeepLens的照相功能已集成到计算机中,因此它可以直接使用板载计算能力来执行基准测试并确定图像是否符合我们的标准。
但是,实际上,我们不需要使用其计算能力来为Raspberry Pi之类的事物执行实时计算。因此,我们准备使用另一台计算机来推断图像中出现的内容。
我使用的是带有相机的简单Linux计算机以及WiFi无线网卡(Raspberry Pi 3+相机),此简单设备将充当我的深度学习机器并进行图像推理。对我来说,这是目前最理想的解决方案,不仅可以大大降低我的成本,而且还可以让我完成桌面上的所有计算。
当然,如果您不想使用Raspberry Pi摄像机,也可以选择在Raspberry Pi上安装OpenCV 3作为解决方案B。有关特定的安装方法,请参阅[此文档]。友好的提醒,安装过程非常麻烦!
接下来,我们需要使用烧瓶来构建Web服务器,以便我们可以从相机中获取图像。在这里,我使用了MiguelGrinberg开发的网络摄像头服务器代码(烧瓶视频流框架),并创建了一个简单的JPG终端:
如果您使用的是Raspberry Pi摄像机,请确保未评论上述代码中的Camera_pi的行,然后未评论Camera_opencv的行。
您可以直接使用命令python3 app.py或gunicorn来运行服务器,该服务器与文档中的Miguel所写。如果我们使用多台计算机推断图像,我们还可以使用Miguel开发的相机管理方案来管理相机和计算线程。
启动Raspberry Pi后,我们首先需要判断服务器是否基于IP地址正常工作,然后尝试通过Web浏览器访问服务器。
URL地址格式类似于以下内容:
http://192.168.1.4:5000/image.jpg
在Raspberry Pi中加载网页和图像,以确定服务器是否正常工作:
图像导入和推理
现在,我们已经设置了终端来加载相机的当前图像内容,我们可以构建一个脚本以捕获图像并推断图像中的内容。
在这里,我们需要使用请求库(一个出色的Python库来从URL地址获取文件资源)和DarkFlow(基于TensorFlow的Yolo模型的实现)。
不幸的是,我们不能使用PIP之类的方法安装DarkFlow,因此我们需要克隆整个代码库,然后进行项目构建并自己安装。安装Darkflow项目后,我们还需要下载Yolo模型。
因为我使用的是较慢的计算机和板载CPU(而不是更快的GPU),所以我选择使用YOLO V2 MINI网络。当然,它的功能绝对不如完整Yolo V2模型的推断那么准确!
配置完成后,我们还需要在计算机上安装枕头,numpy和openCV。最后,我们可以彻底完成代码并执行图像检测。
最终代码看起来像这样:
目前,我们不仅可以查看命令控制台中Raspberry Pi检测到的内容,而且还可以直接在硬盘上查看保存的鸟照片。接下来,我们可以使用Yolo来标记图片中的鸟类。
假阳性与虚假负面关系之间的平衡
我们在代码的选项词典中设置了一个阈值键,该阈值表示我们用于检测图像的一些成功率。在测试期间,我们将其设置为0.1,但是这样的较低的阈值将为我们带来更高的假阳性和假阳性率。更糟糕的是,我们使用的迷你Yolo模型的准确性比完整的Yolo模型要差得多,但这也是需要考虑的平衡因素。
降低阈值意味着我们可以获得更多的模型输出(照片)。在我的测试环境中,我的阈值设定较低,因为我想获得更多的鸟儿照片,但是每个人都可以根据需要调整阈值参数。
开源代码
就像以前一样,我将所有代码上传到GitHub。有兴趣的学生可以单击以阅读原始文本以下载并安装它。
*参考来源:MakeartWithpython,由FB编辑器Alpha_h4ck编写,请在重印时从表示