使用OpenCV+Tensorflow跟蹤排球的軌跡
點(diǎn)擊上方“小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時(shí)間送達(dá)
介紹
本文將帶領(lǐng)大家如何把人工智能技術(shù)帶到體育項(xiàng)目中。
運(yùn)動(dòng)中的人工智能是一個(gè)很新的東西,以下是一些有趣的作品:
籃球
https://dev.to/stephan007/open-source-sports-video-analysis-using-maching-learning-2ag4 網(wǎng)球 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/

在開始之前,讓我們先來研究以下視頻數(shù)據(jù)集的一些細(xì)節(jié):
攝像機(jī)是靜止的,位于球場后面 如果打球的運(yùn)動(dòng)員技術(shù)水平不是高,我們可以輕松地看到球(專業(yè)人士擊球太猛,如果沒有電視回放幾乎不可能看到球) 球的顏色:藍(lán)色和黃色,與地板的反差不大,這使得所有基于顏色的方法變得毫無意義
解決方案
到目前為止最明顯的方法 —— 用顏色 —— 不起作用,所以我利用的是正在移動(dòng)中的球。
讓我們找到移動(dòng)的物體并識(shí)別出它是球,聽起來很簡單。
OpenCV包含用于檢測帶有背景移除的移動(dòng)對(duì)象的工具:
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)
將這樣的圖片

轉(zhuǎn)化成:

在這個(gè)例子中,球在上面,人腦和眼睛可以很容易地檢測到它,那我們是如何決定的?可以從圖中可以推斷出一些規(guī)律:
這個(gè)球是團(tuán)狀的
這是照片上最高的斑點(diǎn)
但第二條規(guī)律不太管用,例如在這張照片中,最高的斑點(diǎn)是裁判的肩膀。



在人工智能方面來看,這是一個(gè)二元分類的彩色圖像,非常類似于Cats-vs-Dogs挑戰(zhàn)。
Cats-vs-Dogs:https://www.kaggle.com/c/dogs-vs-cats
實(shí)現(xiàn)的方法有很多種,但最流行的方法是使用VGG神經(jīng)網(wǎng)絡(luò)。
VGG神經(jīng)網(wǎng)絡(luò):https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html
一個(gè)問題 —— 球的圖片非常小,不適合用多個(gè)卷積層,所以我不得不將VGG簡化為一個(gè)非常簡單的架構(gòu):
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"])
該模型簡單,結(jié)果一般:大約20%的假陽性和30%的假陰性。
但這總比什么都沒有好,當(dāng)然,這樣還不夠。
應(yīng)用于游戲的模型會(huì)產(chǎn)生許多“假球”:

它們隨機(jī)時(shí)間出現(xiàn)在隨機(jī)位置 這個(gè)模型總是犯錯(cuò)誤,把其他東西認(rèn)作一個(gè)球
軌跡


鏈接
https://github.com/tprlab/vball
