1.前言
最近答題類app比較火爆,由於題目廣並且時間短,自己打字搜索是不太可能的了,於是想自己做一個自動搜索的Python腳本
該Python腳本的原理是用adb工具將手機截圖傳到電腦上進行文字識別,然后百度搜索該問題,打開瀏覽器時間還是比較慢的
2.文字識別庫pytesseract
2.1 pytesseract庫的安裝
這個庫的安裝特別容易,在命令行中輸入
pip install pytesseract
即可安裝
2.2 tesseract ocr引擎
tesseract ocr引擎是一個開源的強大引擎,安裝Windows然后通過相關變量設置即可使用
2.3 image_to_string函數
該函數為pytesseract庫的方法,將圖片文本轉換為文字
from PIL import Image
import pytesseract
question_text = pytesseract.image_to_string(question_img, lang='chi_sim').replace(' ','')
上述為基礎用法,並且將空格替換掉
3.adb工具
3.1簡介
adb全名Android Debug Bridge,通過該工具,可以在電腦端的命令行與安裝手機進行交互,前提是手機開啟USB調試
adb有很多功能,它可以模擬屏幕觸擊,之前火熱的跳一跳輔助正是利用該原理進行操作的
3.2python代碼中使用adb
python代碼中使用adb shell很簡單
import os
def pull_screenshot():
os.system('adb shell screencap -p /sdcard/screenshot.png')
os.system('adb pull /sdcard/screenshot.png')
這樣操作便可以模擬命令行輸入將手機端截圖發送至腳本目錄
4.完整代碼
from PIL import Image
import pytesseract
import time
import os
import webbrowser
def pull_screenshot():
os.system('adb shell screencap -p /sdcard/screenshot.png')
os.system('adb pull /sdcard/screenshot.png')
def main():
pull_screenshot()
img = Image.open("./screenshot.png")
question_img = img.crop((65,350,1019,621))
question_text = pytesseract.image_to_string(question_img, lang='chi_sim').replace(' ','')
webbrowser.open("https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=2&tn=baiduhome_pg&wd="+question_text)
if __name__ == '__main__':
main()
使用之后發現耗時還是比較久的,在識別1-2s后才能打開瀏覽器進行搜索,然后我們再找答案的話就可能時間到了
於是改進可以使用爬蟲,選定搜索結果的相關網頁進行關鍵詞的搜索,進行答案的排查搜索