如何利用Python在0.03秒找出正在吃熱狗的王校長!

如何利用Python在0.03秒找出正在吃熱狗的王校長!


還記得那個夏天,IG 出征西雅圖 The International 2012,校長現場督戰,那時峰哥還叫石佛,哈哈明還是諸葛明,zhou神還沒變鯛哥,430 是世界最強女中單,chuan 胖還能靠技術彌補素質,IG 從敗者組回來,斬下 NA'VI 獲得了中國第一個 DOTA2 Ti 世界冠軍。

時隔六年,IG 又得了隔壁的 S 系列世界冠軍,同時也是中國首冠,不禁讓我有一種夢迴 TI2 的錯覺。王校長也終於成為了中國最成功的俱樂部老闆,電競界的教父。Invictus Gaming 獲得 Ti 和 S 賽兩個世界頂級 MOBA 首冠。

這裡小編也送福利啦!關注,轉發,私信“資料”即可免費領取Python學習資料哦!

如何利用Python在0.03秒找出正在吃熱狗的王校長!


王思聰的現場親自督戰,還為廣大群眾留下了無數精彩抓拍,大家的王校長又雙叒叕火啦!連吃熱狗都如此銷魂,自然是要粉一波!IG 奪冠沒兩天,校長吃熱狗已經成了表情包:


如何利用Python在0.03秒找出正在吃熱狗的王校長!



更有美術生的作品,讓大家如何在 3 秒內找到吃熱狗的王校長。

如何利用Python在0.03秒找出正在吃熱狗的王校長!

我找了好久啊,這幅圖真是魔性,看得眼睛都花了,浪費了我寶貴的上班時間。但不得不承認,我,作為一個工科生,3 秒鐘是找不到了。但是,我的電腦可以呀!

既然連美術生都出動調侃王思聰了,工科生怎麼能坐以待斃!那就趁著上班,來做一個自動找王校長的 AI 程序吧。

既然是在上班,就要用一種比較專業的方式來展開我的工作。

項目目標:在一群鴨子中找到 吃熱狗的王校長

項目實現:Python ,OpenCV

項目成果:0.3 秒內找到校長

項目技術路線:

1、獲得鴨子同等大小的王思聰;

2、在原圖全局搜索,匹配王思聰所在的位置;

3、在王思聰周圍畫個紅框;

4、查看計算機速度;

項目實現方案:

圖像處理,作為計算機算法中十分大的一類,現成的代碼庫中有一個非常適合用來做

1、獲得鴨子同等大小的王思聰 —— resize(OpenCV)

這個部分主要是數據的預處理,說得很專業,其實就是用電腦自帶的截圖工具,截取一個小鴨子,他的大小大約為 36*36。我們就相應地把王思聰 resize 到和小鴨子同等大小,這裡採用了插值 inter_cubic 的方式來進行重採樣。

如何利用Python在0.03秒找出正在吃熱狗的王校長!

如何利用Python在0.03秒找出正在吃熱狗的王校長!



2、在原圖全局搜索,匹配王思聰所在的位置 —— matchTemplate (opencv)

OpenCV 作為一個比較全能的圖像處理庫,能夠提供較為許多圖像處理的基礎,比如邊緣監測函數可以直接用於監測圖像的邊界(OpenCV 也提供了 canny 算子、sobel 算子等)。

這裡我們使用 模版匹配算法(matchTemplate),他幫助算法在一副圖像中找到特定的目標。該函數需要四個參數,

  • 原圖 Image
  • 監測目標 detect
  • 匹配結果圖 result
  • 匹配衡量方式 method
  • CV_TM_SQDIFF,平方差
  • CV_TM_SQDIFF_NORMED,平方差歸一化
  • CV_TM_CCORR,相關度
  • CV_TM_CCORR_NORMED,相關度歸一化
  • CV_TM_CCOEFF,相關係數
  • CV_TM_CCOEFF_NORMED,相關係數歸一化


因此,該搜索主要是以像素級別的匹配,不會進行縮放;

我們目前的任務中王思聰的色調並沒有改變,因此任何一種方法的差異並不是很大。


如何利用Python在0.03秒找出正在吃熱狗的王校長!



3、在王思聰周圍畫個紅框 —— minMaxLoc(OpenCV);

matchTemplate 函數得到的結果是一個灰度數值圖,給出的是圖像中每一個 detect 範圍的匹配程度,灰度數值越大,則相似度越高。

為了畫出這個最有可能出現王思聰的位置,我們使用 OpenCVv 的 minMaxLoc 函數來得到王思聰邊框的具體位置,並進一步使用 OpenCV 的 rectangle 函數來畫出這個框。


如何利用Python在0.03秒找出正在吃熱狗的王校長!



如何利用Python在0.03秒找出正在吃熱狗的王校長!

結果如上!成功!

4、計算機的速度 —— timeit


如何利用Python在0.03秒找出正在吃熱狗的王校長!



平均跑了十次,採用 2018 年款的 macbook air,基本配置的平均時間是 0.2 秒!

目標達成!

PS,是為了展示一下 OpenCV 的風采。因此使用了傳統的模式匹配流程。如果我們在實際應用中,面對雷同的問題。

  1. 首先分析認為,王思聰的臉部顏色和鴨子不一樣,且他的臉部顏色只有他獨有的;
  2. 可以使用 滴管 功能來得到 王思聰臉部顏色的 RGB;
  3. 在圖中搜索有 臉部顏色 RGB 的部分 並 高亮;
  4. 找到 王思聰!


當然,只要有了這些思路,即便王校長穿了不同顏色的衣服,上下左右顛倒,鴨子多十倍,依然可以快速的找到他!

OpenCV 是 計算機視覺 中非常重要的類庫,既可以支持傳統計算機視覺處理,也可以支持 深度學習計算機視覺。底層通過 C++ 實現,運算速度很快,也提供了 Python 的調用接口,真的省了很多事!


分享到:


相關文章: