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