用AI玩跳一跳,你的良心不會痛嗎?

報道/前方智能 丁丁 梟梟

之前,智能君曾寫過用AI可以打遊戲(從打磚塊到星際爭霸,AI不僅會打遊戲,下一步還要自己做遊戲!),而最近大火的微信「跳一跳」,近日也出現了「AI外掛」,且分分鐘就可以輕鬆把分數打到上萬!

用AI玩跳一跳,你的良心不會痛嗎?

2018年伊始,娛樂版頭條火了PGone,而在微信上,則是火了「跳一跳」小程序。

用AI玩跳一跳,你的良心不會痛嗎?

PGone和李小璐

智能君基於“從眾心理”也加入了「跳一跳」,但玩了N多局後最高分還是30分,只超越了朋友圈的幾個人,智能君就放棄了這個遊戲。

用AI玩跳一跳,你的良心不會痛嗎?

說起來,「跳一跳」的遊戲原理其實很簡單——通過按壓屏幕時間的長短來控制「小人」跳躍的距離,所以學會用物體間的距離來判斷時間很重要。

這並不算是個很有“水平”與“深度”的遊戲,那為什麼會火呢?

其實像之前微信推出的小遊戲「打飛機」一樣,天生自帶的社交屬性讓它在微信以極快的速度傳播著,還有一個重要的是因為“排行榜”:大家喜歡比誰分高!

用AI玩跳一跳,你的良心不會痛嗎?

這不,廣大網友們為了得到高分,花樣百出啊!

用AI玩跳一跳,你的良心不會痛嗎?

第一個花樣,可以說是目前最快捷有效的方法,沒有之一!

用AI玩跳一跳,你的良心不會痛嗎?

你有錢就可以啦!想要多少分就有多少分!

中國的淘寶——只有你想不到,沒有你買不到!

還順帶形成了代練外掛的產業鏈~

用AI玩跳一跳,你的良心不會痛嗎?

第二個花樣,則是來自機器動手愛好者。

這位兄弟平時樂高應該玩得不少,他用樂高的程序處理器EV3連接馬達做成機械臂,來模擬人類手指按屏幕,也是醉了~

用AI玩跳一跳,你的良心不會痛嗎?

問題是這對於整個遊戲沒啥幫助,跳的時候還是用最笨的方法,先量距離來判斷點擊時間。

當然,作為黑科技迷,智能君最感興趣的還是大神寫出來的用“AI”來自動跳一跳的外掛,相信大家也比較想知道吧,下面來給大家講講它到底是怎麼實現的。

「跳一跳」小程序發佈後不久,就有程序員在Github 上發佈了一個專門針對跳一跳的外掛程序。整個程序基於 Python,可以做到模擬手指按壓屏幕的動作,讓程序自動跳方塊。

用AI玩跳一跳,你的良心不會痛嗎?

簡單來說,在Android平臺(iOS平臺智能君還未試過)上整個程序的實現邏輯是:

用 ADB 工具獲取小程序的截圖,手動版用 Matplotlib 顯示截圖,用鼠標點擊起始點和目標位置,計算像素距離;自動版依靠棋子的顏色來識別棋子,根據底色和方塊的色差來識別棋盤。然後再用 ADB 工具模擬點擊屏幕蓄力跳躍。

具體實現步驟如下:

(注:ADB工具指代得失Android Debug Bridge,就是起到調試橋的作用。開發者常用到這個工具.,可以用來管理設備或模擬手機狀態。)

  1. 用 ADB 工具獲取當前手機截圖,並用 ADB 將截圖 pull 上來(智能君解釋:此處可以理解為將遊戲靜態畫面截圖併發送至本地)

    adb shellscreencap -p /sdcard/autojump.png

    adb pull/sdcard/autojump.png .

  2. 計算按壓時間

    靠棋子的顏色來識別棋子,靠底色和方塊的色差來識別棋盤;

  3. 用 ADB 工具點擊屏幕蓄力一跳(智能君解釋:此處可以理解為電腦端模擬人類發出按壓力度的指令)

    adb shell inputswipe x y x y time(ms)

智能君試用「AI」跳一跳

可以看到,整個過程完全不需要人為的操作,程序就能自動識別兩個物體間的距離(distance),計算好按壓時間(press time),完成跳躍的操作。

其中最關鍵的一步便是「計算按壓時間」——利用圖像識別精確測量出起始和目標點之間測距離,就可以估計按壓的時間來精確跳躍。

具體來說是這樣的:

「尋找目標座標

按行自頂向下遍歷像素

濾掉背景色,直接取行尾的像素點

除去背景色,避免圖形上花紋的干擾

濾掉頂部 y < 200 的行

濾掉顏色線開頭像素點小於 10 的線

判斷現在這條線對比剛才的線的 x 是否有增加,因為圖形都是傾斜的,方塊和圓柱的頂部最右側的 x 不再增加時說明這條線就是頂部的切線了,然後取這條切線的中點」

用AI玩跳一跳,你的良心不會痛嗎?

從智能君實際使用情況來看,「AI外掛」主要是通過圖像識別測算出精確的距離,並通過係數來精準確定按壓的時間(精確到了毫秒層級)。

而AI在這部分的作用主要就是通過「圖像識別」來提高更精準快速的實現測距的效果,智能君注意到在這裡程序員GG們主要採用了OpenCV來加快圖像識別的效率,實現更快的識別速度。

用AI玩跳一跳,你的良心不會痛嗎?

在這裡給大家介紹下鼎鼎大名的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多分了,成了朋友圈裡的冠軍~

用AI玩跳一跳,你的良心不會痛嗎?

用AI玩跳一跳,你的良心不會痛嗎?

可以說,現在「跳一跳」能跳多少分,完全取決於你的良心~

用AI玩跳一跳,你的良心不會痛嗎?

——————————————


分享到:


相關文章: