用AI玩跳一跳,你的良心不會痛嗎?
報道/前方智能 丁丁 梟梟
之前,智能君曾寫過用AI可以打遊戲:從深藍到AlphaGo,從Atari到星際爭霸,遊戲已成AI發展的核心驅動力
從深藍到AlphaGo,從Atari到星際爭霸,遊戲已成AI發展的核心驅動力而最近大火的微信「跳一跳」,近日也出現了「AI外掛」,且分分鐘就可以輕鬆把分數打到上萬!
2018年伊始,娛樂版頭條火了PGone,而在微信上,則是火了「跳一跳」小程序。
智能君基於「從眾心理」也加入了「跳一跳」,但玩了N多局後最高分還是30分,只超越了朋友圈的幾個人,智能君就放棄了這個遊戲。
說起來,「跳一跳」的遊戲原理其實很簡單——通過按壓屏幕時間的長短來控制「小人」跳躍的距離,所以學會用物體間的距離來判斷時間很重要。
這並不算是個很有「水平」與「深度」的遊戲,那為什麼會火呢?
其實像之前微信推出的小遊戲「打飛機」一樣,天生自帶的社交屬性讓它在微信以極快的速度傳播著,還有一個重要的是因為「排行榜」:大家喜歡比誰分高!
這不,廣大網友們為了得到高分,花樣百出啊!
第一個花樣,可以說是目前最快捷有效的方法,沒有之一!
你有錢就可以啦!想要多少分就有多少分!
中國的淘寶——只有你想不到,沒有你買不到!
還順帶形成了代練外掛的產業鏈~
第二個花樣,則是來自機器動手愛好者。
這位兄弟平時樂高應該玩得不少,他用樂高的程序處理器EV3連接馬達做成機械臂,來模擬人類手指按屏幕,也是醉了~
問題是這對於整個遊戲沒啥幫助,跳的時候還是用最笨的方法,先量距離來判斷點擊時間。
當然,作為黑科技迷,智能君最感興趣的還是大神寫出來的用「AI」來自動跳一跳的外掛,相信大家也比較想知道吧,下面來給大家講講它到底是怎麼實現的。
「跳一跳」小程序發布後不久,就有程序員在Github 上發布了一個專門針對跳一跳的外掛程序。整個程序基於 Python,可以做到模擬手指按壓屏幕的動作,讓程序自動跳方塊。
簡單來說,在Android平台(iOS平台智能君還未試過)上整個程序的實現邏輯是:
用 ADB 工具獲取小程序的截圖,手動版用 Matplotlib 顯示截圖,用滑鼠點擊起始點和目標位置,計算像素距離;自動版依靠棋子的顏色來識別棋子,根據底色和方塊的色差來識別棋盤。然後再用 ADB 工具模擬點擊屏幕蓄力跳躍。
具體實現步驟如下:
(註:ADB工具指代得失Android Debug Bridge,就是起到調試橋的作用。開發者常用到這個工具.,可以用來管理設備或模擬手機狀態。)
- 將微信點擊到《跳一跳》小程序界面
- 用 ADB 工具獲取當前手機截圖,並用 ADB 將截圖 pull 上來(智能君解釋:此處可以理解為將遊戲靜態畫面截圖並發送至本地)
adb shellscreencap -p /sdcard/autojump.png
adb pull/sdcard/autojump.png .
- 計算按壓時間
靠棋子的顏色來識別棋子,靠底色和方塊的色差來識別棋盤;
- 用 ADB 工具點擊屏幕蓄力一跳(智能君解釋:此處可以理解為電腦端模擬人類發出按壓力度的指令)
adb shell inputswipe x y x y time(ms)
智能君試用「AI」跳一跳
可以看到,整個過程完全不需要人為的操作,程序就能自動識別兩個物體間的距離(distance),計算好按壓時間(press time),完成跳躍的操作。
其中最關鍵的一步便是「計算按壓時間」——利用圖像識別精確測量出起始和目標點之間測距離,就可以估計按壓的時間來精確跳躍。
具體來說是這樣的:
「尋找目標坐標
按行自頂向下遍歷像素
濾掉背景色,直接取行尾的像素點
除去背景色,避免圖形上花紋的干擾
濾掉頂部 y < 200 的行
濾掉顏色線開頭像素點小於 10 的線
判斷現在這條線對比剛才的線的 x 是否有增加,因為圖形都是傾斜的,方塊和圓柱的頂部最右側的 x 不再增加時說明這條線就是頂部的切線了,然後取這條切線的中點」
從智能君實際使用情況來看,「AI外掛」主要是通過圖像識別測算出精確的距離,並通過係數來精準確定按壓的時間(精確到了毫秒層級)。
而AI在這部分的作用主要就是通過「圖像識別」來提高更精準快速的實現測距的效果,智能君注意到在這裡程序員GG們主要採用了OpenCV來加快圖像識別的效率,實現更快的識別速度。
在這裡給大家介紹下鼎鼎大名的OpenCV,它的全稱是Open Source Computer Vision Library,是一個跨平台的計算機視覺(Computer Vision)庫。
它基於BSD許可(開源)跨平台發行,可以運行在Linux、Windows、Android和Mac OS操作系統上。它輕量級而且高效——由一系列 C 函數和少量 C++ 類構成,同時提供了Python、Ruby、MATLAB等語言的介面,實現了圖像處理和計算機視覺方面的很多通用演算法,包含了橫跨工業產品檢測、醫學圖像處理、安防、用戶界面、攝像頭標定、三維成像、機器視覺等領域的超過500個介面函數。
就應用層面來說,OpenCV目前主要用於解決如下領域的問題:
- 增強現實
- 人臉識別
- 手勢識別
- 人機交互
- 動作識別
- 運動跟蹤
- 物體識別
- 圖像分區
- 機器人
這麼強大的功能,又是開源不收費的,所以被拿來玩「跳一跳」是不是有點大材小用呢?
另外,基於很多人用腳本刷分,現在這個遊戲似乎開始檢測腳本了,不過檢測的方式是檢測觸摸位置,而只要加隨機觸摸處區域,就可以了。
結語:
某個程度上來說,AI「破壞」了「跳一跳」的遊戲規則,但這究竟是利還是弊呢?
一方面,從某種程度上說它驅使遊戲製作方查找某些隱蔽的漏洞,以建立更安全強大的防干預系統,能讓玩家獲得更好的遊戲體驗;
另一方面,AI也成了某些人破壞規則,牟取利益的手段。
當然這只是一個小遊戲,用AI「作弊」產生不了什麼大或者不好的影響。但以小見大,如果在其它重要領域,保證AI技術的合理使用是不是顯得非常重要呢?這不得不讓人深思。
最後,智能君已經跳到1000多分了,成了朋友圈裡的冠軍~
可以說,現在「跳一跳」能跳多少分,完全取決於你的良心~
——————————————
更多人工智慧產業的新鮮資訊,歡迎關注前方智能的知乎,或者在微信關注前方智能(qianfangAI)~,也可以登陸我們的官方網站:前方智能丨有遠見的人都在看的媒體!
推薦閱讀:
※使用python玩跳一跳超詳細使用教程
※跳一跳終極攻略 (App輔助版)
※如果雅思考試能像跳一跳,那就__________。