Я отправляю изображение в кодировке base64 через AJAX POST на модель, хранящуюся в Google CloudML.Я получаю сообщение об ошибке, сообщающее, что мой input_fn (): не может декодировать изображение и преобразовать его в формат JPEG.
Ошибка:
Prediction failed: Error during model execution:
AbortionError(code=StatusCode.INVALID_ARGUMENT,
details="Expected image (JPEG, PNG, or GIF), got
unknown format starting with 'u\253Z\212f\240{\370
\351z\006\332\261\356\270\377' [[{{node map/while
/DecodeJpeg}} = DecodeJpeg[_output_shapes=
[[?,?,3]], acceptable_fraction=1, channels=3,
dct_method="", fancy_upscaling=true, ratio=1,
try_recover_truncated=false,
_device="/job:localhost/replica:0 /task:0
/device:CPU:0"](map/while/TensorArrayReadV3)]]")
Ниже приведено полное описание Serving_input_receiver_fn():
Первый шаг, который я считаю, заключается в обработке входящей кодированной строки b64 и ее декодировании.Это делается с помощью:
image = tensorflow.io.decode_base64(image_str_tensor)
Следующим шагом, на мой взгляд, является открытие байтов, но здесь я не знаю, как обращаться с декодированным b64.строка с кодом тензорного потока и нужна помощь.
С помощью приложения Python Flask это можно сделать с помощью:
image = Image.open(io.BytesIO(decoded))
передать байты для декодирования в
tf.image.decode_jpeg
????
image = tensorflow.image.decode_jpeg(image_str_tensor, channels=CHANNELS)
Полный input_fn (): код
def serving_input_receiver_fn():
def prepare_image(image_str_tensor):
image = tensorflow.io.decode_base64(image_str_tensor)
image = tensorflow.image.decode_jpeg(image_str_tensor, channels=CHANNELS)
image = tensorflow.expand_dims(image, 0) image = tensorflow.image.resize_bilinear(image, [HEIGHT, WIDTH], align_corners=False)
image = tensorflow.squeeze(image, axis=[0])
image = tensorflow.cast(image, dtype=tensorflow.uint8)
return image
Как мне декодировать мою строку b64 обратно в jpeg, а затем преобразовать jpeg в тензор?