Я настраиваю тензорный поток, обслуживающий докер и обслуживающий модель resnet50.Затем я запускаю клиент для захвата изображения с камеры и запускаю вывод с помощью grpc. С размером изображения 480 * 480 и частотой кадров 30 кадров в секунду, мне интересно, почему он занимает 70 МБ / с скорости сети.
import numpy as np
import cv2
import grpc
import requests
import tensorflow as tf
from tensorflow_serving.apis import prediction_service_pb2_grpc
from tensorflow_serving.apis import predict_pb2
from PIL import Image, ImageDraw, ImageFont
from dataset import *
import configparser
cf = configparser.ConfigParser()
cf.read("$HOME/.Wingo/config.yml")
secs = cf.sections()
IMG_SIZE1=480
IMG_SIZE2=480
grpc_host=cf.get("Client", "grpc_host")
tf.app.flags.DEFINE_string('server', grpc_host,
'PredictionService host:port')
FLAGS = tf.app.flags.FLAGS
def test_show(send=None):
video = cv2.VideoCapture(0)
success, show_img = video.read()
channel = grpc.insecure_channel(FLAGS.server)
stub = prediction_service_pb2_grpc.PredictionServiceStub(channel)
request = predict_pb2.PredictRequest()
request.model_spec.name = '1'
request.model_spec.signature_name = 'predict'
while(True):
success, frame = video.read()
show_img = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
show_img = Image.fromarray(show_img)
if success:
data = get_sigle_data(frame, False)
X=np.array(data)
print((tf.make_tensor_proto(X, shape=[1,IMG_SIZE1,IMG_SIZE2,3])))
request.inputs['inputs'].CopyFrom(
tf.make_tensor_proto(X, shape=[1,IMG_SIZE1,IMG_SIZE2,3]))
result = stub.Predict(request, 10.0)
y=result.outputs['output'].float_val
show_img = cv2.cvtColor(np.array(show_img), cv2.COLOR_RGB2BGR)
cv2.imshow('test', show_img)
cv2.waitKey(1)
else:
print("camera is not open!!!")
test_show()