使用Python简单地去辅助百万答题

428 阅读1分钟

前段时间地跳一跳助手很有意思,使用facebook-wda去做一下自动化地小功能还是很有意思地。

思路

facebook-wda能截屏,那把答题区域裁剪,想办法识别其中地文字,提取出来,搜索一下。试了一下Tesseract,效果不是很好,就用次数免费地api了,直接上代码。


client = AipOcr(APP_ID, API_KEY, SECRET_KEY)


c = wda.Client('http://192.168.1.103:8100')
s = c.session()
print(s.window_size())


def printNowDatetime():
    print(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))

def getImage(url):
    with open(url,'rb') as fp:
        return fp.read()

def ocrImage(image):
    # image = getImage('/Users/user/Desktop/testP.png')

    """ 如果有可选参数 """
    options = {}
    options["language_type"] = "CHN_ENG"
    options["detect_direction"] = "true"
    options["detect_language"] = "true"
    options["probability"] = "true"

    """ 带参数调用通用文字识别, 图片参数为本地图片 """
    response = client.basicGeneral(image, options)
    print(response)
    print(type(response))
    words = response['words_result']
    appendWord = ''
    for item in words:
        appendWord += item['words'] + ''
    return appendWord


def cvCutImg(x,y,width,height,img):
    return img[y:y+height, x:x+width]

def cvBytes_to_numpyNdarray(imgBytes):
    img = np.asarray(bytearray(imgBytes), np.uint8)
    img = cv2.imdecode(img, cv2.IMREAD_COLOR)
    # cv2.imshow('mm', img)
    # cv2.waitKey(0)

    # img type is numpy.ndarray
    # img = cv2.imread('/Users/user/Desktop/testP.png')
    return img

def cvNumpyNdarray_to_bytes(img):
    return np.ndarray.tobytes(img)


def chongdingdahui():
    img = c.screenshot('screen01.png')
    # img = getImage('chongdingdahui.png')
    image = cvBytes_to_numpyNdarray(img)
    cutImg = cvCutImg(25, 320, 700, 175, image)
    cv2.imwrite('cut.png', cutImg)
    image = getImage('cut.png')
    ocrwd = ocrImage(image)
    image = getImage('cut.png')
    ocrwd = ocrImage(image)
    wd = parse.quote(ocrwd)
    url = 'https://www.baidu.com/s?wd=' + wd
    webbrowser.open(url)


def xiguashiping():
    img = c.screenshot('screen01.png')
    # img = getImage('xiguaishipin.png')
    image = cvBytes_to_numpyNdarray(img)
    cutImg = cvCutImg(40, 220, 670, 175, image)
    cv2.imwrite('cut.png', cutImg)
    image = getImage('cut.png')
    ocrwd = ocrImage(image)
    image = getImage('cut.png')
    ocrwd = ocrImage(image)
    wd = parse.quote(ocrwd)
    url = 'https://www.baidu.com/s?wd=' + wd
    webbrowser.open(url)


def zhishichaoren():
    img = c.screenshot('screen01.png')
    # img = getImage('zhishichaoren.png')
    image = cvBytes_to_numpyNdarray(img)
    cutImg = cvCutImg(40, 200, 670, 200, image)
    cv2.imwrite('cut.png', cutImg)
    image = getImage('cut.png')
    ocrwd = ocrImage(image)
    image = getImage('cut.png')
    ocrwd = ocrImage(image)
    wd = parse.quote(ocrwd)
    url = 'https://www.baidu.com/s?wd=' + wd
    webbrowser.open(url)


if __name__ == "__main__":
    while True:
        #time.sleep(0.5)
        printNowDatetime()
        # chongdingdahui()
        xiguashiping()
        # zhishichaoren()