import tensorflow.keras from PIL import Image, ImageOps import numpy as np import cv2 import serial camera = cv2.VideoCapture(1) # Disable scientific notation for clarity np.set_printoptions(suppress=True) # Load the model model = tensorflow.keras.models.load_model('keras_model.h5') # model.compile( # optimizer='rmsprop', loss=None, metrics=None, loss_weights=None, # sample_weight_mode=None, weighted_metrics=None, target_tensors=None, # distribute=None # ) with serial.Serial('COM5', 9600) as ser: spraying = False while True: ret, frame = camera.read() if not ret: continue # cv2.imshow('frame', frame) image = Image.fromarray(frame) # Create the array of the right shape to feed into the keras model # The 'length' or number of images you can put into the array is # determined by the first position in the shape tuple, in this case 1. data = np.ndarray(shape=(1, 224, 224, 3), dtype=np.float32) # Replace this with the path to your image # image = Image.open('test_photo.jpg') # resize the image to a 224x224 with the same strategy as in TM2: # resizing the image to be at least 224x224 and then cropping from the center size = (224, 224) image = ImageOps.fit(image, size, Image.ANTIALIAS) # turn the image into a numpy array image_array = np.asarray(image) # display the resized image #image.show() # Normalize the image normalized_image_array = (image_array.astype(np.float32) / 127.0) - 1 # Load the image into the array data[0] = normalized_image_array # run the inference prediction = model.predict(data) print(float(prediction[0][1])) if float(prediction[0][1]) > 0.5: # armpittt print("armpit") if not spraying: ser.write(b"80a") spraying = True print("sprayyyy") else: # notpit if spraying: ser.write(b"100a") spraying = False