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 在线识别剪切板图片文本