使用TensorFlow.js创建动物/对象跟踪摄像头应用

PETCAM:非智力精机学习交易运营着一款旧的智能手机。这个项目在我之间, 杰森·梅斯(Jason Mays)那些达到主意的人。另外,一个有趣的故事,呃… MarkkuLepistö(几乎)在他自己的YouTube上的计划中同时,您可以在此处看到。我们使用旧的智能手机。它使用珊瑚发展委员会。选择自己的冒险。

当我小时候,住在新泽西州的家中时,我的父母真的很想想起夜间车库关闭。因为如果您不关闭车库,那将发生这样的事情:

使用TensorFlow.js创建动物/对象跟踪摄像头应用

然后第二天早上,我们在前门走去,撞上了肮脏的尿布,击中了巨大的尿布,我们看到垃圾袋撕裂而空着。很明显,有人过一个狂野的夜晚。

熊喜欢吃垃圾。 Raccon喜欢吃垃圾。如果您使它们容易,甚至狐狸也会得到垃圾。一切都在想到,我可能会改善记忆车库的关闭。但是,在ABI的NST摄像头平台上渗透小机器学习应用程序也是一件好事,以便每当他发现一只熊从垃圾中出来时,它都会发挥嘈杂的空气喇叭的噪音,吓坏了森林中的小偷。

当时我想要的是Petcam,我今天带给您的项目: 一个提醒您的狗,沙发,椅子,笔记本电脑等时,您的狗跳,猫,鸟,鸡肉(更多悬浮的动物)发出警报。

当Flufy跳上沙发(重要的事件)时,Petcam会通过Slack向您发送警报,并在云中保留“日记”应用程序的快照。

PETCAM可以在智能手机和所有视频处理上播放(也就是说,视频流永远不会离开您的设备)。但是,如果您想保存有趣的图像(即在沙发上捕捉并保存flufy图像),则可以配置PETCAM以将片刻发送到云中。

这是一般视图。

结构

该项目分为三个主要部分:

1

这是使用相机和Tensorflow.js机器分析宠物行为的东西。它是用简单的JavaScript设计的,可以在浏览器中运行,您可以自己尝试一下。

前宠物轨道应用

它使用TensorFlow.js机械模型,该模型可以分析浏览器中手机相机(或网络摄像头)的数据,而无需再次将数据发送到云中(这使其“维护隐私”)。但是,要将这些事件保存在沙发上的猫“记录”中,我们将事件的图片和链条发送到Firestore,以便我们以后在笔记中看到这些事件(有关以下内容的更多信息)。

2。

“日记”应用程序是允许您查看PETCAM发现的所有活动的第二端。它主要在美丽的用户界面中下载在Firestore中保存的数据:

3。

没有服务器的“后接口”做了两件事:它存储事件和图片的记录以及停滞通知。因此,当您的宠物做一些优雅的事情时,您将获得有关此主题的经济衰退游戏:

所有这些都得到了Firebase的支持,Firebase是Google轻巧的工具集合,可以在没有服务器的情况下创建背景以及API Slack。

3a。汽车中的鸡检测模型

好吧,这部分真的很“不错”。对于PETCAM 1.0,我们将使用预设计的自动学习模型(可可SSD),该模型默认分析了许多动物。但是他不认识孩子的小鸡(我的新宠物和唯一的宠物)。因此,在这第三部分中,我们将使用Google Cloud Automl构建专用模型来检测张力型鸡肉:

PHEW,这个项目是一种矮人,对吗?两个不同的前沿,这不是一点点吗?与往常一样,您可以在ML Repo中找到所有代码来自行创建此应用程序。或者,如果您仅在宠物轨道的前端,则可以在缺陷链接中找到代码并直接澄清。

现在,由于这个项目非常大,并且面对很少的关注,因此我不会为您带来有关如何使用Jason准备Jason,安装Tensorflow并散布云功能和Blahdy-Bah的所有小小的细节。您可以通过阅读代码,阅读readme并观看我们的YouTube视频来找到大多数这些内容 [TODO]或(请不要杀我) 在它周围搜索

取而代之的是,我只想在5000英尺的高度上覆盖每种成分,并主要集中在杰森(Jason)的困难和意外的障碍上,我和我在建造此东西时必须解决它,这样您就不必自己解决它,因此我们可以感到聪明。

现在,编码地雷!

跟踪宠物(人,汽车或亚马逊套餐)

您是否曾经尝试使用JavaScript在浏览器中的网络摄像头上检测对象?

Wikipedia的Mutheiler的照片

事实证明这真的很容易。如果你问我,很容易!很快您的猫将构建Web应用程序以跟踪它们

您可以用几行代码准备此操作:

首先要做的是下载预训练的可可-SD TensorFlow.js。可可-SSD识别80种物体,包括但不限于:长颈鹿,领带,酒杯,西兰花,吹风机。

