1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies. En savoir plus.
  2. Bonjour tout le monde ! Veillez consulter la Politique de forum pour comprendre nos règles, Merci a vous !
    Rejeter la notice

windev / API Openalpr : Lire les plaques d'immatriculation

Discussion dans 'Windev' créé par gapplicat, Mar 19, 2018.

  1. gapplicat

    gapplicat Well-Known Member
    MEMBRE WX

    Inscrit:
    Mar 8, 2018
    Messages:
    395
    J'aime reçus:
    618
    Aujourd'hui je vous présente un petit script qui permet de reconnaître une plaque d'immatriculation depuis une photo.

    L’excellente librairy qui permet de faire ça n'est pas une fonction windev mais une API... que l'on va utiliser dans windev.

    Explication sur l'API :

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    Voir le site

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    pour plus de détail sur cette API.
    Il faudra vous inscrire (c'est gratuit, pour 2000 reconnaissances par jour) afin d'obtenir la LicenceKey de l'API :

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    Code (Text):

    // Déclaration des variables
    LaReponse est une restRéponse
    sFichier est une chaîne
    req est une restRequête
    vRésultatRetourné est un Variant

    //Chemin de la photo
    sFichier= fRepDonnées() + fSep + "lavoiture.jpg"

    // Envoi et récupération du numéro de plaque détecté par l'API
    req.Contenu = Encode(fChargeBuffer(sFichier),encodeBASE64)
    req.Méthode = httpPost
    req.URL = "https://api.openalpr.com/v2/recognize?recognize_vehicle=1&country=us&secret_key=sk_DEMODEMODEMODEMODEMODEMO'"

    LaReponse = RESTEnvoie(req)
    vRésultatRetourné = JSONVersVariant(LaReponse.Contenu)

    // Traitement de la réponse
    SELON vRésultatRetourné..Occurrence
        CAS 0 : Info("Pas de plaque d'immatriculation trouvée !")
        CAS 1 : Info("La plaque d'immatriculation trouvée : " + vRésultatRetourné.result[1].plate)
        CAS 2 : Info("2 plaques trouvée " + vRésultatRetourné.result[1].plate + " et " + vRésultatRetourné.result[2].plate)
    FIN

     
    Voila ! On imagine facilement quelle genre d'applicatif on pourrais faire avec cette fonction géniale et open-source.
    L'API permet de reconnaître le modèle et la couleur de la voiture aussi si j'ai bien compris...

    Si un de vous développe le concept, je veux bien un petit retour ...:cool:
     
  2. gapplicat

    gapplicat Well-Known Member
    MEMBRE WX

    Inscrit:
    Mar 8, 2018
    Messages:
    395
    J'aime reçus:
    618

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Fantastique.Merci pour l’info.
    Ça me rappelle le défi de 3 minutes des ga de windev;)
    Cliquez pour agrandir...
    Oui. Bien vu, c'est lors de la présentation windev Tour que j'ai vu cette option...
    J'ai quand même fait l'effort de l'adapter :D
     
    JollyJumper et Wafi_bba aiment ça.
  • taoufik1_1

    taoufik1_1 Member

    Inscrit:
    Jan 2, 2018
    Messages:
    26
    J'aime reçus:
    19
    Bonjour
    est ce qu'on peux utiliser les plaques en arabe ?
     
  • gapplicat

    gapplicat Well-Known Member
    MEMBRE WX

    Inscrit:
    Mar 8, 2018
    Messages:
    395
    J'aime reçus:
    618
    Je ne sais pas. Fais l'essai et post ton analyse sur le forum ;)
     
    JollyJumper apprécie ceci.
  • didierdequin

    didierdequin New Member

    Inscrit:
    Mar 20, 2018
    Messages:
    17
    J'aime reçus:
    20
    Bonjour,

    J'étais au TDF lorsque j'ai vu cette fonctionnalité. Le côté intéressant et pour une application de Pesage des Camions que j'ai mis en service au sein de l'entreprise. Il y a une prise de cliché du camion en entrée et en sortie avec bien sûr les informations utiles sur la marchandise, le transporteur etc...
    Modifier mon application pour tester le code et sans soucis. Je vous ferez un retour sur les tests en espérant que les camions soient pris en compte aussi dans la base (Remorque et tracteur compris)

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    Merci.
     
  • johndoe

    johndoe New Member

    Inscrit:
    Mar 24, 2018
    Messages:
    12
    J'aime reçus:
    4
    bonjour et merci pour ce code mais j'ai essayer ceci en wd21 :
    req.Contenu = Crypte(fChargeBuffer(sFichier),"",crypteAucun,encodeBASE64)
    à la place de
    req.Contenu = Encode(fChargeBuffer(sFichier),encodeBASE64)

    cela n'a pas l'air de fonctionner , quelqu'un à une idée ?
     
  • gapplicat

    gapplicat Well-Known Member
    MEMBRE WX

    Inscrit:
    Mar 8, 2018
    Messages:
    395
    J'aime reçus:
    618

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    quel rapport a ta question avec le sujet ?

    Attention encode n'est pas un cryptage, cette fonction sert à convertir une chaine en un format précis, par exemple : Format BASE 64 URL (respecte la norme RFC 4648). Le texte encodé comporte uniquement des caractères imprimables.
     
  • johndoe

    johndoe New Member

    Inscrit:
    Mar 24, 2018
    Messages:
    12
    J'aime reçus:
    4

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    quel rapport a ta question avec le sujet ?

    Attention encode n'est pas un cryptage, cette fonction sert à convertir une chaine en un format précis, par exemple : Format BASE 64 URL (respecte la norme RFC 4648). Le texte encodé comporte uniquement des caractères imprimables.
    Cliquez pour agrandir...
    le rapport , c'est que je n'ai pas la chance d'avoir wd23 ni wd22 , j'essaye de convertir le code en wd21 car cette fonction n'y existe pas
    j'ai bien un crypteAucun et un encodeBASE64 dans ma fonction , je ne vois pas la difference avec encode()
     
  • gapplicat

    gapplicat Well-Known Member
    MEMBRE WX

    Inscrit:
    Mar 8, 2018
    Messages:
    395
    J'aime reçus:
    618
    que veut tu faire exactement ? quelle code veut tu convertir ?
     
  • johndoe

    johndoe New Member

    Inscrit:
    Mar 24, 2018
    Messages:
    12
    J'aime reçus:
    4
    req.Contenu = Encode(fChargeBuffer(sFichier),encodeBASE64)
    encode() n'existe pas en wd21
     
  • gapplicat

    gapplicat Well-Known Member
    MEMBRE WX

    Inscrit:
    Mar 8, 2018
    Messages:
    395
    J'aime reçus:
    618
    Cette procédure (non testée) encode en base64 et serait l'equivalent de ENCODE

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!




    Code (Text):
    [/B]
    [B]/ NAME
    // base64encode
    //
    // DESCRIPTION
    // Encode data using base-64
    // Capable of operating in RFC 2045 compliant mode, or "URL safe" mode
    // "URL safe" mode is a nonstandard mode designed for use in URL querystrings.
    //
    // PARAMETERS
    // sBinaryString - Any string data
    //
    // bNoWrap (optional) - If set to anything other than false then line wrapping will not occur
    // Default is false in compliance with RFC 2045.
    //
    // bUrlSafe (optional) - If set to anything other than false then "URL safe" mode is used.
    // This is a nonstandard mode that can be used in URLs without additional
    // URL encoding. Default is false for compliance with RFC 2045.
    //
    // RETURNS
    // Base-64 encoded string.
    FUNCTION base64encode( sBinaryString is string, bNoWrap is boolean = False, bUrlSafe is boolean = False)
    sBase64Lookup is a string
    sTrail is a string
    sOutput is a string
    nIndex is an int
    nTrailingBytes is an int
    nLengthWhole is an int
    nByte1,nByte2,nByte3 are an int
    sChar1,sChar2,sChar3,sChar4 are strings

    // Define the lookup table according to whether we are using
    // "URL safe" mode or RFC 2045-compliant mode:

    IF( NOT bUrlSafe ) THEN
    sBase64Lookup = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
    sTrail = "="
    ELSE
    sBase64Lookup = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"
    sTrail = "."
    END

    // Initialise everything else...

    sOutput = ""
    nIndex = 1
    nTrailingBytes = modulo(Length(sBinaryString), 3)
    nLengthWhole = Length(sBinaryString)- (nTrailingBytes)

    // Store all the complete quanta...

    WHILE nIndex < nLengthWhole

    nByte1 = Asc(Middle(sBinaryString, nIndex, 1))
    nByte2 = Asc(Middle(sBinaryString, nIndex + 1, 1))
    nByte3 = Asc(Middle(sBinaryString, nIndex + 2, 1))

    sChar1 = sBase64Lookup[[ IntegerPart(( BinaryAND( nByte1, 252 ) / 4 )) + 1 ]]
    sChar2 = sBase64Lookup[[ IntegerPart( BinaryAND( (nByte1*256)+nByte2, 1008 ) / 16 ) + 1 ]]
    sChar3 = sBase64Lookup[[ IntegerPart( BinaryAND( (nByte2*256)+nByte3, 4032 ) / 64 ) + 1 ]]
    sChar4 = sBase64Lookup[[ IntegerPart( BinaryAND( nByte3, 63 ) ) + 1]]


    sOutput = sOutput + sChar1 + sChar2 + sChar3 + sChar4
    nIndex = nIndex + 3

    // Wrap at 76 characters
    IF( NOT bNoWrap ) THEN
    IF( modulo((nIndex-1) , 57) = 0 ) THEN sOutput = sOutput + CR
    END

    END

    // Store any partial quanta at the end....

    IF( nTrailingBytes = 1 ) THEN

    // Partial quanta containing a single byte...

    nByte1 = Asc( sBinaryString[[ nIndex ]] )
    sChar1 = sBase64Lookup[[ IntegerPart( BinaryAND( nByte1, 252 ) / 4 ) + 1 ]]
    sChar2 = sBase64Lookup[[ IntegerPart( BinaryAND( nByte1*256, 1008 ) / 16 ) + 1 ]]
    sChar3 = sTrail
    sChar4 = sTrail

    sOutput = sOutput + sChar1 + sChar2 + sChar3 + sChar4

    ELSE IF ( nTrailingBytes = 2 ) THEN

    // Partial quanta containing two bytes...

    nByte1 = Asc( sBinaryString[[ nIndex ]] )
    nByte2 = Asc( sBinaryString[[ nIndex + 1 ]] )
    sChar1 = sBase64Lookup[[ IntegerPart( BinaryAND( nByte1, 252 ) / 4 ) + 1 ]]
    sChar2 = sBase64Lookup[[ IntegerPart( BinaryAND( (nByte1*256)+nByte2, 1008 ) / 16 ) + 1 ]]
    sChar3 = sBase64Lookup[[ IntegerPart( BinaryAND( nByte2*256, 4032 ) / 64 ) + 1 ]]
    sChar4 = sTrail

    sOutput = sOutput + sChar1 + sChar2 + sChar3 + sChar4

    END

    // All done!

    RESULT sOutput

     
     
    WX1331 et JollyJumper aiment ça.
  • johndoe

    johndoe New Member

    Inscrit:
    Mar 24, 2018
    Messages:
    12
    J'aime reçus:
    4
    cela ne fonctionne pas non plus mais en faites j'ai regardé la réponse (je pensais qu'il décodait une mauvaise image) :
    HTTP/1.1 401 Unauthorized
    Access-Control-Allow-Headers: x-requested-with
    Access-Control-Allow-Origin: *
    Content-Type: application/json; charset="utf-8"
    Date: Sat, 24 Mar 2018 13:05:54 GMT
    Server: nginx/1.10.3
    Content-Length: 51
    Connection: keep-alive

    j'ai bien pris le sk dans api ....

    :)
    autant pour moi , une petite erreur dans le sk après la modif du fichier pour encoder en base64
    j'ai les mêmes erreur avec crypte ou la fonction base64encode() qui se trouve plus haut
    Missing file named "image" in request POST

    si quelqu'un à une image avec sa chaine en base64 qui fonctionne avec cette api , je suis preneur ...
     
    #12 johndoe, Mar 24, 2018
    Dernière édition par un modérateur: Août 5, 2018
    JollyJumper apprécie ceci.
  • JollyJumper

    JollyJumper Moderator
    MEMBRE WX

    Inscrit:
    Jan 30, 2018
    Messages:
    52
    J'aime reçus:
    158
    re Héllo

    Je met le lien de la vidéo Tektour :

     
    aminej76 et WX1331 aiment ça.
  • taoufik1_1

    taoufik1_1 Member

    Inscrit:
    Jan 2, 2018
    Messages:
    26
    J'aime reçus:
    19
    Bonjour les amis,
    Encode() n'existe pas en WD20, alors j'ai essayé la dll "openalpr-net.dll" et ça marche très bien.
    seulement je voudrai l’utilisé avec les plaques arabe, est ce que 'est possible d’intégré l'ocr arabe "ara.traineddata" ?
    Merci
     
    JollyJumper apprécie ceci.
  • johndoe

    johndoe New Member

    Inscrit:
    Mar 24, 2018
    Messages:
    12
    J'aime reçus:
    4
    je ne sais pas comment tu as fais mais pour moi en windev22 , cela ne fonctionne pas , j'ai tester :
    Missing file named "image" in request POST
    et c'est le code de la premiere page avec mon sk_xxx
     
    JollyJumper et nadji951 aiment ça.
  • taoufik1_1

    taoufik1_1 Member

    Inscrit:
    Jan 2, 2018
    Messages:
    26
    J'aime reçus:
    19
    l'avantage d'utiliser la dll "openalpr-net.dll" = pas besoin de connexion internet
    vous faite seulement l'ocr de la plaque d'immatriculation.

    mon problème c'est de reconnaitre un caractère en arabe au milieu de l’immatriculation
    Forme de plaque:
    [​IMG]

    il me manque les fichiers suivants :
    "ara.conf"
    "ara.traineddata"
    "ara.xml"
    "ara.patterns"

    je serai très reconnaissant de me uploader ses fichiers
    Merci
     
    #16 taoufik1_1, Avr 7, 2018
    Dernière édition: Avr 8, 2018
    walawa75 et JollyJumper aiment ça.
  • bindev

    bindev New Member

    Inscrit:
    Mar 11, 2018
    Messages:
    11
    J'aime reçus:
    12
    Essaie
    req.Contenu = Crypte(fChargeBuffer(sFichier),"",crypteAnsi,encodeBASE64)
     
    JollyJumper apprécie ceci.
  • taoufik1_1

    taoufik1_1 Member

    Inscrit:
    Jan 2, 2018
    Messages:
    26
    J'aime reçus:
    19
    Salut
    - quelqu'un pourra m'uploader ces fichiers ?

    "ara.conf"
    "ara.traineddata"
    "ara.xml"
    "ara.patterns"
    - ça me fera vraiment très plaisir.

    - c'est pour pouvoir utilisé les plaques en arabe.

    Merci
     
  • popoy

    popoy Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 23, 2018
    Messages:
    940
    J'aime reçus:
    608

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    :)

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!


    Le code de cet exemple n'existe pas ! (sinon, on l'aurait posté ;) )
    PCSoft propose régulièrement des vidéos "publicitaire" pour montrer les possibilités de ses outils :)

    Par contre, tu peux suivre la vidéo et reproduire cet exemple, ça peut faire un bon exercice ;)

    PS : Merci d'éviter le langage SMS ;)
    (cmt : c'est commandant, comment ... )
    :!horse:
    Cliquez pour agrandir...
    pcmou s'est contenter de reproduire ce code

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!


    ils ne sont pas capable de faire leur propre code.
     
    JollyJumper apprécie ceci.
  • walawa75

    walawa75 New Member

    Inscrit:
    Août 1, 2018
    Messages:
    18
    J'aime reçus:
    2

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Bonjour les amis,
    Encode() n'existe pas en WD20, alors j'ai essayé la dll "openalpr-net.dll" et ça marche très bien.
    seulement je voudrai l’utilisé avec les plaques arabe, est ce que 'est possible d’intégré l'ocr arabe "ara.traineddata" ?
    Merci
    Cliquez pour agrandir...
    Bonjour Taoufik,
    Super ton idée, ça évite de subir les restrictions de 2000 lectures par mois !!
    Comment intègres tu la dll dans ton projet ?
     
  • Partager cette page

    Chargement...