Мне нужен HTML интерфейс для тестирования и использования Django API - PullRequest
0 голосов
/ 02 мая 2020

newb ie здесь. Я следовал руководству в Интернете и успешно развернул модель Keras с Django API. Я хотел создать файл HTML, который подключался к API Django, где я мог бы загрузить изображение в модель для обработки и затем отправить прогноз.

Ниже приведены коды для API. Мне нужен кто-то, чтобы вести меня.

import datetime
import pickle
import json
from django.shortcuts import render
from django.http import HttpResponse
from rest_framework.decorators import api_view
from api.settings import BASE_DIR

from custom_code import image_converter

@api_view(['GET'])
def __index__function(request):
    start_time = datetime.datetime.now()
    elapsed_time = datetime.datetime.now() - start_time
    elapsed_time_ms = (elapsed_time.days * 86400000) + (elapsed_time.seconds * 1000) + (elapsed_time.microseconds / 1000)
    return_data = {
        "error" : "0",
        "message" : "Successful",
        "restime" : elapsed_time_ms
    }
    return HttpResponse(json.dumps(return_data), content_type='application/json; charset=utf-8')

@api_view(['POST','GET'])
def predict_plant_disease(request):
    try:
        if request.method == "GET" :
            return_data = {
                "error" : "0",
                "message" : "Plant Assessment System"
            }
        else:
            if request.body:
                request_data = request.data["plant_image"]
                header, image_data = request_data.split(';base64,')
                image_array, err_msg = image_converter.convert_image(image_data)
                if err_msg == None :
                    model_file = f"{BASE_DIR}/ml_files/cnn_model.pkl"
                    saved_classifier_model = pickle.load(open(model_file,'rb'))
                    prediction = saved_classifier_model.predict(image_array) 
                    label_binarizer = pickle.load(open(f"{BASE_DIR}/ml_files/label_transform.pkl",'rb'))
                    return_data = {
                        "error" : "0",
                        "data" : f"{label_binarizer.inverse_transform(prediction)[0]}"
                    }
                else :
                    return_data = {
                        "error" : "4",
                        "message" : f"Error : {err_msg}"
                    }
            else :
                return_data = {
                    "error" : "1",
                    "message" : "Request Body is empty",
                }
    except Exception as e:
        return_data = {
            "error" : "3",
            "message" : f"Error : {str(e)}",
        }
    return HttpResponse(json.dumps(return_data), content_type='application/json; charset=utf-8')

1 Ответ

0 голосов
/ 02 мая 2020

Если вам просто нужно протестировать свой API, скачайте Postman и отправляйте запросы из приложения. Это намного проще, чем на самом деле сделать целый скрипт HTML для проверки вашего API. Однако, если вам абсолютно необходимо протестировать свой API через приложение внешнего интерфейса, попробуйте выполнить следующие действия:

  1. Вам нужна функция загрузки изображений в коде HTML.

<body>
   <input type="file accept="image/png, image/jpeg"/>
</body>

Убедитесь, что у вас есть действительный URL-адрес запроса API
// For example

POST <site>/v1/plant-image
Сделайте запрос от JS Сценарий
<script type="text/javascript">

    var HTTP = new XMLHttpRequest();
        HTTP.onreadystatechange = function () {
            if (HTTP.readyState === 4 && HTTP.status === 200) {
                console.log(HTTP.responseText);
            }
        }
        HTTP.open('POST', 'https://<site>/v1/plant-image', true);
        HTTP.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
        HTTP.send();
</script>

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

from rest_framework.exceptions import ValidationError

// some code...

raise ValidationError()

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