当前位置:  开发笔记 > 编程语言 > 正文

如何在Google机器学习中将jpeg图像转换为json文件

如何解决《如何在Google机器学习中将jpeg图像转换为json文件》经验,为你挑选了1个好方法。

我正在研究Google Cloud ML,我希望能够预测jpeg图像.为此,我想使用:

gcloud beta ml预测--instances = INSTANCES --model = MODEL [--version = VERSION]

(https://cloud.google.com/ml/reference/commandline/predict)

Instances是json文件的路径,其中包含有关image的所有信息.如何从jpeg图像创建json文件?

非常感谢!!



1> rhaertel80..:

第一步是确保导出的图形具有占位符和可以接受JPEG数据的操作.请注意,CloudML假定您正在发送一批图像.我们必须使用a tf.map_fn来解码和调整一批图像的大小.根据型号的不同,可能需要额外的数据预处理来规范化数据等.如下所示:

# Number of channels in the input image
CHANNELS = 3

# Dimensions of resized images (input to the neural net)
HEIGHT = 200
WIDTH = 200

# A placeholder for a batch of images
images_placeholder = tf.placeholder(dtype=tf.string, shape=(None,))

# The CloudML Prediction API always "feeds" the Tensorflow graph with
# dynamic batch sizes e.g. (?,).  decode_jpeg only processes scalar
# strings because it cannot guarantee a batch of images would have
# the same output size.  We use tf.map_fn to give decode_jpeg a scalar
# string from dynamic batches.
def decode_and_resize(image_str_tensor):
  """Decodes jpeg string, resizes it and returns a uint8 tensor."""

  image = tf.image.decode_jpeg(image_str_tensor, channels=CHANNELS)

  # Note resize expects a batch_size, but tf_map supresses that index,
  # thus we have to expand then squeeze.  Resize returns float32 in the
  # range [0, uint8_max]
  image = tf.expand_dims(image, 0)
  image = tf.image.resize_bilinear(
      image, [HEIGHT, WIDTH], align_corners=False)
  image = tf.squeeze(image, squeeze_dims=[0])
  image = tf.cast(image, dtype=tf.uint8)
  return image

decoded_images = tf.map_fn(
    decode_and_resize, images_placeholder, back_prop=False, dtype=tf.uint8)

# convert_image_dtype, also scales [0, uint8_max] -> [0, 1).
images = tf.image.convert_image_dtype(decoded_images, dtype=tf.float32)

# Then shift images to [-1, 1) (useful for some models such as Inception)
images = tf.sub(images, 0.5)
images = tf.mul(images, 2.0)

# ...

此外,我们需要确保正确标记输入,在这种情况下,输入的名称(地图中的键)必须结束_bytes.发送base64编码数据时,它会让CloudML预测服务知道它需要解码数据:

inputs = {"image_bytes": images_placeholder.name}
tf.add_to_collection("inputs", json.dumps(inputs))

gcloud命令期望的数据格式将是以下形式:

{"image_bytes": {"b64": "dGVzdAo="}}

(注意,如果image_bytes是模型的唯一输入,则可以简化为{"b64": "dGVzdAo="}).

例如,要从磁盘上的文件创建它,您可以尝试以下方法:

echo "{\"image_bytes\": {\"b64\": \"`base64 image.jpg`\"}}" > instances

然后将其发送到服务,如下所示:

gcloud beta ml predict --instances=instances --model=my_model

请注意,在直接向服务发送数据时,您发送的请求正文需要包含在"实例"列表中.所以上面的gcloud命令实际上将以下内容发送到HTTP请求正文中的服务:

{"instances" : [{"image_bytes": {"b64": "dGVzdAo="}}]}

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有