Suivez des formations à votre rythme

Améliorez votre niveau en programmation avec le wlanguage

2 Sélection de cours

Explorez une variété de sujets

Instructions d'experts

Trouvez ce qui est adapté à votre niveau

Accès a tout moment

Apprenez selon votre emploi du temps

Derniers billets du blogs

La reconnaissance d'objets dans WINDEV 27

Crée par -

La reconnaissance d'objets dans WINDEV 27

Dans la version 27, une nouvelle famille de fonctions apparaît, il s'agit des fonctions d'intelligence artificielle. Ces fonctions permettent l'utilisation de modèles de reconnaissance d'objets.La reconnaissance d'objets utilise un modèle de reconnaissance. Ce modèle est une base à laquelle on a appris les diverses formes que pouvait prendre un objet, une personne, un visage, … Il existe de nombreux modèles permettant de reconnaitre des objets. Plus le nombre d'images utilisées pour créer le modèle a été important, plus la reconnaissance sera efficace. On appelle ces bases de données des dataset. On trouve des modèles gratuits, payants et certaines sociétés proposent de créer des modèles spécifiques. Grâce à la version 27 de WINDEV, il est possible d'exploiter ces différents modèles. La famille de fonctions IA* permet donc d'exploiter ces modèles. WINDEV 27 est d'ailleurs livré avec le modèle « yolo » qui permet de débuter rapidement le développement d'application de reconnaissance d'objets. Voici par exemple un code permettant de détecter des personnes dans une image : // Initialisation du tableau des type d'éléments recherchés.tabElement est un tableau de 1 entierstabElement[1] = iadPersonne// Lancement de la recherchetabIARésultatImage est un tableau de iaRésultatImagetabIARésultatImage = IADétecte(IMG_Salle,tabElement)// On filtre le résultat pour éviter des faux positifs (indice de confiance).tabIARésultatImage = tabIARésultatImage.Filtre(unePersonne=>unePersonne.IndiceConfiance>50)// Dessin des polygones qui entourent ces personnes.dDébutDessin(IMG_Salle)POUR TOUT UnePersonne de tabIARésultatImagedPolygone(IMG_TEST,CoordonnéeImageVersChampImage(IMG_TEST, UnePersonne.Polygone),Transparent,iJauneClair)FINInfo("Il y a "+tabIARésultatImage.Occurrence+" personnes identifiées dans l'image.") On obtient donc en quelques lignes de code un détourage des personnes détectées sur l'image fournie.Le résultat obtenu est bien sûr dépendant :de la qualité de l'image,de son éclairage, son orientation,du modèle utilisé (dataset),de la tolérance à l'erreur choisie (indice de confiance).

Plus de détails

Publié - 10 Jours Passé

Convertir une date au format TimeStamp Active Directory vers une DateHeure WLangage ?

Crée par -

Convertir une date au format TimeStamp Active Directory vers une DateHeure WLangage ?

Le format des dateheures d'un Active Directory est de la forme suivante. Cette valeur correspond au nombre de dixième de microsecondes depuis le 1° Janvier 1601. Il faut donc utiliser les propriétés des dates et des heures. Voici le code WLanguage :  Procedure LDAPEntierVersDateHeure(nDateHeure est un entier sans signe sur 8 octets) :DateHeurenTemp est un entier// Date de référence. : 16/01/01 à 00 h 00 m 00 s et 000 msdhDateRef est une DateHeure ="16010101000000000"// On divise le nombre de diziéme de micro-seconde par 10000 pour obtenu des millisecondesnDateHeure = nDateHeure/10 000// On affecte la durée en découpant par morceaux// MillisecondesnTemp = Modulo(nDateHeure,1000)dhDateRef.Milliseconde= nTempnDateHeure = (nDateHeure - nTemp)/1000// SecondesnTemp = Modulo(nDateHeure,60)dhDateRef.Seconde = nTempnDateHeure = (nDateHeure - nTemp)/60// MinutesnTemp = Modulo(nDateHeure,60)dhDateRef.Minute = nTempnDateHeure = (nDateHeure - nTemp)/60// HeuresnTemp = Modulo(nDateHeure,24)dhDateRef.Heure = nTempnDateHeure = (nDateHeure - nTemp)/24// JoursdhDateRef.Jour += nDateHeure// Il manque la conversion en heure locale.RENVOYER DateHeureUTCVersLocale(dhDateRef) Une autre solution existe, c'est une formule basée sur des constantes. Elle est plus simple mais malheureusement elle ne gère pas les millisecondes.  Procedure LDAPEntierVersDateHeure(nDateHeure est un entier sans signe sur 8 octets) :DateHeuren1, n2 sont des entiers sans signe sur 8 octetsn1 = 10000000n2 = 11644473600x est une DateHeure = EpochVersDateHeure(nDateHeure / n1 - n2)RENVOYER x

Plus de détails

Publié - 10 Jours Passé

