| | 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) |
| |
|
| | |
| | def to_numpy(tensor): |
| | return tensor.detach().cpu().numpy() if tensor.requires_grad else tensor.cpu().numpy() |
| |
|
| | |
| | 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) |
| |
|
| | |
| | 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) |
| |
|
| | |
| | def gradio_interface(): |
| | return gr.Interface( |
| | fn=get_text, |
| | inputs=gr.Image(type="pil"), |
| | outputs=gr.Textbox(), |
| | title="2Captcha image", |
| | description="2Captcha image.", |
| | ) |
| |
|
| | |
| | gradio_interface().launch() |