使用OpenCV和Tensorflow跟踪排球的轨迹
作者|Constantin Toporov 编译|Flin 来源|towardsdatascience
介绍
在有了将人工智能应用于体育项目方面的经历之后,我受到启发继续前进。家庭练习不足以成为我的目标,我的目标是团队比赛。
运动中的人工智能是一个很新的东西。这里有一些有趣的作品:
篮球
- https://dev.to/stephan007/open-source-sports-video-analysis-using-maching-learning-2ag4
网球
- https://www.researchgate.net/publication/329740964_Convolutional_Neural_Networks_Based_Ball_Detection_in_Tennis_Games
排球
- https://www.tugraz.at/institute/icg/research/team-bischof/lrs/downloads/vb14/
我是个排球迷,让我们谈谈最后一个网站。这是一个奥地利研究所的网站,他分析了当地业余联赛的比赛。
其中有一些文档需要阅读,更重要的是打开视频数据集。
排球是一项复杂的运动,有许多不同的方面。所以我从一个很小但很重要的部分开始——球。
跟踪球是一项非常著名的任务。谷歌提供了很多链接,但其中有许多只是一个简单的演示。显然,在摄像机前识别和跟踪一个彩色的大球是无法与真实的比赛用球检测相比较的,因为现实世界中的球很小,移动速度很快,而且融入了背景中。
最后,我们想得到这样的结果:
在开始之前,让我们注意一下视频数据集的一些细节:
摄像机是静止的,位于球场后面
打球的运动员技术水平没那么高,我们可以自由地看到球(专业人士击球太猛,如果没有电视回放几乎不可能看到球)
球的颜色:蓝色和黄色,与地板的反差不大。这使得所有基于颜色的方法变得毫无意义
解决方案
到目前为止最明显的方法 —— 用颜色 —— 不起作用。我利用的是正在移动中的球。
让我们找到移动的物体并识别出它是球,听起来很简单。
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-vs-cats
实现的方法有很多种,但最流行的方法是使用VGG神经网络。
- VGG神经网络:https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html
一个问题 —— 球的图片非常小,不适合用多个卷积层。所以我不得不将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.com/ball-tracking-in-volleyball-with-opencv-and-tensorflow-3d6e857bd2e7
欢迎关注磐创AI博客站: http://panchuang.net/
sklearn机器学习中文官方文档: http://sklearn123.com/
欢迎关注磐创博客资源汇总站: http://docs.panchuang.net/
使用OpenCV和Tensorflow跟踪排球的轨迹相关推荐
- 使用OpenCV+Tensorflow跟踪排球的轨迹
介绍 本文将带领大家如何把人工智能技术带到体育项目中. 运动中的人工智能是一个很新的东西,以下是一些有趣的作品: 篮球 https://dev.to/stephan007/open-source-sp ...
- 使用OpenCV和Tensorflow在排球中跟踪球
介绍 (Introduction) After the first experience of applying AI in sport, I was inspired to continue. Ho ...
- 基于OpenCV与tensorflow实现实时手势识别
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 干货-阅读需10分钟左右 基于OpenCV与tensorflow ...
- Object Tracking using OpenCV (C++/Python)(使用OpenCV进行目标跟踪)
本博客翻译搬运自https://www.learnopencv.com/object-tracking-using-opencv-cpp-python,用于初入目标跟踪的新手学习,转贴请注明! 使用O ...
- opencv动态目标跟踪学习总结
用opencv实现对视频中动态目标的追踪 第一步,是要建立一个编程环境,然后加载opencv的库路径等等.具体步骤在 http://www.opencv.org.cn/ 的"安装" ...
- 使用 OpenCV 进行对象跟踪的几种算法解读
使用 OpenCV 进行对象跟踪--算法 在本节中,我们将深入研究不同的跟踪算法.目标不是对每个跟踪器有深入的理论理解,而是从实践的角度理解它们. 让我首先解释跟踪背后的一些一般原则.在跟踪中,我们的 ...
- 基于OpenCV和Tensorflow的深蹲检测器
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本期我们将介绍如和使用OpenCV以及Tensorflow实现深蹲 ...
- 使用TensorFlow跟踪千年猎鹰
by Nick Bourdakos 由Nick Bourdakos 使用TensorFlow跟踪千年猎鹰 (Tracking the Millennium Falcon with TensorFlow ...
- OpenCV自定义CN跟踪器
OpenCV自定义CN跟踪器 自定义CN跟踪器 目标 源代码 解释 设置自定义参数 使用自定义功能 定义功能 后期处理 自定义CN跟踪器 目标 在本教程中,您将学习如何 设置CN跟踪器的自定义参数. ...
- OpenCV调用TensorFlow预训练模型
OpenCV调用TensorFlow预训练模型 [尊重原创,转载请注明出处]https://panjinquan.blog.csdn.net/article/details/80570120 强大Op ...
最新文章
- android 以不规则图片为边框切割另外图片
- Android Volley彻底解决(三),定制自己Request
- windows10 安装docker
- kubernetes mysql pxc_K8S使用operator部署和管理Percona - PXC集群
- 折线图 java_java报表折线图
- Spark和机器学习整合
- 网络知识入门:路由器基础知识全接触
- java+txt+词语+次数_Java练习2--读取txt文件统计考勤次数并写入一个txt文件中
- FFmpeg编解码过程(五)
- 中国企业软件为什么如此的难
- php改写单词的大小写strtoupper/strtolower/ucfirst/ucwords
- 网络中的公网和内网 (ipv4)
- “本是青灯不归客,却因浊酒留风尘,星光不问赶路人,岁月不负有心人”,你是怎么理解的?
- 狐狸逮兔子——链式存储方式
- 常见数据库id号编码
- 计算机台式硬件排名,CPU天梯图2019年1月最新版 一月台式电脑处理器排名
- 最满意的10款PC 软件分享
- 宝塔安装php成功无显示,宝塔面板安装 LAMP 或 LNMP 后没有成功的原因
- 【李刚-21天通关Python-27】之 案例实操:函数装饰器应用
- bMap+Echarts--百度地图使用方法
热门文章
- ORA-1653: unable to extend table by 1024 in tablespace(oracle表空间满了的解决方案)
- 128G的U盘格式化后只有300M,如何恢复成128G
- Linux之压缩解压缩
- 【DataBase Notation(1/3)】Notation_Chen, Crow‘s Foot and UML
- 直播热潮之下的图片社交洼地
- [转载].NET Core使用NPOI导出复杂,美观的Excel详解
- java编写数独_简单实现java数独游戏
- 分布式系统故障容灾治理总结
- windows server 2008安装配置web服务器
- 腾讯实习生招聘之总体感悟