es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo almacenar los archivos cargados por el usuario en Heroku?

Estoy trabajando en un proyecto de reconocimiento de objetos utilizando Flask y tengo que almacenar las imágenes cargadas en una carpeta. Estaba intentando desplegarlo usando Heroku pero no tengo idea de cómo almacenar estas imágenes. ¿Alguien puede decirme cómo almacenar las imágenes y cómo utilizarlas más tarde para la detección?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para almacenar las imágenes cargadas en una carpeta usando Flask, puedes utilizar el objeto “request” para acceder al archivo cargado y guardarlo en la carpeta especificada. Aquí tienes cómo hacerlo:

    from flask import Flask, request
    
    app = Flask(__name__)
    
    @app.route('/upload', methods=['POST'])
    def upload_file():
        file = request.files['file']
        file.save('/ruta/a/la/carpeta/de/cargas/' + file.filename)
        return 'Archivo cargado exitosamente'
    
    if __name__ == '__main__':
        app.run(debug=True)
    

    Una vez que hayas almacenado las imágenes en una carpeta, puedes utilizar cualquier librería de detección de objetos, como YOLO, para detectar objetos en las imágenes. Aquí tienes un ejemplo de cómo utilizar YOLO para detectar objetos en una imagen:

    import cv2
    import numpy as np
    import time
    
    net = cv2.dnn.readNet("yolov3.weights", "yolov3.cfg")
    classes = []
    
    with open("coco.names", "r") as f:
        classes = [line.strip() for line in f.readlines()]
    
    layer_names = net.getLayerNames()
    output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()]
    
    img = cv2.imread('/ruta/a/la/carpeta/de/cargas/imagen.jpg')
    height, width, channels = img.shape
    
    # Detectar objetos en la imagen
    blob = cv2.dnn.blobFromImage(img, 0.00392, (416, 416), (0, 0, 0), True, crop=False)
    net.setInput(blob)
    start = time.time()
    outs = net.forward(output_layers)
    end = time.time()
    
    # Mostrar los objetos detectados en la imagen
    class_ids = []
    confidences = []
    boxes = []
    for out in outs:
        for detection in out:
            scores = detection[5:]
            class_id = np.argmax(scores)
            confidence = scores[class_id]
            if confidence > 0.5:
                # Objeto detectado
                center_x = int(detection[0] * width)
                center_y = int(detection[1] * height)
                w = int(detection[2] * width)
                h = int(detection[3] * height)
                x = int(center_x - w / 2)
                y = int(center_y - h / 2)
                boxes.append([x, y, w, h])
                confidences.append(float(confidence))
                class_ids.append(class_id)
    
    indexes = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.4)
    font = cv2.FONT_HERSHEY_PLAIN
    colors = np.random.uniform(0, 255, size=(len(classes), 3))
    
    for i in range(len(boxes)):
        if i in indexes:
            x, y, w, h = boxes[i]
            label = str(classes[class_ids[i]])
            color = colors[class_ids[i]]
            cv2.rectangle(img, (x, y), (x + w, y + h), color, 2)
            cv2.putText(img, label, (x, y + 30), font, 3, color, 3)
    
    cv2.imshow("Imagen", img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    Este código lee la imagen desde la carpeta especificada, detecta objetos en la imagen usando YOLO, y muestra los objetos detectados en una ventana. Puedes modificar este código según tus necesidades e integrarlo con Flask para construir una aplicación web completa de reconocimiento de objetos.

Comments are closed.