image classify and tensorflow serving












0















First of all sorry I am not prcise for this question but I am studying the tensorflow-serving and how to put in production my cnn. sincerely the documentation is quite confuse to me. I hope you can help to understand better the save model architecture. So please reply to me as teacher, i would like to know more about the whole flow.



I am developping a simple cnn to classify an image to 4 output.
I need tensorflow-serving to put it in production.
The image in input can be watherver size, the CNN should resize it first and predict.
Here the code



import numpy as np
import tensorflow as tf
from tensorflow import keras
from keras.preprocessing.image import ImageDataGenerator
from matplotlib import pyplot as plt
from scipy.misc import toimage
from keras.models import Sequential
from keras.layers import *
from keras.optimizers import *
from tensorflow.python.saved_model import builder as saved_model_builder
from tensorflow.python.saved_model import tag_constants, signature_constants, signature_def_utils_impl
import cv2



#train_path='Garage/train'
#train_datagen = ImageDataGenerator(rescale=1./255)
#train_batch = train_datagen.flow_from_directory(train_path, target_size=(64,64), class_mode='categorical', batch_size=10, color_mode='grayscale')


#validation_datagen = ImageDataGenerator(rescale=1./255)
#validation_batch = validation_datagen.flow_from_directory(
# './Garage/validation',
# target_size=(64, 64),
# batch_size=3,
# class_mode='categorical', color_mode='grayscale')

model = Sequential()
model.add(InputLayer(input_shape=[64,64,1]))
model.add(Conv2D(filters=32,kernel_size=5,strides=1,padding='same',activation='relu'))
model.add(MaxPool2D(pool_size=5,padding='same'))

model.add(Conv2D(filters=50,kernel_size=5,strides=1,padding='same',activation='relu'))
model.add(MaxPool2D(pool_size=5,padding='same'))

model.add(Conv2D(filters=80,kernel_size=5,strides=1,padding='same',activation='relu'))
model.add(MaxPool2D(pool_size=5,padding='same'))

model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(512,activation='relu'))
model.add(Dropout(rate=0.5))
model.add(Dense(4,activation='softmax'))
optimizer=Adam(lr=1e-3)

model.compile(optimizer=optimizer, loss='categorical_crossentropy', metrics=['accuracy'])
#model.fit_generator(
# train_batch,
# epochs=50,
# steps_per_epoch=6,
# validation_data=validation_batch,
# validation_steps=5)

model.load_weights('model.h5')

#score = model.evaluate_generator(validation_batch,steps=3)
#print('Test loss:', score[0])
#print('Test accuracy:', score[1])

#model.save('model.h5')


from PIL import Image
import requests
from io import BytesIO

response = requests.get('http://192.168.3.21:7451/shot.jpg')
image_pil = Image.open(BytesIO(response.content))
image = np.asarray(image_pil)

img2 = cv2.resize(image,(64,64))
img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
img = np.reshape(img2,[1,64,64,1])

classes = model.predict_classes(img)

print(classes)

model_version="1"

sess = tf.Session()

#setting values for the sake of saving the model in the proper format
x = model.input
y = model.output

prediction_signature = tf.saved_model.signature_def_utils.predict_signature_def({"inputs":x}, {"prediction":y})

valid_prediction_signature = tf.saved_model.signature_def_utils.is_valid_signature(prediction_signature)
if(valid_prediction_signature == False):
raise ValueError("Error: Prediction signature not valid!")

builder = saved_model_builder.SavedModelBuilder('./'+model_version)
legacy_init_op = tf.group(tf.tables_initializer(), name='legacy_init_op')

# Add the meta_graph and the variables to the builder
builder.add_meta_graph_and_variables(
sess, [tag_constants.SERVING],
signature_def_map={
signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY:prediction_signature, },
legacy_init_op=legacy_init_op)

# save the graph
builder.save()


the code will take the picture from a cam http://192.168.3.21:7451/shot.jpg
and then it will predict it



When I compile the code it return a lot of errors when it try to save the model. can you please check it and tell me if the save model instructions are right?



I use x = model.input as input from the serving but I would like it take the picture as input from the server.
I am quite confuse actually, sorry.
The scope is when I request by gRPC to predict the image the model can give me the prediction result
Thanks










