您好,登錄后才能下訂單哦!
更新
GitHub中所有類庫的源碼已經轉換為C#版本。
準備
IDE:VisualStudio
Language:C#/VB.NET
GitHub:AutoJump.NET
本文將向你介紹一種通過圖像識別實現“跳一跳”機器人的方法。
第一節 圖像識別
文中提到的所有方法和步驟只涉及簡單的向量計算。
需要用到哪些計算?
比較像素點的顏色
求向量集合的中心
計算顏色的相似度
一個RGB顏色可以看作一個三維向量
比較兩個顏色的相似度可以計算它們的歐幾里得距離
也可以直接比較它們的夾角:夾角越小,兩個顏色越相似,反之亦然
求平面向量集合的中心位置
首先,將集合中所有的向量相加得到向量S
再將向量S除以集合元素的個數,結果即為它們的中心
圖1-1 識別效果預覽
第二節 識別落點
找出盒子落點的前提是發掘每個盒子都具有的共同特征。
盒子特征
目標落點有兩種類型,菱形或圓形的盒子
只有部分盒子的頂面顏色是大面積的純色
盒子下方的地面背景是純色,但隨著游戲進行顏色會發生變化
頂點特征
頂點的上側為背景色
頂點的左側(可能不適用于圓形)、右側(可能不適用于圓形)均為背景色
識別方法
從上向下逐行掃描像素找出盒子的頂點A
繼續向下找出與A顏色相似的所有像素點集合C
求出C像素集合的中心點,即為落點
圖2-1 盒子落點識別
第三節 識別角色
角色的顏色相對特殊,很容易從游戲圖像中區分出來。
人物特征
角色呈國際象棋棋子狀
角色整體顏色較為一致,部分區域有高光
頂點特征
角色的頂點顏色較深,易于區分
識別方法
從上向下逐行掃描像素找出角色的頂點A
繼續向下找出與A顏色相似的所有像素點集合C
求出C像素集合的中心點,并向下偏移固定數值
中心點偏移后的像素D的位置即為角色的底部
圖3-1 角色底部識別
第四節 識別干擾
通常,簡單的方法只適應于絕大部分情況,特定情形時仍會出錯。
哪些情況會導致識別錯誤
盒子頂部的顏色不一致時
角色頂部的位置高于目標盒子時
角色站立的盒子和目標盒子的頂部顏色一致時
其他干擾因素的解決方案
加分提示的動畫:延時解決
擊中中心的動畫:延時解決
音樂盒的樂符動畫:不要在音樂盒上停留ヾ(✿゚▽゚)ノ
圖4-1 魔方(正確)
圖4-2 商店(偏離中心)
圖4-3 音樂盒 (偏離中心)
第五節 實測數值
程序的部分參數需要通過實際測試得出。
識別區域
僅屏幕中間的三分之一區域需要進行圖像識別
觸壓時間
觸壓屏幕的毫秒數正好是角色與落點距離數值的兩倍
距離為500個像素點,那么就需要持續按下1000毫秒
該比例適用于1280*720分辨率的設備,不同設備可能需要適當調節
如何計算其他設備分辨率的比例
計算公式:比例=2560/設備屏幕高度
例如1980*1080分辨率的設備,比例為2560/1980=1.29
圖5-1 識別區域(陰影部分)
附錄
GitHub:AutoJump.NET
參考文章:.NET開發一個微信跳一跳輔助程序
參考書籍:《數學之美》[美]吳軍 著人民郵電出版社
語言工具: Code Converter(如果你不了解Basic語法,這個工具將會非常有用)
更多內容大家可以參考專題《微信跳一跳》進行學習。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。