Hentinel's picture
Duplicate from Hentinel/pixelplanet-captcha-preprocess
f1ee5ea
Raw
History Blame Contribute Delete
2.08 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):
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 (for userscript)"
description = "thanks to HF for allowing captcha solve userscirpts (code 2)"
iface = gr.Interface(fn=predict,
inputs=gr.inputs.Textbox(),
outputs=gr.outputs.Textbox(),
title=title,
#examples=glob.glob('examples/*.png'),
description=description)
iface.launch()