Cِِhangement d'API de Google, remplacement des fonctions de gestion des contacts Google (gglListeContact...)

Crée par -

Cِِhangement d'API de Google, remplacement des fonctions de gestion des contacts Google (gglListeContact...)

Les fonctions de gestion des contacts Google sont proposées depuis la version 14 de WINDEV. Ces fonctions reposent sur l'API Contacts de Google. Cette API est maintenant dépréciée par Google, et remplacée par la nouvelle API People. L'utilisation des fonctions ggl* liées aux contacts peut donc échouer avec la réponse "Contacts API is being deprecated". La nouvelle API People n'est pas le prolongement de l'API Contacts. Les structures de données notamment n'ont rien en commun. Il n'est donc pas possible d'adapter les fonctions ggl* existantes, et le type gglContact, afin qu'ils permettent l'utilisation de la nouvelle API People. Les applications qui récupèrent des contacts Google doivent donc nécessairement être adaptées. Les fonctions ggl* seront à remplacer par des appels de la fonction RESTEnvoie après une authentification. Les syntaxes des appels sont détaillées sur le site de Google :https://developers.google.com/people/api/rest Voici un exemple d'appel pour obtenir la liste des contacts : OAuth2Params est un OAuth2ParamètresToken est un AuthTokenReqListeContact est un restRequêteRéponseListeContact est un httpRéponseListeContact est un JSONOAuth2Params.ClientID = "<id client>.apps.googleusercontent.com"OAuth2Params.ClientSecret = "<clé>"OAuth2Params..URLAuth = "https://accounts.google.com/o/oauth2/auth"OAuth2Params..URLRedirection = "http://localhost:15000"OAuth2Params..URLToken = "https://oauth2.googleapis.com/token"OAuth2Params..Scope = "https://www.googleapis.com/auth/contacts.readonly"Token = AuthIdentifie(OAuth2Params) // Réutilisation token possibleReqListeContact..Méthode = httpGetReqListeContact..ContentType = "application/json"ReqListeContact.URL = "https://people.googleapis.com/v1/people/me/connections?personFields=names,emailAddresses"ReqListeContact..AuthToken = TokenRéponseListeContact = RESTEnvoie(ReqListeContact)SI RéponseListeContact.CodeEtat = 200 ALORSListeContact = RéponseListeContact..ContenuTrace("Nombre de contacts : "+ListeContact.totalPeople)POUR nContact = 1 _À_ ListeContact.connections..OccurrenceTrace("Contact "+nContact+"/"+ListeContact.connections..Occurrence)Trace(" >> "+ListeContact.connections[nContact].resourceName)POUR nListe = 1 _À_ ListeContact.connections[nContact].names..OccurrenceTrace(" Nom "+nListe+"/"+ListeContact.connections[nContact].names..Occurrence)Trace(" >> "+ListeContact.connections[nContact].names[nListe].displayName)FINPOUR nListe = 1 _À_ ListeContact.connections[nContact].emailAddresses..OccurrenceTrace(" Adresse email "+nListe+"/"+ListeContact.connections[nContact].emailAddresses..Occurrence)Trace(" >> "+ListeContact.connections[nContact].emailAddresses[nListe].value)Trace(" >> "+ListeContact.connections[nContact].emailAddresses[nListe].type)FINFINSINONErreur("Google n'a pas pu traiter la requête : ", RéponseListeContact..CodeEtat, RéponseListeContact..Contenu)FIN Les types utiles les plus courants sont :un contact complet : https://developers.google.com/people/api/rest/v1/people#Personses noms : https://developers.google.com/people/api/rest/v1/people#Person.Nameses adresses emails : https://developers.google.com/people/api/rest/v1/people#Person.EmailAddress... Si l'application doit explorer de nombreuses informations dans les contacts, il sera opportun de faire connaître la structure des fichiers JSON de Google au projet. De cette manière il sera possible de profiter de la complétion de l'éditeur de code, et du POUR TOUT ELEMENT de parcours des tableaux. Cette technique peut s'utiliser pour toute interrogation qui retourne un contenu formaté en JSON :exécuter le code ci-dessus, en ajoutant la création d'un JSON avec la réponse :ListeContact = RéponseListeContact..ContenufSauveTexte(fRepDonnées()+[fSep]+"GoogleContact.json",RéponseListeContact..Contenu)LanceAppliAssociée(fRepDonnées()+[fSep]+"GoogleContact.json")VersPressePapier(fRepDonnées()+[fSep]+"GoogleContact.json")dans les descriptions externes du projet, importer le fichier GoogleContact.json obtenu :On a alors toute l'arborescence du JSON :Déclarer des variables à partir des différents noeuds du JSON :ListeContact est un JSON <description="GoogleContact">ListeNom est un JSON <description="GoogleContact.connections.names">ListeAdresseEmail est un JSON <description="GoogleContact.connections.emailAddresses">Utiliser POUR TOUT ELEMENT :ListeContact = RéponseListeContact.ContenuTrace("Nombre de contacts : "+ListeContact.totalPeople)POUR TOUT ELÉMENT UnePersonne DE ListeContact.connectionsPOUR TOUT ELÉMENT ListeNom DE UnePersonne.namesTrace(ListeNom.displayName)FINPOUR TOUT ELÉMENT ListeAdresseEmail DE UnePersonne.emailAddressesTrace(ListeAdresseEmail.value+" ("+ListeAdresseEmail.type+")")FINFIN