share|improve this question





























    0















    First of all sorry I am not prcise for this question but I am studying the tensorflow-serving and how to put in production my cnn. sincerely the documentation is quite confuse to me. I hope you can help to understand better the save model architecture. So please reply to me as teacher, i would like to know more about the whole flow.



    I am developping a simple cnn to classify an image to 4 output.
    I need tensorflow-serving to put it in production.
    The image in input can be watherver size, the CNN should resize it first and predict.
    Here the code



    import numpy as np
    import tensorflow as tf
    from tensorflow import keras
    from keras.preprocessing.image import ImageDataGenerator
    from matplotlib import pyplot as plt
    from scipy.misc import toimage
    from keras.models import Sequential
    from keras.layers import *
    from keras.optimizers import *
    from tensorflow.python.saved_model import builder as saved_model_builder
    from tensorflow.python.saved_model import tag_constants, signature_constants, signature_def_utils_impl
    import cv2



    #train_path='Garage/train'
    #train_datagen = ImageDataGenerator(rescale=1./255)
    #train_batch = train_datagen.flow_from_directory(train_path, target_size=(64,64), class_mode='categorical', batch_size=10, color_mode='grayscale')


    #validation_datagen = ImageDataGenerator(rescale=1./255)
    #validation_batch = validation_datagen.flow_from_directory(
    # './Garage/validation',
    # target_size=(64, 64),
    # batch_size=3,
    # class_mode='categorical', color_mode='grayscale')

    model = Sequential()
    model.add(InputLayer(input_shape=[64,64,1]))
    model.add(Conv2D(filters=32,kernel_size=5,strides=1,padding='same',activation='relu'))
    model.add(MaxPool2D(pool_size=5,padding='same'))

    model.add(Conv2D(filters=50,kernel_size=5,strides=1,padding='same',activation='relu'))
    model.add(MaxPool2D(pool_size=5,padding='same'))

    model.add(Conv2D(filters=80,kernel_size=5,strides=1,padding='same',activation='relu'))
    model.add(MaxPool2D(pool_size=5,padding='same'))

    model.add(Dropout(0.25))
    model.add(Flatten())
    model.add(Dense(512,activation='relu'))
    model.add(Dropout(rate=0.5))
    model.add(Dense(4,activation='softmax'))
    optimizer=Adam(lr=1e-3)

    model.compile(optimizer=optimizer, loss='categorical_crossentropy', metrics=['accuracy'])
    #model.fit_generator(
    # train_batch,
    # epochs=50,
    # steps_per_epoch=6,
    # validation_data=validation_batch,
    # validation_steps=5)

    model.load_weights('model.h5')

    #score = model.evaluate_generator(validation_batch,steps=3)
    #print('Test loss:', score[0])
    #print('Test accuracy:', score[1])

    #model.save('model.h5')


    from PIL import Image
    import requests
    from io import BytesIO

    response = requests.get('http://192.168.3.21:7451/shot.jpg')
    image_pil = Image.open(BytesIO(response.content))
    image = np.asarray(image_pil)

    img2 = cv2.resize(image,(64,64))
    img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
    img = np.reshape(img2,[1,64,64,1])

    classes = model.predict_classes(img)

    print(classes)

    model_version="1"

    sess = tf.Session()

    #setting values for the sake of saving the model in the proper format
    x = model.input
    y = model.output

    prediction_signature = tf.saved_model.signature_def_utils.predict_signature_def({"inputs":x}, {"prediction":y})

    valid_prediction_signature = tf.saved_model.signature_def_utils.is_valid_signature(prediction_signature)
    if(valid_prediction_signature == False):
    raise ValueError("Error: Prediction signature not valid!")

    builder = saved_model_builder.SavedModelBuilder('./'+model_version)
    legacy_init_op = tf.group(tf.tables_initializer(), name='legacy_init_op')

    # Add the meta_graph and the variables to the builder
    builder.add_meta_graph_and_variables(
    sess, [tag_constants.SERVING],
    signature_def_map={
    signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY:prediction_signature, },
    legacy_init_op=legacy_init_op)

    # save the graph
    builder.save()


    the code will take the picture from a cam http://192.168.3.21:7451/shot.jpg
    and then it will predict it



    When I compile the code it return a lot of errors when it try to save the model. can you please check it and tell me if the save model instructions are right?



    I use x = model.input as input from the serving but I would like it take the picture as input from the server.
    I am quite confuse actually, sorry.
    The scope is when I request by gRPC to predict the image the model can give me the prediction result
    Thanks










    share|improve this question



























      0












      0








      0








      First of all sorry I am not prcise for this question but I am studying the tensorflow-serving and how to put in production my cnn. sincerely the documentation is quite confuse to me. I hope you can help to understand better the save model architecture. So please reply to me as teacher, i would like to know more about the whole flow.



      I am developping a simple cnn to classify an image to 4 output.
      I need tensorflow-serving to put it in production.
      The image in input can be watherver size, the CNN should resize it first and predict.
      Here the code



      import numpy as np
      import tensorflow as tf
      from tensorflow import keras
      from keras.preprocessing.image import ImageDataGenerator
      from matplotlib import pyplot as plt
      from scipy.misc import toimage
      from keras.models import Sequential
      from keras.layers import *
      from keras.optimizers import *
      from tensorflow.python.saved_model import builder as saved_model_builder
      from tensorflow.python.saved_model import tag_constants, signature_constants, signature_def_utils_impl
      import cv2



      #train_path='Garage/train'
      #train_datagen = ImageDataGenerator(rescale=1./255)
      #train_batch = train_datagen.flow_from_directory(train_path, target_size=(64,64), class_mode='categorical', batch_size=10, color_mode='grayscale')


      #validation_datagen = ImageDataGenerator(rescale=1./255)
      #validation_batch = validation_datagen.flow_from_directory(
      # './Garage/validation',
      # target_size=(64, 64),
      # batch_size=3,
      # class_mode='categorical', color_mode='grayscale')

      model = Sequential()
      model.add(InputLayer(input_shape=[64,64,1]))
      model.add(Conv2D(filters=32,kernel_size=5,strides=1,padding='same',activation='relu'))
      model.add(MaxPool2D(pool_size=5,padding='same'))

      model.add(Conv2D(filters=50,kernel_size=5,strides=1,padding='same',activation='relu'))
      model.add(MaxPool2D(pool_size=5,padding='same'))

      model.add(Conv2D(filters=80,kernel_size=5,strides=1,padding='same',activation='relu'))
      model.add(MaxPool2D(pool_size=5,padding='same'))

      model.add(Dropout(0.25))
      model.add(Flatten())
      model.add(Dense(512,activation='relu'))
      model.add(Dropout(rate=0.5))
      model.add(Dense(4,activation='softmax'))
      optimizer=Adam(lr=1e-3)

      model.compile(optimizer=optimizer, loss='categorical_crossentropy', metrics=['accuracy'])
      #model.fit_generator(
      # train_batch,
      # epochs=50,
      # steps_per_epoch=6,
      # validation_data=validation_batch,
      # validation_steps=5)

      model.load_weights('model.h5')

      #score = model.evaluate_generator(validation_batch,steps=3)
      #print('Test loss:', score[0])
      #print('Test accuracy:', score[1])

      #model.save('model.h5')


      from PIL import Image
      import requests
      from io import BytesIO

      response = requests.get('http://192.168.3.21:7451/shot.jpg')
      image_pil = Image.open(BytesIO(response.content))
      image = np.asarray(image_pil)

      img2 = cv2.resize(image,(64,64))
      img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
      img = np.reshape(img2,[1,64,64,1])

      classes = model.predict_classes(img)

      print(classes)

      model_version="1"

      sess = tf.Session()

      #setting values for the sake of saving the model in the proper format
      x = model.input
      y = model.output

      prediction_signature = tf.saved_model.signature_def_utils.predict_signature_def({"inputs":x}, {"prediction":y})

      valid_prediction_signature = tf.saved_model.signature_def_utils.is_valid_signature(prediction_signature)
      if(valid_prediction_signature == False):
      raise ValueError("Error: Prediction signature not valid!")

      builder = saved_model_builder.SavedModelBuilder('./'+model_version)
      legacy_init_op = tf.group(tf.tables_initializer(), name='legacy_init_op')

      # Add the meta_graph and the variables to the builder
      builder.add_meta_graph_and_variables(
      sess, [tag_constants.SERVING],
      signature_def_map={
      signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY:prediction_signature, },
      legacy_init_op=legacy_init_op)

      # save the graph
      builder.save()


      the code will take the picture from a cam http://192.168.3.21:7451/shot.jpg
      and then it will predict it



      When I compile the code it return a lot of errors when it try to save the model. can you please check it and tell me if the save model instructions are right?



      I use x = model.input as input from the serving but I would like it take the picture as input from the server.
      I am quite confuse actually, sorry.
      The scope is when I request by gRPC to predict the image the model can give me the prediction result
      Thanks










      share|improve this question
















      First of all sorry I am not prcise for this question but I am studying the tensorflow-serving and how to put in production my cnn. sincerely the documentation is quite confuse to me. I hope you can help to understand better the save model architecture. So please reply to me as teacher, i would like to know more about the whole flow.



      I am developping a simple cnn to classify an image to 4 output.
      I need tensorflow-serving to put it in production.
      The image in input can be watherver size, the CNN should resize it first and predict.
      Here the code



      import numpy as np
      import tensorflow as tf
      from tensorflow import keras
      from keras.preprocessing.image import ImageDataGenerator
      from matplotlib import pyplot as plt
      from scipy.misc import toimage
      from keras.models import Sequential
      from keras.layers import *
      from keras.optimizers import *
      from tensorflow.python.saved_model import builder as saved_model_builder
      from tensorflow.python.saved_model import tag_constants, signature_constants, signature_def_utils_impl
      import cv2



      #train_path='Garage/train'
      #train_datagen = ImageDataGenerator(rescale=1./255)
      #train_batch = train_datagen.flow_from_directory(train_path, target_size=(64,64), class_mode='categorical', batch_size=10, color_mode='grayscale')


      #validation_datagen = ImageDataGenerator(rescale=1./255)
      #validation_batch = validation_datagen.flow_from_directory(
      # './Garage/validation',
      # target_size=(64, 64),
      # batch_size=3,
      # class_mode='categorical', color_mode='grayscale')

      model = Sequential()
      model.add(InputLayer(input_shape=[64,64,1]))
      model.add(Conv2D(filters=32,kernel_size=5,strides=1,padding='same',activation='relu'))
      model.add(MaxPool2D(pool_size=5,padding='same'))

      model.add(Conv2D(filters=50,kernel_size=5,strides=1,padding='same',activation='relu'))
      model.add(MaxPool2D(pool_size=5,padding='same'))

      model.add(Conv2D(filters=80,kernel_size=5,strides=1,padding='same',activation='relu'))
      model.add(MaxPool2D(pool_size=5,padding='same'))

      model.add(Dropout(0.25))
      model.add(Flatten())
      model.add(Dense(512,activation='relu'))
      model.add(Dropout(rate=0.5))
      model.add(Dense(4,activation='softmax'))
      optimizer=Adam(lr=1e-3)

      model.compile(optimizer=optimizer, loss='categorical_crossentropy', metrics=['accuracy'])
      #model.fit_generator(
      # train_batch,
      # epochs=50,
      # steps_per_epoch=6,
      # validation_data=validation_batch,
      # validation_steps=5)

      model.load_weights('model.h5')

      #score = model.evaluate_generator(validation_batch,steps=3)
      #print('Test loss:', score[0])
      #print('Test accuracy:', score[1])

      #model.save('model.h5')


      from PIL import Image
      import requests
      from io import BytesIO

      response = requests.get('http://192.168.3.21:7451/shot.jpg')
      image_pil = Image.open(BytesIO(response.content))
      image = np.asarray(image_pil)

      img2 = cv2.resize(image,(64,64))
      img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
      img = np.reshape(img2,[1,64,64,1])

      classes = model.predict_classes(img)

      print(classes)

      model_version="1"

      sess = tf.Session()

      #setting values for the sake of saving the model in the proper format
      x = model.input
      y = model.output

      prediction_signature = tf.saved_model.signature_def_utils.predict_signature_def({"inputs":x}, {"prediction":y})

      valid_prediction_signature = tf.saved_model.signature_def_utils.is_valid_signature(prediction_signature)
      if(valid_prediction_signature == False):
      raise ValueError("Error: Prediction signature not valid!")

      builder = saved_model_builder.SavedModelBuilder('./'+model_version)
      legacy_init_op = tf.group(tf.tables_initializer(), name='legacy_init_op')

      # Add the meta_graph and the variables to the builder
      builder.add_meta_graph_and_variables(
      sess, [tag_constants.SERVING],
      signature_def_map={
      signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY:prediction_signature, },
      legacy_init_op=legacy_init_op)

      # save the graph
      builder.save()


      the code will take the picture from a cam http://192.168.3.21:7451/shot.jpg
      and then it will predict it



      When I compile the code it return a lot of errors when it try to save the model. can you please check it and tell me if the save model instructions are right?



      I use x = model.input as input from the serving but I would like it take the picture as input from the server.
      I am quite confuse actually, sorry.
      The scope is when I request by gRPC to predict the image the model can give me the prediction result
      Thanks







      tensorflow-serving






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 25 '18 at 18:53







      Manuel Jan

















      asked Nov 25 '18 at 18:43









      Manuel JanManuel Jan

      134




      134
























          0






          active

          oldest

          votes











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53470714%2fimage-classify-and-tensorflow-serving%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes
















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53470714%2fimage-classify-and-tensorflow-serving%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Wiesbaden

          Marschland

          Dieringhausen