用 Python 實現手機自動答題,這下百萬答題遊戲誰也玩不過我!

引言

如果談到這幾年手機上各平臺最常見的引流福利,必然是

答題贏大獎系列 小遊戲了。像什麼頭號英雄,百萬玩家之類的,充斥在我們生活中,同時也成為了我們生活中常見的娛樂方式。

但是有時候就會想,能不能實現 手機自動答題 呢,畢竟網絡上是充斥著很多問題的答案,自己手動搜題速度顯然來不及。答案是當然可以 ,今天我們就來用手機連接電腦,讓電腦自動搜索答案,省時省力省心。

用 Python 實現手機自動答題,這下百萬答題遊戲誰也玩不過我!

這一項目中主要用到了 文字識別瀏覽器 操作,其中文字識別是 利用計算機自動識別字符的技術,是模式識別應用的一個重要領域。

人們在生產和生活中,要處理大量的文字、報表和文本。為了減輕人們的勞動,提高處理效率, 50 年代開始探討一般文字識別方法,並研製出光學字符識別器。 60 年代出現了採用磁性墨水和特殊字體的實用機器。

60 年代後期,出現了多種字體和手寫體文字識別機,其識別精度和機器性能都基本上能滿足要求。如用於信函分揀的手寫體數字識別機和印刷體英文數字識別機。 70 年代主要研究文字識別的基本理論和研製高性能的文字識別機,並著重於漢字識別的研究 。

基於一些基礎認識,下面我們先來思考下,實現這一項目的整體思路:

做這一項目首先會存在以下疑問:

1、 我們要讓手機連接電腦,但是怎麼讓電腦自動控制手機呢

2、 手機上是顯示文字的,但是怎麼讓電腦看懂你手機上的文字呢

3、 電腦知道了問題後如何藉助網絡搜答案呢?

針對上面的問題,我們大概想了下思路:

1、 讓電腦能夠控制手機,一般都是利用 usb 把手機連接到電腦上。然後藉助 ADB 實現對手機的調控,包括點觸、滑動、截圖等等功能。

2、 讓電腦能夠看懂文字,必然需要對手機屏幕截圖,然後對截圖中的文字識別即可

3、 讓電腦操控瀏覽器搜題,用 python 的庫即可實現

瞭解了整體思路後,下面開始我們的實驗。

用 Python 實現手機自動答題,這下百萬答題遊戲誰也玩不過我!

實驗前的準備

首先我們使用的python版本是3.6.5所用到的庫有os,Python 中os模塊包含普遍的操作系統功能。

如果你希望你的程序能夠與平臺無關的話,這個模塊是尤為重要的;pillow庫中Image模塊是在Python PIL圖像處理中常見的模塊,對圖像進行基礎操作的功能基本都包含於此模塊內;Pytesseract模塊是文字識別模塊;webbrowser是實現瀏覽器的操作;time庫實現等待下一題之間的間隔時間等待。

用 Python 實現手機自動答題,這下百萬答題遊戲誰也玩不過我!

自動獲取手機文字

1 、利用 ADB 控制手機:

ADB是安卓手機常見的調控插件,我們需要將手機數據線和電腦連接,然後藉助adb實現對手機的截屏並保存在指定路徑。Adb控制指令如下:

截取屏幕,圖片命名為screen.png :

<code>os.system(

"adb shell /system/bin/screencap -p /sdcard/screen.png"

) /<code>

將截圖保存到電腦,路徑為:C:/Users/jia/Desktop

<code>os.system(

"adb pull /sdcard/screen.png C:/Users/jia/Desktop"

) /<code>

模擬點擊屏幕,x y分別為點擊處的像素

<code>

os

.system

("

adb

shell

input

tap

{}{}"

.format

(

x

,

y

))

#x

y

為點擊處的像素點/<code>

詳細代碼如下:

<code> 

def

get_image

()

:

os.system(

'adb shell screencap -p /sdcard/image.png'

) os.system(

'adb pull /sdcard/image.png .'

) xigua_size = (

150

,

530

,

1800

,

800

)/<code>

2 、對圖片文字識別:

文字識別部分為了方便快速,我們直接使用pytesseract文字識別即可。其中主要用的函數是pytesseract.image_to_strin。

pytesser裡包含了tesseract.exe和英語的數據包(默認只識別英文),還有一些示例圖片,所以解壓縮後即可使用。

同時模塊需要PIL庫的支持。

如何識別率低的問題?

