由“跳一跳”小程序聊一聊C#與沖頂大會
來源:荊州軟件開發 荊州網站建設
時間:2018-01-18
一、由跳一跳開始
2018年初,跳一跳小程序著實火了一把。一時間,各種攻略,甚至輔助工具也應運而生。作為.net陣營的一員,這篇跳一跳輔助程序文章,可以說是讓人眼前一亮。實現思路大體如下:
1.下載adb工具;
2.打開手機usb調試模式;
3.通過命令行調用adb工具,向手機發送命令
3.1發送截圖命令
3.2將截圖從手機復制到磁盤
3.3將手機截圖繪制到winform窗體的PixtureBox
3.4鼠標左鍵單擊小人底部,右鍵單擊目標點
3.5將小人底部的點,目標點之間的距離轉換為屏幕按壓時間
3.6發送屏幕按壓命令
4.手動完成一次跳躍
二、偶遇沖頂大會
有意無意得總是遇見沖頂大會幾個字,通過搜索后,發現是一款在線限時答題類app。每道題三個選項,10s內作答,共12道題目,去不答對以后與其他全答對的人均分獎金。獎金從50000-300000不等。
答題輔助思路:
1.截取手機屏幕圖片
2.識別截圖中的題目
3.調用瀏覽器,搜索題目
不過,此思路是基于ios手機操作系統,采用 iOS + Mac+WDA+免費ocr識別來實現的。
三、跳一跳與沖頂大會
本著生命在于折騰的原則,想著在android手機操作系統+windows操作系統上也能實現一個答題輔助工具。借(剽)鑒(竊)上面的實現思路,說下,具體的實現過程。
1.發送獲取屏幕截圖命令 ”adb shell screencap -p /sdcard/xxx.png”
2.發送將手機截圖復制到本地磁盤的命令 ”pull /sdcard/xxx.png"
3.獲取題目所在區域
3.1 自己的手機屏幕分辨率為1080*1920,手機截圖長度為16.5cm,題目開始出現的位置距離圖片頂部為3cm,題目寬度大概為2cm(題目為2行文字),這一步,跳一跳輔助工具已經實現了。
3.2 調用算法,從手機截圖中截取題目所在區域大小的圖片 Bitmap map = GetPart(file, 0, 0, 1080, (int)(1920 * (5.5 - 3) / 16.5), 0, (int)(1920 * 3 / 16.5));
3.3 使用開源ocr識別庫Tesseract,識別上一步截圖map中的題目GetOcrText
3.4 去除題目中的換行,處理特殊字符。
3.5調用瀏覽器,搜索題目
四、問題
1.問題1:題目所在區域的獲取,題目有時為一行,有時為兩行,圖片大小不太固定
2.問題2:從獲取發送截圖命令,將截圖復制到本地磁盤,截取題目所在區域大小圖片,識別圖片中題目內容,調用瀏覽器搜索,呈現搜索結果共耗時6s左右,答題時間僅有10s,有點不太夠用
五、總結
雖然,到頭來結果不是太理想,但這個舉一反三的探索過程卻是有收獲的。從一開始ocr識別不支持中文,到Tesseract庫項目編譯失敗,再到搜索Tesseract支持的中文識別依賴文件chi_sim.traineddata,是解決問題能力的鍛煉,也是漲姿勢的過程。總的來說還不錯。歡迎交流。