Come fare la “predict” a partire da un modello neurale salvato? Esempio riconoscimento volti con mascherina e senza mascherina

AI, INTELLIGENZA ARTIFICIALE

Nell’articolo precedente ho fatto vedere come addestrare un modello neurale basato  su inception_v3 per il riconoscimento di volti con e senza mascherina.

In questo articolo farò vedere come fare la “predict” caricando il modello salvato precedentemente. Il codice è molto semplice, in ogni caso lascio qui il ink del codice completo.

Il codice è stato sviluppato su colab, pertanto, per evitare di perdere i risultati del training, come di consueto uso google drive come disco esterno.

Vediamo il codice nelle line generali:

Prima di iniziare montiamo il drive google

from google.colab import drive
drive.mount('/content/drive')

ed importiamo le librerie necessarie:

from keras.layers import Dense
from keras.models import Model
from keras.preprocessing.image import ImageDataGenerator
from keras.optimizers import Adam
import pathlib
import math
import tensorflow as tf
import cv2
import matplotlib.pyplot as plt
import matplotlib.image as img
import numpy as np
from PIL import Image
import urllib.request

creiamo una funzione per il caricamento delle immagini e la conversione in un tensore

def load_image(path):
  img = cv2.imread(path)
  img = cv2.resize(img,(224,224),3)
  plt.imshow(img)
  plt.show()
  img_array_batch = np.expand_dims(img, axis=0)
  img_array_batch = img_array_batch/255
  return img_array_batch

definiamo una funzione di softmax per ottenere il risultato dell’inferenza in forma percentuale:

def softmax(x):
  e_x = np.exp(x - np.max(x))
  return e_x / e_x.sum()

ricostruiamo il modello definendo il backbone ed i vari livelli della coda:

backbone = InceptionV3(include_top=False, pooling="avg")

ricostruiamo i livelli di coda:

x = backbone.output
x = Dense(1024, activation='relu')(x
x = Dense(1024, activation='relu')(x)
x = Dense(512, activation='relu')(x)
classificatore = Dense(2, activation='softmax')(x)

carichiamo i pesi a partire dal modello salvato:

model = Model(inputs=backbone.input, outputs=classificatore)
model.load_weights("drive/MyDrive/Colab Notebooks/MASKNOMASK/model2.h5")

scarichiamo l’img di test dal web e convertiamola in un tensore:

URL = "https://www.intoscana.it/wp-content/uploads/shutterstock_1628718772.jpg"
#URL="https://ilfattoalimentare.it/wp-content/uploads/2020/03/coronavirus-ragazza-donna-mascherina-AdobeStock_258966698-scaled.jpeg"
#URL="https://lh3.googleusercontent.com/proxy/eoIJn-u1COjfOefuOVwqDEQlZWvpIP1uRXcMICCJY0z24QrFsTlIL5-Q-BKxummMmWPU6SwuYxuYLOTpfCPVbIs=s0-d"à
#URL="https://qph.fs.quoracdn.net/main-qimg-b86ff4fdfc72aeff3af8419340486f99"

with urllib.request.urlopen(URL) as url:
   withopen('test.jpg', 'wb') as f:
   f.write(url.read())

carico e converto l’img di test

image_test = load_image('test.jpg')

ed infine effettuo la predizione:

tensore_predizione = model.predict(image_test)
#print(tensore_predizione
predizionePercentuale = softmax(tensore_predizione)
#print(predizionePercentuale)
print("Predizione MASK: " + str(predizionePercentuale[0][0]*100) + "%")
print("Predizione NO MASK: " + str(predizionePercentuale[0][1]*100) + "%")
Se vuoi farmi qualche richiesta o contattarmi per un aiuto riempi il seguente form

    Comments