55 lines
1.6 KiB
Python
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 |