Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Überführung funktionierendes node.js Script

    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

    Überführung funktionierendes node.js Script

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

      @uwe72
      Bitte KonsolenTEXT in CodeTags posten.

      Die Ausgabe von

      which nodejs && nodejs -v && which node && node -v && which npm && npm -v && apt policy nodejs
      

      schaut wie aus?
      Und als root hampelt man auch nicht herum.

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

        @thomas-braun

        Auf der Konsole ausgeführt:

        /usr/bin/nodejs
        v10.19.0
        /usr/bin/node
        v10.19.0
        /usr/bin/npm
        6.14.4
        nodejs:
          Installed: 10.19.0~dfsg-3ubuntu1
          Candidate: 10.19.0~dfsg-3ubuntu1
          Version table:
         *** 10.19.0~dfsg-3ubuntu1 500
                500 http://de.archive.ubuntu.com/ubuntu focal/universe amd64 Packages
                100 /var/lib/dpkg/status
        
        
        Thomas Braun 1 Reply Last reply Reply Quote 0
        • Thomas Braun
          Thomas Braun Most Active @uwe72 last edited by

          @uwe72
          Zwar sauber installiert, allerdings die 'falsche' Version.
          Du willst die von nodesource gepackte Variante haben:

          https://forum.iobroker.net/topic/35090/howto-nodejs-installation-und-upgrades-unter-debian

          U 1 Reply Last reply Reply Quote 0
          • AlCalzone
            AlCalzone Developer last edited by

            Kommando zurück... Ich weiß woran es liegt.
            Der Skript-Adapter sandboxed das fs-Modul, damit da bestimmte Dinge nicht gemacht werden.

            Daher existiert fs.promises dort nicht. Ein Workaround wäre, die synchrone FS API zu nutzen.

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

              @thomas-braun

              Ich muss mich leider korrigieren. Ich hatte einen Denkfehler. Bei mir läuft iobroker ja in einem Docker-Container. Die vorherige Logausgabe war von meinem NUC, und nicht vom ioBroker Docker Container.

              Diese ist die Ausgabe vom Container:

              
              /usr/bin/nodejs
              v12.20.1
              /usr/bin/node
              v12.20.1
              /usr/bin/npm
              6.14.10
              nodejs:
                Installiert:           12.20.1-1nodesource1
                Installationskandidat: 12.21.0-1nodesource1
                Versionstabelle:
                   12.21.0-1nodesource1 500
                      500 https://deb.nodesource.com/node_12.x buster/main amd64 Packages
               *** 12.20.1-1nodesource1 100
                      100 /var/lib/dpkg/status
                   10.24.0~dfsg-1~deb10u1 500
                      500 http://security.debian.org/debian-security buster/updates/main amd64 Packages
                   10.21.0~dfsg-1~deb10u1 500
                      500 http://deb.debian.org/debian buster/main amd64 Packages
              
              

              Aber auch auf der Konsole des ioBroker Docker containers läuft das Script auf der Konsole.

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

                @alcalzone Versuche ich mal umzubauen

                Wobei ich vermutlich daran scheitere:

                Das ist ja der Ausgangszustand:

                 const cocoSsd = require('@tensorflow-models/coco-ssd');
                 const tf = require('@tensorflow/tfjs-node');
                 const fs2 = require('fs').promises;
                
                 // Load the Coco SSD model and image.
                 Promise.all([cocoSsd.load(), fs2.readFile('/home/iobroker/12-14-2020-tout.jpg')])
                 .then((results) => {
                   // First result is the COCO-SSD model object.
                   const model = results[0];
                   // Second result is image buffer.
                   const imgTensor = tf.node.decodeImage(new Uint8Array(results[1]), 3);
                   // Call detect() to run inference.
                   return model.detect(imgTensor);
                 })
                 .then((predictions) => {
                   console.log(JSON.stringify(predictions, null, 2));
                 });
                

                Das ist mein erster Versuch, funktioniert aber noch nicht:

                 const cocoSsd = require('@tensorflow-models/coco-ssd');
                 const tf = require('@tensorflow/tfjs-node');
                 const fs = require('fs');
                
                fs.readFile('/home/iobroker/12-14-2020-tout.jpg', function read(err, data) {
                    if (err) {
                        throw err;
                    }
                    
                    Promise.all([cocoSsd.load()])
                        .then((results) => {
                        const model = results[0];
                        const imgTensor = tf.node.decodeImage(new Uint8Array(data), 3);
                        return model.detect(imgTensor);
                    })
                    .then((predictions) => {
                        console.log(JSON.stringify(predictions, null, 2));
                    });
                    
                });
                
                

                Fehler:

                javascript.0	2021-02-25 11:41:39.008	error	(343176) at processTicksAndRejections (internal/process/task_queues.js:97:5)
                javascript.0	2021-02-25 11:41:39.008	error	(343176) at runMicrotasks (<anonymous>)
                javascript.0	2021-02-25 11:41:39.008	error	(343176) at script.js.common.000_Test6:14:35
                javascript.0	2021-02-25 11:41:39.008	error	(343176) at Object.decodeImage (/opt/iobroker/node_modules/iobroker.javascript/node_modules/@tensorflow/tfjs-node/dist/image.js:204:20)
                javascript.0	2021-02-25 11:41:39.008	error	(343176) at decodeJpeg (/opt/iobroker/node_modules/iobroker.javascript/node_modules/@tensorflow/tfjs-node/dist/image.js:100:19)
                javascript.0	2021-02-25 11:41:39.008	error	(343176) at Object.tidy (/opt/iobroker/node_modules/iobroker.javascript/node_modules/@tensorflow/tfjs-core/src/globals.ts:192:17)
                javascript.0	2021-02-25 11:41:39.007	error	(343176) at Engine.tidy (/opt/iobroker/node_modules/iobroker.javascript/node_modules/@tensorflow/tfjs-core/src/engine.ts:440:17)
                javascript.0	2021-02-25 11:41:39.007	error	(343176) at Engine.scopedRun (/opt/iobroker/node_modules/iobroker.javascript/node_modules/@tensorflow/tfjs-core/src/engine.ts:453:19)
                javascript.0	2021-02-25 11:41:39.007	error	(343176) at /opt/iobroker/node_modules/iobroker.javascript/node_modules/@tensorflow/tfjs-core/src/engine.ts:442:20
                javascript.0	2021-02-25 11:41:39.007	error	(343176) at /opt/iobroker/node_modules/iobroker.javascript/node_modules/@tensorflow/tfjs-node/dist/image.js:102:14
                javascript.0	2021-02-25 11:41:39.007	error	(343176) at NodeJSKernelBackend.decodeJpeg (/opt/iobroker/node_modules/iobroker.javascript/node_modules/@tensorflow/tfjs-node/dist/nodejs_kernel_backend.js:333:33)
                javascript.0	2021-02-25 11:41:39.007	error	(343176) at Object.scalar (/opt/iobroker/node_modules/iobroker.javascript/node_modules/@tensorflow/tfjs-core/src/ops/scalar.ts:54:10)
                javascript.0	2021-02-25 11:41:39.007	error	(343176) at makeTensor (/opt/iobroker/node_modules/iobroker.javascript/node_modules/@tensorflow/tfjs-core/src/ops/tensor_ops_util.ts:39:11)
                javascript.0	2021-02-25 11:41:39.007	error	(343176) script.js.common.000_Test6: Error: values passed to tensor(values) must be a number/boolean/string or an array of numbers/booleans/strings, or a TypedArray
                
                U 1 Reply Last reply Reply Quote 0
                • U
                  uwe72 @uwe72 last edited by

                  @AlCalzone

                  Danke Dir!

                  Habe es nun hinbekommen, musste noch das Uint8Array elimieren.

                  Das ist der funktionierende Umbau:

                   const cocoSsd = require('@tensorflow-models/coco-ssd');
                   const tf = require('@tensorflow/tfjs-node');
                  
                  fs.readFile('/home/clement/tfjs-project/826869587.jpg', function read(err, data) {
                      if (err) {
                          throw err;
                      }
                  
                      Promise.all([cocoSsd.load()])
                          .then((results) => {
                          const model = results[0];
                          const imgTensor = tf.node.decodeImage(data, 3);
                          return model.detect(imgTensor);
                      })
                      .then((predictions) => {
                          console.log(JSON.stringify(predictions, null, 2));
                      });
                      
                  });
                  
                  AlCalzone 1 Reply Last reply Reply Quote 0
                  • AlCalzone
                    AlCalzone Developer @uwe72 last edited by

                    @uwe72 Zeilen 9-11 kannst du noch ein bisschen vereinfachen, da du ja jetzt nicht auf mehrere Promises wartest.

                    cocoSsd.load().then(model => {
                        const imgTensor = ...
                    

                    Evtl kannst du das hässliche .then Gedöns auch gegen async/await ersetzen:

                    const cocoSsd = require("@tensorflow-models/coco-ssd");
                    const tf = require("@tensorflow/tfjs-node");
                    
                    fs.readFile(
                      "/home/clement/tfjs-project/826869587.jpg",
                      async function read(err, data) {
                        if (err) {
                          throw err;
                        }
                    
                        const model = await cocoSsd.load();
                        const imgTensor = tf.node.decodeImage(data, 3);
                        const predictions = await model.detect(imgTensor); // ggf. ohne await (?)
                    
                        console.log(JSON.stringify(predictions, null, 2));
                      }
                    );
                    
                    U 1 Reply Last reply Reply Quote 0
                    • U
                      uwe72 @AlCalzone last edited by uwe72

                      @alcalzone Perfekt, danke! Code funktioniert, aber das untere await muss noch sein.

                      Off-Topic Frage: Weißt Du warum bei diesem Script nie beim Script das Log erscheint, sondern immer nur "im Hauptlog" im Reiter Log? Bei anderen Scripten zeigt es mir das Log auch unter dem Script an.

                      6e10be3f-84ff-49ee-98f0-0dbd5e5ffa03-image.png

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

                        @uwe72 Keine Ahnung - hab ich auch manchmal, konnte es aber nie gezielt reproduzieren.

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        987
                        Online

                        31.8k
                        Users

                        80.0k
                        Topics

                        1.3m
                        Posts

                        javascript
                        3
                        12
                        444
                        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