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 :
- Information technique
- Tuto sur le changement de mode d’algorithme
- Code Arduino boucle principal : Changement de mode de vision
- Onglet 01 : 01 verification type de cam
- Onglet 02 : 02 reconnaissance d’objet
- Onglet 03 : 03 reconnaissance de visage
- Pour tout probléme
.l
![]()
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
.
![]()
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.
.
.
![]()
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 ;
}
.
![]()
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(".");
}
.
![]()
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!");
}
}
}
}
.
.
![]()
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.
![]()
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 .
.
