基于OCR文字識別QQ鸭限、微信等自動回復(fù)消息Python實(shí)現(xiàn)

使用OCR文字識別技術(shù)QQ俯画、微信等發(fā)送來的消息內(nèi)容析桥,然后自動匹配內(nèi)容實(shí)現(xiàn)縣自動回復(fù)消息功能,這是使用Python實(shí)現(xiàn)艰垂。
安裝pillow

直接使用pip install Pillow 

安裝tesseract-ocr

pip install pytesseract

window上需要自己下載對應(yīng)的識別庫泡仗,安裝完成之后需要后加入環(huán)境變量里面。tesseract是ocr識別系統(tǒng)猜憎,用于訓(xùn)練圖片娩怎,可以自己訓(xùn)練哦,官方提供的識別率不是很高胰柑,需要自己按需要訓(xùn)練模型截亦。

import cv2
from PIL import ImageGrab
import numpy as np
import argparse
import time
import pytesseract
from message import Message
from sender import Sender
 
global img
global point1, point2
 
def on_mouse(event, x, y, flags, param):
    global img, point1, point2
    img2 = img.copy()
    if event == cv2.EVENT_LBUTTONDOWN: # 左鍵點(diǎn)擊
        point1 = (x, y)
        cv2.circle(img2, point1, 10, (0, 255, 0), thickness=2)
        cv2.imshow('image', img2)
    elif event == cv2.EVENT_MOUSEMOVE and (flags & cv2.EVENT_FLAG_LBUTTON): # 按住左鍵拖曳
        cv2.rectangle(img2, point1, (x, y), (255, 0, 0), thickness=2)
        cv2.imshow('image', img2)
    elif event == cv2.EVENT_LBUTTONUP: # 左鍵釋放
        point2 = (x, y)
        cv2.rectangle(img2, point1, point2, (0, 0, 255), thickness=2)
        cv2.imshow('image', img2)
 
