关于人工智能:使用OpenCV和Tensorflow跟踪排球的轨迹

52次阅读

共计 2045 个字符,预计需要花费 6 分钟才能阅读完成。

作者 |Constantin Toporov
编译 |Flin
起源 |towardsdatascience

介绍

在有了将人工智能利用于体育项目方面的经验之后,我受到启发继续前进。家庭练习不足以成为我的指标,我的指标是团队较量。

静止中的人工智能是一个很新的货色。这里有一些乏味的作品:

  • 篮球

    • https://dev.to/stephan007/ope…
  • 网球

    • https://www.researchgate.net/…
  • 排球

    • https://www.tugraz.at/institu…

我是个排球迷,让咱们谈谈最初一个网站。这是一个奥地利研究所的网站,他剖析了当地业余联赛的较量。

其中有一些文档须要浏览,更重要的是关上视频数据集。

排球是一项简单的静止,有许多不同的方面。所以我从一个很小但很重要的局部开始——球。

跟踪球是一项十分驰名的工作。谷歌提供了很多链接,但其中有许多只是一个简略的演示。显然,在摄像机前辨认和跟踪一个黑白的大球是无奈与实在的较量用球检测相比拟的,因为事实世界中的球很小,挪动速度很快,而且融入了背景中。

最初,咱们想得到这样的后果:

在开始之前,让咱们留神一下视频数据集的一些细节:

  • 摄像机是静止的,位于球场前面
  • 打球的运动员技术水平没那么高,咱们能够自在地看到球(专业人士击球太猛,如果没有电视回放简直不可能看到球)
  • 球的色彩:蓝色和黄色,与地板的反差不大。这使得所有基于色彩的办法变得毫无意义

解决方案

到目前为止最显著的办法 —— 用色彩 —— 不起作用。我利用的是正在挪动中的球。

让咱们找到挪动的物体并辨认出它是球,听起来很简略。

OpenCV 蕴含用于检测带有背景移除的挪动对象的工具:

mask = backSub.apply(frame)     
mask = cv.dilate(mask, None)     
mask = cv.GaussianBlur(mask, (15, 15),0)     
ret,mask = cv.threshold(mask,0,255,cv.THRESH_BINARY | cv.THRESH_OTSU)

将这样的图片

转化成:

在这个例子中,球在下面,人脑和眼睛能够很容易地检测到它。咱们是如何决定的?从图中能够推断出一些法则:

  • 这个球是团状的
  • 这是照片上最高的斑点

第二条法则不太管用。例如,在这张照片中,最高的斑点是裁判的肩膀。

但 highest-blob 办法提供了进一步的初始数据。

咱们能够收集这些斑点并训练分类器来辨别球。

此数据集如下所示:

在人工智能方面——这是一个二元分类的彩色图像,十分相似于 Cats-vs-Dogs 挑战。

  • Cats-vs-Dogs:https://www.kaggle.com/c/dogs…

实现的办法有很多种,但最风行的办法是应用 VGG 神经网络。

  • VGG 神经网络:https://blog.keras.io/buildin…

一个问题 —— 球的图片十分小,不适宜用多个卷积层。所以我不得不将 VGG 简化为一个非常简单的架构:

model = Sequential([Convolution2D(32,(3,3), activation='relu',       input_shape=input_shape),         MaxPooling2D(),            Convolution2D(64,(3,3), activation='relu'),         
 MaxPooling2D(),         
Flatten(),         
Dense(64, activation='relu'),         
Dropout(0.1),         
Dense(2, activation='softmax')       
])

model.compile(loss="categorical_crossentropy",   optimizer=SGD(lr=0.01), metrics=["accuracy"])

该模型简略,后果个别:大概 20% 的假阳性和 30% 的假阴性。

这总比什么都没有好,当然,这样还不够。

利用于游戏的模型会产生许多“假球”:

实际上有两种假球:

  • 它们呈现在随机工夫的随机地位
  • 这个模型总是犯错误,把其余货色认作一个球

轨迹

下一步,有一个想法是这样:球不会随机挪动,而是遵循抛物线或线性轨迹。

对这个几何体上的水滴静止进行验证将切断随机和统一的谬误。

有一个记录一次打球的轨迹的例子:

其中有向门路为蓝色,动态门路为绿色,随机门路为灰色。

只有蓝色的轨迹才有用。它们至多由 3 个点组成,并且有一个方向。方向是十分重要的,因为有了方向就能够预测下一个点,以防它在理论流中失落,并且没有检测到新的门路。

这个逻辑利用到片段中产生一个相当实在的跟踪:

链接

Github 存储库

  • https://github.com/tprlab/vball

原文链接:https://towardsdatascience.co…

欢送关注磐创 AI 博客站:
http://panchuang.net/

sklearn 机器学习中文官网文档:
http://sklearn123.com/

欢送关注磐创博客资源汇总站:
http://docs.panchuang.net/

正文完
 0