pixmap_captcha / app.py
Fuururuny's picture
Update app.py
d49dc3f verified
Raw
History Blame Contribute Delete
1.98 kB
import onnxruntime as onr
import numpy as np
import gradio as gr
import glob, io
from PIL import Image
from cairosvg import svg2png
#----- CONFIG ------
img_height = 300
img_width = 500
max_length = 4
characters = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E',
'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
'y', 'z'
]
model_path = 'model.onnx'
#===== some code init =====
Model = onr.InferenceSession(model_path)
#===== some funcs =====
def get_result(pred):
accuracy = 1
last = None
ans = []
for item in pred[0]:
char_ind = item.argmax()
if char_ind != last and char_ind != 0 and char_ind != len(characters) + 1:
ans.append(characters[char_ind - 1])
accuracy *= item[char_ind]
last = char_ind
answ = "".join(ans)[:max_length]
return answ, accuracy
def predict(svgdata):
if len(svgdata) > 50000:
return
img = Image.open(io.BytesIO(svg2png(svgdata)))
img = img.convert('L')
img = img.resize((img_width, img_height))
img = np.array(img)
img = np.expand_dims(img, axis=1)
img = np.expand_dims(img, axis=-1)
img = img.transpose([1,2,0,3])
img = img.astype(np.float32) / 255.
result_tensor = Model.run(None, {'image': img, 'label': np.random.default_rng().random((28, 28), dtype=np.float32)})[0]
return (get_result(result_tensor)[0])
title = "Made with love❤️❤️❤️❤️\nby Vermei x nof"
description = "bruh2"
iface = gr.Interface(fn=predict,
inputs=gr.Textbox(),
outputs=gr.Textbox(),
title=title,
description=description)
iface.launch()