Я новичок в TF и развертывании на GCP. Так что заранее большое спасибо за помощь!
В настоящее время я пытаюсь развернуть приложение Mnist-handwriting flask на Google Cloud Platform (GCP) с использованием TensorFlow Serving. Я развернул свою модель на обслуживании TF и использую собственный класс MySimpleScaler для предварительной обработки и изменения размера изображения перед его подачей в мою модель. Мой вопрос заключается в том, есть ли способ добавить класс предварительной обработки и изменения размера в мою модель сохранения, чтобы мое приложение для фляги не имело никаких зависимостей тензорного потока. Причина в том, что библиотека TF слишком велика для движка приложения.
Поток моего приложения выглядит следующим образом:
1) Приложение My flask развернуто на движке приложения. У него есть класс MySimpleScaler для изменения размера входного изображения с холста. Я разрешаю пользователю рисовать с холста во внешнем интерфейсе -> получать данные с помощью jquery -> использовать функцию parse_image, чтобы записать их как output.jpg -> читать output.jpg с локального диска и передавать его в MySimpleScaler для предварительной обработки
2) Моя модель развертывается на платформе AI с использованием TF. Я отправляю запрос прогноза, используя выходные данные MysimpleScaler на шаге 1. Затем значение прогноза передается в серверную часть Flask, а затем я передаю его во внешний интерфейс с помощью Jinja.
Вот две функции, которые я использую для получения и предварительной обработки данных:
def parse_image(imgData):
# imgData fetch img from canvas using request.get_data()
imgstr = re.search(b"base64,(.*)", imgData).group(1)
img_decode = base64.decodebytes(imgstr)
with open("output.jpg", "wb") as file:
file.write(img_decode)
return img_decode
class MySimpleScaler(object):
def preprocess_img(self, img_decode):
# img_decode from parse_image
img_raw = img_decode
image = tf.image.decode_jpeg(img_raw, channels=1)
image = tf.image.resize(image, [28, 28])
image = (255 - image) / 255.0 # normalize to [0,1] range
image = tf.reshape(image, (1, 28, 28, 1))
return image
TL;DR: я хочу добавить функцию preprocess_img в качестве одного из слоев в моей модели сохранения, прежде чем развертывать ее на обслуживании TF. Большое вам спасибо за ваше время!