使用该模型很简单,例如Chand’model.dtect(视频),其中视频是您的网络相机的指示。 (这是在HTML Land中的“视频ID =” Autoplay”>`)。当您在缺陷中查看代码时,这会更有意义。

要分析视频流而不是仅一个帧,请在循环中打开`model.dtect`。弗拉!您有一个真实的 – 时间对象检测。

如何计算海洋盒的交叉点/距离

我和杰森(Jason)设计了此应用程序,以便当您对相交感兴趣时 – 狗和水碗,猫和笔记本电脑,您和您的冰箱 – 应用程序会导致事件,即“冰箱中的人”。然后,我们将此事件保存到Firestore背面界面,以便我们可以看到将来所有过去事件的记录,并且我们会感到经济衰退(更多的背面接口)。我的意思是,当两个海洋在发现的物体周围相交时,我的意思是:

在这张照片中,奇妙的小鸡与水盘“相交”,从而得出结论,可以喝。

Jason还建立了一个不错的界面,可帮助您确定要关注的人:

您如何计算彼此的两个周围正方形的距离?对于这个项目,我们不仅想知道是否有两个海盒(“ Bboxes”)相交,而且,如果他们没有的话,它在多大程度上?这是符号:

如果两个正方形相交,则返回0,如果您不相交,则返回它们之间的距离。

知道何时发送警报

一旦发现了盒子的代码,我就会感到闪亮!但是后来我和杰森发现了一个不那么令人兴奋但更令人担忧的问题。我们不知道如何解决:您如何知道何时保存事件并向用户发送警报?

我记得要发现并遵循对象,我们运行了一个代码,用于分析我们的网络摄像头映像,并在循环中每秒几次发现交叉点。因此,如果您的corgi rufus只是沙发上的令人毛骨悚然,我们将计算“狗”广场与周围的“沙发”盒相交,每秒几次。显而易见的另一个。因此,如果我们发送了用户通知,则可以进行跟踪的变量,并在Rufus离开沙发时将其重置。

但是,它比这更复杂了,因为如果Rovos徘徊在一种沙发上或周围运行,那么我们的代码会在同一几秒钟内几次发现“在”和“停止”沙发?这样的dogo和Zoomies?

通过

我们不想向用户发送电子邮件,并通知并非真正“唯一”的事件。我们需要做一种“公平”,这限制了发送警报的次数。它看起来很简单,就像我们一样,我们只需要添加一个寒冷的时期,以便我们不会及时发送很多非常紧密的通知?实际上,这是我和杰森所做的,在代码中看起来像这样。

// Min number of seconds before we send another alert.
const MIN_ALERT_COOLDOWN_TIME = 60;

if (sendAlerts) {
   sendAlerts = false;
   sendAlert(naughtyAnimals);
   setTimeout(cooldown, MIN_ALERT_COOLDOWN_TIME * 1000);
}

除了寒冷时期还不够!因为如果你有 狗或许多狗在沙发内外奔跑?因为如果Ruffus跳跃,然后Milo跳下来,这是两个Frevan事件,我们想提醒用户两者。突然你必须知道 任何 狗移动并遵循自己的状况,并有一个毛茸茸的“多对象”问题,看起来像一个人的博士论文! (实际上,您可以通过Google Cloud Video Intelligence Intelligence应用程序免费获得此作业,但是我们被困在Tensorflow.js上,这很困难)。

这种看法使我真正的汗水,有一段时间,我相信我们很紧张。但是后来,我们完成了一个人从技术深度出来时一直做的事情:解决一个好问题,但要简单得多。解决方案是:当狗的数量在沙发上时,我们将安顿下来提醒用户 更多的, 但是,当狗的数量上升和下降时,不是这样:

通过

为了实施这一点,我们维持了框架中动物数量的仪表。如果动物的数量增加,我们已经发送了一条通知并增加了仪表。但是,除非框架中的动物数量达到零,否则我们永远不会传递仪表(此时我们已经重新定位了)。 Kinda听起来很奇怪,但在这里查看代码:

准备这样的警报系统有点直观,但是花一秒钟来说服自己实际上可能为您提供所需的行为,作为用户。以下是算法启动或未发出警报的一些不同情况:

设想发送警报?
1狗 – > 2狗是的
2狗 – > 3狗是的
3狗 – > 2狗
2狗 – > 1狗 – > 2狗
2狗 – > 1狗 – > 0狗 – > 1狗是的(对于最后跳上沙发的狗)

fio。最简单的事情!

建造宠物笔记/观众

迄今为止,我们所谈论的只是在您的浏览器中完全运行。这很可爱,因为没有数据会留下您的手机或计算机,因此从隐私角度来看,您可以感到满足。但是,当有注意事件时,我们希望能够继续记忆并以后重新考虑。因此,我们将使用Firebase Firestore,这是云中的一个简单数据库,您可以从编写到浏览器中很容易阅读。

Firestore已在许多项目中使用,并在Dale上关于人工智能的戴尔(Dale)多次谈论过,我不会在此处详细介绍。当前端PETCAM应用程序发现事件(通过上面的算法)时,某些事件数据将写给Firestore。这是我的Firestore数据库所在的看:

由于很容易从Firestore编写和阅读,因此在Firestore上保存的数据的前端的“诊断”申请的构建是清晰而直接的。您使用React创建了它,可以在此处找到代码。这似乎适用于观众:



Source link

Similar Posts