Plus de détails

Publié - 10 Jours Passé

La double autentification est imposée par Gmail

Crée par -

La double autentification est imposée par Gmail

Afin de permettre la relève d'emails dans un compte Google avec le protocole IMAP depuis une application, il faut donc :déclarer l'application auprès de Google,mettre en place une authentification OAuth 2 au niveau de l'application.## Déclaration de l'application auprès de Google ##2. Se connecter au portail développeurs de Google : https://console.developers.google.com/ avec ce compte.Voici un exemple de procédure complète pour récupérer les identifiants ClientID et ClientSecret nécessaires à la double authentification. Les images ci-dessous sont celles du site développeur de Google ce jour. Les choix peuvent évoluer dans le temps, mais le principe de déclaration restera le même.  Pour utiliser la double authentification sur un compte GMail, il est nécessaire de déclarer l'application auprès de Google. 1. Créer un compte Gmail pour le développeur de l'application.3. Dérouler le menu des projets et cliquer sur "Nouveau projet"5. Sélectionner le projet dans la liste déroulante. Cliquer sur "Ecran d'autorisation OAuth" dans la barre latérale gauche.6. Cliquer sur "Configurer l'écran d'autorisation", choisir le mode d'utilisation de l'application : "Interne", si vous disposez d'un compte GSuite ou "Externe" dans les autres cas puis cliquer sur "Créer". 7. Renseigner les infos obligatoires de l'application :le nom de l'application : c'est le nom qui apparaitra dans la fenêtre de connexion OAuth,l'adresse email de l'assistance utilisateur,l'adresse email du développeur.Vous pouvez également renseigner les informations facultatives.ATTENTION : si vous spécifiez un logo, il sera nécessaire d'attendre que Google approuve votre application pour utiliser OAuth. De plus, une fois qu'un logo est défini, il n'est pas possible de l'enlever. Il est conseillé de ne pas indiquer de logo pendant les phases de développement/mise au point.Cliquer ensuite sur "Enregistrer et continuer"Choisir le type "Application de bureau" et saisir le nom de l'application puis cliquer sur "Créer".6. Copier l'ID Client et le code secret et reportez-les dans l'exemple de la LST (ou dans le code de votre application).La structure OAuth2Paramètres doit être remplie avec les informations suivantes :`OAuth2Params.ClientID` : l'identifiant de l'application obtenu ci-dessus,`OAuth2Params.ClientSecret` : le code secret de l'application obtenu ci-dessus,`OAuth2Params.URLAuth` : l'URL d'authentification, pour GMail il s'agit de `https://accounts.google.com/o/oauth2/auth`,`OAuth2Params.URLToken` : l'URL de récupération d'un token OAuth, pour Gmail, il s'agit de `https://accounts.google.com/o/oauth2/token`,`OAuth2Params.URLRedirection` : l'URL de redirection,`OAuth2Params.Scope` : l'identifiant de la portion d'API Google à laquelle l'application veut acéder.Pour accéder aux email dans GMail, il faut indiquer `https://mail.google.com/``OAuth2Params.TypeRéponse` : le type de réponse attendue, dans le cas de la double authentification email, utiliser la constante `oauth2TypeRéponseCode`. Le token OAuth renvoyé par la fonction AuthIdentifie peut être conservé entre deux exécutions de l'application. Pour cela, il suffit de le sérialiser dans un buffer et d'enregistrer ce buffer dans la base de données ou dans un fichier.Le token OAuth a une durée de validité limitée. La date d'expiration d'un token peut être relue par la propriété DateExpiration. Quand le token est expiré, il n'est plus possible de l'utiliser pour accéder au serveur de mail. Dans ce cas, il suffit de le renouveler à l'aide de la fonction AuthRenouvelleToken. Cas particulier d'une ouverture de session SMTP depuis le code serveur d'un site WEBDEV :La propriété AuthToken du type emailSessionSMTP pour EmailOuvreSession a été proposée dans un premier temps sous WINDEV uniquement. Elle n'existait initialement pas en code serveur WEBDEV. La propriété est disponible pour le code serveur des sites WEBDEV à partir de la version 27 "Update 2".

Plus de détails

Publié - 10 Jours Passé

Rejoignez-nous et commencez à apprendre

Je commence !

Rejoindre le staff des formateurs

Je m'inscris comme formateur