作者|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/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/175063.html
標籤:其他
