suria sarath
Published © GPL3+

Deep learning with ESP32

A Pc runs with Deep Learning Algorithm. IoT device and PC connected in a network. camera image data predicted then sent to IoT.

AdvancedProtip20 hours7,787
Deep learning with ESP32

Things used in this project

Hardware components

ready web camera
×1
ESP32S
Espressif ESP32S
×1
RGB Backlight LCD - 16x2
Adafruit RGB Backlight LCD - 16x2
×1
Jumper wires (generic)
Jumper wires (generic)
×1
USB-A to Micro-USB Cable
USB-A to Micro-USB Cable
×1

Software apps and online services

Python Programming Language
keras

Story

Read more

Code

Python Keras Deep learning Code

Python
from keras import *
from keras.preprocessing.image import load_img,array_to_img,img_to_array
 
from keras.models import load_model
import numpy as np
import pandas as pd
#mdl = load_model('resnet50.h5')
mdl=load_model("resnet50.h5")
from urllib import request


import cv2

class_names = pd.read_csv("coco_classes.csv")
cap = cv2.VideoCapture(1)
t_values = [893,898,968,673,549]
while(True):
    # Capture frame-by-frame
    for k  in  range(25):
        ret, frame = cap.read()

    # Our operations on the frame come here
    data = np.array([cv2.resize(frame,(224,224))])
    img = mdl.predict(data)
    
    #if img in t_values:
    if(img.flatten()[np.argmax(img)]>0.4):
        try:
            request.urlopen("http://192.168.43.186/"+class_names[str(np.argmax(img))][1]+"/L")
            print("http://192.168.43.186/"+class_names[str(np.argmax(img))][1]+"/L")
        except Exception as e:
            print(e)
    #outputs = np.where(np.argmax(img))
    
    
    print(class_names[str(np.argmax(img))])
    print(img.flatten()[np.argmax(img)])
    cv2.imshow('frame',frame)
    
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

esp32_Ai Arduino code

C/C++
#include <LiquidCrystal_I2C.h>



#include <WiFi.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const char* ssid     = "agri";
const char* password = "datadata";

WiFiServer server(80);

void setup()
{
    lcd.init(); 
    lcd.backlight();
    lcd.setCursor(0, 0);
    lcd.print("  Welcome To");
    lcd.setCursor(0,1);
    lcd.print("  ESP32 AI");
    Serial.begin(115200);
    pinMode(5, OUTPUT);      // set the LED pin mode

    delay(10);

    // We start by connecting to a WiFi network

    Serial.println();
    Serial.println();
    Serial.print("Connecting to ");
    Serial.println(ssid);

    WiFi.begin(ssid, password);

    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }

    Serial.println("");
    Serial.println("WiFi connected.");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
    
    server.begin();

}

int value = 0;

void loop(){
  
 WiFiClient client = server.available();   // listen for incoming clients

  if (client) {                             // if you get a client,
    Serial.println("New Client.");           // print a message out the serial port
    String currentLine = "";                // make a String to hold incoming data from the client
    while (client.connected()) {            // loop while the client's connected
      if (client.available()) {             // if there's bytes to read from the client,
        char c = client.read();             // read a byte, then
       // Serial.write(c);                    // print it out the serial monitor
        if (c == '\n') {                    // if the byte is a newline character

          // if the current line is blank, you got two newline characters in a row.
          // that's the end of the client HTTP request, so send a response:
          if (currentLine.length() == 0) {
            // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
            // and a content-type so the client knows what's coming, then a blank line:
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println();

            // the content of the HTTP response follows the header:
            client.print("Click <a href=\"/H\">here</a> to turn the LED on pin 5 on.<br>");
            client.print("Click <a href=\"/L\">here</a> to turn the LED on pin 5 off.<br>");

            // The HTTP response ends with another blank line:
            client.println();
            // break out of the while loop:
            break;
          } else {    // if you got a newline, then clear currentLine:
            currentLine = "";
          }
        } else if (c != '\r') {  // if you got anything else but a carriage return character,
          currentLine += c;      // add it to the end of the currentLine
        }

        // Check to see if the client request was "GET /H" or "GET /L":
        
        if (currentLine.endsWith("GET /H")) {
          digitalWrite(5, HIGH);               // GET /H turns the LED on
           currentLine="";
        }
        if (currentLine.endsWith("/L")) {
          digitalWrite(5, LOW); 
          Serial.print(currentLine);
          
          Serial.println(currentLine.substring(5,currentLine.length()-2));// GET /L turns the LED off
          lcd.setCursor(0, 0);
          lcd.print("                ");
          lcd.setCursor(0, 0);
          lcd.print(currentLine.substring(5,currentLine.length()-2));
           currentLine="";
        }
       
      }
    }
    // close the connection:
    client.stop();
    Serial.println("Client Disconnected.");
  }
}

Credits

suria sarath

suria sarath

8 projects • 25 followers
Embedded software programmer at Lanware Solutions
Thanks to asha.

Comments