可以增強圖片的顯示效果,或者將其轉換為黑白的,這樣可以使其識別率提升不少。

識別其他語言?

tesseract是一個命令行下運行的程序,參數如下:

<code>

tesseract

imagename

outbase

[-l lang]

[-psm N]

[configfile...]

/<code>

imagename是輸入的image的名字,outbase是輸出的文本的名字,默認為outbase.txt ,-l lang 是定義要識別的的語言,默認為英文。

詳細代碼如下:

<code> 
get_image()
img=Image.open('image.png')
img_que = img.crop(xigua_size)
 
question=pytesseract.image_to_string(img_que,lang='chi_sim')/<code>

獲取文字後,對文字做一些處理,去除沒必要的信息。

<code>

question

=question.replace(

' '

,

''

).replace(

'\n'

,

''

)

que

= question[question.find(

'.'

)+

1

: question.find(

'?'

)]/<code>
用 Python 實現手機自動答題,這下百萬答題遊戲誰也玩不過我!

自動搜題的實現

1 、瀏覽器操作:

在識別問題的基礎上,我們通過 webbrowser 打開瀏覽器,並操作瀏覽器搜索答案。

其中主要用到的方法如下:

  • webbrowser 有以下方法:
<code>

webbrowser

.open

(

url

[, new=0[, autoraise=1]

])/<code>

這個方法是在默認的瀏覽器中顯示url, 如果new = 0, 那麼url會在同一個瀏覽器窗口下打開,如果new = 1, 會打開一個新的窗口,如果new = 2, 會打開一個新的tab, 如果autoraise = true, 窗口會自動增長。

<code>

webbrowser

.open_new

(

url

)/<code>

在默認瀏覽器中打開一個新的窗口來顯示 url, 否則,在僅有的瀏覽器窗口中打開 url 。

<code>

webbrowser

.open_new_tab

(

url

)/<code>

在默認瀏覽器中當開一個新的 tab 來顯示 url, 否則跟 open_new() 一樣、

<code>

webbrowser

.get

(

[name]

)/<code>

根據 name 返回一個瀏覽器對象,如果 name 為空,則返回默認的瀏覽器

<code>

webbrowser

.register

(

name

,

construtor

[, instance]

)/<code>

註冊一個名字為 name 的瀏覽器,如果這個瀏覽器類型被註冊就可以用 get() 方法來獲取。

詳細代碼如下:

<code>#引擎搜索
url = 

"https://www.baidu.com/s?wd="

+que webbrowser.

open

(url) get_image() img=Image.

open

(

'image.png'

) img_que = img.crop(xigua_size) question1= pytesseract.image_to_string(img_que,) question1=question1.replace(

' '

,

''

).replace(

'\n'

,

''

) que = question1[question.

find

(

'.'

)+

1

: question.

find

(

'?'

)]

while

True:

while

(question1==question): get_image() img = Image.

open

(

'image.png'

) img_que = img.crop(xigua_size) question1 = pytesseract.image_to_string(img_que,) question1 = question1.replace(

' '

,

''

).replace(

'\n'

,

''

) que = question1[question.

find

(

'.'

) +

1

: question.

find

(

'?'

)] get_image() img = Image.

open

(

'image.png'

) img_que = img.crop(xigua_size) # 識別截圖文字 question = pytesseract.image_to_string(img_que,) question = question.replace(

' '

,

''

).replace(

'\n'

,

''

) que = question[question.

find

(

'.'

) +

1

: question.

find

(

'?'

)] continue

while

(question1!=question): get_image() img = Image.

open

(

'image.png'

) img_que = img.crop(xigua_size) # 識別截圖文字 question = pytesseract.image_to_string(img_que,) question1 = pytesseract.image_to_string(img_que,) question1 = question1.replace(

' '

,

''

).replace(

'\n'

,

''

) que = question1[question.

find

(

'.'

) +

1

: question.

find

(

'?'

)] question = question.replace(

' '

,

''

).replace(

'\n'

,

''

) que = question[question.

find

(

'.'

) +

1

: question.

find

(

'?'

)] # 引擎搜索 url =

"https://www.baidu.com/s?wd="

+ que webbrowser.

open

(url) continue/<code>

到這裡,我們整體的程序就搭建完成,下面為我們程序的運行結果:

用 Python 實現手機自動答題,這下百萬答題遊戲誰也玩不過我!

試試用這個方法參加《百萬答題》類小遊戲,或許下一個百萬獲獎人就是你。

詳細源代碼獲取私信小編01


分享到:


相關文章: