Arduino avec la Camera Sen0305 , le changement d’algorithmes

.

Mise à jour le 11/11/2021 :  Cet article traite du changement du mode d’algorithme de la camera SEN0305 ou de la SEN0336 version pro 

Sommaire :

 

.l

Retour au sommaire

.

Information technique 

.

HuskyLens est un capteur de vision artificielle AI facile à utiliser avec 7 fonctions intégrées : reconnaissance faciale, suivi d’objet, reconnaissance d’objet, suivi de ligne, reconnaissance de couleur, reconnaissance de balise et classification d’objet.

Grâce au port UART / I2C, HuskyLens peut se connecter à Arduino et micro:bit pour vous aider à réaliser des projets très créatifs sans jouer avec des algorithmes complexes.

  • Processeur : Kendryte K210
  • Capteur d’images :
    • Objectif Husky SEN0305 : OV2640 (appareil photo 2,0 mégapixels)
    • SEN0336 HuskyLens PRO : OV5640 (caméra 5,0 mégapixels)
  • Tension d’alimentation : 3,3 ~ 5,0 V
  • Consommation  : 320 mA à 3,3 V , 230 mA à 5,0 V (mode de reconnaissance faciale ; luminosité du rétroéclairage à 80 % ; lumière d’ appoint éteinte)
  • Port de communication : UART ; I2C

.

Retour au sommaire

.

Tuto sur la  changement de mode

.

  • Dans cette vidéo vous trouverez toutes les explications relatives à l’utilisation du changement de mode de fonctionnement de la caméra SEN0305 pour la reconnaissance faciale et la reconnaissance d’objet
  • Le HuskyLens Gravity est un capteur visuel intelligent, simple d’utilisation basé sur une caméra OV2640 associée à un afficheur 2″ IPS et à un processeur Kendryte K210. Grâce au port UART / I2C, HuskyLens peut se connecter à Arduino pour vous aider à réaliser des projets très créatifs sans jouer avec des algorithmes complexes.

.

.

Retour au sommaire

.

Code Arduino boucle principal : Changement de mode de vision

.

//
//
// *********************************************
//
// controle du type de camera
//  Changement de mode
//   reconnaissance de visage
//    reconnaissance d'objet
//
// Arduino avec la Camera Sen0305
//
//
// Code: Mazelin Herve
// RedOhm
// Le 28/09/2021
// *********************************************


#include "HUSKYLENS.h"
#include "SoftwareSerial.h"

HUSKYLENS huskylens;
SoftwareSerial mySerial(10, 11); // RX, TX
//Cablage pour la connexion serie
//HUSKYLENS vert / green line -> Pin 10; bleu / blue line -> Pin 11
//
//Cablage pour la connexion en I2c
//HUSKYLENS vert / green -> SDA ; bleu / blue -> SCL

//----- Variable de recherche  ----
//
int objet = 0 ;
int visage = 0;

int boucle_objet = 0 ;
int boucle_visage = 0;


// **********************************************************************
// Un programme Arduino doit impérativement contenir la fonction "setup"
// Elle ne sera exécutée une seule fois au démarrage du microcontroleur
// Elle sert à configurer globalement les entrées sorties
// *********************************************************************
void setup() {
  Serial.begin(115200);
  mySerial.begin(9600);
  while (!huskylens.begin(mySerial))
  {
    Serial.println(F("Échec du démarrage!"));
    Serial.println(F("1.Veuillez revérifier le \"Type de protocole\" dans HUSKYLENS (Paramètres généraux -> Type de protocole -> Série 9600)"));
    Serial.println(F("2.Veuillez revérifier la connexion."));
    delay(100);
  }

  delay(500);
  // Appel du sous programme controle du type de camera
  controle_du_type_de_camera ();
}



// **********************************************************************
// Le programme principal s’exécute par une boucle infinie appelée Loop ()
// **********************************************************************
void loop()
{


  // ****** Procedure de recherche organique *******
  //
  // initialisation de la variable a 0
  boucle_objet = 0;
  // tant que la variable [boucle] est inferieur à 100
  while ( boucle_objet < 25)
  {
    // Appel du sous programme de reconnaissance des objets
    reconnaissance_objet();
    boucle_objet++; // j'increment ma variable de 1

  }
  objet = 0 ;





  // ****** Procedure de reconnaissance faciale *******
  //
  boucle_visage = 0;
  while ( boucle_visage < 25)
  {
    // Appel du sous programme de reconnaissance de visage
    reconnaissance_visage();
    boucle_visage++;// j'increment ma variable de 1

  }

  visage = 0 ;


}

.

Retour au sommaire

.

Onglet 01 : 01_verification_type_de_cam

.

//
//
//

void controle_du_type_de_camera ()
{

  /***** Vérifie si le modèle est Pro ou Standard  *******/
  Serial.println ("");
  Serial.println ("-------------------------------------");
  
  bool isPro;
  isPro = huskylens.isPro();
  if (isPro)
  {
    Serial.println("    Modèle professionnel détecté");
  }
  else
  {
    Serial.println("    Modèle standard détecté");
  }
  Serial.println ("-------------------------------------");

  
 
  Serial.println("Verification camera terminé");
  int boucle_tempo = 0 ;
  
  // creation d'une attente
  while ( boucle_tempo < 4)
  {
    Serial.print(".");
    delay(1000);
    boucle_tempo++;
  }
  delay (1000);
  Serial.println(".");
}

.

Retour au sommaire

 

.

Onglet 02 : 02 reconnaissance  d’objet

.

//
//
//

