import torch import onnx import onnxruntime as rt from torchvision import transforms as T from PIL import Image from tokenizer_base import Tokenizer import pathlib import os import gradio as gr from huggingface_hub import Repository # Параметры модели model_file = "captcha.onnx" img_size = (32,128) charset = r"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~" tokenizer_base = Tokenizer(charset) # Преобразования для изображения def get_transform(img_size): transforms = [ T.Resize(img_size, T.InterpolationMode.BICUBIC), T.ToTensor(), T.Normalize(0.5, 0.5) ] return T.Compose(transforms) # Преобразование тензора в numpy def to_numpy(tensor): return tensor.detach().cpu().numpy() if tensor.requires_grad else tensor.cpu().numpy() # Инициализация модели ONNX def initialize_model(model_file): transform = get_transform(img_size) onnx_model = onnx.load(model_file) onnx.checker.check_model(onnx_model) ort_session = rt.InferenceSession(model_file) return transform, ort_session # Функция для распознавания текста на изображении def get_text(img_org): x = transform(img_org.convert('RGB')).unsqueeze(0) # Преобразуем изображение в тензор # Предсказание с помощью ONNX ort_inputs = {ort_session.get_inputs()[0].name: to_numpy(x)} logits = ort_session.run(None, ort_inputs)[0] probs = torch.tensor(logits).softmax(-1) # Вычисляем вероятности preds, probs = tokenizer_base.decode(probs) # Декодируем результат preds = preds[0] # Получаем первое предсказание return preds # Инициализация модели transform, ort_session = initialize_model(model_file=model_file) # Создание Gradio интерфейса для обработки изображений def gradio_interface(): return gr.Interface( fn=get_text, inputs=gr.Image(type="pil"), # Принимаем изображение в формате PIL outputs=gr.Textbox(), # Выводим текст title="Text Captcha Reader", # Заголовок description="Распознавание текста на изображениях капчи.", # Описание examples=["8000.png", "11JW29.png", "2a8486.jpg", "2nbcx.png", # Примеры изображений "000679.png", "000HU.png", "00Uga.png.jpg", "00bAQwhAZU.jpg", "00h57kYf.jpg", "0EoHdtVb.png", "0JS21.png", "0p98z.png", "10010.png"] ) # Запуск интерфейса gradio_interface().launch()