Raspberry Pi usa PaddleX para la clasificación de objetos

1. Primero use Baidu AI para ejecutar el código. Consulte la URL del enlace /aistudio/projectdetail/2160041 para obtener el modelo. Sin embargo, el modelo obtenido al ejecutar paddlex no se puede ejecutar directamente en Raspberry Pi. Así que continúa con el paso dos.

2. Convierta el modelo a un modelo compatible con paddle-lite.

En Baidu Studio, ejecute el código del paso anterior

paddle_lite_opt --model_fie=su enfoque de modelo

--param_file=su enfoque de peso

- -valid_targets =arm

--optimize_out_type=naive_buffer

--optimize_out=La ruta y el nombre del modelo nb de salida que desea

3. Ejecute el siguiente código de clasificación , modifica tus parámetros

desde paddlelite.lite import *

import cv2

import numpy as np

import sys

tiempo de importación

desde PIL importar imagen

desde PIL importar ImageFont

desde PIL importar ImageDraw

# Cargar modelo

p>

def create_predictor(model_dir):

config = MobileConfig()

config.set_model_from_file(model_dir)

predictor = create_paddle_predictor(config )

predictor de retorno

#Procesamiento de normalización de imagen

def process_img(image, input_image_size):

origen = imagen

img = origin.resize(input_image_size, Image.BILINEAR)

resized_img = img.copy()

if img.mode != 'RGB':

img = img.convert('RGB')

img = np.array(img).astype('float32').transpose((2, 0, 1)) # HWC a CHW

img -= 127.5

img *= 0.007843

img = img[np.newaxis, :]

retorno origen,img

# Predicción

def predecir(imagen, predictor, input_image_size):

#Procesamiento de datos de entrada

input_tensor = get_input(0)

input_tensor.resize([1, 3, input_image_size[0], input_image_size[1]])

imagen = Image.fromarray(cv2.cvtColor(imagen, cv2.COLOR_BGRA2RGBA) )

origen, img = process_img(image, input_image_size)

image_data = np.array(img).flatten().tolist()

input_tensor. conjunto_floa

t_data(image_data)

#Realizar predicción

predictor.run()

#Obtener salida

salida_tensor = predictor.get_output(0 )

print("salida_tensor.float_data()[:] : ", salida_tensor.float_data()[:])

res = salida_tensor.float_data()[:]

return res

# Mostrar resultados

def post_res(label_dict, res):

print(max(res))

target_index = res.index(max(res))

print("El resultado es: " + " " + label_dict[target_index])

if __name__ == ' __main__ ':

#Definición inicial

label_dict = {0:"metal", 1:"papel", 2:"plástico", 3:"vidrio"}

image = "./test_pic/images_orginal/glass/glass300.jpg"

model_dir = "./trained_model/ResNet50_trash_x86_model.nb"

image_size = (224, 224 )

# Inicialización

predictor = create_predictor(model_dir)

# Leer en la imagen

imagen = cv2.imread(imagen)

# Predicción

res = predict(imagen, predictor, image_size)

# Mostrar resultados

post_res(label_dict, res)

cv2.imshow("imagen", imagen)

cv2.waitKey()