C#圖像識(shí)別 微信跳一跳機(jī)器人
更新
GitHub中所有類庫(kù)的源碼已經(jīng)轉(zhuǎn)換為C#版本。
準(zhǔn)備
IDE:VisualStudio
Language:C#/VB.NET
GitHub:AutoJump.NET
本文將向你介紹一種通過圖像識(shí)別實(shí)現(xiàn)“跳一跳”機(jī)器人的方法。
第一節(jié) 圖像識(shí)別
文中提到的所有方法和步驟只涉及簡(jiǎn)單的向量計(jì)算。
需要用到哪些計(jì)算?
比較像素點(diǎn)的顏色
求向量集合的中心
計(jì)算顏色的相似度
一個(gè)RGB顏色可以看作一個(gè)三維向量
比較兩個(gè)顏色的相似度可以計(jì)算它們的歐幾里得距離
也可以直接比較它們的夾角:夾角越小,兩個(gè)顏色越相似,反之亦然
求平面向量集合的中心位置
首先,將集合中所有的向量相加得到向量S
再將向量S除以集合元素的個(gè)數(shù),結(jié)果即為它們的中心
圖1-1 識(shí)別效果預(yù)覽
第二節(jié) 識(shí)別落點(diǎn)
找出盒子落點(diǎn)的前提是發(fā)掘每個(gè)盒子都具有的共同特征。
盒子特征
目標(biāo)落點(diǎn)有兩種類型,菱形或圓形的盒子
只有部分盒子的頂面顏色是大面積的純色
盒子下方的地面背景是純色,但隨著游戲進(jìn)行顏色會(huì)發(fā)生變化
頂點(diǎn)特征
頂點(diǎn)的上側(cè)為背景色
頂點(diǎn)的左側(cè)(可能不適用于圓形)、右側(cè)(可能不適用于圓形)均為背景色
識(shí)別方法
從上向下逐行掃描像素找出盒子的頂點(diǎn)A
繼續(xù)向下找出與A顏色相似的所有像素點(diǎn)集合C
求出C像素集合的中心點(diǎn),即為落點(diǎn)
圖2-1 盒子落點(diǎn)識(shí)別
第三節(jié) 識(shí)別角色
角色的顏色相對(duì)特殊,很容易從游戲圖像中區(qū)分出來。
人物特征
角色呈國(guó)際象棋棋子狀
角色整體顏色較為一致,部分區(qū)域有高光
頂點(diǎn)特征
角色的頂點(diǎn)顏色較深,易于區(qū)分
識(shí)別方法
從上向下逐行掃描像素找出角色的頂點(diǎn)A
繼續(xù)向下找出與A顏色相似的所有像素點(diǎn)集合C
求出C像素集合的中心點(diǎn),并向下偏移固定數(shù)值
中心點(diǎn)偏移后的像素D的位置即為角色的底部
圖3-1 角色底部識(shí)別
第四節(jié) 識(shí)別干擾
通常,簡(jiǎn)單的方法只適應(yīng)于絕大部分情況,特定情形時(shí)仍會(huì)出錯(cuò)。
哪些情況會(huì)導(dǎo)致識(shí)別錯(cuò)誤
盒子頂部的顏色不一致時(shí)
角色頂部的位置高于目標(biāo)盒子時(shí)
角色站立的盒子和目標(biāo)盒子的頂部顏色一致時(shí)
其他干擾因素的解決方案
加分提示的動(dòng)畫:延時(shí)解決
擊中中心的動(dòng)畫:延時(shí)解決
音樂盒的樂符動(dòng)畫:不要在音樂盒上停留ヾ(✿゚▽゚)ノ
圖4-1 魔方(正確)
圖4-2 商店(偏離中心)
圖4-3 音樂盒 (偏離中心)
第五節(jié) 實(shí)測(cè)數(shù)值
程序的部分參數(shù)需要通過實(shí)際測(cè)試得出。
識(shí)別區(qū)域
僅屏幕中間的三分之一區(qū)域需要進(jìn)行圖像識(shí)別
觸壓時(shí)間
觸壓屏幕的毫秒數(shù)正好是角色與落點(diǎn)距離數(shù)值的兩倍
距離為500個(gè)像素點(diǎn),那么就需要持續(xù)按下1000毫秒
該比例適用于1280*720分辨率的設(shè)備,不同設(shè)備可能需要適當(dāng)調(diào)節(jié)
如何計(jì)算其他設(shè)備分辨率的比例
計(jì)算公式:比例=2560/設(shè)備屏幕高度
例如1980*1080分辨率的設(shè)備,比例為2560/1980=1.29
圖5-1 識(shí)別區(qū)域(陰影部分)
附錄
GitHub:AutoJump.NET
參考文章:.NET開發(fā)一個(gè)微信跳一跳輔助程序
參考書籍:《數(shù)學(xué)之美》[美]吳軍 著人民郵電出版社
語(yǔ)言工具: Code Converter(如果你不了解Basic語(yǔ)法,這個(gè)工具將會(huì)非常有用)
更多內(nèi)容大家可以參考專題《微信跳一跳》進(jìn)行學(xué)習(xí)。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C#在Winform開發(fā)中使用Grid++報(bào)表
這篇文章主要介紹了C#在Winform開發(fā)中使用Grid++報(bào)表,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03C#中通過LRU實(shí)現(xiàn)通用高效的超時(shí)連接探測(cè)
這篇文章主要介紹了c#中通過LRU實(shí)現(xiàn)通用高效的超時(shí)連接探測(cè),非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2018-11-11C#采用FileSystemWatcher實(shí)現(xiàn)監(jiān)視磁盤文件變更的方法
這篇文章主要介紹了C#采用FileSystemWatcher實(shí)現(xiàn)監(jiān)視磁盤文件變更的方法,詳細(xì)分析了FileSystemWatcher的用法,并以此為基礎(chǔ)實(shí)現(xiàn)監(jiān)視磁盤文件變更,是非常實(shí)用的技巧,具有一定的借鑒價(jià)值,需要的朋友可以參考下2014-11-11直接在線預(yù)覽Word、Excel、TXT文件之ASP.NET
這篇文章主要用asp.net技術(shù)實(shí)現(xiàn)直接在線預(yù)覽word、excel、txt文件,有需要的朋友可以參考下2015-08-08c# Winform 程序自動(dòng)更新實(shí)現(xiàn)方法
Winform程序自動(dòng)更新我也是第一次做,網(wǎng)上找了自動(dòng)更新的源碼,后來又根據(jù)在網(wǎng)上看到的一些方法,自己試了很久,最終還是有寫錯(cuò)誤,所以花了錢讓別人幫忙調(diào)試成功的,下面是我自己搗騰出來的,方便大家借鑒,如果有什么錯(cuò)誤的地方歡迎指正2017-02-02winform異型不規(guī)則界面設(shè)計(jì)的實(shí)現(xiàn)方法
這篇文章主要介紹了winform異型不規(guī)則界面設(shè)計(jì)的實(shí)現(xiàn)方法,具有不錯(cuò)的實(shí)用價(jià)值,需要的朋友可以參考下2014-08-08vscode設(shè)置Fira_Code字體及改變編輯器字體、背景顏色的代碼詳解
這篇文章主要介紹了vscode設(shè)置Fira_Code字體及改變編輯器字體、背景顏色,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08C#實(shí)現(xiàn)路由器斷開連接,更改公網(wǎng)ip的實(shí)例代碼
C#實(shí)現(xiàn)路由器斷開連接,更改公網(wǎng)ip的實(shí)例代碼,需要的朋友可以參考一下2013-05-05