本文首發在集智專欄
參考資料: towardsdatascience.com
時間過得真快,2018世界盃眨眼間結束,這個夏天也被世界盃賦予了更多意義,在一片啤酒花香中留給球迷朋友們聊不完的故事。誰能料到衛冕冠軍德國隊土豆香腸還沒吃完就被送回了家?四大奪冠熱門球隊全都爆冷出局?
近來你或許也曾留意到不少人藉此東風,用資料科學或人工智慧技術分析世界盃,搗鼓出一些好玩的專案。你沒有想過自己也試試用機器學習技術分析一場世界盃球賽?今天就分享一份藉助深度學習技術和若干機器學習框架分析世界盃的實用指南,自己可以試著練練手,本文教程程式碼地址見文末。
對於資料科學家和機器學習研究者來說,從事這份工作的好處就是能用自己所學知識對世界盃球賽做些有趣的分析。比如,身為一個研究深度學習的人,我(作者 Priya Dwivedi——譯者注)就用深度學習和 OpenCV 從比賽視訊中獲取有意思的結果。 下圖就是我對澳大利亞VS祕魯比賽視訊做的一些分析結果:
從中我們可以識別出所有的球員和裁判,足球,也能根據球衣顏色預測出球員所在球隊,而這些都可以實時完成。
步驟概覽
對於快速建立目標檢測模型,TensorFlow Object Detection API是款非常強大的工具。如果你對這款API還不是很熟悉,可以看看下面三篇我們之前分享過的用它檢測物體的文章,講的都比較詳細:
或者這篇教你怎麼用TensorFlow Object Detection API建立自定義模型的文章
Object Detection API提供了預訓練的物體檢測模型,這些模型都是由COCO資料集訓練而成。COCO資料集包含了90種常見物體,下面展示的是COCO資料集中部分物體的影像:
在我們分析世界盃的情況中,我們重點關注類別——人物和足球,都包含在COCO資料集中。
該API同時還支援一大批機器學習模型,如下所示:
不過這些模型的執行速度和準確度不可兼得,選用時要做個權衡。由於我對實時分析球賽感興趣,所以選了SSDLite mobilenet v2。
等我們用TensorFlow Object Detection API識別出球員,預測他們屬於哪國球隊時,我們就可以用OpenCV這款強大的影像處理庫。如果你對OpenCV不是很熟悉,可以參考下面兩篇教程:
OpenCV能讓我們識別出特定顏色的掩膜(mask),可以用這點識別出紅顏色和黃顏色的球員。下面是OpenCV掩膜檢測影像中紅顏色的工作示例:
詳談主要步驟
現在我們進一步談談操作步驟。
如果你是第一次使用TensorFlow Object Detection API,請先下載這個連結的GitHub
用這個連結中的指令安裝所有環境依賴。
如果你還沒有安裝OpenCV,請參照這篇教程安裝:
我採取的主要步驟是如下,這裡請緊跟我的 GitHub 上的 Jupyter notebook:
- 將SSDLite mobilenet模型載入到graph中,並載入COCO資料集中包含人物和足球的類的列表。
- 用cv2.VideoCapture(檔名)開啟球賽視訊,逐個讀取視訊幀。
- 使用載入的graph對每一幀執行目標檢測。
- 從SSDLite中返回的結果是每個被識別出的類以及其置信度和邊界框預測。我將所有識別置信度大於0.6的人物全部裁剪出來。
- 現在我們已經提取出了每個球員。我們需要讀取他們的球衣顏色以預測他們屬於澳大利亞隊還是祕魯隊。這一步可以通過程式碼塊檢測完成。首先我們定義紅色和藍色的顏色範圍,然後用cv2.inRange和cv.bitwise為顏色建立一個掩膜。為了能檢測球隊,我計算出了檢測多少個紅色畫素和黃色畫素,以及和裁剪的影像中畫素總數相比的比例。
- 最後,將所有的程式碼塊合併在一起同時執行,用cv.2imshow展示結果。
結語
如果按照上面的步驟操作,最後你應該能檢測出世界盃賽場上的球員以及他們屬於哪國球隊。
你瞧,將深度學習和OpenCV簡單相結合,我們就能創造出很有意思的東西。你自己練習時,還能更進一步,嘗試其它玩法:
- 隨著攝像頭跟隨澳大利亞隊的得分割槽域,你可以計算出這一區域有多少祕魯球員和多少澳大利亞球員在對抗。
- 你可以畫出每支球隊的足跡,比如祕魯球員在哪些區域出現的最頻繁。
- 還可以畫出兩隊得分球員的運動軌跡。
感興趣的朋友可以拿今年世界盃的克羅埃西亞隊VS法國隊的總決賽練練手,歡迎把練習結果分享給我們(發在社群裡有機會獲得集智禮品卡喔)。
附本專案GitHub程式碼地址
0806期《人工智慧-從零開始到精通》限時折扣中!
談笑風生 線上程式設計 瞭解一下?
(前25位同學還可領取¥200優惠券哦)