void reconnaissance_objet()
{

  if ( objet == 0 )
  {
    Serial.println ("++++++++++++++++++++++++++++++++++++++++++++++++++");
    Serial.println ("           Reconnaissance des objets              ");
    Serial.println ("                     Activé                       ");
    Serial.println ("++++++++++++++++++++++++++++++++++++++++++++++++++");
    Serial.println ("");
    
    //Basculez l'algorithme sur la reconnaissance des objets
    huskylens.writeAlgorithm(ALGORITHM_OBJECT_RECOGNITION);
    
    objet = 1 ;
  }

  // latence de reponse de la camera
  delay(500);



  if (!huskylens.request()) Serial.println(F("Échec de la demande de données à HUSKYLENS, revérifiez la connexion!"));
  else if (!huskylens.isLearned()) Serial.println(F("Rien appris, appuyez sur le bouton d'apprentissage sur HUSKYLENS pour en apprendre un!"));
  else if (!huskylens.available()) Serial.println(F("Aucun bloc ou objet !"));
  else
  {
    // Serial.println(F("###########"));
    while (huskylens.available())
    {
      HUSKYLENSResult result = huskylens.read();

      if (result.command == COMMAND_RETURN_BLOCK) {

        // Variable contenant les informations de l'emplacement des objets
        //
        // variable -> result.xCenter contenant ->  X Centre du bloc
        // variable -> result.yCenter contenant ->  y Centre du bloc
        // variable -> result.width contenant ->  la largeur du bloc
        // variable -> result.height contenant ->  la hauteur du bloc
        // variable -> result.ID contenant ->  1,2,3,xxx element appris est détecté
        //                                     0 element est detecté mais pas appris

        if (result.ID == 0)
        {
         
         Serial.println("Forme inconnu"); 
        }
        
        
        
        else if (result.ID == 1)
        {
          Serial.println("chat");
        }

        else if (result.ID == 2 )
        {
          Serial.println("humain detecte");
         
        }

        else if ( result.ID == 3)
        {
           Serial.println("chien");
        }

        
      }
      else if (result.command == COMMAND_RETURN_ARROW) {
        Serial.println(String() + F("Arrow:xOrigin=") + result.xOrigin + F(",yOrigin=") + result.yOrigin + F(",xTarget=") + result.xTarget + F(",yTarget=") + result.yTarget + F(",ID=") + result.ID);
      }
      else {
        Serial.println("Object unknown!");
      }
    }
  }

}

.

Retour au sommaire

.

.

Onglet 03 : 03 reconnaissance  de visage

.

//
//
//

void reconnaissance_visage()

{


  if ( visage == 0 )
  {
    Serial.println ("++++++++++++++++++++++++++++++++++++++++++++++++++");
    Serial.println ("           Reconnaissance des visages             ");
    Serial.println ("                     Activé                       ");
    Serial.println ("++++++++++++++++++++++++++++++++++++++++++++++++++");
    Serial.println ("");

    //Basculez l'algorithme sur la reconnaissance des objets
    huskylens.writeAlgorithm(ALGORITHM_FACE_RECOGNITION);
    visage = 1;
  }


  // latence de reponse de la camera
  delay(500);

  if (!huskylens.request()) Serial.println(F("Échec de la demande de données à HUSKYLENS, revérifiez la connexion!"));
  else if (!huskylens.isLearned()) Serial.println(F("Rien appris, appuyez sur le bouton d'apprentissage sur HUSKYLENS pour en apprendre un!"));
  else if (!huskylens.available()) Serial.println(F("Pas de detection de forme humaine!"));
  else
  {
    Serial.println(F("###########"));
    while (huskylens.available())
    {
      HUSKYLENSResult result = huskylens.read();

      if (result.command == COMMAND_RETURN_BLOCK) {

        // Variable contenant les informations de l'emplacement des objets
        //
        // variable -> result.xCenter contenant ->  X Centre du bloc
        // variable -> result.yCenter contenant ->  y Centre du bloc
        // variable -> result.width contenant ->  la largeur du bloc
        // variable -> result.height contenant ->  la hauteur du bloc
        // variable -> result.ID contenant ->  1,2,3,xxx element appris est détecté
        //                                     0 element est detecté mais pas appris


        // affectation du resultat a un prenom ( a une personne )
        if (result.ID == 0)
        {
          Serial.println ("Humain detecte non connu");
        }

        else if (result.ID == 1 )
        {
          Serial.println ("Louis");

        }
        else if (result.ID == 2 )
        {
          Serial.println ("Timeo");
        }
        else if (result.ID == 3 )
        {
          Serial.println ("Herve");
        }
        else if (result.ID == 4 )
        {
          Serial.println ("Johann");
        }
        else if (result.ID == 5 )
        {
          Serial.println ("Marie");
        }

      }
      else if (result.command == COMMAND_RETURN_ARROW) {
        Serial.println(String() + F("Arrow:xOrigin=") + result.xOrigin + F(",yOrigin=") + result.yOrigin + F(",xTarget=") + result.xTarget + F(",yTarget=") + result.yTarget + F(",ID=") + result.ID);
      }
      else {
        Serial.println("forme inconnu!");
      }
    }
  }
}

.

Pour télécharger le code

.

Retour au sommaire

.

Pour tout problème 

Pour tout problème de téléchargement ou pour nous suivre sur les réseaux sociaux voici les plateformes  sur lesquelles nous éditons.
Cliquez sur celles qui vous intéressent .

Facebook  Twitter  Youtube 

Grabcad  Thingiverse  Cults  

Retour au sommaire

.