2017-02-21 35 views
0

Я создаю задний конец приложения tensorflow и в основном после моей классификации Я хочу вернуть результаты клиенту в формате JSON.Python словарь для json.dumps флажок не работает не может отправить ответ

Таким образом, после моей классификации я получаю два значения а "name" и "%"

импорт

import json 
from flask import Flask, jsonify, request, Response #import objects from the Flask model 
app = Flask(__name__) #define app using Flask 

функция вызывается апите вызов

В основном это возвращает этот словарь в переменной Items

{'moulin de la galette renoir': 0.0080302889, 'les demoiselles d avignon picassso': 0.7823543, 'starry night over the rhone van gogh': 0.01457829, 'wheatfields with crows van gogh': 0.049212866, 'guernica picassso': 0.14582427}

classify() 
    do some code here ... 

    # Sort to show labels of first prediction in order of confidence 
    top_k = predictions[0].argsort()[-len(predictions[0]):][::-1] 

    #items within object 
      items = {} 
      for node_id in top_k: 
       human_string = label_lines[node_id] 
       score = predictions[0][node_id] 
       #stores human string and score in item 
       items[human_string] = score 
    return items 

апи

@app.route('/inception', methods=['POST']) 
def inception(): 
    if 'file' not in request.files: 
     return jsonify({'message' : 'failed'}) 
    file = request.files['file'] 
    output = classify(file) 
    #print just to see the format of the output 
    print(output) 
    return Response(json.dumps(output), mimetype='application/json') 

Это должно опубликовать назад элементы в виде JSON, но это не так.

Если из класса() я жестко кодирую то же значение, что и выход, равный ему.

так:

return {'moulin de la galette renoir': 0.0080302889, 'les demoiselles d avignon picassso': 0.7823543, 'starry night over the rhone van gogh': 0.01457829, 'wheatfields with crows van gogh': 0.049212866, 'guernica picassso': 0.14582427} 
+0

Когда вы говорите: «Это должно возвращать элементы в json-форме, но это не так». - Что происходит вместо этого? –

+0

См. Вопрос Мэтта. Кажется, это должно сработать. Кроме того, вы можете использовать флагов 'jsonify', который вы уже включили, чтобы вернуть результат. Для этого нужно также установить заголовок. – jwang

+0

@MattHealy Я получаю ошибку 500 в почтальоне, когда я делаю запрос по почте. – PeachyDinosaur

ответ

1

Рисунок его, в основном в tensorflow коде, который я не включил свою ценность для очков был NumPy поплавок 32 типа. Json dumps не может преобразовать это, и поэтому он не работал.

score = float(predictions[0][node_id])

Это небольшое изменение в коде устраняет проблему. Урок, который вы узнали, всегда убедившись, что вы знаете свои типы данных. Спасибо за помощь ребята ^^