Выполнение скрипта Python на веб-сайте django
Я пытаюсь запустить свой скрипт tensorflow так, чтобы результирующее изображение было экспортировано и использовалось на моем сайте. Сначала я использую flask, но решил перейти на django, потому что скрипт слишком медленно читается и иногда не запускается. Вот почему я использую django. Но тогда сценарий все равно не запустится. Пожалуйста, нужна помощь...
Файлы, необходимые сценарию tensorflow, были помещены в то же место, где они находились. views.py, urls.py входите.
Что я уже пробовал:
views.py
# Import packages import os import cv2 import numpy as np import tensorflow as tf import sys import easygui # This is needed since the notebook is stored in the object_detection folder. sys.path.append("..") # Import utilites from utils import label_map_util from utils import visualization_utils as vis_util from api import object_counting_api from django.shortcuts import render def mandaluyong(request): # Name of the directory containing the object detection module we're using path = easygui.fileopenbox() MODEL_NAME = 'inference_graph' IMAGE_NAME = path # Grab path to current working directory CWD_PATH = os.getcwd() # Path to frozen detection graph .pb file, which contains the model that is used # for object detection. PATH_TO_CKPT = os.path.join(CWD_PATH,MODEL_NAME,'frozen_inference_graph.pb') # Path to label map file PATH_TO_LABELS = os.path.join(CWD_PATH,'training','labelmap.pbtxt') # Path to image PATH_TO_IMAGE = os.path.join(CWD_PATH,IMAGE_NAME) # Number of classes the object detector can identify NUM_CLASSES = 2 # Load the label map. # Label maps map indices to category names, so that when our convolution # Here we use internal utility functions, but anything that returns a # dictionary mapping integers to appropriate string labels would be fine label_map = label_map_util.load_labelmap(PATH_TO_LABELS) categories = label_map_util.convert_label_map_to_categories(label_map, max_num_classes=NUM_CLASSES, use_display_name=True) category_index = label_map_util.create_category_index(categories) # Load the Tensorflow model into memory. detection_graph = tf.Graph() with detection_graph.as_default(): od_graph_def = tf.GraphDef() with tf.gfile.GFile(PATH_TO_CKPT, 'rb') as fid: serialized_graph = fid.read() od_graph_def.ParseFromString(serialized_graph) tf.import_graph_def(od_graph_def, name='') sess = tf.Session(graph=detection_graph) # Define input and output tensors (i.e. data) for the object detection classifier # Input tensor is the image image_tensor = detection_graph.get_tensor_by_name('image_tensor:0') # Output tensors are the detection boxes, scores, and classes # Each box represents a part of the image where a particular object was detected detection_boxes = detection_graph.get_tensor_by_name('detection_boxes:0') # Each score represents level of confidence for each of the objects. # The score is shown on the result image, together with the class label. detection_scores = detection_graph.get_tensor_by_name('detection_scores:0') detection_classes = detection_graph.get_tensor_by_name('detection_classes:0') # Number of objects detected num_detections = detection_graph.get_tensor_by_name('num_detections:0') font = cv2.FONT_HERSHEY_SIMPLEX # Load image using OpenCV and # expand image dimensions to have shape: [1, None, None, 3] # i.e. a single-column array, where each item in the column has the pixel RGB value image = cv2.imread(PATH_TO_IMAGE) image_expanded = np.expand_dims(image, axis=0) # Perform the actual detection by running the model with the image as input (boxes, scores, classes, num) = sess.run( [detection_boxes, detection_scores, detection_classes, num_detections], feed_dict={image_tensor: image_expanded}) # Draw the results of the detection (aka 'visulaize the results') vis_util.visualize_boxes_and_labels_on_image_array( image, np.squeeze(boxes), np.squeeze(classes).astype(np.int32), np.squeeze(scores), category_index, use_normalized_coordinates=True, line_thickness=1, min_score_thresh=0.50) # All the results have been drawn on image. Now display the image. path = 'static/result' cv2.imwrite(os.path.join(path , 'mandaluyong.png'), image) return render(request, 'map/mandaluyong.php')
urls.py
from django.urls import include, path from . import views urlpatterns = [ path("map/mandaluyong", views.mandaluyong, name='map/mandaluyong') ]