This repository has been archived on 2023-11-29. You can view files and clone it, but cannot push or open issues or pull requests.
Uloz.to-rychle/captcha.py

55 lines
1.6 KiB
Python

import numpy
import requests
import string
import sys
#import tensorflow
import tflite_runtime.interpreter as tflite
from io import BytesIO
from PIL import Image
def decode(li) -> string:
available_chars = "abcdefghijklmnopqrstuvwxyz"
result = []
for char in li:
result.append(available_chars[char])
return "".join(result)
def solve(url: string) -> string:
# for tensorflow tensorflow.lite.Interpreter
interpreter = tflite.Interpreter(
model_content=open("./model.tflite", "rb").read())
u = requests.get(url)
raw_data = u.content
img = Image.open(BytesIO(raw_data))
img = numpy.asarray(img)
# normalize to [0...1]
img = (img / 255).astype(numpy.float32)
# convert to grayscale
r, g, b = img[:, :, 0], img[:, :, 1], img[:, :, 2]
gray = 0.299 * r + 0.587 * g + 0.114 * b
# input has nowof shape (70, 175)
# we modify dimensions to match model's input
gray = numpy.expand_dims(gray, 0)
gray = numpy.expand_dims(gray, -1)
# input is now of shape (batch_size, 70, 175, 1)
# output will have shape (batch_size, 4, 26)
interpreter.allocate_tensors()
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
interpreter.set_tensor(input_details[0]['index'], gray)
interpreter.invoke()
# predict and get the output
output = interpreter.get_tensor(output_details[0]['index'])
# now get labels
labels_indices = numpy.argmax(output, axis=2)
decoded_label = [decode(x) for x in labels_indices][0]
return decoded_label
try:
result = solve(sys.argv[1])
print(result, end="")
except:
pass