Python3 调用 Ocr 在线识别剪切板图片文本

Python3 调用 Ocr 在线识别剪切板图片文本

前几年写的,Ocr 截图识别付费软件频出时实现自用

实现方案

1、调用任何截图软件截图,自动保存到剪切板

2、python 调用剪切板,获取图片流保存为固定位置的临时本地图片

3、识别本地图片,文本内容重新复制到剪切板

ApiOrc.py

import io
import os
import base64
import PIL
import jsonpath
import pyperclip
from aip import AipOcr
from PIL import Image, ImageGrab

root_path = os.path.abspath(".")

_app_id = 'xxx'          # 从百度,阿里,腾讯等等 都行,申请orc服务账户,每日有免费识别量,足够个人使用
_api_key = 'xxx'
_secrect_key = 'xxx'

# 百度云api对象
client = AipOcr(_app_id, _api_key, _secrect_key)

# ocr 识别的最大图片大小不能超过 4 兆
img_max_size = 4096


def get_file_content(file_path: str):
    """ 读取文件 """
    with open(file_path, 'rb') as fp:
        return fp.read()


def get_size_kb(file_path: str):
    """ 获取文件大小(kb) """
    size = os.stat(file_path).st_size
    return round(size / 1024)


def ocr_img(img: bytes, wrap: bool = True):
    """
    识别图片中的文字内容
    :param img: 图片base64
    :param wrap: 是否换行,默认换行
    :return:
    """
    data = client.basicGeneral(img)
    t = jsonpath.jsonpath(data, '$.words_result[*].words')
    if t and wrap:
        return '\n'.join(t)
    return ' '.join(t)


def get_image_from_clipboard():
    """
    保存剪切板图片到本地
    """
    img = ImageGrab.grabclipboard()
    if isinstance(img, Image.Image):
        img.save('test.png', 'png')
        print("保存剪切板图片")
    else:
        print("剪切板无图片")


def get_image_base64_from_clipboard():
    """
    保存剪切板图片为IO流
    """
    img_buffer = io.BytesIO()
    img = ImageGrab.grabclipboard()
    if isinstance(img, Image.Image):
        img.save(img_buffer, 'png')
        # b64 = base64.b64encode(img_buffer.getvalue())
        b64 = base64.encodebytes(img_buffer.getvalue())
        print(b64)
        print("保存剪切板图片为Base64编码")
    else:
        print("剪切板内无图片")


def set_clipboard_text(msg: str):
    """
    写入剪切板内容
    """
    pyperclip.copy(msg)


def get_clipboard_text():
    """
    读取剪切板内容
    """
    return pyperclip.paste()

Demo.py

# -*- coding: utf-8 -*-

from ApiOcr import *

def ocr_clipboard():
    """
    用于获取剪切板图片信息,并保存到本地,然后进行
    """
    # 获取剪切板中的图片
    img = ImageGrab.grabclipboard()

    if img is None:
        print('剪切板中无图片')
        return
    if isinstance(img, Image.Image):
        # 保存图片
        file_path = root_path + '/test.png'
        img.save(file_path)

        # 获取文件大小
        size = get_size_kb(file_path)
        if size > img_max_size:
            print('图片不能超过 {} kb,当前 {} kb:'.format(img_max_size, size))

        # 读取图片
        image = get_file_content(file_path)

        # 识别图片内容
        text = ocr_img(image, True)
        # text = ocr_img(image, False)
        print(text)

        # 写入剪切板
        set_clipboard_text(text)


if __name__ == '__main__':
    ocr_clipboard()


未经允许请勿转载:程序喵 » Python3 调用 Ocr 在线识别剪切板图片文本

点  赞 (0) 打  赏
分享到: