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 ejecutar un modelo tf.lite en un Raspberry Pi en lugar de un modelo Keras guardado.

Estoy intentando clasificar señales de tráfico utilizando una Raspberry Pi, para esto entrené y guardé un modelo Keras en un archivo .h5, pero consume demasiada CPU, así que lo convertí a un modelo .tflite e intenté ejecutarlo. Sin embargo, me da este error “OSError: El archivo SavedModel no existe en: yourmodel.tflite/{saved_model.pbtxt|saved_model.pb}” Verifiqué la ruta, aquí está mi código.
También cambié esa línea: “model = tensorflow.keras.models.load_model(‘my_model.h5’)” a “model = tensorflow.keras.models.load_model(‘yourmodel.tflite’)”

import numpy as np
import cv2
import tensorflow
from tensorflow import keras
from tensorflow.keras.preprocessing import image

# RESOLUCIÓN DE LA CÁMARA
frameWidth = 600         
frameHeight = 480
brightness = 180
threshold = 0.75         # UMBRAL DE PROBABILIDAD
font = cv2.FONT_HERSHEY_SIMPLEX

# CONFIGURACIÓN DE LA CÁMARA DE VÍDEO
cap = cv2.VideoCapture(0)
cap.set(3, frameWidth)
cap.set(4, frameHeight)
cap.set(10, brightness)
cap.set(cv2.CAP_PROP_FPS, 3)

# IMPORTAR EL MODELO ENTRENADO
model = tensorflow.keras.models.load_model("yourmodel.tflite")

def equalize(img):
    img = cv2.equalizeHist(img)
    return img
def grayscale(img):
    img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    return img
def preprocessing(img):
    img = grayscale(img)
    img = equalize(img)
    img = img/255
    return img

def getClassName(classNo):
    if classNo == 0: return 'Límite de velocidad 20 km/h'
    elif classNo == 9: return 'Prohibido adelantar'
    elif classNo == 12: return 'Carretera prioritaria'
    elif classNo == 13: return 'Ceda el paso'
    elif classNo == 14: return 'Alto'
    elif classNo == 38: return 'Manténgase a la derecha'
    elif classNo == 39: return 'Manténgase a la izquierda'

while True:
    success, imgOrignal = cap.read()
    img = np.asarray(imgOrignal)
    img = preprocessing(img)
    cv2.imshow("Imagen procesada", img)
    img = img.reshape(1, 32, 32, 1)
    cv2.putText(imgOrignal, "CLASE: " , (20, 35), font, 0.75, (0, 0, 255), 2, cv2.LINE_AA)
    cv2.putText(imgOrignal, "PROBABILIDAD: ", (20, 75), font, 0.75, (0, 0, 255), 2, cv2.LINE_AA)

    # PREDICCIONES DE LA IMAGEN
    predictions = model.predict(img)
    classIndex = model.predict_classes(img)
    probabilityValue = np.amax(predictions)

    if probabilityValue > threshold:
        print(getClassName(classIndex))
        cv2.putText(imgOrignal,str(classIndex)+" "+str(getClassName(classIndex)), (120, 35), font, 0.75, (0, 0, 255), 2, cv2.LINE_AA)
        cv2.putText(imgOrignal, str(round(probabilityValue*100,2) )+"%", (180, 75), font, 0.75, (0, 0, 255), 2, cv2.LINE_AA)
        cv2.imshow("Resultado", imgOrignal)

        if cv2.waitKey(1) and 0xFF == ord('q'):
            break

cap.release()

cv2.destroyAllWindows()
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que el script está intentando cargar un archivo SavedModel en lugar de un archivo de modelo TFLite. Para solucionar este problema, debería cambiar el código de:

    model = tensorflow.keras.models.load_model("yourmodel.tflite")
    

    a:

    model = tensorflow.lite.Interpreter(model_path="yourmodel.tflite")
    model.allocate_tensors()
    

    Esto cargará el modelo TFLite y asignará los tensores necesarios antes de ejecutar la inferencia. Además, asegúrese de que el archivo yourmodel.tflite esté ubicado en la ruta correcta.

Comments are closed.