def select_roi(frame):
    global img, point1, point2
    img = cv2.cvtColor(np.array(frame), cv2.COLOR_RGB2BGR)
    winname = 'image'
    cv2.namedWindow(winname, cv2.WINDOW_NORMAL)
    cv2.setWindowProperty(winname, cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)
    cv2.setMouseCallback(winname, on_mouse)
    cv2.imshow(winname, img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    return point1, point2
 
if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    # parser.add_argument('--fps', type=int, default=10, help='frame per second')
    # parser.add_argument('--total_time', type=int, default=15, help='video total time')
    # parser.add_argument('--savename', type=str, default='video.mp4', help='save file name')
    # parser.add_argument('--screen_type', default=0, type=int, choices=[0, 1], help='1: full screen, 0: region screen')
    args = parser.parse_args()
    
    print('等到3秒,請切換到錄屏的頁面')
    time.sleep(3)
    print('Press Esc to close window')
    
    curScreen = ImageGrab.grab() # 獲取屏幕對象
    point1, point2 = select_roi(curScreen)
    left_x = point1[0]
    top_y = point1[1]
    right_x =  point2[0]
    bottom_y = point2[1]

    sender = Sender()
    message = Message()
    
    while True:
        #bbox邊界框是一個(left_x, top_y, right_x, bottom_y)元組
        captureImage = ImageGrab.grab(bbox =(left_x, top_y, right_x, bottom_y)) # 抓取屏幕
        frame = cv2.cvtColor(np.array(captureImage), cv2.COLOR_RGB2BGR)
        text=pytesseract.image_to_string(frame,lang='chi_sim')
        sender.send_message("大熊", message.get_message(text))

        if ord('q') == cv2.waitKey(50):
            break
    cv2.destroyAllWindows()
'''
win32安裝
pip install pypiwin32 -i https://mirrors.aliyun.com/pypi/simple/
'''
import win32gui
import win32api
import win32con
import win32clipboard as w
import time

class Sender(object):

    def __init__(self):
        self.handle = None

    #把文字放入剪貼板
    def setText(aString):
        w.OpenClipboard()
        w.EmptyClipboard()
        w.SetClipboardData(win32con.CF_UNICODETEXT,aString)
        w.CloseClipboard()
    
    #模擬ctrl+V
    def ctrlV():
        win32api.keybd_event(17,0,0,0) #ctrl
        win32api.keybd_event(86,0,0,0) #V
        win32api.keybd_event(86,0,win32con.KEYEVENTF_KEYUP,0)#釋放按鍵
        win32api.keybd_event(17,0,win32con.KEYEVENTF_KEYUP,0)
        
    #模擬alt+s
    def altS():
        win32api.keybd_event(18,0,0,0)
        win32api.keybd_event(83,0,0,0)
        win32api.keybd_event(83,0,win32con.KEYEVENTF_KEYUP,0)
        win32api.keybd_event(18,0,win32con.KEYEVENTF_KEYUP,0)
    # 模擬enter
    def enter():
        win32api.keybd_event(13,0,0,0)
        win32api.keybd_event(13,0,win32con.KEYEVENTF_KEYUP,0)
    #模擬單擊
    def click():
        win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
        win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
    #移動鼠標(biāo)的位置
    def movePos(x,y):
        win32api.SetCursorPos((x,y))
    
    '''
    將消息復(fù)制到粘貼板上
    '''
    def set_text(self, text):
        w.OpenClipboard()
        w.EmptyClipboard()
        w.SetClipboardData(win32con.CF_UNICODETEXT, text)
        w.CloseClipboard()

    '''
    模擬按鍵發(fā)送消息
    '''
    def send_message(self, window, text):
        self.set_text(text)

        if not self.handle:
            self.handle = win32gui.FindWindow(None, window)
        # win32gui.SetForegroundWindow(handle)
        # win32gui.GetDlgCtrlID(handle)

        #填充消息
        win32gui.SendMessage(self.handle, 770, 0, 0)
        #回車發(fā)送消息
        win32gui.SendMessage(self.handle, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)

        # time.sleep(0.5)
        # #ctrl + v
        # win32api.keybd_event(17, 0, 0, 0)
        # win32api.keybd_event(86, 0, 0, 0)
        # win32api.keybd_event(86, 0, win32con.KEYEVENTF_KEYUP, 0)
        # win32api.keybd_event(17, 0, win32con.KEYEVENTF_KEYUP, 0)

        # #enter
        # time.sleep(0.5)
        # win32api.keybd_event(0xD0, 0, 0, 0)
        # win32api.keybd_event(0xD0, 0, win32con.KEYEVENTF_KEYUP, 0)

'''
這里可以請求圖靈開放平臺聊天的接口api回復(fù)對應(yīng)的消息柬讨。也可以自定義回復(fù)的內(nèi)容崩瓤。
'''
class Message(object):
    def get_message(self, input):
        print(input)
        return "test robot"

目前的代碼還不是很完善后續(xù)會更新。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末踩官,一起剝皮案震驚了整個濱河市却桶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蔗牡,老刑警劉巖肾扰,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件畴嘶,死亡現(xiàn)場離奇詭異,居然都是意外死亡集晚,警方通過查閱死者的電腦和手機(jī)窗悯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來偷拔,“玉大人蒋院,你說我怎么就攤上這事×拢” “怎么了欺旧?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵围小,是天一觀的道長霉颠。 經(jīng)常有香客問我,道長溃睹,這世上最難降的妖魔是什么震肮? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任称龙,我火速辦了婚禮,結(jié)果婚禮上戳晌,老公的妹妹穿的比我還像新娘鲫尊。我一直安慰自己,他們只是感情好沦偎,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布疫向。 她就那樣靜靜地躺著,像睡著了一般豪嚎。 火紅的嫁衣襯著肌膚如雪搔驼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天侈询,我揣著相機(jī)與錄音舌涨,去河邊找鬼。 笑死妄荔,一個胖子當(dāng)著我的面吹牛泼菌,可吹牛的內(nèi)容都是我干的谍肤。 我是一名探鬼主播啦租,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼荒揣!你這毒婦竟也來了篷角?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤系任,失蹤者是張志新(化名)和其女友劉穎恳蹲,沒想到半個月后虐块,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嘉蕾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年贺奠,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片错忱。...
    茶點(diǎn)故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡儡率,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出以清,到底是詐尸還是另有隱情儿普,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布掷倔,位于F島的核電站眉孩,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏勒葱。R本人自食惡果不足惜浪汪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望错森。 院中可真熱鬧吟宦,春花似錦、人聲如沸涩维。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瓦阐。三九已至蜗侈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間睡蟋,已是汗流浹背踏幻。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留戳杀,地道東北人该面。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像信卡,于是被迫代替她去往敵國和親隔缀。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內(nèi)容

  • 用兩張圖告訴你傍菇,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料猾瘸? 從這篇文章中你...
    hw1212閱讀 12,704評論 2 59
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月,有人笑有人哭,有人歡樂有人憂愁牵触,有人驚喜有人失落淮悼,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,531評論 28 53
  • 首先介紹下自己的背景: 我11年左右入市到現(xiàn)在袜腥,也差不多有4年時間,看過一些關(guān)于股票投資的書籍钉汗,對于巴菲特等股神的...
    瞎投資閱讀 5,713評論 3 8
  • ![Flask](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAW...
    極客學(xué)院Wiki閱讀 7,240評論 0 3
  • 不知不覺易趣客已經(jīng)在路上走了快一年了儡湾,感覺也該讓更多朋友認(rèn)識知道易趣客特恬,所以就謝了這篇簡介,已做創(chuàng)業(yè)記事徐钠。 易趣客...
    Physher閱讀 3,410評論 1 2