使用命令行對ios設備截屏
1.前言
這幾天在玩手機上的一個德州撲克遊戲,發現玩個遊戲是真心累人啊,要一直點屏幕,主要是這個遊戲不用動腦子,不用動腦子的遊戲對我來說那就更是玩的痛苦。於是在想有沒有辦法可以讓我用程序來玩移動設備上的棋牌遊戲。想過之後,感覺可以用技術來解決這問題
2.技術實現思路
咱想用程序來玩手機上的棋牌遊戲,那第一步是要知道當前遊戲的運行狀態。打算通過每秒截取一次手機屏幕圖像來獲取當前別人下多大注,我有什麼手牌,桌面上都發了什麼牌,是否到我下注等等問題。
得到屏幕截圖,再通過機器學習訓練一個識別圖中信息的神經網絡來獲取信息內容,因爲手機遊戲中發給玩家的牌,桌面上的牌,我的手牌什麼的,每一次都是在屏上一個固定的位置,這裏只要把截取的圖片中內容的一小部分取出來讓神經網絡單獨訓練就可以了。
得到當前牌面和籌碼下注情況,再結合自已的下注程序來和其他玩家娛樂。
因爲德州撲克只使用了52張牌,並且遊戲的玩法可以使用程序進行大量模擬生成,這樣的條件對於使用機器學習來訓練一個玩德州撲克網絡也是非常輕鬆簡單的。最後我們可以通過和其他真實玩家互動以達到咱們程序員玩遊戲的優越感。
最後,如果這個東西實現了,還可以把這種設備使用在所有棋牌遊戲上,或者把這種設備出售給其他棋牌遊戲玩家,讓所有人都玩的開心。
1.第一步,獲取屏幕內容
第一步,安裝工具
對於ios設備截圖來獲取屏幕內容最好的命令行工具,那自然當屬libimobiledevice庫了
安裝方法:
方法一,常規安裝方法
- 安裝HomeBrew
ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
- 終端執行如下命令
2.1 brew install libimobiledevice
2.2 brew install Caskroom/cask/osxfuse
2.3 brew install ifuse
2.4 brew install ideviceinstaller
方法二,編譯安裝
可能有人會問爲什麼要用編譯安裝,因爲蘋果設備對對安全要求比較高,一般不明來路的第三方應用系統都會有運行限制,而自已編譯安裝的程序不會有限制。
libimobiledevice代碼地址:
https://github.com/libimobiledevice/libimobiledevice
編譯安裝方法:
從github上下載代碼我就不說了,這個是基本功,如果不會的話就在網上搜怎麼git代碼吧。我用的是GitHub Desktop下載的代碼,也可以用git命令,看個人愛好了
下載到代碼後,cd到項目目錄,先生成makefile文件
./autogen.sh
#也可以運行下邊的命令
./configure
當運行之後可能會發現報一個OpenSLL庫的錯誤,網上找說原因是 High Sierra 把 SSL 庫從 OpenSSL 0.9.8zh 切換到 LibreSSL。而通過homebrew安裝的OpenSSL是keg-only的,並禁止通過brew link openssl添加軟鏈接。解決辦法是安裝另兩個庫,然後使用–disable-openssl來生成makefile,另外ios 11好像還會報一個錯,不過網上給了一個加–enable-debug-code參數的生成方法,總的方法像下邊這樣
brew install gnutls
brew install libgcrypt
./autogen.sh --disable-openssl --enable-debug-code
make
make install
好了,到這裏程序就安裝好了。運行之後又發現一個
ERROR: Could not connect to lockdownd, error code -2
的錯誤,這裏應該是沒有讀取lockdownd目錄的權限,使用下邊命令給讀取權限
sudo chmod 777 /var/db/lockdown
到這裏我的idevice系統工具可以用了,
第二步,使用工具截圖
將iphone連到電腦上,打開終端
idevicescreenshot imageName.png
使用上邊的命令就可以給ios設備截屏了
3.後續工作
有了命令行版的截屏工具,那就可以使用python腳本來調了這個命令行截屏了。有了圖像數據,接下來就是識別圖片中的信息
還有一個比較大的問題就是我們要怎麼操作手機上的遊戲來下注。對到android手機還好。但ios是不支持擴展鼠標的,對於沒有越獄的手機也不能通過電腦來控制。而我也不打算對手機越獄,我想大家應該也都不想,主要是因爲蘋果手機安全大家才用蘋果手機,越獄後的蘋果手機真心還不如安卓。
我想到一個不越獄的辦法就是用機械手來點擊手機屏幕。我可以很輕鬆的用程序操制機械手來操作手機屏的,而所謂的機械手,只要幾個幾快錢的舵機就能作出來。
後來有時間了再寫,今天把屏幕截圖的問題解決了,昨天的任務就完成了。