Формат запроса прогноза модели JSON не работает в запросе Python: платформа Google AI - PullRequest
2 голосов
/ 27 июня 2019

Я пытаюсь предсказать изображение для модели, развернутой на платформе Google Cloud AI.Далее следует формат запроса для прогнозирования:

{"instances": [{"b64": "X5ad6u"}]} // образец формата b64 [вместо X5ad6u => значение реального изображения]

https://cloud.google.com/ml-engine/docs/v1/predict-request

Но это не удаетсяи предоставление ошибки в виде ошибки предсказания: экземпляры

{ "error": "JSON Value:  Excepting \'instances\' to be an list/array" }

формат запроса ввода: {"instances": [{"b64": "X5ad6u"}]}

пример кода Python:

import argparse
import base64
import json
import googleapiclient.discovery
import six
import os
from flask import Flask
app = Flask(__name__)

credential_path = "sample.json"
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = credential_path


@app.route("/")
def home():
    return "Hello, World!"

def predict_json(project, model, instances, version=None):
    print("i am here to predict")

    # Create the ML Engine service object.
    # To authenticate set the environment variable
    # GOOGLE_APPLICATION_CREDENTIALS=<path_to_service_account_file>
    service = googleapiclient.discovery.build('ml', 'v1')
    name = 'projects/myproject/models/beverage_optimizer'.format(project, model)

    if version is not None:
        name += '/versions/'.format(version)

    response = service.projects().predict(
        name=name,
        body={'instances': instances}
    ).execute()

    if 'error' in response:
        raise RuntimeError(response['error'])

    return response['predictions']
a



def main(project, model, version=None):
    """Send user input to the prediction service."""
    print('I m in True')
    try:
        #user_input = json.loads("home/ubuntu/Hrishi/FreshnessWithUI/request.json")
        json_data=open("request.json").read()
        user_input = json.loads(json_data)
        #print(user_input)
    except KeyboardInterrupt:
        return
    try:
        result = predict_json(project, model, user_input, version=None)
       # print(result)
    detectionscores = result['predictions'][0]['detection_scores']
    detectionboxes = result['predictions'][0]['detection_boxes']
    detectionclasses = result['predictions'][0]['detection_classes']
    #print(detectionscores)
    #print(detectionboxes)
    #print(detectionclasses)
    pre_data={}
    k=0
        for a,b,c in zip(detectionscores,detectionboxes,detectionclasses):
            if a >= 0.90:
                pre_data[k+1]={"score":a,"box":b, "class": int(c) } ;
                k=k+1;
        print("pre-data:",pre_data)
        #print("type", type(pre_data))
    except RuntimeError as err:
        print(str(err))



if __name__ == '__main__':
    app.run(debug=True)
    parser = argparse.ArgumentParser()
    parser.add_argument(
        '--project',
        help='Project in which the model is deployed',
        #type=str,
        #required=True
    )
    parser.add_argument(
        '--model',
        help='Model name',
        #type=str,
        #required=True
    )
    parser.add_argument(
        '--version',
        help='Name of the version.',
        #type=str
    )
    args = parser.parse_args()
    main(    
        args.project,
        args.model,
        version=args.version
    )

Другой метод:

с помощью облачной команды Google: Предсказание i-платформы gcloud --model drink_optimizer --version beverage_optimizer --json-instances request.json

Ошибка: (gcloud.ai-platform.predict) Входные экземпляры не в формате JSON

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...