Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. (Erledigt) http post request für CodeProject.AI calls

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    (Erledigt) http post request für CodeProject.AI calls

    This topic has been deleted. Only users with topic management privileges can see it.
    • ofri2607
      ofri2607 @uwe72 last edited by

      @uwe72 sagte in http post request für CodeProject.AI calls:

      Update: node-fetch funktioniert auch nicht

      node-fetch funktioniert bei mir einwandfrei mit node-fetch@2 in der Javascript-Instanz unter „Zusätzliche NPM-Module“ eingetragen.
      Das @2 ist wesentlich - siehe hierzu auch https://github.com/node-fetch/node-fetch#loading-and-configuring-the-module

      U 1 Reply Last reply Reply Quote 0
      • Marc Berg
        Marc Berg Most Active @uwe72 last edited by

        @uwe72 sagte in http post request für CodeProject.AI calls:

        Das ganze Thema rund um KI, d.h. um den AI Server ist sehr einfach. Ist mit docker in ein paar Minuten erstellt.

        Vielen Dank, sehr interessant! Docker Image lädt schon, mal sehen wie weit ich mit meiner Hardware komme ...

        U 1 Reply Last reply Reply Quote 0
        • U
          uwe72 @Marc Berg last edited by

          @marc-berg Kommt auch stark auf die Bildgröße darauf an. Je nach Größe/Auflösung schwankt die Erkennungszeit bei mir zwischen 250ms und 5s.

          Marc Berg 1 Reply Last reply Reply Quote 0
          • U
            uwe72 @ofri2607 last edited by

            @ofri2607 Danke dir.

            Habe es nun mal über den Weg probiert. Funktioniert noch nicht auf Anhieb. Irgendwas mache ich noch falsch.

            unter /opt/iobroker/

            npm install node-fetch@2
            

            ?!

            Dann in der JS-Instanz habe ich
            node-fetch@2
            als Module ergänzt.

            Dann im Script:

            const fetch2 = require('node-fetch@2');
            

            ?

            Bringt den Fehler:

            script.js.common.Automatisierungen.KI_node_fetch: Error: Cannot find module 'node-fetch@2'
            
            ofri2607 1 Reply Last reply Reply Quote 0
            • ofri2607
              ofri2607 @uwe72 last edited by

              @uwe72

              im Skript das @2 weglassen (das ist nur für den Installer, dass er die v2 installiert und nicht die v3), d.h.

              const fetch2 = require('node-fetch');
              
              
              U 1 Reply Last reply Reply Quote 1
              • Marc Berg
                Marc Berg Most Active @uwe72 last edited by

                @uwe72 sagte in http post request für CodeProject.AI calls:

                Kommt auch stark auf die Bildgröße darauf an. Je nach Größe/Auflösung schwankt die Erkennungszeit bei mir zwischen 250ms und 5s.

                Ich finde das schon richtig cool. Eine halbe Sekunde für einen älteren i3 ist okay.

                fc3b1f45-1c99-4703-8966-1de05e5f25b4-grafik.png

                Jetzt fehlt mir nur noch ein Anwendungsfall. 🙂

                1 Reply Last reply Reply Quote 1
                • U
                  uwe72 @ofri2607 last edited by

                  @ofri2607 Funktioniert jetzt, danke!! Nun habe ich 2 Optionen. D.h. mit node-fetch oder axios

                  U 1 Reply Last reply Reply Quote 0
                  • U
                    uwe72 @uwe72 last edited by

                    Hab nun diesen Zwischenstand. Der aber leider nicht funktioniert.

                    var fetch = require('node-fetch');
                    const FormData = require('form-data');
                    
                    doDetection();
                    function doDetection() {
                        request.get({url: "http://192.168.178.124/kennzeichen.png", 
                            encoding: null},  async function (err, response, body) {
                            if (err) {
                                throw err;
                            }
                    
                            var formData = new FormData();
                            formData.append('image', body);
                    
                            const response2 = await fetch('http://192.168.178.124:32168/v1/vision/custom/licence-plates',         
                                {method: 'POST', body: formData});
                            const result = await response2.json();
                            log("Result: " + JSON.stringify(result))
                        });
                    }
                    

                    Fehlermeldung:

                    javascript.1 (25773) script.js.common.Automatisierungen.KI5_works_better: Result: {"success":false,"error":"Unable to create YOLO detector for model licence-plates","code":500,"command":"custom","moduleId":"ObjectDetectionYolo","executionProvider":"CPU","canUseGPU":false,"analysisRoundTripMs":28}
                    
                    ofri2607 Marc Berg 2 Replies Last reply Reply Quote 0
                    • ofri2607
                      ofri2607 @uwe72 last edited by

                      @uwe72
                      Ich kenne zwar den request / das Thema jetzt nicht, aber ist an sich spannend 🙂
                      Bist du dir sicher das du den body vom callback aus dem request direkt so weiter verarbeiten kannst und keine Aufbereitung (oder ähnliches) dazu brauchst?

                      1 Reply Last reply Reply Quote 0
                      • Marc Berg
                        Marc Berg Most Active last edited by

                        @uwe72

                        Sicher, dass dieser Aufruf hier korrekt ist?

                        /v1/vision/custom/licence-plates

                        Hier und hier steht

                        /v1/image/alpr
                        
                        U 1 Reply Last reply Reply Quote 0
                        • Marc Berg
                          Marc Berg Most Active @uwe72 last edited by

                          @uwe72 sagte in http post request für CodeProject.AI calls:

                          Fehlermeldung:

                          Nach einigen Fehlversuchen beim korrekten Parametrieren des POST Requests habe ich es jetzt in NodeRed hinbekommen. Es gibt einen "Deepstack" Node, die die Anfrage offensichtlich korrekt formatiert:

                          11a27548-a279-42a6-877c-141d1c417802-grafik.png

                          Der Aufruf erfolgt mit

                          v1/vision/alpr
                          
                          U 1 Reply Last reply Reply Quote 1
                          • U
                            uwe72 @Marc Berg last edited by uwe72

                            @marc-berg ich schau mir dies heute abend an, wenn ich "zuhause" bin. Danke dafür! Kenne mich mit nodered nicht aus. Kannst du zeigen wie der post request nun bei dir konfiguriert ist oder alternativ fällt dir bei meinem request noch was auf? Vielen Dank und Gruß aus Brasilien

                            Marc Berg 1 Reply Last reply Reply Quote 0
                            • Marc Berg
                              Marc Berg Most Active @uwe72 last edited by

                              @uwe72 sagte in http post request für CodeProject.AI calls:

                              fällt dir bei meinem request noch was auf?

                              Probiere es erstmal mit

                              /v1/image/alpr
                              

                              oder

                              /v1/vision/alpr
                              

                              Dann kommt mindestens mal eine andere Fehlermeldung, denn deine Meldung bekomme ich auch, wenn ich diese URL (...license-plates) benutze.

                              U 2 Replies Last reply Reply Quote 0
                              • U
                                uwe72 @Marc Berg last edited by

                                @marc-berg Du hattest recht, es kommt eine andere Fehlermeldung 😉

                                Das Bild existiert. Habe auch eine Version wo ich das Bild zuerst auf der Festplatte zwischenspeichere. Gleiches Verhalten.

                                Kann kein Unterschied mehr erkennen zu:
                                https://www.codeproject.com/AI/docs/api/api_reference.html

                                http://192.168.178.124:32168/v1/image/alpr --> Funktioniert bei mir nicht.

                                Hast Du mir noch einen Tipp?

                                var fetch = require('node-fetch');
                                const FormData = require('form-data');
                                
                                doDetection();
                                function doDetection() {
                                    request.get({url: "http://192.168.178.124/kennzeichen.png", 
                                        encoding: null},  async function (err, response, body) {
                                        if (err) {
                                            throw err;
                                        }
                                
                                        var formData = new FormData();
                                        formData.append('upload', body);
                                
                                        var url = 'http://192.168.178.124:32168/v1/vision/alpr';
                                        const response2 = await fetch(url, {method: 'POST', body: formData});
                                        const result =  await response2.json();
                                        log("Result: " + JSON.stringify(result));
                                    });
                                }
                                

                                Neue Fehlermeldung:

                                javascript.1 (30020) script.js.common.Automatisierungen.KI5_works_better: Result: {"type":"https://tools.ietf.org/html/rfc7231#section-6.5.4","title":"Not Found","status":404,"traceId":"00-7635e33346ec49308c1960652c3a9519-6f9794d0678c038f-00"}
                                
                                1 Reply Last reply Reply Quote 0
                                • U
                                  uwe72 @Marc Berg last edited by uwe72

                                  @marc-berg Darf ich fragen. welche AI-Server Version du verwendest? Über docker/docker-compose? Falls ja, welches tag? Danke&Grüße

                                  Marc Berg 1 Reply Last reply Reply Quote 0
                                  • Marc Berg
                                    Marc Berg Most Active @uwe72 last edited by Marc Berg

                                    @uwe72 sagte in http post request für CodeProject.AI calls:

                                    Falls ja, welches tag?

                                    Ich habe einfach die aktuellste Version mit dem CPU Tag genommen, da ist das Image etwas kleiner. Ich kann mir aber nicht vorstellen, dass es daran liegt. Welche Module sind bei dir installiert?


                                    IMG_5784.jpeg

                                    codeproject:
                                        container_name: codeproject
                                        image: codeproject/ai-server:cpu-2.4.7
                                        hostname: codeproject
                                        restart: unless-stopped
                                        networks:
                                          test:
                                        volumes:
                                          - /opt/docker/codeproject/data:/etc/codeproject/ai
                                          - /opt/docker/codeproject/modules:/app/modules      
                                          - /etc/localtime:/etc/localtime:ro
                                        ports:
                                          - "32168:32168"
                                    

                                    EDIT: habe das mal im Javascript Adapter nachgestellt. Dieser Code läuft bei mir, musst du nur noch mit dem Abfragen des Bildes per http ergänzen:

                                    let imageUrl = '/opt/iobroker/1600-1200-max.jpg';
                                    let apiURL = 'http://nuc.fritz.box:32168/v1/vision/alpr';
                                    
                                    var request = require('request');
                                    var fs = require('fs');
                                    
                                    var options = {
                                        method: 'POST',
                                        url: apiURL,
                                        headers: {
                                            'Content-Type': 'multipart/form-data'
                                        },
                                        formData: {
                                            image: fs.createReadStream(imageUrl)
                                        }
                                    };
                                    
                                    request(options, function (error, response) {
                                        if (error) throw new Error(error);
                                        log("Result: "+response.body);
                                    });
                                    
                                    U 1 Reply Last reply Reply Quote 1
                                    • U
                                      uwe72 @Marc Berg last edited by uwe72

                                      @marc-berg Ganz herzlichen Dank an Dich!!

                                      Jetzt läuft sowohl die Kennzeichenerkennung

                                      javascript.1 (138637) script.js.common.Automatisierungen.DISK_ALPR: Result: {"success":true,"predictions":[{"confidence":0.7975177963574728,"label":"Plate: MUC 0 HF29","plate":"MUC 0 HF29","x_min":450,"y_min":220,"x_max":654,"y_max":260}],"message":"Found Plate: MUC 0 HF29","processMs":166,"inferenceMs":150,"code":200,"command":"alpr","moduleId":"ALPR","executionProvider":"CPU","canUseGPU":false,"analysisRoundTripMs":187}
                                      

                                      als auch die Erkennung von spezifischen Personen:

                                      javascript.1 (138637) script.js.common.Automatisierungen.DISK_FACE: Result: {"message":"A face was recognised","count":1,"predictions":[{"confidence":0.9747644662857056,"userid":"Uwe","x_min":433,"y_min":163,"x_max":677,"y_max":504}],"success":true,"inferenceMs":223,"processMs":233,"code":200,"command":"recognize","moduleId":"FaceProcessing","executionProvider":"CPU","canUseGPU":false,"analysisRoundTripMs":238,"processedBy":"localhost"}
                                      

                                      Diese Änderungen habe ich - aufgrund deiner Hilfe - noch gemacht:

                                      • In JavaScript deinen Ansatz gewählt über request, statt fetch.
                                      • Zudem speichere ich das Bild noch auf der Festplatte und lese es wieder bevor ich es an den Server (als Stream) sende.. Hier will ich noch optimieren. Es würde mir im Normalfall reichen das Bild im Speicher zu haben
                                      • Das war es vermutlich schon. In Docker hatte ich nun noch exakt deine Version (cpu-2.4.7), statt "latest" verwendet (2.3.2 alpha)

                                      Ich denke auf Basis dessen kann was Gutes erstehen 🙂

                                      Marc Berg 1 Reply Last reply Reply Quote 0
                                      • Marc Berg
                                        Marc Berg Most Active @uwe72 last edited by

                                        @uwe72 sagte in (Erledigt) http post request für CodeProject.AI calls:

                                        Ich denke auf Basis dessen kann was Gutes erstehen

                                        Ja, coole Sache das. Schön, dass es läuft! Bekommt man eigentlich eleganter raus, welche URL jeweils benutzt werden muss, außer über die Browser Entwicklerkonsole?

                                        1 Reply Last reply Reply Quote 0
                                        • U
                                          uwe72 @Marc Berg last edited by

                                          @marc-berg ich habe alle URs in dem von dir geposteten Link entnommen:
                                          https://www.codeproject.com/AI/docs/api/api_reference.html#license-plate-reader

                                          Im AI Server Log kann man noch ein wenig schauen was passiert wenn man die Erkennungen über die Webseite macht.

                                          Sonst habe ich keine Idee.

                                          1 Reply Last reply Reply Quote 0
                                          • First post
                                            Last post

                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          810
                                          Online

                                          31.8k
                                          Users

                                          80.0k
                                          Topics

                                          1.3m
                                          Posts

                                          3
                                          23
                                          1254
                                          Loading More Posts
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          The ioBroker Community 2014-2023
                                          logo