1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 哪些深度相机有python接口_用树莓派和YOLO打造一个深度学习照相机

哪些深度相机有python接口_用树莓派和YOLO打造一个深度学习照相机

时间:2021-09-01 13:14:18

相关推荐

哪些深度相机有python接口_用树莓派和YOLO打造一个深度学习照相机

Python部落()组织翻译,禁止转载,欢迎转发。

亚马逊刚刚发布了一款智能摄像头DeepLens,它使用机器学习来检测物体、面部和一些活动,如弹吉他。虽然现在还不可以购买DeepLens,但是智能摄像头的想法令人兴奋。

想象一下可以用一个相机分辨你是在弹吉他,还是在创作一段新的舞蹈,还是在学习一个新的滑板技巧。摄像头可以使用原始图像的数据来判断你是否玩的是新的滑板技巧。或者如果你正在跳新的舞蹈,这套舞蹈动作有哪些以及如何将动作与音乐协调起来。

本文将搭建一个深度学习摄像头,它检测何时有鸟出现在摄像头的图像中,然后保存有鸟的照片。最终结果如下图所示:

深度学习相机检测到的包含鸟的图像

深度学习相机是机器学习全新平台的开始。

DeepLens拥有100 GFlops的用于推理的计算能力,这仅仅是一个令人感兴趣的深度学习相机必备的最低的计算能力。未来,这些设备将变得更加强大,并允许每秒推断数百张图像。

但是谁想等到未来呢?

可以智能推理的“笨”相机

我们不需要在相机里构建一个深度学习模型,而是在边缘使用一台“笨”电脑摄像头(比如9美元的树莓派),将其连接到网络摄像头上,然后通过WiFi发送图像。在权衡一点延迟的情况下,我们今天可以建立一个与DeepLens概念相同的原型,而且更便宜。

本文将构建一个这样的相机。用Python编写一个web服务器从树莓派发送图像到另一个计算机来推理或检测图像。

然后,另一台处理能力更强的计算机将使用“YOLO”神经网络结构来对输入图像进行检测,并且告诉我们摄像头中是否有鸟。

我们将从YOLO结构开始,因为它是最快的检测模型之一。而且它有一个对Tensorflow的接口,它易于安装而且可以在许多不同平台上运行。如果你使用本文用的微小模块,你也可以在CPU上检测,而不必在昂贵的GPU上。

回到我们的原型。如果摄像头检测到一只鸟,就保存该图像以供后续分析。

这仅仅是一个真正智能深度学习相机的开始,非常基础,但你必须从某处开始。让我们开始我们原型的第一个版本。

检测vs图像

检测并标记鸟儿

如前所述,DeepLens的成像被内置到计算机。因此,它可以进行基准级检测,并通过机载计算能力确定图像是否符合您的标准。

但是像树莓派,不一定具有进行实时机载检测所需的计算能力。因此,我们将使用另一台计算机来推断图像里有什么。

本文我使用一个简单的带摄像头和wifi接入(树莓派3和一个便宜的摄像头)的Linux计算机来作为服务器,该服务器用于深度学习做推理。

这很好,因为它允许连接很多便宜的外部摄像头,并在台式机上做所有的计算。

摄像头图像服务器栈

如果你不想使用树莓派摄像头,那么可以按照这些操作指南在树莓派上安装OpenCV 3,要按照说明书中获得最新版本本地安装OpenCV 3.3.1替代3.3.0版本。

旁注,为了在我的树莓派上用3.3.1,我得禁用CAROTENE。你可能也得这样做。

这之后,我们需要用Flask建立web服务器,这样我们可以从摄像头加载图像。

本文初步使用的是Miguel Grinberg的经典摄像头服务器代码,而且仅创建一个简单的JPEG,而不是一个视频:

如果你想使用树莓派摄像头,那么确保取消from camera_pi行的注释,而且注释掉from camera_opencv这一行。

你可以使用python3 app.py或gunicorn运行该服务器,与Miguel的帖子中提到的一样。

当没有请求时,它使用Miguel的经典摄像头管理机制来关闭摄像头,如果有多个机器推理摄像头采集的图像,也使用该管理机制管理线程。

一旦在树莓派上开始,首先找到它的IP地址,然后通过web浏览器访问,来测试并确保服务器工作。

该URL类似于http://192.168.1.4:5000/image.jpg:

加载树莓派的页面来确认图像服务器工作

从摄像头服务器提取图像并进行推理

现在,我们可以加载摄像头的当前图像。我们可以构建脚本来抓取这些图像并对它们进行推断。

我们将使用requests以及Darkflow,requests是用于从URL抓取文件的强大的Python库,Darkflow是在Tensorflow上YOLO模块的一个实现。

不幸的是,无法通过pip安装Darkflow,因此我们需要复制repo,然后在我们用于推理的计算机上,建立和安装它。

安装Darkflow repo后,需要下载一个要使用的YOLO版本的权重和模型。

本文,使用的是YOLO v2微小网络版,因为我想在比较慢的计算机上运行推理,该计算机使用机载CPU,而不是GPU。微小网络版比完整的YOLO v2模型精度低。

这之后,还需要在检测计算机上安装Pillow, numpy和OpenCV。

最后,编写代码以运行检测:

以上就是我们检测运行的非常基本的第一个版本。我们可以在控制台上看到树莓派正在检测什么,还可以看到看见的每只鸟保存在硬盘上。

之后,运行一个程序标记出YOLO在图像上检测出的鸟儿。

权衡:更多的误报还是更多的漏报?

需要注意,在选项字典中创建的threshold键。

这个阈值表明我们需要什么样的可信度,至少要有我们要找的东西。

为了测试,我将其设为0.1。但是这个低阈值会带来很多误报。更糟的是,我们用于检测的微小YOLO模块比真正的YOLO模块精度要低,因此我们会得到相当多的错误检测。

降低或提高阈值可以提高或降低模块的总输出,这取决于你想构建的内容。本文有更多的误报,但是我更希望得到更多的鸟的图像。你可能需要调整这些参数以满足你的需求。

等候鸟儿

让鸟进入我的喂食器花了很长时间。我想我要在后院里的喂食器中放几小时的食物。

但是这用了几天时间。松鼠不停地吃我放的食物,而且头几天我几乎没看见天上有一只鸟。

最后,我做了第二个喂食器,这个更明显而且远离地面。这次,我终于得到像文章开头的一些图像。

最后

和往常一样,本文的代码可以在Github上获取:/burningion/poor-mans-deep-learning-camera

英文原文:/blog/poor-mans-deep-learning-camera/

译者:张新英

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。