自動化掃雷工具:Python+機器學習

自動化掃雷工具:Python+機器學習

先來看一下效果:1s之內完成初級掃雷,世界紀錄!

https://www.zhihu.com/video/985533541924503552

本文針對win7操作系統的初級掃雷(9*9個格子,中級和高級的程序還有待訓練)

開發語言:Python

開發環境:Pycharm

依賴包:numpy、sklearn、PyUserInput、pillow

先簡單介紹一下工具包:

1.Numpy:不用多說,這是Python科學計算最強大的工具之一(另一個是Pandas),實現了矩陣的矢量化運算;

2.sklearn是機器學習最常用的依賴包,裡面結成了各種分類、聚類、降維和數據清洗工具。

3.PyUserInput安裝包集成了滑鼠和鍵盤的所有操作,通過簡單的

m = PyMouse()

m.click(x,y,1)

即可實現滑鼠在(x,y)像素點的點擊操作

注意:電腦屏幕的左上角是(0,0),水平方向是x方向,豎直方向是y方向(切莫與後邊的圖像數組混淆)

4.pillow是常用的圖像處理工具,此處僅僅用來把矩陣顯示成圖像

工具包的安裝

numpy,pillow,sklearn簡單的採用 pip install package_name即可安裝

PyUserInput包依賴pywin32和pyHook

pywin32模塊默認已安裝

pyHook模塊可從這裡下載 lfd.uci.edu/~gohlke/pyt

需要下載與python版本對應的PyHook版本。cpm27代表Python2.7,cp36m代表Python3.6版本;win32對應32位Python,amd64對應64位Python。在IDEL中輸出Python可以查看Python命令版本號信息

上邊兩個包裝完之後,採用pip install PyUserInput即可

總體思想:

1.截圖

打開掃雷,將掃雷程序放到屏幕上固定的地方。採用qq等截圖工具對整個屏幕進行截圖,使用「畫圖」程序打開剛剛截屏的圖像,找到我們需要截屏的位置(x,y,w,h),分別對應需要截屏的左上角坐標、寬度和高度

簡單地採用

Image.fromarray(img.astype(uint8)).show()

即可查看截取的圖片

2.分割

將上述截圖分割成9*9個Cell,需要事先計算好每個Cell的寬度。

3.訓練過程

我們的目標是識別每一個小的Cell對應的是什麼數字或者是否標了旗子,對於初級掃雷,共有以下幾種類別:

數字1,、數字2、數字3、空白(白色的)、標旗子、未點開(藍色的)

這是一個典型的分類問題,對應6個類別,因此我們需要事先訓練好模型,並將模型保存下來,待到預測過程中直接預測出結果

訓練過程我其實做的很簡單,自己手工標註5張圖片,一共是9*9*5組訓練集。直接採用最簡單的線性模型——LogisticRegression,對405組數據進行訓練,並將模型保存到linear_model.pkl中:

joblib.dump(clf,linear_model.pkl)

4.預測過程

訓練好模型之後,對於一個新的圖片,我們將之分成81個Cell,預測每個Cell對應的類別,據此我們得到圖片對應的標籤信息——data數組(9*9的矩陣,每個數字0——5)

5.掃雷演算法

我們得到data數組之後,下一部就是執行掃雷演算法

1)判斷是否存在可以標旗子的Cell,如果有就標上旗子

2)很多人可能不知道掃雷可以進行雙擊(食指和中指同時按下),雙擊可以大大加快掃雷的速度。這一步就是判斷是否存在雙擊的條件,存在就在該位置進行雙擊

3)如果上述兩步都沒有符合條件的,此時採用隨機演算法,在未點開的雷中隨機點擊

幾個注意點:

1)進行滑鼠點擊屏幕操作是IO操作,很耗時,因此每次點擊之後需要延時0.2s,使之完成點擊

2)本文僅僅針對初級,對於中級和高級還需要訓練數字4,數字5,數字6的識別,有待後續開發


推薦閱讀:

Python筆記--Pandas常用函數匯總
數據挖掘和網路爬蟲有什麼關聯區別?
用R語言進行文本挖掘和主題建模
用戶畫像——搜狗用戶挖掘:文本分類
玩轉Pandas,讓數據處理更easy系列7

TAG:數據挖掘 | Python | 機器學習 |