美文网首页Python_办公自动化
基于OCR文字识别QQ、微信等自动回复消息Python实现

基于OCR文字识别QQ、微信等自动回复消息Python实现

作者: 叁太紫 | 来源:发表于2021-09-25 17:05 被阅读0次

    使用OCR文字识别技术QQ、微信等发送来的消息内容,然后自动匹配内容实现县自动回复消息功能,这是使用Python实现。
    安装pillow

    直接使用pip install Pillow 
    

    安装tesseract-ocr

    pip install pytesseract
    

    window上需要自己下载对应的识别库,安装完成之后需要后加入环境变量里面。tesseract是ocr识别系统,用于训练图片,可以自己训练哦,官方提供的识别率不是很高,需要自己按需要训练模型。

    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: # 左键点击
            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)
        #移动鼠标的位置
        def movePos(x,y):
            win32api.SetCursorPos((x,y))
        
        '''
        将消息复制到粘贴板上
        '''
        def set_text(self, text):
            w.OpenClipboard()
            w.EmptyClipboard()
            w.SetClipboardData(win32con.CF_UNICODETEXT, text)
            w.CloseClipboard()
    
        '''
        模拟按键发送消息
        '''
        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)
            #回车发送消息
            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回复对应的消息。也可以自定义回复的内容。
    '''
    class Message(object):
        def get_message(self, input):
            print(input)
            return "test robot"
    

    目前的代码还不是很完善后续会更新。

    相关文章

      网友评论

        本文标题:基于OCR文字识别QQ、微信等自动回复消息Python实现

        本文链接:https://www.haomeiwen.com/subject/lavxnltx.html