opencv版跳一跳

2021-08-15 13:35:11 字數 2011 閱讀 2989

主要問題有三個:

1.如何獲取遊戲資訊

2.如果對遊戲內容進行解析,提取關鍵資訊

3.如何對遊戲進行操作

下面給出演算法流程,隨後進行細節上的闡述。

step1縮小影象尺寸,提取roi區域

step2根據顏色特徵檢測棋子,計算其形心。根據棋子形態固定的特徵,把形心向下移動一定的距離獲取底部中心p1(x0,y0)。

step3以棋子頂部區域附近的顏色為背景色,去除背景區域。在此基礎上尋找待跳平台的兩個關鍵交點,計算出待跳平台中心p2(x1,y1)。

step4計算p1和p2的幾何距離,乘上壓力係數獲得長按操作的時間量。

具體細節:

step1:現在手機基本上是1080p,在這個問題上並不需要這麼高的解析度。所以先對截圖影象進行了尺度為4的下取樣。此外如圖1所示,我們需要尋找的目標只在紅框範圍內,所以按照影象高度的比例剪裁處這塊roi區域。本文擷取的是高度的1/4到1/2處。

!( 圖1

step2:棋子有比較明顯的結構特徵,不過根據玩這個遊戲的經驗,只有棋子是紫色的。所以相對於結構匹配用顏色篩選速度更快,畢竟只需要點運算。如果模板匹配的話,那速度就慢很多了。但是棋子的右側有兩個高亮區域,不容易被判定為紫色,在計算形心的時候會導致向左邊偏2個畫素,補上這個偏移量即可。隨後對形心進行下移,移動量取底部y座標和形心y座標的差乘上乙個係數,本文中這個係數為6/7。最後結果如圖2所示,棋子底部的黑點為計算出的底部中心。

![這裡寫描述]( 圖2

step3 先說下取背景色要注意的細節,通過遊戲經驗發現,棋子上方區域一般為背景色,但是如果你超越了好友會出現好友頭像。所以把這個「上方」定義的再高些,本文取35個畫素單位長度。另外這些方塊是有陰影的,陰影的顏色比較偏背景色但是又淡很多。所以通過背景色計算出陰影色,在去背景色的過程中實際是去除真正的背景色以及陰影色,留下的就是前景也就是目標。如下圖3。

![這裡寫描述]( 圖3

圖3中右下角有個白色的三角,這是因為在實際實現時會判斷目標在棋子的左側還是右側。如果如圖3一樣在棋子左側,則直接置棋子右側和下方的所有區域為背景(因為目標肯定不在這個區域),若目標在棋子右側則類似處理。現在的目標就是要找到點pa和pb座標,利用它們的座標計算出目標中心點。pb較為簡單,以y方向為主序,x方向為次序掃瞄,掃瞄到的第一非背景點即為定點pb。不過實踐中發現若目標為圓形,其頂部在下取樣後變為平的。所以需要取miny上所有的點,計算其x方向上的均值作為頂點pb的x值。

pa則是以x方向為主序,y方向為次序掃瞄遇到的第乙個非背景點。當目標在右側時類似。在實際實現中並沒有進行多次掃瞄,而是記錄了目標點,通過排序計算點pa和pb。

step4 知乎上有人分析了長按時間和距離的關係,結果為線性關係。所以理論上我們這裡取乙個係數即可:

**按住時間(ms)=兩點距離(畫素)*係數(ms/畫素)**

但在實踐中發現似乎並不完全是線性關係,本文採用的是分段線性函式。若距離大於100畫素取5.8,小於100畫素取6。 圖4是結果圖,可以看出找到的關鍵點還是較為準確的。

![這裡寫描述]( 圖4

1.反作弊系統。遊戲後台有個反作弊檢測,因此我在程式中調整了兩次跳的間隔,隨機在800ms到1400ms之間。還調整了力度係數,使其在原值得0.98到1.04之間隨機浮動。並把按壓位置也進行隨機。不過寫這個程式也不是為了作弊刷分 ,寒假無聊花幾個小時練練手而已。

2.深度學習思路。在該程式的基礎上,可以跑出一些標註過的資料。input為截圖圖,label為輸出長按時間。構造乙個cnn網路,輸出為長按時間,損失函式使用mse ,以此構造乙個解決回歸問題的端對端網路。這個想法很自然,果不其然有人先做了:

4.時間分析。debug模式下,演算法大概110ms,獲取1000ms,按壓時間600ms左右,操作間隔1000ms,所以大概是2s一跳。主要瓶頸還是在io上面,因為截圖先存到sdcard隨後複製到pc目錄,最後再讀到記憶體。如果直接能在記憶體裡處理獲取的時間可以大幅下降。不過這個時間其實對這個遊戲來說並不慢,因為我還得把操作間隔調整到1000ms,才能保證截圖的準確性(棋子不是在空中飛行)。

字母跳一跳

題目 有一無限長的迴圈字母表,任意輸入乙個字母,按照規定時刻進行跳轉,每個時刻跳轉規定的步數,最後顯示跳轉後得到的字母 include using namespace std int main char i word 輸入字母 int i k,i t,n 跳轉步數k,時間t,組數n cin n ch...

微信跳一跳python 微信跳一跳Python

1 安裝python,我用的是python2.7 5.安裝pillow,放在scripts資料夾中,通過 pip install pillow安裝 6.安裝adb工具包,可以直接放在專案 的資料夾裡面,或者放在c盤目錄不過要配置一下環境變數,我這裡是直接放在專案 資料夾中。內建了cmd 命令 7.把...

python實現跳一跳

今天我們使用python來做一件有意思的事,使用python來完成跳一跳這個遊戲。在這裡先感謝一位大牛文章的啟迪,相關的程式和安裝包也由此位大牛提供。python輔助作者github賬號為 wangshub。作者的知乎專欄為 首先我們需要做好準備工作 windows10,乙個安卓真機,python3...