Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. Nur mal eine Idee: Microsoft cognitive services

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.3k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.3k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.6k

Nur mal eine Idee: Microsoft cognitive services

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
20 Beiträge 7 Kommentatoren 3.8k Aufrufe 7 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • S Offline
    S Offline
    schroedinger
    schrieb am zuletzt editiert von
    #1

    Hi,

    das Folgende ist weniger ein Wunsch, als nur mal so ne Idee: Microsoft cognitive services über iobroker nutzen.

    Falls ihr Microsoft cognitive services nicht kennt: hier gibts Infos: https://azure.microsoft.com/en-us/servi … ices/face/

    es müßte doch möglich sein (vielleicht braucht es dazu nicht mal einen adapter, vielleicht genügt ein script) , dass man ein Bild , das man vielleicht über eine ip cam oder eine digitale doorbell erhält, an Microsoft cognitive services sendet (mit PUT ?), dort analysieren und identifizieren lässt und als Antwort zurückerhält, ob das Gesicht mit einer dort zuvor festgelegten Person übereinstimmt.

    Also zB. ob es sich um ein Familienmitglied oder einen Freund handelt.

    Natürlich bieten kommerzielle doorbells solche DInge bereits an ... aber eben nicht kostenlos. Und die Microsoft cognitive services sind (zumindest bis 20 transactions per minute) kostenlos.

    hier mehr dazu:

    https://westus.dev.cognitive.microsoft. ... 0f30395236

    (auf die Idee bin ich übrigens nicht selber gekommen, sondern ein homebridge-plugin über das ich gestolpert bin, hat mich darauf gebracht)

    Ich habe leider nicht das Können (und zz auch nicht die Möglichkeit es mir anzueignen) selber ein script oder einen adapter dafür zu schreiben, aber vielleicht findet ja jemand von euch die Idee cool und versucht mal was.

    (das ganze ginge übrigens auch für Stimmerkennung)

    schroedinger

    1 Antwort Letzte Antwort
    0
    • ? Offline
      ? Offline
      Ein ehemaliger Benutzer
      schrieb am zuletzt editiert von
      #2

      Servus Schroedinger,

      gibt es auch als Dienst von der Nürnberger Firma Bio-ID.

      https://www.bioid.com/

      Die haben einen Playground, bin mir aber nicht sicher ob die auch Dienste für einzelne Haushalte anbieten.

      https://www.bioid.com/playground/

      Herzliche Grüße

      Equilora

      1 Antwort Letzte Antwort
      0
      • DutchmanD Offline
        DutchmanD Offline
        Dutchman
        Developer Most Active Administrators
        schrieb am zuletzt editiert von
        #3

        Es würde gehen über die API Bild schicken, analysieren lassen und Resultat zurück

        https://westus.dev.cognitive.microsoft. … 0f30395236

        Sent from my iPhone using Tapatalk

        1 Antwort Letzte Antwort
        0
        • S Offline
          S Offline
          schroedinger
          schrieb am zuletzt editiert von
          #4

          hi,

          @ Dutchman:

          Ja, über die api habe ich bereits manuell Bilder hochgeschickt, analysiert und als Antwort zurückbekommen ob die Person auf dem Bild mit einer anderen Person übereinstimmt; d.h. händisch habe ich das bereits hinbekommen.

          (übrigens - cool: die Software schätzt das Alter, das Geschlecht, die Stimmung usw.)

          Die Idee wäre die , ob man das ganze nicht irgendwie in iobroker einbinden kann; zB. im Sinne von : iobroker sendet ein Bild von einer ipcam hoch, dort wird es analysiert und meldet dann - ev. in Objekt - zurück, zB. ob die Person bekannt ist.

          das ganze hat jemand mal versucht mit einen homebridge-plugin zu realisieren; siehe hier:

          https://www.npmjs.com/package/homebridg … tification

          Wie gesagt - nur eine Idee; aber vielleicht findet jemand das spannend und schreibt was dazu

          schroedinger

          1 Antwort Letzte Antwort
          0
          • DutchmanD Offline
            DutchmanD Offline
            Dutchman
            Developer Most Active Administrators
            schrieb am zuletzt editiert von
            #5

            Ehm klinkt garnichts so schwer finde es auch interessant Mal Schaun ob an WE bissl Zeit übrig ist.

            Wen du das per API/wen machst wie gehst?

            Also bis Hick und dann kommt ein Resultat in Browser oder wie muss ich das verstehen

            Lese mich später Mal ein lebe das System nicht nicht so gut

            Sent from my iPhone using Tapatalk

            1 Antwort Letzte Antwort
            0
            • S Offline
              S Offline
              Snatch
              schrieb am zuletzt editiert von
              #6

              So etwas wäre auf jeden Fall super. Ich versuche schon lange, eine Gesichterkennung zu machen und bekomme das nicht hin.

              1 Antwort Letzte Antwort
              0
              • S Offline
                S Offline
                schroedinger
                schrieb am zuletzt editiert von
                #7

                Hi,

                ich werde mal - etwas ausführlicher - beschreiben wie das ganze funktionieren kann (bis wie ich dies manuell gemacht habe)

                1.) Registierung und API

                Voraussetzung ist, dass man bei Microsoft cognitive services registiert ist (kostenlos möglich), einen API hat und dort eine Personengruppe und min. 1 Person definiert hat.

                2.) Hochladen eines webcam Bildes

                Im ersten Schritt wird ein Bild (zB. von einer webcam hochgeladen).

                Dies funktioniert mit dieser HTTP Methode:

                ` > POST https://westeurope.api.cognitive.micros … arks=false HTTP/1.1

                Host: westeurope.api.cognitive.microsoft.com

                Content-Type: application/json

                Ocp-Apim-Subscription-Key: a1f4r68c10bfe32180a85b80bf98eb10

                {

                "url": "http://192.168.1.14:1024/photo.jpg"

                } `

                Man erhält dann diese Antwort:

                ` > Pragma: no-cache

                apim-request-id: 160ef8c3-5642-49f7-81f8-791eb565ef15

                Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

                x-content-type-options: nosniff

                Cache-Control: no-cache

                Date: Fri, 05 Oct 2018 09:31:54 GMT

                X-AspNet-Version: 4.0.30319

                X-Powered-By: ASP.NET

                Content-Length: 115

                Content-Type: application/json; charset=utf-8

                Expires: -1

                [{

                "faceId": "6caf4903-e21b-4865-8353-1613d5832a0b",

                "faceRectangle": {

                "top": 204,

                "left": 384,

                "width": 316,

                "height": 316

                }

                }] `
                Wichtig ist jetzt die erhaltene „faceID“ 6caf4903-e21b-4865-8353-1613d5832a0b

                3.) Gesicht idenfizieren

                Jetzt kann das Gesicht mit den Personen der „Personengruppe“ verglichen werden.

                Dazu braucht man nur die erhaltene „faceID“ und den Namen der „Personengruppe“ (und natürlich den API-key)

                Wieder mit http Methode senden:

                ` > POST https://westeurope.api.cognitive.micros … 0/identify HTTP/1.1

                Host: westeurope.api.cognitive.microsoft.com

                Content-Type: application/json

                Ocp-Apim-Subscription-Key: 49595595e1e3180a85b80bf98eb10

                {

                "largePersonGroupId": "biks_largepersongroup",

                "faceIds": [

                "6caf4903-e21b-4865-8353-1613d5832a0b"

                ],

                "maxNumOfCandidatesReturned": 1,

                "confidenceThreshold": 0.5

                } `

                Und als Ergebnis erhält man die PersonenID (= diese entspricht der im Bild gefundenen Person:)

                ` > Pragma: no-cache

                apim-request-id: 84d373f9-cd54-4b6a-b914-afb249f89cfe

                Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

                x-content-type-options: nosniff

                Cache-Control: no-cache

                Date: Fri, 05 Oct 2018 09:39:11 GMT

                X-AspNet-Version: 4.0.30319

                X-Powered-By: ASP.NET

                Content-Length: 139

                Content-Type: application/json; charset=utf-8

                Expires: -1

                [{

                "faceId": "6caf4903-e21b-4865-8353-1613d5832a0b",

                "candidates": [{

                "personId": "d03d58c4-7d21-4f51-9d25-3e3400489381",

                "confidence": 0.93749

                }]

                }] `

                Bei dem Beispiel hier wurde daher die Person im Bild mit 93,75% Wahrscheinlichkeit als die Person mit der ID d03d58c4-7d21-4f51-9d25-3e3400489381 identifiziert.

                D.h. zusammengefasst:

                1.) Bild hochsenden

                2.) erhalte „faceID“

                3.) „faceID“ hoch senden -> erhalte Antwort ob dieses Gesicht mit einer Person der „Personengruppe“ übereinstimmt

                Ich hoffe ich konnte das ganze halbwegs nachvollziehbar erklären.

                (die Erläuterung bei den microsoft cognitive services sind allerdings sehr gut)

                (siehe hier: https://westeurope.dev.cognitive.micros … 39/console

                Cu schroedinger

                1 Antwort Letzte Antwort
                0
                • DutchmanD Offline
                  DutchmanD Offline
                  Dutchman
                  Developer Most Active Administrators
                  schrieb am zuletzt editiert von
                  #8

                  Klinkt schlüssig und plausible und garnicht Mal so schwer in ja zu machen…

                  Hoffentlich ist am WE noch was Zeit übrig ;)

                  Sent from my iPhone using Tapatalk

                  1 Antwort Letzte Antwort
                  0
                  • S Offline
                    S Offline
                    schroedinger
                    schrieb am zuletzt editiert von
                    #9

                    hi,

                    ich denke ich bin einen wesentlichen Schritt weiter .

                    (Mit der Hilfe von MS) habe ich ein Skript geschrieben, welches das Bild der Webcam hochladet und als response "faceId" und ein Mengen von attributes zurücksendet.

                    Hier das Script:

                    ` > 'use strict';

                    const request = require('request');

                    // Replace <subscription key="">with your valid subscription key.

                    const subscriptionKey = '<api_key>'; // hier muss der API-key eingetragen werden

                    // You must use the same location in your REST call as you used to get your

                    // subscription keys. For example, if you got your subscription keys from

                    // westus, replace "westcentralus" in the URL below with "westus".

                    const uriBase = 'https://westeurope.api.cognitive.micros … 1.0/detect';

                    const imageUrl =

                    'http://<ip_adresse>/photo.jpg'; //hier die IP-Adresse des Bildes oder der Webcam eintragen

                    // Request parameters.

                    const params = {

                    'returnFaceId': 'true',

                    'returnFaceLandmarks': 'false',

                    'returnFaceAttributes': 'age,gender,headPose,smile,facialHair,glasses,' +

                    'emotion,hair,makeup,occlusion,accessories,blur,exposure,noise'

                    };

                    const options = {

                    uri: uriBase,

                    qs: params,

                    body: '{"url": ' + '"' + imageUrl + '"}',

                    headers: {

                    'Content-Type': 'application/json',

                    'Ocp-Apim-Subscription-Key' : subscriptionKey

                    }

                    };

                    request.post(options, (error, response, body) => {

                    if (error) {

                    console.log('Error: ', error);

                    return;

                    }

                    let jsonResponse = JSON.stringify(JSON.parse(body), null, ' ');

                    console.log('JSON Response\n');

                    console.log(jsonResponse);

                    });</ip_adresse></api_key></subscription> `

                    wenn man dieses script startet (es läuft fehlerlos), dann erhält man im log folgende response (man beachte die Vielzahl an Attributen die die Gesichtserkennung versucht zu erkennen)

                    ` > javascript.0 2018-10-07 20:24:30.081 info ]

                    javascript.0 2018-10-07 20:24:30.081 info }

                    javascript.0 2018-10-07 20:24:30.081 info }

                    javascript.0 2018-10-07 20:24:30.081 info }

                    javascript.0 2018-10-07 20:24:30.081 info ]

                    javascript.0 2018-10-07 20:24:30.081 info }

                    javascript.0 2018-10-07 20:24:30.081 info "confidence": 0.02

                    javascript.0 2018-10-07 20:24:30.081 info "color": "red",

                    javascript.0 2018-10-07 20:24:30.081 info {

                    javascript.0 2018-10-07 20:24:30.081 info },

                    javascript.0 2018-10-07 20:24:30.081 info "confidence": 0.12

                    javascript.0 2018-10-07 20:24:30.081 info "color": "brown",

                    javascript.0 2018-10-07 20:24:30.081 info {

                    javascript.0 2018-10-07 20:24:30.081 info },

                    javascript.0 2018-10-07 20:24:30.081 info "confidence": 0.13

                    javascript.0 2018-10-07 20:24:30.081 info "color": "black",

                    javascript.0 2018-10-07 20:24:30.081 info {

                    javascript.0 2018-10-07 20:24:30.081 info },

                    javascript.0 2018-10-07 20:24:30.081 info "confidence": 0.42

                    javascript.0 2018-10-07 20:24:30.081 info "color": "other",

                    javascript.0 2018-10-07 20:24:30.081 info {

                    javascript.0 2018-10-07 20:24:30.081 info },

                    javascript.0 2018-10-07 20:24:30.081 info "confidence": 0.94

                    javascript.0 2018-10-07 20:24:30.081 info "color": "blond",

                    javascript.0 2018-10-07 20:24:30.081 info {

                    javascript.0 2018-10-07 20:24:30.081 info },

                    javascript.0 2018-10-07 20:24:30.081 info "confidence": 1

                    javascript.0 2018-10-07 20:24:30.081 info "color": "gray",

                    javascript.0 2018-10-07 20:24:30.081 info {

                    javascript.0 2018-10-07 20:24:30.081 info "hairColor": [

                    javascript.0 2018-10-07 20:24:30.081 info "invisible": false,

                    javascript.0 2018-10-07 20:24:30.081 info "bald": 0.66,

                    javascript.0 2018-10-07 20:24:30.081 info "hair": {

                    javascript.0 2018-10-07 20:24:30.081 info },

                    javascript.0 2018-10-07 20:24:30.081 info "mouthOccluded": false

                    javascript.0 2018-10-07 20:24:30.081 info "eyeOccluded": false,

                    javascript.0 2018-10-07 20:24:30.081 info "foreheadOccluded": false,

                    javascript.0 2018-10-07 20:24:30.081 info "occlusion": {

                    javascript.0 2018-10-07 20:24:30.081 info "accessories": [],

                    javascript.0 2018-10-07 20:24:30.081 info },

                    javascript.0 2018-10-07 20:24:30.081 info "lipMakeup": false

                    javascript.0 2018-10-07 20:24:30.081 info "eyeMakeup": false,

                    javascript.0 2018-10-07 20:24:30.081 info "makeup": {

                    javascript.0 2018-10-07 20:24:30.081 info },

                    javascript.0 2018-10-07 20:24:30.081 info "value": 0.4

                    javascript.0 2018-10-07 20:24:30.081 info "noiseLevel": "medium",

                    javascript.0 2018-10-07 20:24:30.081 info "noise": {

                    javascript.0 2018-10-07 20:24:30.081 info },

                    javascript.0 2018-10-07 20:24:30.081 info "value": 0.74

                    javascript.0 2018-10-07 20:24:30.081 info "exposureLevel": "goodExposure",

                    javascript.0 2018-10-07 20:24:30.081 info "exposure": {

                    javascript.0 2018-10-07 20:24:30.081 info },

                    javascript.0 2018-10-07 20:24:30.081 info "value": 0.81

                    javascript.0 2018-10-07 20:24:30.081 info "blurLevel": "high",

                    javascript.0 2018-10-07 20:24:30.081 info "blur": {

                    javascript.0 2018-10-07 20:24:30.081 info },

                    javascript.0 2018-10-07 20:24:30.081 info "surprise": 0

                    javascript.0 2018-10-07 20:24:30.081 info "sadness": 0.004,

                    javascript.0 2018-10-07 20:24:30.081 info "neutral": 0.996,

                    javascript.0 2018-10-07 20:24:30.081 info "happiness": 0,

                    javascript.0 2018-10-07 20:24:30.081 info "fear": 0,

                    javascript.0 2018-10-07 20:24:30.081 info "disgust": 0,

                    javascript.0 2018-10-07 20:24:30.081 info "contempt": 0,

                    javascript.0 2018-10-07 20:24:30.081 info "anger": 0,

                    javascript.0 2018-10-07 20:24:30.081 info "emotion": {

                    javascript.0 2018-10-07 20:24:30.081 info "glasses": "NoGlasses",

                    javascript.0 2018-10-07 20:24:30.081 info },

                    javascript.0 2018-10-07 20:24:30.081 info "sideburns": 0.1

                    javascript.0 2018-10-07 20:24:30.081 info "beard": 0.1,

                    javascript.0 2018-10-07 20:24:30.081 info "moustache": 0.1,

                    javascript.0 2018-10-07 20:24:30.081 info "facialHair": {

                    javascript.0 2018-10-07 20:24:30.081 info "age": 49,

                    javascript.0 2018-10-07 20:24:30.081 info "gender": "male",

                    javascript.0 2018-10-07 20:24:30.081 info },

                    javascript.0 2018-10-07 20:24:30.081 info "yaw": -7.8

                    javascript.0 2018-10-07 20:24:30.081 info "roll": 8.1,

                    javascript.0 2018-10-07 20:24:30.081 info "pitch": 0,

                    javascript.0 2018-10-07 20:24:30.081 info "headPose": {

                    javascript.0 2018-10-07 20:24:30.081 info "smile": 0,

                    javascript.0 2018-10-07 20:24:30.081 info "faceAttributes": {

                    javascript.0 2018-10-07 20:24:30.081 info },

                    javascript.0 2018-10-07 20:24:30.081 info "height": 305

                    javascript.0 2018-10-07 20:24:30.081 info "width": 305,

                    javascript.0 2018-10-07 20:24:30.081 info "left": 275,

                    javascript.0 2018-10-07 20:24:30.081 info "top": 221,

                    javascript.0 2018-10-07 20:24:30.081 info "faceRectangle": {

                    javascript.0 2018-10-07 20:24:30.081 info "faceId": "d1dd7a36-6206-4287-8d73-a76788bb4ccb",

                    javascript.0 2018-10-07 20:24:30.081 info { `

                    Wichtig ist jetzt hauptsächlich die der erhaltene "faceId" - Code ("d1dd7a36-6206-4287-8d73-a76788bb4ccb")

                    Diesen Code würde man anschließend wieder an die Cognitive Service senden und als response erhalten , ob das Gesicht mit einer (vorher dort definierten) Person übereinstimmt.

                    Wo ist jetzt mein Problem?

                    Offen gesagt kenne ich mich mit Node JS nicht wirklich aus, daher weiss ich auch nicht wie ich Folgendes verwirklichen kann:

                    In dem oben angeführten Script müßte die erhaltene "faceId" (und ev. einige der zusätzlich erhaltenen face-attributes) in einer Variable (oder einen Datenpunkt?) ablegen um daraus dann wieder ein http request (zu hochladen des faceId) zu erhalten.

                    Die dann erhaltene Antwort (= Name der erkannten Person oder ein "unkown person") sollten dann jedenfalls in einen Datenpunkt abgelegt werden.

                    VIelleicht hat jemand Zeit & Lust das obige Script diesbezüglich zu erweitern?

                    cu

                    schroedinger

                    1 Antwort Letzte Antwort
                    0
                    • S Offline
                      S Offline
                      schroedinger
                      schrieb am zuletzt editiert von
                      #10

                      Hi,

                      mich hat diese Idee (ein IP-cam-Bild an Microsoft cognitive services zu senden um Gesichter zu erkennen & idenfizieren) nicht losgelassen.

                      Und obwohl ich eigentlich JS nicht beherrsche, ist es mir trotzdem gelungen.

                      Ich beschreibe mal was ich erreichen wollte und was mir gelungen ist:

                      Ich wollte

                      • das Bild einer Webcam an die Microsoft API senden und dort das Gesicht oder die Gesichter erkennen zu lassen

                      • die "response" erfassen; d.h. eine "faceID" erhalten und ein paar faceattributes (zB.Alter)

                      • die erhaltene faceId wieder hochladen und dort eine Person identifizieren lassen

                      • den Namen der identifizieren Person in ein iobroker-object schreiben.

                      Gemacht habe ich das mit dem folgenden Script

                      (dazu vorab: ihr werdet schnell feststellen, dass ich nicht wirklich programmieren kann, das ganze kann man sicher eleganter und effizienter programmieren; ich bin sicher, dass einige Programmzeilen überflüssig sind; auch die "remarks" (//) dürften nicht immer nachvollziehbar sein, ich habe diese meistens nur für mich als Gedankenstütze angefügt)

                      Hier das Script:

                      ` > createState('personenIDobject', 'unbekannt!'); // ein iobroker object hier kommt Personen ID rein

                      createState('erkannteperson', 'niemand erkannt'); // hier kommt Name der erkannten Person sonst "unbekannt"

                      'use strict';

                      const request = require('request');

                      // Replace <subscription key="">with your valid subscription key.

                      const subscriptionKey = '<api-key>';

                      // You must use the same location in your REST call as you used to get your

                      // subscription keys. For example, if you got your subscription keys from

                      // westus, replace "westcentralus" in the URL below with "westus".

                      const uriBase = 'https://westeurope.api.cognitive.micros … 1.0/detect';

                      const imageUrl =

                      'http://<ip-adddresse_zu_bild>.jpg'

                      // Request parameters.

                      const params = {

                      'returnFaceId': 'true',

                      'returnFaceLandmarks': 'false',

                      'returnFaceAttributes': 'age,gender,headPose,smile,facialHair,glasses,' +

                      'emotion,hair,makeup,occlusion,accessories,blur,exposure,noise'

                      };

                      const options = {

                      uri: uriBase,

                      qs: params,

                      body: '{"url": ' + '"' + imageUrl + '"}',

                      headers: {

                      'Content-Type': 'application/json',

                      'Ocp-Apim-Subscription-Key' : subscriptionKey

                      }

                      };

                      request.post(options, (error, response, body) => {

                      if (error) {

                      console.log('Error: ', error);

                      return;

                      }

                      let jsonResponse = JSON.stringify(JSON.parse(body), null, ' ');

                      console.log('JSON Response\n');

                      console.log(jsonResponse);

                      var faces = JSON.parse(body);

                      if (faces.length === 0) {

                      return;

                      }

                      var face = faces[0]; // 1. Objekt auf body ist face

                      var faceId = face.faceId; // Wert von property "faceId"

                      // console.log(face);

                      console.log(faceId);

                      // console.log(faces[0].faceRectangle.top); nicht benötigt , nur Lernzwecke

                      var smile = (faces[0].faceAttributes.smile); // Lächenl ja/nein?

                      console.log(smile);

                      var age = (faces[0].faceAttributes.age); // Alter der erkannten Person

                      console.log(age);

                      // **** Gesicht erkannt faceID ist in Variable faceID *****

                      // **** jetzt hochladen und versuchen zu erkennen ******

                      console.log("***** STARTE IDENTIFY");

                      // Request parameters.

                      const uriBase2 = 'https://westeurope.api.cognitive.micros … 0/identify';

                      const params2 = {

                      };

                      const body2 = JSON.stringify({ // definiere hier den body für 2. abfrage

                      "personGroupId": 'klaus_persongroup',

                      "faceIds": [

                      faceId,

                      ],

                      "maxNumOfCandidatesReturned": 1,

                      "confidenceThreshold": 0.5

                      });

                      const options2 = {

                      uri: uriBase2,

                      qs: params2,

                      body: body2,

                      headers: {

                      'Content-Type': 'application/json',

                      'Ocp-Apim-Subscription-Key' : subscriptionKey

                      }

                      };

                      request.post(options2, (error, response, body) => {

                      if (error) {

                      console.log('Error: ', error);

                      return;

                      }

                      let jsonResponse2 = JSON.stringify(JSON.parse(body), null, ' ');

                      console.log('JSON Response\n');

                      console.log(jsonResponse2);

                      var persons = JSON.parse(body);

                      if (persons.length === 0) {

                      return;

                      }

                      var person = persons[0]; // 1. Objekt auf body ist Person

                      var faceId2 = person.faceId; // faceId2 ist value von hochgeladenen gesicht

                      // console.log(face);

                      console.log(faceId2);

                      console.log(jsonResponse2.faceID);

                      console.log(person.faceId);

                      console.log(persons[0].faceId);

                      console.log(persons[0].personId);

                      var personstring = JSON.stringify(JSON.parse(body));

                      var PERSONID = personstring.substr(77, 36); // hole hier aus response erkannte Person

                      console.log("**** Ausweichweg - hole PERSONID mit STR")

                      console.log(PERSONID)

                      setState('javascript.0.personenIDobject',PERSONID);

                      // ab hier Abfrage ob erkannte Person "Klaus" ist ****

                      console.log(PERSONID) // ID der identifizierten Person

                      if (PERSONID == "2d4ad710-6381-480d-9556-7d2567f75632") {

                      console.log("***** KLAUS ******");

                      setState("javascript.0.erkannteperson","Klaus");

                      } else {

                      console.log("unbekannt :-(");

                      setState("javascript.0.erkannteperson","unbekannt");

                      }

                      });

                      });</ip-adddresse_zu_bild></api-key></subscription> `

                      Was versuche ich jetzt noch zu machen?

                      • zurzeit wird nur 1 Person erkannt, dies möchte ich auf mehrer Personen ausweiten

                      • mir überlegen, wie ich das ganze "triggern" kann, d.h. welches Ereignis startet das Script (vermutlich mache ich das über einen Bewegungssenor)

                      • verschiedenen Aktionen zu definieren - wenn eine Person erkannt wird - oder wenn eine unbekannte Person zB. den Garten betritt

                      • vielleicht versuche ich etwas ähnliches auch mit "Stimmerkennung" zu verwirklichen

                      Cool wäre es, wenn man das ganze mit einem Adapter verwirklichen könnte; allerdings dürfte mir dazu sowohl Zeit als auch Können fehlen.

                      Vielleicht findet der eine oder andere das ganze auch interessant und möchte das THema aufgreifen. Oder vielleicht hat jemand Verbesserungsvorschläge. Auch darüber freue ich mich.

                      cu

                      schroedinger

                      1 Antwort Letzte Antwort
                      0
                      • foxriver76F Offline
                        foxriver76F Offline
                        foxriver76
                        Developer
                        schrieb am zuletzt editiert von
                        #11

                        Wie viel Confidence spuckt MS-Algo denn für deine Person aus, wenn du z. B. ein Bild von dir vor die Cam hälst? Ich finde es grundsätzlich eine coole Sache, doch erfassen die IP Cams ja nur zweidimensionale Informationen, weshalb es ja für Sicherheitsgeschichten schon mal komplett raus wäre.

                        Wofür setzt du es ein?

                        Videotutorials & mehr

                        Hier könnt ihr mich unterstützen.

                        1 Antwort Letzte Antwort
                        0
                        • S Offline
                          S Offline
                          schroedinger
                          schrieb am zuletzt editiert von
                          #12

                          Hi,

                          stimmt schon für sicherheitsrelevante DInge würde ich das nicht verwenden - und zB. mit Apple's FaceID nicht zu vergleichen.

                          Ansich ist es daher mehr eine Spielerei; falls es aber mal richtig funktioniert kann man schon ein paar coole Sachen damit machen.

                          1 Antwort Letzte Antwort
                          0
                          • nurChrisN Offline
                            nurChrisN Offline
                            nurChris
                            schrieb am zuletzt editiert von
                            #13

                            Hallo!

                            Ich grab das hier mal wieder etwas aus… Eine solche Funktion hätte ich gerne damit zuverlässig erkannt wird welche Person nach Hause kommt um dann weitere Skripte danach zu steuern. Leider kann ich überhaupt kein JS. Wenn dann einwenig Blockly.

                            Jedenfalls hab ich mir dein Skript angesehen und versucht das so zu übernehmen, nachdem ich einen Api Key eingetragen hab und ein Bild über imgur zum testen identifizieren wollte erhalte ich folgenden log:

                            22:37:01.893	info	javascript.0 Start javascript script.js.Skript_2
                            22:37:01.894	info	javascript.0 script.js.Skript_2: registered 0 subscriptions and 0 schedules
                            22:37:02.229	info	javascript.0 script.js.Skript_2: JSON Response
                            22:37:02.229	info	javascript.0 script.js.Skript_2: [ { "faceId": "4d7c65c0-a757-4dff-aafd-5293d608619e", "faceRectangle": { "top": 314, "left": 146, "width": 465, "height": 465 }, "faceAttributes": { "smile": 0, "headPose": { "pitch": 0, "roll": -2.3, "yaw": 6.8 }, "gender": "male", "age": 22, "facialHair": { "moustache": 0.1, "beard": 0.1, "sideburns": 0.1 }, "glasses": "NoGlasses", "emotion": { "anger": 0, "contempt": 0.002, "disgust": 0, "fear": 0, "happiness": 0, "neutral": 0.996, "sadness": 0.002, "surprise": 0 }, "blur": { "blurLevel": "low", "value": 0.07 }, "exposure": { "exposureLevel": "goodExposure", "value": 0.6 }, "noise": { "noiseLevel": "low", "value": 0.24 }, "makeup": { "eyeMakeup": false, "lipMakeup": false }, "accessories": [], "occlusion": { "foreheadOccluded": false, "eyeOccluded": false, "mouthOccluded": false }, "hair": { "bald": 0.03, "invisible": false, "hairColor": [ { "color": "blond", "confidence": 1 }, { "color": "gray", "confidence": 0.81 }, { "color": "brown", "confidence": 0.66 }, { "color": "red", "confidence": 0.21 }, { "color": "other", "confidence": 0.12 }, { "color": "black", "confidence": 0.01 } ] } } } ]
                            22:37:02.230	info	javascript.0 script.js.Skript_2: 4d7c65c0-a757-4dff-aafd-5293d608619e
                            22:37:02.230	info	javascript.0 script.js.Skript_2: 0
                            22:37:02.230	info	javascript.0 script.js.Skript_2: 22
                            22:37:02.230	info	javascript.0 script.js.Skript_2: ***** STARTE IDENTIFY
                            22:37:02.423	info	javascript.0 script.js.Skript_2: JSON Response
                            22:37:02.423	info	javascript.0 script.js.Skript_2: { "error": { "code": "PersonGroupNotFound", "message": "Person group is not found." } }
                            22:37:02.424	error	javascript.0 TypeError: Cannot read property 'faceId' of undefined at Request.request.post [as _callback] (script.js.Skript_2:116:22) at Request.self.callback (/opt/iobroker/node_modules/request/request.js:185:22) at emitTwo (events.js:126:13) at Request.emit (events.js:214:7) at Request. <anonymous>(/opt/iobroker/node_modules/request/request.js:1161:10) at emitOne (events.js:116:13) at Request.emit (events.js:211:7) at IncomingMessage. <anonymous>(/opt/iobroker/node_modules/request/request.js:1083:12) at Object.onceWrapper (events.js:313:30) at emitNone (events.js:111:20)
                            22:37:02.425	info	javascript.0 Stop script script.js.Skript_2
                            22:37:02.468	error	Caught by controller[0]: at Request.request.post [as _callback] (script.js.Skript_2:116:22)</anonymous></anonymous>
                            

                            Vielleicht kannst du, oder jemand mir sagen was es mit dem error auf sich hat?

                            Viele Grüße

                            Chris

                            1 Antwort Letzte Antwort
                            0
                            • DutchmanD Offline
                              DutchmanD Offline
                              Dutchman
                              Developer Most Active Administrators
                              schrieb am zuletzt editiert von
                              #14

                              Es konnte keine faceid zurück wodurch die Variable undefiniert und das mag JavaScript nicht.

                              Ergo Gedicht bzw Gruppe wurde nicht erkannt

                              Sent from my iPhone using Tapatalk

                              1 Antwort Letzte Antwort
                              0
                              • S Offline
                                S Offline
                                schroedinger
                                schrieb am zuletzt editiert von
                                #15

                                hi,

                                auf die folgende Art hat funktioniert es bei mir recht zuverlässig.

                                (bin aber ebenfalls kein Programmierer -> daher vermutlich super-ineffizient propgrammiert. Bitte daher nicht schimpfen. :(

                                eigentlich fand ich es - sogar als Nicht-Programmierer - gar nicht so schwer; nur 2 Dinge machten machten das ganze ziemlich kompliziert und sind auch für die komplizierte Vorgangsweise verantwortlich.

                                Problem 1

                                Es wäre so einfach, wenn es möglich wäre Microsoft Cognitive services (MCS) direkt die IP des wbcam-Bildes mitzuteilen. (zB. 192.168.1.14:8888/photo.jog)

                                Leider bringt dies immer nur Fehlermeldungen.

                                Es ist offensichtlich, dass man MCS offensichtlich den Link in einer "echten" URL senden muss. zb. in der FOrm von "http://meine_externe_IPadresse.at/web/bild.jpg"

                                Das bedeutet, mann muss des Bild von der IP_Cam downloaden und irgendwo auf dem eigenen Webserver ablegen. Und diese URL an MCS senden.

                                -> und das funktioniert.

                                –> führt aber zu einem 2. Problem

                                Problem 2 - Dateiname

                                Nachdemich Problem 1 gelöst hatte war ich ganz happy und es hatte bei dem ersten Bild pro Tag (!!) funktioniert, bei jeden weiteren Bild , dass ich an MCS sendetet bekam ich genau das selbe Ergebnis wie beim ersten Bild. :-(

                                Was war das Problem?

                                Das Bild auf meinem Server ändert sich zwar regelmässig (jedes Mal wenn die Webcam ein Bild aufnimmt) die URL , die ich an MCS sende ist aber immer die selbe.

                                -> auch wenn sich der Bildinhalt der URL zwar immer ändert , die URL (und der Dateiname des hochgeladenen Bildes) gleich bleibt, erhäkt man als response immer die selbe Antwort.

                                ev. irgendwie ein cache-Problem , ich konnte es jedenfalls nicht lösen.

                                Was habe ich getan?

                                Ich ändere bei jeden Hochladen den Bildnamen (mittels eines Zählers im Dateinamen des Bildes) -> das funktioniert.

                                (ich hatte dann auch noch ein Problem mit dieser "synchron" und "nicht-synchron"-Sache von JS , darauf gehe ich jetzt aber nicht ein)

                                Fazit:

                                es funktioniert, bei mir zwar super-kompliziert, vielleicht hat jemand ja eine einfachere Lösung.

                                ` > ////////////////////////////////////////////

                                // Konfiguration und Variablen Definition //

                                ///////////////////////////////////////////

                                'use strict';

                                const request = require('request');

                                var fs = require('fs');

                                const subscriptionKey = 'mein_api_key';

                                const uriBase = 'https://westeurope.api.cognitive.micros … 1.0/detect';

                                var imageUrl =

                                'https://www.link_zu_einem_testbild.jpg'; //vermtlich nicht notwendig

                                const imageUrl2 =

                                'https://bloximages.chicago2.vip.townnew ... .image.jpg'; // ebenfalls nicht notwendig, habe ich nur zum debuggen benutzt

                                const imageUrl3 =

                                'https://upload.wikimedia.org/wikipedia/ ... stocka.JPG'; // ebenfalls nicht notwendig, habe ich nur zum debuggen benutzt

                                // Objekt-ID des Bewegungsmelders

                                const oidLichtBewmelderTuer = "javascript.0.Schalter_Webcam_Erkennung"/HM-Sen-DB-PCB NEQ0955114:1.PRESS_SHORT/;

                                // URL zur Kamera umn ein Image (jpg) zu erhalten

                                const cam_url = "http://meine_ip:1024/photo.jpg";

                                // Pfadangabe für die Speicherung der Bilder, der Pfad muss existieren

                                const dest_path = '/home/pi/webcam/';

                                // Anzahl der Bilder, die vorgehalten werden sollen

                                const imageCountMax = 9999;

                                // Prefix für die Bildnamen

                                const imageNamePre = "Indexbild";

                                var uploadpath // dies ist path plus filename *** ev nicht benötgit ****

                                ////////////////////////////////////////////////////

                                //// downloade Bild von Webcam Methode NEU ////

                                ///////////////////////////////////////////////////

                                var supload = (imageNamePre + ".jpg"); // Idee ev. hier bereits + sZaehler *******

                                console.log(supload);

                                uploadpath = 'http://meine_ip:7777/webcam/' + supload;

                                console.log(uploadpath);

                                console.log("**** download hier bild von webcam ****");

                                // Bild holen und speichern

                                request.get({url: cam_url, encoding: 'binary'}, function (err, response, body) {

                                fs.writeFile(dest_path + imageNamePre + ".jpg", body, 'binary', function(err) {

                                if (err) {

                                console.log('Fehler beim Bild speichern: ' + err, 'warn');

                                } else {

                                // dem Filesystem 2 Sek Zeit zum Speichern lassen

                                setTimeout(function() { }, 3000);

                                }

                                });

                                });

                                ///////////////////////////////////////////////////

                                ///////////////////////////////////////////////////

                                //// umbenenne hier das downgeloaded bild //////

                                //// und sende es mit neuen Namen an CS ////////

                                ////////////////////////////////////////////////

                                //////////////////////////////////////////////////

                                //////////////////////////////////////////////////

                                // uploade Bild zu CS und erhalte faceID //////////

                                //////////////////////////////////////////////////

                                const params = {

                                'returnFaceId': 'true',

                                'returnFaceLandmarks': 'false',

                                'returnFaceAttributes': 'age,gender,headPose,smile,facialHair,glasses,' +

                                'emotion,hair,makeup,occlusion,accessories,blur,exposure,noise'

                                };

                                const options = {

                                uri: uriBase,

                                qs: params,

                                body: '{"url": ' + '"' + 'http://meine_ip_:7777/webcam/' + imageNamePre + ".jpg" + '"}', // vorher: body: '{"url": ' + '"' + imageUrl + '"}',

                                headers: {

                                'Content-Type': 'application/json',

                                'Cache-Control': 'no-store, max-age=0, must-revalidate', // versuche hier cache auszuschalten, lösche falls nicht funktioniert

                                'Pragma' : 'no-cache',

                                'Ocp-Apim-Subscription-Key' : subscriptionKey

                                }

                                };

                                console.log("***starte hier request hochladen ********");

                                request.post(options, (error, response, body) => {

                                if (error) {

                                console.log('Error: ', error);

                                console.log("***Fehler Zeile 42 *******");

                                return;

                                }

                                let jsonResponse = JSON.stringify(JSON.parse(body), null, ' ');

                                console.log('JSON Response\n');

                                console.log(jsonResponse);

                                var faces = JSON.parse(body);

                                if (faces.length === 0) {

                                console.log("Antwort auf Bildhochladen ist null*");

                                console.log("Bild erfolgreich hochgeladen, aber kein Gesicht erkannt");

                                setState("javascript.0.erkannteperson","keine_Person_erkannt");

                                return;

                                }

                                var face = faces[0]; // 1. Objekt auf body ist face

                                var faceId = face.faceId; // Wert von property "faceId"

                                // console.log(face);

                                console.log(faceId);

                                // console.log(faces[0].faceRectangle.top); nicht benötigt , nur Lernzwecke

                                var smile = (faces[0].faceAttributes.smile); // Lächenl ja/nein?

                                console.log(smile);

                                var age = (faces[0].faceAttributes.age); // Alter der erkannten Person

                                console.log(age);

                                // **** Gesicht erkannt faceID ist in Variable faceID *****

                                //////////////////////////////////////////////////////

                                // starte jetzt identify ///

                                //////////////////////////////////////////////////////

                                console.log("***** STARTE IDENTIFY");

                                // Request parameters.

                                const uriBase2 = 'https://westeurope.api.cognitive.micros … 0/identify';

                                const params2 = {

                                };

                                const body2 = JSON.stringify({ // definiere hier den body für 2. abfrage

                                "personGroupId": 'klaus_persongroup',

                                "faceIds": [

                                faceId,

                                ],

                                "maxNumOfCandidatesReturned": 1,

                                "confidenceThreshold": 0.5

                                });

                                const options2 = {

                                uri: uriBase2,

                                qs: params2,

                                body: body2,

                                headers: {

                                'Content-Type': 'application/json',

                                'Cache-Control': 'no-store, max-age=0, must-revalidate', // versuche hier cache auszuschalten,

                                'Pragma' : 'no-cache',

                                'Ocp-Apim-Subscription-Key' : subscriptionKey

                                }

                                };

                                request.post(options2, (error, response, body) => {

                                if (error) {

                                console.log('Error: ', error);

                                console.log("**** Fehler Zeile 106 ******");

                                return;

                                }

                                let jsonResponse2 = JSON.stringify(JSON.parse(body), null, ' ');

                                console.log('JSON Response\n');

                                console.log(jsonResponse2);

                                var persons = JSON.parse(body);

                                if (persons.length === 0) {

                                return;

                                }

                                var person = persons[0]; // 1. Objekt auf body ist Person

                                var faceId2 = person.faceId; // faceId2 ist value von hochgeladenen gesicht

                                // console.log(face);

                                console.log(faceId2);

                                console.log(jsonResponse2.faceID);

                                console.log(person.faceId);

                                console.log(persons[0].faceId);

                                console.log(persons[0].personId);

                                var personstring = JSON.stringify(JSON.parse(body));

                                var PERSONID = personstring.substr(77, 36); // hole hier aus response erkannte Person

                                console.log("**** Ausweichweg - hole PERSONID mit STR");

                                console.log(PERSONID);

                                setState('javascript.0.personenIDobject',PERSONID);

                                /////////////////////////////////////////////////////////

                                // hier Afrage ob erkannte Person "Klaus" ist ///

                                ////////////////////////////////////////////////////////

                                if (PERSONID == "eine_personen_id") {

                                console.log("***** KLAUS ******");

                                setState("javascript.0.erkannteperson","Klaus");

                                } else {

                                console.log("******* Gesicht erkannt aber Person unbekannt :-(");

                                setState("javascript.0.erkannteperson","Unbekannter");

                                }

                                ////////////////////////////////////////////////////////

                                });

                                }); `

                                U 1 Antwort Letzte Antwort
                                0
                                • S Offline
                                  S Offline
                                  Snatch
                                  schrieb am zuletzt editiert von
                                  #16

                                  Super Sache und vor allem Respeckt, dass du dich da so reingefuchst hast.

                                  Jetzt musst du für nichts Könner wie mich noch einen Adapter daraus bauen :D

                                  Grüße

                                  1 Antwort Letzte Antwort
                                  0
                                  • U Offline
                                    U Offline
                                    uwe72
                                    schrieb am zuletzt editiert von
                                    #17

                                    Super Sache, hat bei mir auch funktioniert.

                                    Was ich noch suche ist eine Art Objekterkennung. Gibts auch sowas für Objekte.

                                    Problem bei der Gesichtserkennung ist, wenn kein Gesicht erkannt wird, beispielsweise da nur der Rücken der Person auf dem Bild, funktioniert das Ganze nicht. Logisch ;-)

                                    Oder anders gefragt, gibt es auch eine "Personenerkennung", statt eine reine "Gesichtserkennung"?

                                    U 1 Antwort Letzte Antwort
                                    0
                                    • U uwe72

                                      Super Sache, hat bei mir auch funktioniert.

                                      Was ich noch suche ist eine Art Objekterkennung. Gibts auch sowas für Objekte.

                                      Problem bei der Gesichtserkennung ist, wenn kein Gesicht erkannt wird, beispielsweise da nur der Rücken der Person auf dem Bild, funktioniert das Ganze nicht. Logisch ;-)

                                      Oder anders gefragt, gibt es auch eine "Personenerkennung", statt eine reine "Gesichtserkennung"?

                                      U Offline
                                      U Offline
                                      uwe72
                                      schrieb am zuletzt editiert von
                                      #18

                                      @uwe72

                                      Ich antworte mir mal selber:

                                      Bessere Variante wäre aber dies: https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit#write
                                      Unterschied ist, dass man hier wirklich Personen erkennt. Beim dem Thema von oben, erkennt man "nur" Gesichter. Wenn die Person mit dem Rücken zur Kamera steht, bekommt man keine Erkennung.
                                      Das Thema mit der Objekterkennung kann ich aber (noch) nicht und habe auch keinen jetson nano

                                      U 1 Antwort Letzte Antwort
                                      0
                                      • S schroedinger

                                        hi,

                                        auf die folgende Art hat funktioniert es bei mir recht zuverlässig.

                                        (bin aber ebenfalls kein Programmierer -> daher vermutlich super-ineffizient propgrammiert. Bitte daher nicht schimpfen. :(

                                        eigentlich fand ich es - sogar als Nicht-Programmierer - gar nicht so schwer; nur 2 Dinge machten machten das ganze ziemlich kompliziert und sind auch für die komplizierte Vorgangsweise verantwortlich.

                                        Problem 1

                                        Es wäre so einfach, wenn es möglich wäre Microsoft Cognitive services (MCS) direkt die IP des wbcam-Bildes mitzuteilen. (zB. 192.168.1.14:8888/photo.jog)

                                        Leider bringt dies immer nur Fehlermeldungen.

                                        Es ist offensichtlich, dass man MCS offensichtlich den Link in einer "echten" URL senden muss. zb. in der FOrm von "http://meine_externe_IPadresse.at/web/bild.jpg"

                                        Das bedeutet, mann muss des Bild von der IP_Cam downloaden und irgendwo auf dem eigenen Webserver ablegen. Und diese URL an MCS senden.

                                        -> und das funktioniert.

                                        –> führt aber zu einem 2. Problem

                                        Problem 2 - Dateiname

                                        Nachdemich Problem 1 gelöst hatte war ich ganz happy und es hatte bei dem ersten Bild pro Tag (!!) funktioniert, bei jeden weiteren Bild , dass ich an MCS sendetet bekam ich genau das selbe Ergebnis wie beim ersten Bild. :-(

                                        Was war das Problem?

                                        Das Bild auf meinem Server ändert sich zwar regelmässig (jedes Mal wenn die Webcam ein Bild aufnimmt) die URL , die ich an MCS sende ist aber immer die selbe.

                                        -> auch wenn sich der Bildinhalt der URL zwar immer ändert , die URL (und der Dateiname des hochgeladenen Bildes) gleich bleibt, erhäkt man als response immer die selbe Antwort.

                                        ev. irgendwie ein cache-Problem , ich konnte es jedenfalls nicht lösen.

                                        Was habe ich getan?

                                        Ich ändere bei jeden Hochladen den Bildnamen (mittels eines Zählers im Dateinamen des Bildes) -> das funktioniert.

                                        (ich hatte dann auch noch ein Problem mit dieser "synchron" und "nicht-synchron"-Sache von JS , darauf gehe ich jetzt aber nicht ein)

                                        Fazit:

                                        es funktioniert, bei mir zwar super-kompliziert, vielleicht hat jemand ja eine einfachere Lösung.

                                        ` > ////////////////////////////////////////////

                                        // Konfiguration und Variablen Definition //

                                        ///////////////////////////////////////////

                                        'use strict';

                                        const request = require('request');

                                        var fs = require('fs');

                                        const subscriptionKey = 'mein_api_key';

                                        const uriBase = 'https://westeurope.api.cognitive.micros … 1.0/detect';

                                        var imageUrl =

                                        'https://www.link_zu_einem_testbild.jpg'; //vermtlich nicht notwendig

                                        const imageUrl2 =

                                        'https://bloximages.chicago2.vip.townnew ... .image.jpg'; // ebenfalls nicht notwendig, habe ich nur zum debuggen benutzt

                                        const imageUrl3 =

                                        'https://upload.wikimedia.org/wikipedia/ ... stocka.JPG'; // ebenfalls nicht notwendig, habe ich nur zum debuggen benutzt

                                        // Objekt-ID des Bewegungsmelders

                                        const oidLichtBewmelderTuer = "javascript.0.Schalter_Webcam_Erkennung"/HM-Sen-DB-PCB NEQ0955114:1.PRESS_SHORT/;

                                        // URL zur Kamera umn ein Image (jpg) zu erhalten

                                        const cam_url = "http://meine_ip:1024/photo.jpg";

                                        // Pfadangabe für die Speicherung der Bilder, der Pfad muss existieren

                                        const dest_path = '/home/pi/webcam/';

                                        // Anzahl der Bilder, die vorgehalten werden sollen

                                        const imageCountMax = 9999;

                                        // Prefix für die Bildnamen

                                        const imageNamePre = "Indexbild";

                                        var uploadpath // dies ist path plus filename *** ev nicht benötgit ****

                                        ////////////////////////////////////////////////////

                                        //// downloade Bild von Webcam Methode NEU ////

                                        ///////////////////////////////////////////////////

                                        var supload = (imageNamePre + ".jpg"); // Idee ev. hier bereits + sZaehler *******

                                        console.log(supload);

                                        uploadpath = 'http://meine_ip:7777/webcam/' + supload;

                                        console.log(uploadpath);

                                        console.log("**** download hier bild von webcam ****");

                                        // Bild holen und speichern

                                        request.get({url: cam_url, encoding: 'binary'}, function (err, response, body) {

                                        fs.writeFile(dest_path + imageNamePre + ".jpg", body, 'binary', function(err) {

                                        if (err) {

                                        console.log('Fehler beim Bild speichern: ' + err, 'warn');

                                        } else {

                                        // dem Filesystem 2 Sek Zeit zum Speichern lassen

                                        setTimeout(function() { }, 3000);

                                        }

                                        });

                                        });

                                        ///////////////////////////////////////////////////

                                        ///////////////////////////////////////////////////

                                        //// umbenenne hier das downgeloaded bild //////

                                        //// und sende es mit neuen Namen an CS ////////

                                        ////////////////////////////////////////////////

                                        //////////////////////////////////////////////////

                                        //////////////////////////////////////////////////

                                        // uploade Bild zu CS und erhalte faceID //////////

                                        //////////////////////////////////////////////////

                                        const params = {

                                        'returnFaceId': 'true',

                                        'returnFaceLandmarks': 'false',

                                        'returnFaceAttributes': 'age,gender,headPose,smile,facialHair,glasses,' +

                                        'emotion,hair,makeup,occlusion,accessories,blur,exposure,noise'

                                        };

                                        const options = {

                                        uri: uriBase,

                                        qs: params,

                                        body: '{"url": ' + '"' + 'http://meine_ip_:7777/webcam/' + imageNamePre + ".jpg" + '"}', // vorher: body: '{"url": ' + '"' + imageUrl + '"}',

                                        headers: {

                                        'Content-Type': 'application/json',

                                        'Cache-Control': 'no-store, max-age=0, must-revalidate', // versuche hier cache auszuschalten, lösche falls nicht funktioniert

                                        'Pragma' : 'no-cache',

                                        'Ocp-Apim-Subscription-Key' : subscriptionKey

                                        }

                                        };

                                        console.log("***starte hier request hochladen ********");

                                        request.post(options, (error, response, body) => {

                                        if (error) {

                                        console.log('Error: ', error);

                                        console.log("***Fehler Zeile 42 *******");

                                        return;

                                        }

                                        let jsonResponse = JSON.stringify(JSON.parse(body), null, ' ');

                                        console.log('JSON Response\n');

                                        console.log(jsonResponse);

                                        var faces = JSON.parse(body);

                                        if (faces.length === 0) {

                                        console.log("Antwort auf Bildhochladen ist null*");

                                        console.log("Bild erfolgreich hochgeladen, aber kein Gesicht erkannt");

                                        setState("javascript.0.erkannteperson","keine_Person_erkannt");

                                        return;

                                        }

                                        var face = faces[0]; // 1. Objekt auf body ist face

                                        var faceId = face.faceId; // Wert von property "faceId"

                                        // console.log(face);

                                        console.log(faceId);

                                        // console.log(faces[0].faceRectangle.top); nicht benötigt , nur Lernzwecke

                                        var smile = (faces[0].faceAttributes.smile); // Lächenl ja/nein?

                                        console.log(smile);

                                        var age = (faces[0].faceAttributes.age); // Alter der erkannten Person

                                        console.log(age);

                                        // **** Gesicht erkannt faceID ist in Variable faceID *****

                                        //////////////////////////////////////////////////////

                                        // starte jetzt identify ///

                                        //////////////////////////////////////////////////////

                                        console.log("***** STARTE IDENTIFY");

                                        // Request parameters.

                                        const uriBase2 = 'https://westeurope.api.cognitive.micros … 0/identify';

                                        const params2 = {

                                        };

                                        const body2 = JSON.stringify({ // definiere hier den body für 2. abfrage

                                        "personGroupId": 'klaus_persongroup',

                                        "faceIds": [

                                        faceId,

                                        ],

                                        "maxNumOfCandidatesReturned": 1,

                                        "confidenceThreshold": 0.5

                                        });

                                        const options2 = {

                                        uri: uriBase2,

                                        qs: params2,

                                        body: body2,

                                        headers: {

                                        'Content-Type': 'application/json',

                                        'Cache-Control': 'no-store, max-age=0, must-revalidate', // versuche hier cache auszuschalten,

                                        'Pragma' : 'no-cache',

                                        'Ocp-Apim-Subscription-Key' : subscriptionKey

                                        }

                                        };

                                        request.post(options2, (error, response, body) => {

                                        if (error) {

                                        console.log('Error: ', error);

                                        console.log("**** Fehler Zeile 106 ******");

                                        return;

                                        }

                                        let jsonResponse2 = JSON.stringify(JSON.parse(body), null, ' ');

                                        console.log('JSON Response\n');

                                        console.log(jsonResponse2);

                                        var persons = JSON.parse(body);

                                        if (persons.length === 0) {

                                        return;

                                        }

                                        var person = persons[0]; // 1. Objekt auf body ist Person

                                        var faceId2 = person.faceId; // faceId2 ist value von hochgeladenen gesicht

                                        // console.log(face);

                                        console.log(faceId2);

                                        console.log(jsonResponse2.faceID);

                                        console.log(person.faceId);

                                        console.log(persons[0].faceId);

                                        console.log(persons[0].personId);

                                        var personstring = JSON.stringify(JSON.parse(body));

                                        var PERSONID = personstring.substr(77, 36); // hole hier aus response erkannte Person

                                        console.log("**** Ausweichweg - hole PERSONID mit STR");

                                        console.log(PERSONID);

                                        setState('javascript.0.personenIDobject',PERSONID);

                                        /////////////////////////////////////////////////////////

                                        // hier Afrage ob erkannte Person "Klaus" ist ///

                                        ////////////////////////////////////////////////////////

                                        if (PERSONID == "eine_personen_id") {

                                        console.log("***** KLAUS ******");

                                        setState("javascript.0.erkannteperson","Klaus");

                                        } else {

                                        console.log("******* Gesicht erkannt aber Person unbekannt :-(");

                                        setState("javascript.0.erkannteperson","Unbekannter");

                                        }

                                        ////////////////////////////////////////////////////////

                                        });

                                        }); `

                                        U Offline
                                        U Offline
                                        uwe72
                                        schrieb am zuletzt editiert von
                                        #19

                                        @schroedinger der erste Teil funktioniert super bei mir. D.h. ich erkenne Gesichter.

                                        Du hattest im zweiten Teil noch was mit Identitätserkennung gemacht.

                                        Die FaceID ist wohl nicht immer konstant gleich.

                                        Wir kriegst Du es hin, dass Du in deinem Fall ermitteln kannst, dass es KLAUS ist?

                                        Wäre so einfach, wenn die FaceId immer die gleiche wäre pro gleicher Person.

                                        Kannst Du dazu noch 2-3 Sätze scheiben?

                                        DANKE!

                                        1 Antwort Letzte Antwort
                                        0
                                        • U uwe72

                                          @uwe72

                                          Ich antworte mir mal selber:

                                          Bessere Variante wäre aber dies: https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit#write
                                          Unterschied ist, dass man hier wirklich Personen erkennt. Beim dem Thema von oben, erkennt man "nur" Gesichter. Wenn die Person mit dem Rücken zur Kamera steht, bekommt man keine Erkennung.
                                          Das Thema mit der Objekterkennung kann ich aber (noch) nicht und habe auch keinen jetson nano

                                          U Offline
                                          U Offline
                                          uwe72
                                          schrieb am zuletzt editiert von
                                          #20

                                          @uwe72 Ok, muss mich selber korrigieren, auch bei Microsoft cognitive service gibts die Möglichkeit von Objekterkennung:

                                          https://docs.microsoft.com/de-de/azure/cognitive-services/computer-vision/quickstarts/node-analyze

                                          funktioniert sehr gut

                                          1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate
                                          FAQ Cloud / IOT
                                          HowTo: Node.js-Update
                                          HowTo: Backup/Restore
                                          Downloads
                                          BLOG

                                          690

                                          Online

                                          32.5k

                                          Benutzer

                                          81.7k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe