Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Blockly
  5. Bilder mittels LLM ChatGPT Vision ananalysieren

NEWS

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.1k

Bilder mittels LLM ChatGPT Vision ananalysieren

Scheduled Pinned Locked Moved Blockly
17 Posts 5 Posters 2.4k Views 9 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • David G.D Online
    David G.D Online
    David G.
    wrote on last edited by David G.
    #1

    LÖSUNG MEINER FRAGE VON UNTEN IN DIESEM BEITRAG

    Hallo,

    ich möchte hier gerne meine Lösung (danke an alle hier im Thread die geholfen haben) zum Analysieren von Bildern mittels ioBroker vorstellen.

    Die Bilder werden mittels GPT Vision analysiert.

    Dazu benötigt man nur folgende kleine Funktion in Blockly:

    1e5476c2-0f36-4121-aae4-f25fcdc688cc-image.png

    <block xmlns="https://developers.google.com/blockly/xml" type="procedures_defcustomnoreturn" id="jsyp;7{c1^]s%u;Qm.[B" x="313" y="-662">
     <mutation statements="false">
       <arg name="Bildpfad" varid="#^~=}RQE~[:hE?sXCoB$"></arg>
       <arg name="api_key" varid="o2iepdh*h(;FbS4Z=9{J"></arg>
       <arg name="Frage" varid="Uh*o[9LxAdT1B2TiZdAr"></arg>
       <arg name="DP_Antwort" varid="$xhtlk=y!MtLBX7u:Zew"></arg>
     </mutation>
     <field name="NAME">Bildanalyse</field>
     <field name="SCRIPT">Y29uc3QgZnMgPSByZXF1aXJlKCdmcycpOw0KY29uc3QgT3BlbkFJID0gcmVxdWlyZSgnb3BlbmFpJyk7DQogDQovLyBWYXJpYWJsZW4gZsO8ciBBUEktS2V5LCBCaWxkcGZhZCB1bmQgRnJhZ2UNCmNvbnN0IEFQSV9LRVkgPSBhcGlfa2V5Ow0KY29uc3QgSU1BR0VfUEFUSCA9IEJpbGRwZmFkOw0KY29uc3QgUVVFU1RJT04gPSBGcmFnZTsNCmNvbnN0IERQID0gRFBfQW50d29ydCANCiANCi8vIE9wZW5BSS1DbGllbnQgaW5pdGlhbGlzaWVyZW4NCmNvbnN0IGNsaWVudCA9IG5ldyBPcGVuQUkoew0KIGFwaUtleTogQVBJX0tFWSwgLy8gVmVyd2VuZGUgZGllIFZhcmlhYmxlIGbDvHIgZGVuIEFQSS1TY2hsw7xzc2VsDQp9KTsNCiANCi8vIEZ1bmt0aW9uIHp1bSBLb2RpZXJlbiBkZXMgQmlsZGVzIGluIEJhc2U2NA0KZnVuY3Rpb24gZW5jb2RlSW1hZ2UoaW1hZ2VQYXRoKSB7DQogY29uc3QgaW1hZ2VCdWZmZXIgPSBmcy5yZWFkRmlsZVN5bmMoaW1hZ2VQYXRoKTsNCiByZXR1cm4gaW1hZ2VCdWZmZXIudG9TdHJpbmcoJ2Jhc2U2NCcpOw0KfQ0KIA0KLy8gQmFzZTY0LVN0cmluZyBkZXMgQmlsZGVzIGVyc3RlbGxlbg0KY29uc3QgYmFzZTY0SW1hZ2UgPSBlbmNvZGVJbWFnZShJTUFHRV9QQVRIKTsgLy8gVmVyd2VuZGUgZGllIFZhcmlhYmxlIGbDvHIgZGVuIEJpbGRwZmFkDQogDQovLyBBbmZyYWdlIGFuIE9wZW5BSSBzZW5kZW4NCmFzeW5jIGZ1bmN0aW9uIGFuYWx5emVJbWFnZSgpIHsNCiB0cnkgew0KICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuY2hhdC5jb21wbGV0aW9ucy5jcmVhdGUoew0KICAgICBtb2RlbDogJ2dwdC00bycsDQogICAgIG1lc3NhZ2VzOiBbDQogICAgICAgew0KICAgICAgICAgcm9sZTogJ3VzZXInLA0KICAgICAgICAgY29udGVudDogWw0KICAgICAgICAgICB7DQogICAgICAgICAgICAgdHlwZTogJ3RleHQnLA0KICAgICAgICAgICAgIHRleHQ6IFFVRVNUSU9OLCAvLyBWZXJ3ZW5kZSBkaWUgVmFyaWFibGUgZsO8ciBkaWUgRnJhZ2UNCiAgICAgICAgICAgfSwNCiAgICAgICAgICAgew0KICAgICAgICAgICAgIHR5cGU6ICdpbWFnZV91cmwnLA0KICAgICAgICAgICAgIGltYWdlX3VybDogew0KICAgICAgICAgICAgICAgdXJsOiBgZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCwke2Jhc2U2NEltYWdlfWAsDQogICAgICAgICAgICAgfSwNCiAgICAgICAgICAgfSwNCiAgICAgICAgIF0sDQogICAgICAgfSwNCiAgICAgXSwNCiAgICAgIm1heF90b2tlbnMiOiA1MDAwDQogICB9KTsNCiANCiAgIC8vIE51ciBkZW4gY29udGVudCBhdXMgZGVyIEFudHdvcnQgenVyw7xja2dlYmVuDQogICByZXR1cm4gcmVzcG9uc2UuY2hvaWNlc1swXS5tZXNzYWdlLmNvbnRlbnQ7DQogfSBjYXRjaCAoZXJyb3IpIHsNCiAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycm9yKTsNCiB9DQp9DQogDQovLyBGdW5rdGlvbiBhdXNmw7xocmVuDQphbmFseXplSW1hZ2UoKS50aGVuKChyZXN1bHQpID0+IHsNCg0KIHNldFN0YXRlKERQLCByZXN1bHQsIHRydWUpOw0KIA0KfSk7DQogDQo=</field>
     <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
    </block>
    

    • Unter Bildpfad muss der Pfad zum Bild angegeben werden was analysiert werden soll
    • Unter api_key euer openAI Api Key.
    • Unter Frage die Frage zum Bild
    • Unter DP_Antwort ein DP in den die Antwort geschrieben werden soll.

    Damit das Blockly funktioniert müssen in den Settings vom Javascript-Adapter diese 2 Module hinzugefügt werden.

    In der Javascriptinstanz noch folgende 2 Module hinzufügen.
    c9090244-d9a4-41f9-b896-680411412654-image.png

    Man könnte zB so Bilder seiner Überwachungskamera Analysieren:
    3eb6fb1c-9f72-4e90-bb20-0856bf220684-image.png

    Zum testen hab ich auch einen kleinen "Bot" für Telegram geschrieben.
    Das sieht dann so aus:
    Screenshot_20241214_190706_Telegram.jpg
    _ _
    Hallo,

    ich weiß nicht so ganz, ob ich hier im Bereich richtig bin.
    Meine Frage ist sehr allgemein.....
    Falls es möglich ist, dann vermutlich mit JS.....

    Ich habe folgendes für HA gesehen und finde es ziemlich cool:
    https://community.home-assistant.io/t/llm-vision-let-home-assistant-see/729241

    Man kann Bilder nach OpenAI etc hochladen und analysieren lassen.

    Bekommt man sowas als Script umgesetzt?
    Lokales Bild hochladen, Frage mitgeben und dann eine Antwort bekommen?

    Zu einer Api von OpenAI finde ich nichts....

    Zeigt eure Lovelace-Visualisierung klick
    (Auch ideal um sich Anregungen zu holen)

    Meine Tabellen für eure Visualisierung klick

    HomoranH NegaleinN 2 Replies Last reply
    2
    • David G.D David G.

      LÖSUNG MEINER FRAGE VON UNTEN IN DIESEM BEITRAG

      Hallo,

      ich möchte hier gerne meine Lösung (danke an alle hier im Thread die geholfen haben) zum Analysieren von Bildern mittels ioBroker vorstellen.

      Die Bilder werden mittels GPT Vision analysiert.

      Dazu benötigt man nur folgende kleine Funktion in Blockly:

      1e5476c2-0f36-4121-aae4-f25fcdc688cc-image.png

      <block xmlns="https://developers.google.com/blockly/xml" type="procedures_defcustomnoreturn" id="jsyp;7{c1^]s%u;Qm.[B" x="313" y="-662">
       <mutation statements="false">
         <arg name="Bildpfad" varid="#^~=}RQE~[:hE?sXCoB$"></arg>
         <arg name="api_key" varid="o2iepdh*h(;FbS4Z=9{J"></arg>
         <arg name="Frage" varid="Uh*o[9LxAdT1B2TiZdAr"></arg>
         <arg name="DP_Antwort" varid="$xhtlk=y!MtLBX7u:Zew"></arg>
       </mutation>
       <field name="NAME">Bildanalyse</field>
       <field name="SCRIPT">Y29uc3QgZnMgPSByZXF1aXJlKCdmcycpOw0KY29uc3QgT3BlbkFJID0gcmVxdWlyZSgnb3BlbmFpJyk7DQogDQovLyBWYXJpYWJsZW4gZsO8ciBBUEktS2V5LCBCaWxkcGZhZCB1bmQgRnJhZ2UNCmNvbnN0IEFQSV9LRVkgPSBhcGlfa2V5Ow0KY29uc3QgSU1BR0VfUEFUSCA9IEJpbGRwZmFkOw0KY29uc3QgUVVFU1RJT04gPSBGcmFnZTsNCmNvbnN0IERQID0gRFBfQW50d29ydCANCiANCi8vIE9wZW5BSS1DbGllbnQgaW5pdGlhbGlzaWVyZW4NCmNvbnN0IGNsaWVudCA9IG5ldyBPcGVuQUkoew0KIGFwaUtleTogQVBJX0tFWSwgLy8gVmVyd2VuZGUgZGllIFZhcmlhYmxlIGbDvHIgZGVuIEFQSS1TY2hsw7xzc2VsDQp9KTsNCiANCi8vIEZ1bmt0aW9uIHp1bSBLb2RpZXJlbiBkZXMgQmlsZGVzIGluIEJhc2U2NA0KZnVuY3Rpb24gZW5jb2RlSW1hZ2UoaW1hZ2VQYXRoKSB7DQogY29uc3QgaW1hZ2VCdWZmZXIgPSBmcy5yZWFkRmlsZVN5bmMoaW1hZ2VQYXRoKTsNCiByZXR1cm4gaW1hZ2VCdWZmZXIudG9TdHJpbmcoJ2Jhc2U2NCcpOw0KfQ0KIA0KLy8gQmFzZTY0LVN0cmluZyBkZXMgQmlsZGVzIGVyc3RlbGxlbg0KY29uc3QgYmFzZTY0SW1hZ2UgPSBlbmNvZGVJbWFnZShJTUFHRV9QQVRIKTsgLy8gVmVyd2VuZGUgZGllIFZhcmlhYmxlIGbDvHIgZGVuIEJpbGRwZmFkDQogDQovLyBBbmZyYWdlIGFuIE9wZW5BSSBzZW5kZW4NCmFzeW5jIGZ1bmN0aW9uIGFuYWx5emVJbWFnZSgpIHsNCiB0cnkgew0KICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuY2hhdC5jb21wbGV0aW9ucy5jcmVhdGUoew0KICAgICBtb2RlbDogJ2dwdC00bycsDQogICAgIG1lc3NhZ2VzOiBbDQogICAgICAgew0KICAgICAgICAgcm9sZTogJ3VzZXInLA0KICAgICAgICAgY29udGVudDogWw0KICAgICAgICAgICB7DQogICAgICAgICAgICAgdHlwZTogJ3RleHQnLA0KICAgICAgICAgICAgIHRleHQ6IFFVRVNUSU9OLCAvLyBWZXJ3ZW5kZSBkaWUgVmFyaWFibGUgZsO8ciBkaWUgRnJhZ2UNCiAgICAgICAgICAgfSwNCiAgICAgICAgICAgew0KICAgICAgICAgICAgIHR5cGU6ICdpbWFnZV91cmwnLA0KICAgICAgICAgICAgIGltYWdlX3VybDogew0KICAgICAgICAgICAgICAgdXJsOiBgZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCwke2Jhc2U2NEltYWdlfWAsDQogICAgICAgICAgICAgfSwNCiAgICAgICAgICAgfSwNCiAgICAgICAgIF0sDQogICAgICAgfSwNCiAgICAgXSwNCiAgICAgIm1heF90b2tlbnMiOiA1MDAwDQogICB9KTsNCiANCiAgIC8vIE51ciBkZW4gY29udGVudCBhdXMgZGVyIEFudHdvcnQgenVyw7xja2dlYmVuDQogICByZXR1cm4gcmVzcG9uc2UuY2hvaWNlc1swXS5tZXNzYWdlLmNvbnRlbnQ7DQogfSBjYXRjaCAoZXJyb3IpIHsNCiAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycm9yKTsNCiB9DQp9DQogDQovLyBGdW5rdGlvbiBhdXNmw7xocmVuDQphbmFseXplSW1hZ2UoKS50aGVuKChyZXN1bHQpID0+IHsNCg0KIHNldFN0YXRlKERQLCByZXN1bHQsIHRydWUpOw0KIA0KfSk7DQogDQo=</field>
       <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
      </block>
      

      • Unter Bildpfad muss der Pfad zum Bild angegeben werden was analysiert werden soll
      • Unter api_key euer openAI Api Key.
      • Unter Frage die Frage zum Bild
      • Unter DP_Antwort ein DP in den die Antwort geschrieben werden soll.

      Damit das Blockly funktioniert müssen in den Settings vom Javascript-Adapter diese 2 Module hinzugefügt werden.

      In der Javascriptinstanz noch folgende 2 Module hinzufügen.
      c9090244-d9a4-41f9-b896-680411412654-image.png

      Man könnte zB so Bilder seiner Überwachungskamera Analysieren:
      3eb6fb1c-9f72-4e90-bb20-0856bf220684-image.png

      Zum testen hab ich auch einen kleinen "Bot" für Telegram geschrieben.
      Das sieht dann so aus:
      Screenshot_20241214_190706_Telegram.jpg
      _ _
      Hallo,

      ich weiß nicht so ganz, ob ich hier im Bereich richtig bin.
      Meine Frage ist sehr allgemein.....
      Falls es möglich ist, dann vermutlich mit JS.....

      Ich habe folgendes für HA gesehen und finde es ziemlich cool:
      https://community.home-assistant.io/t/llm-vision-let-home-assistant-see/729241

      Man kann Bilder nach OpenAI etc hochladen und analysieren lassen.

      Bekommt man sowas als Script umgesetzt?
      Lokales Bild hochladen, Frage mitgeben und dann eine Antwort bekommen?

      Zu einer Api von OpenAI finde ich nichts....

      HomoranH Offline
      HomoranH Offline
      Homoran
      Global Moderator Administrators
      wrote on last edited by
      #2

      @david-g sagte in Bilder mittels LLM analysieren:

      Zu einer Api von OpenAI finde ich nichts....

      passt das?
      https://forum.iobroker.net/post/1226713

      kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

      der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

      David G.D 1 Reply Last reply
      0
      • HomoranH Homoran

        @david-g sagte in Bilder mittels LLM analysieren:

        Zu einer Api von OpenAI finde ich nichts....

        passt das?
        https://forum.iobroker.net/post/1226713

        David G.D Online
        David G.D Online
        David G.
        wrote on last edited by
        #3

        @homoran

        Oh, das hab ich garnicht mitbekommen.
        Schaue ich mir mal an.

        Mal sehen, ob das mit Bildern umgehen kann.

        Zeigt eure Lovelace-Visualisierung klick
        (Auch ideal um sich Anregungen zu holen)

        Meine Tabellen für eure Visualisierung klick

        1 Reply Last reply
        0
        • OliverIOO Offline
          OliverIOO Offline
          OliverIO
          wrote on last edited by
          #4

          @david-g

          Ich glaube die toolbox kann keine Images.
          Aber du suchst die Vision api von OpenAI
          https://platform.openai.com/docs/guides/vision

          Die kann genau das.

          Preisgünstig ist es allerdings nicht. Das Bild allein kostet so zwischen 500 und 1000 tokens.
          Der normale bezahlbar reicht nicht. Man muss separat Geld für die api aufladen
          Für gelegentliche. Bildanalyse ok,
          Aber kontinuierliches scannen kostet dann.

          Wenn du den Anwendungsbereich hier beschreibst evtl gibt es eine Alternative

          Meine Adapter und Widgets
          TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
          Links im Profil

          1 Reply Last reply
          0
          • David G.D Online
            David G.D Online
            David G.
            wrote on last edited by David G.
            #5

            @oliverio sagte in Bilder mittels LLM analysieren:

            Ich glaube die toolbox kann keine Images.
            Aber du suchst die Vision api von OpenAI
            https://platform.openai.com/docs/guides/vision

            Vielen Dank für den Link.

            @oliverio sagte in Bilder mittels LLM analysieren:

            Wenn du den Anwendungsbereich hier beschreibst evtl gibt es eine Alternative

            Ehrlich gesagt gibt es keinen echten Einsatzzweck. Eigentlich eher Spielerei weil ich es ganz cool finde ^^. Wäre für Snapshot oder Überwachungskamera.
            Steht dies oder das Auto am Hof, hat gtad Sohn oder Tochter geklingelt oder sonst was.

            EDIT

            Mit

            curl -X POST https://api.openai.com/v1/chat/completions -H "Content-Type: application/json" -H "Authorization: Bearer $OPENAI_API_KEY" -d '{"model":"gpt-4o-mini","messages":[{"role":"user","content":[{"type":"text","text":"What’s in this image?"},{"type":"image_url","image_url":{"url":"https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg"}}]}],"max_tokens":300}'
            

            Bekomme ich schonmal eine Antwort.

            iobroker@iobroker:~$ curl -X POST https://api.openai.com/v1/chat/completions -H "Content-Type: application/json" -H "Authorization: Bearer xxxxxxxxxx" -d '{"model":"gpt-4o-mini","messages":[{"role":"user","content":[{"type":"text","text":"What’s in this image?"},{"type":"image_url","image_url":{"url":"https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg"}}]}],"max_tokens":300}'
            {
              "id": "chatcmpl-Adtxq59etyGJ5zwGWLAhaGda1vWD1",
              "object": "chat.completion",
              "created": 1734073282,
              "model": "gpt-4o-mini-2024-07-18",
              "choices": [
                {
                  "index": 0,
                  "message": {
                    "role": "assistant",
                    "content": "The image shows a wooden pathway running through a lush, green meadow or wetland area. The path is bordered by tall grasses and some shrubs, with a clear blue sky above filled with soft clouds. The scene evokes a peaceful, natural landscape.",
                    "refusal": null
                  },
                  "logprobs": null,
                  "finish_reason": "stop"
                }
              ],
              "usage": {
                "prompt_tokens": 36848,
                "completion_tokens": 49,
                "total_tokens": 36897,
                "prompt_tokens_details": {
                  "cached_tokens": 0,
                  "audio_tokens": 0
                },
                "completion_tokens_details": {
                  "reasoning_tokens": 0,
                  "audio_tokens": 0,
                  "accepted_prediction_tokens": 0,
                  "rejected_prediction_tokens": 0
                }
              },
              "system_fingerprint": "fp_39a40c96a0"
            }
            iobroker@iobroker:~$
            

            Die Frage ist, ob ich ein Bild hochladen kann oder es vorher in base64 wandeln muss.

            Beim Beispiel wird Base64 verwendet.

            EDIT 2:
            Dke Abfrage von oben hat 1ct gekostet.
            Blöd ist eher, dass die Kreditkarte mit $5.95 belastet wurde obwohl ich nur $5.00 aufgeladen hab...

            Zeigt eure Lovelace-Visualisierung klick
            (Auch ideal um sich Anregungen zu holen)

            Meine Tabellen für eure Visualisierung klick

            1 Reply Last reply
            0
            • OliverIOO Offline
              OliverIOO Offline
              OliverIO
              wrote on last edited by OliverIO
              #6

              @david-g

              1
              Wenn du es in den prompt reinschreibst dann kannst du ihn auch auf deutsch antworten lassen

              2
              Die Differenz ist wohl die Mehrwertsteuer

              3
              Ja Bild muss base64 kodiert werden. Beispiel ist ja mit enthalten.. Die Code Beispiele sind zwar alle in Python, können aber auch alle in Java Skript umgesetzt werden.
              so Übersetzung dann einfach wieder ChatGpt verwenden

              für eher was lokales kannst du mal hier schauen
              Das ist eine der bekanntesten Bibliotheken für Face and object recognition.
              Das funktioniert auch nur mit CPU und muss nicht unbedingt gleich eine Höllen-Grafikkarte
              mit verfügbar sein.
              https://github.com/opencv/opencv

              Meine Adapter und Widgets
              TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
              Links im Profil

              David G.D 2 Replies Last reply
              0
              • OliverIOO OliverIO

                @david-g

                1
                Wenn du es in den prompt reinschreibst dann kannst du ihn auch auf deutsch antworten lassen

                2
                Die Differenz ist wohl die Mehrwertsteuer

                3
                Ja Bild muss base64 kodiert werden. Beispiel ist ja mit enthalten.. Die Code Beispiele sind zwar alle in Python, können aber auch alle in Java Skript umgesetzt werden.
                so Übersetzung dann einfach wieder ChatGpt verwenden

                für eher was lokales kannst du mal hier schauen
                Das ist eine der bekanntesten Bibliotheken für Face and object recognition.
                Das funktioniert auch nur mit CPU und muss nicht unbedingt gleich eine Höllen-Grafikkarte
                mit verfügbar sein.
                https://github.com/opencv/opencv

                David G.D Online
                David G.D Online
                David G.
                wrote on last edited by David G.
                #7

                @oliverio

                Dann schaue ich am Wochenende mal, ob ich das in JS bekomme (mit ChatGPT, ich selber bin da eher unbeholfen...).

                Sonst melde ich mich nochmal.
                Falls jemand mit testen möchte, kann ich auch (persönlich dieser Person) zum testen den Api key geben.

                Kann mir ja hinterher einen neuen erstellen.

                Ich werde versuchen es in eine Blockly Funktion zu bekommen, in der ich das Bild als Pfad und die Frage übergeben kann.

                Zeigt eure Lovelace-Visualisierung klick
                (Auch ideal um sich Anregungen zu holen)

                Meine Tabellen für eure Visualisierung klick

                1 Reply Last reply
                0
                • OliverIOO OliverIO

                  @david-g

                  1
                  Wenn du es in den prompt reinschreibst dann kannst du ihn auch auf deutsch antworten lassen

                  2
                  Die Differenz ist wohl die Mehrwertsteuer

                  3
                  Ja Bild muss base64 kodiert werden. Beispiel ist ja mit enthalten.. Die Code Beispiele sind zwar alle in Python, können aber auch alle in Java Skript umgesetzt werden.
                  so Übersetzung dann einfach wieder ChatGpt verwenden

                  für eher was lokales kannst du mal hier schauen
                  Das ist eine der bekanntesten Bibliotheken für Face and object recognition.
                  Das funktioniert auch nur mit CPU und muss nicht unbedingt gleich eine Höllen-Grafikkarte
                  mit verfügbar sein.
                  https://github.com/opencv/opencv

                  David G.D Online
                  David G.D Online
                  David G.
                  wrote on last edited by David G.
                  #8

                  @oliverio

                  Habe schonmal einen Anfang:

                  7c0ac640-4ce1-4e4d-aabe-336f995fbab4-image.png

                  Die Funktion:

                  const fs = require('fs');
                  const OpenAI = require('openai');
                  
                  // Variablen für API-Key, Bildpfad und Frage
                  const API_KEY = api;
                  const IMAGE_PATH = bildpfad;
                  const QUESTION = frage;
                  
                  // OpenAI-Client initialisieren
                  const client = new OpenAI({
                    apiKey: API_KEY, // Verwende die Variable für den API-Schlüssel
                  });
                  
                  // Funktion zum Kodieren des Bildes in Base64
                  function encodeImage(imagePath) {
                    const imageBuffer = fs.readFileSync(imagePath);
                    return imageBuffer.toString('base64');
                  }
                  
                  // Base64-String des Bildes erstellen
                  const base64Image = encodeImage(IMAGE_PATH); // Verwende die Variable für den Bildpfad
                  
                  // Anfrage an OpenAI senden
                  async function analyzeImage() {
                    try {
                      const response = await client.chat.completions.create({
                        model: 'gpt-4o-mini',
                        messages: [
                          {
                            role: 'user',
                            content: [
                              {
                                type: 'text',
                                text: QUESTION, // Verwende die Variable für die Frage
                              },
                              {
                                type: 'image_url',
                                image_url: {
                                  url: `data:image/jpeg;base64,${base64Image}`,
                                },
                              },
                            ],
                          },
                        ],
                      });
                  
                      console.log(response.choices[0]);
                    } catch (error) {
                      console.error('Error:', error);
                    }
                  }
                  
                  
                  // Funktion ausführen
                  analyzeImage();
                  return(response.choices[0]);
                  

                  Allerdings wird der Log noch zugemüllt, eine Antwort kommt aber:

                  javascript.0	13:12:13.916	error	script.js.Eigene_Scripte.aitestbl: ReferenceError: response is not defined
                  javascript.0	13:12:13.916	error	at etwas_tun (script.js.Eigene_Scripte.aitestbl:61:5)
                  javascript.0	13:12:13.916	error	at script.js.Eigene_Scripte.aitestbl:66:21
                  javascript.0	13:12:13.916	error	at script.js.Eigene_Scripte.aitestbl:73:3
                  javascript.0	13:12:15.880	info	script.js.Eigene_Scripte.aitestbl: { index: 0, message: { role: 'assistant', content: 'Anhand der Bildzeitstempel ist es Tag. Es ist 13:29 Uhr, was auf den Nachmittag hinweist.', refusal: null }, logprobs: null, finish_reason: 'stop' }
                  

                  Nun zu meinen Fragen.

                  • Wie bekomme ich die Fehler weg?
                  • Bekomme ich im JS aus der Antwort den contenet extrahiert?
                  • Kann ich den Konenet dann in das result schreiben lassen?

                  EDIT
                  habe glaube alles hinbekommen:

                  const fs = require('fs');
                  const OpenAI = require('openai');
                  
                  // Variablen für API-Key, Bildpfad und Frage
                  const API_KEY = api;
                  const IMAGE_PATH = bildpfad;
                  const QUESTION = frage;
                  
                  // OpenAI-Client initialisieren
                  const client = new OpenAI({
                    apiKey: API_KEY, // Verwende die Variable für den API-Schlüssel
                  });
                  
                  // Funktion zum Kodieren des Bildes in Base64
                  function encodeImage(imagePath) {
                    const imageBuffer = fs.readFileSync(imagePath);
                    return imageBuffer.toString('base64');
                  }
                  
                  // Base64-String des Bildes erstellen
                  const base64Image = encodeImage(IMAGE_PATH); // Verwende die Variable für den Bildpfad
                  
                  // Anfrage an OpenAI senden
                  async function analyzeImage() {
                    try {
                      const response = await client.chat.completions.create({
                        model: 'gpt-4o-mini',
                        messages: [
                          {
                            role: 'user',
                            content: [
                              {
                                type: 'text',
                                text: QUESTION, // Verwende die Variable für die Frage
                              },
                              {
                                type: 'image_url',
                                image_url: {
                                  url: `data:image/jpeg;base64,${base64Image}`,
                                },
                              },
                            ],
                          },
                        ],
                      });
                  
                      // Nur den content aus der Antwort zurückgeben
                      return response.choices[0].message.content;
                    } catch (error) {
                      console.error('Error:', error);
                    }
                  }
                  
                  // Funktion ausführen
                  analyzeImage().then((result) => {
                    console.log(result);
                  });
                  
                  

                  Zeigt eure Lovelace-Visualisierung klick
                  (Auch ideal um sich Anregungen zu holen)

                  Meine Tabellen für eure Visualisierung klick

                  OliverIOO 1 Reply Last reply
                  0
                  • David G.D David G.

                    @oliverio

                    Habe schonmal einen Anfang:

                    7c0ac640-4ce1-4e4d-aabe-336f995fbab4-image.png

                    Die Funktion:

                    const fs = require('fs');
                    const OpenAI = require('openai');
                    
                    // Variablen für API-Key, Bildpfad und Frage
                    const API_KEY = api;
                    const IMAGE_PATH = bildpfad;
                    const QUESTION = frage;
                    
                    // OpenAI-Client initialisieren
                    const client = new OpenAI({
                      apiKey: API_KEY, // Verwende die Variable für den API-Schlüssel
                    });
                    
                    // Funktion zum Kodieren des Bildes in Base64
                    function encodeImage(imagePath) {
                      const imageBuffer = fs.readFileSync(imagePath);
                      return imageBuffer.toString('base64');
                    }
                    
                    // Base64-String des Bildes erstellen
                    const base64Image = encodeImage(IMAGE_PATH); // Verwende die Variable für den Bildpfad
                    
                    // Anfrage an OpenAI senden
                    async function analyzeImage() {
                      try {
                        const response = await client.chat.completions.create({
                          model: 'gpt-4o-mini',
                          messages: [
                            {
                              role: 'user',
                              content: [
                                {
                                  type: 'text',
                                  text: QUESTION, // Verwende die Variable für die Frage
                                },
                                {
                                  type: 'image_url',
                                  image_url: {
                                    url: `data:image/jpeg;base64,${base64Image}`,
                                  },
                                },
                              ],
                            },
                          ],
                        });
                    
                        console.log(response.choices[0]);
                      } catch (error) {
                        console.error('Error:', error);
                      }
                    }
                    
                    
                    // Funktion ausführen
                    analyzeImage();
                    return(response.choices[0]);
                    

                    Allerdings wird der Log noch zugemüllt, eine Antwort kommt aber:

                    javascript.0	13:12:13.916	error	script.js.Eigene_Scripte.aitestbl: ReferenceError: response is not defined
                    javascript.0	13:12:13.916	error	at etwas_tun (script.js.Eigene_Scripte.aitestbl:61:5)
                    javascript.0	13:12:13.916	error	at script.js.Eigene_Scripte.aitestbl:66:21
                    javascript.0	13:12:13.916	error	at script.js.Eigene_Scripte.aitestbl:73:3
                    javascript.0	13:12:15.880	info	script.js.Eigene_Scripte.aitestbl: { index: 0, message: { role: 'assistant', content: 'Anhand der Bildzeitstempel ist es Tag. Es ist 13:29 Uhr, was auf den Nachmittag hinweist.', refusal: null }, logprobs: null, finish_reason: 'stop' }
                    

                    Nun zu meinen Fragen.

                    • Wie bekomme ich die Fehler weg?
                    • Bekomme ich im JS aus der Antwort den contenet extrahiert?
                    • Kann ich den Konenet dann in das result schreiben lassen?

                    EDIT
                    habe glaube alles hinbekommen:

                    const fs = require('fs');
                    const OpenAI = require('openai');
                    
                    // Variablen für API-Key, Bildpfad und Frage
                    const API_KEY = api;
                    const IMAGE_PATH = bildpfad;
                    const QUESTION = frage;
                    
                    // OpenAI-Client initialisieren
                    const client = new OpenAI({
                      apiKey: API_KEY, // Verwende die Variable für den API-Schlüssel
                    });
                    
                    // Funktion zum Kodieren des Bildes in Base64
                    function encodeImage(imagePath) {
                      const imageBuffer = fs.readFileSync(imagePath);
                      return imageBuffer.toString('base64');
                    }
                    
                    // Base64-String des Bildes erstellen
                    const base64Image = encodeImage(IMAGE_PATH); // Verwende die Variable für den Bildpfad
                    
                    // Anfrage an OpenAI senden
                    async function analyzeImage() {
                      try {
                        const response = await client.chat.completions.create({
                          model: 'gpt-4o-mini',
                          messages: [
                            {
                              role: 'user',
                              content: [
                                {
                                  type: 'text',
                                  text: QUESTION, // Verwende die Variable für die Frage
                                },
                                {
                                  type: 'image_url',
                                  image_url: {
                                    url: `data:image/jpeg;base64,${base64Image}`,
                                  },
                                },
                              ],
                            },
                          ],
                        });
                    
                        // Nur den content aus der Antwort zurückgeben
                        return response.choices[0].message.content;
                      } catch (error) {
                        console.error('Error:', error);
                      }
                    }
                    
                    // Funktion ausführen
                    analyzeImage().then((result) => {
                      console.log(result);
                    });
                    
                    
                    OliverIOO Offline
                    OliverIOO Offline
                    OliverIO
                    wrote on last edited by OliverIO
                    #9

                    @david-g sagte in Bilder mittels LLM analysieren:

                    analyzeImage();

                    ja das geht auch, es hätte gereicht:

                    let result=await analyzeImage();
                    console.log(result);
                    

                    hinzuschreiben.
                    analyzeImage ist eine asynchrone Funktion.
                    daher gibt sie eigentlich nur ein promise-objekt zurück, welches irgendwann in der Zukunft aufgelöst wird.

                    mit await wartet dann javascript darauf bis das aufgelöst wird und gibt das ergebnis dann weiter falls da was zugewiesen ist
                    ohne await geht es gleich weiter auch wenn die funktion noch nicht abgearbeitet wurde.

                    Meine Adapter und Widgets
                    TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                    Links im Profil

                    David G.D 1 Reply Last reply
                    0
                    • OliverIOO OliverIO

                      @david-g sagte in Bilder mittels LLM analysieren:

                      analyzeImage();

                      ja das geht auch, es hätte gereicht:

                      let result=await analyzeImage();
                      console.log(result);
                      

                      hinzuschreiben.
                      analyzeImage ist eine asynchrone Funktion.
                      daher gibt sie eigentlich nur ein promise-objekt zurück, welches irgendwann in der Zukunft aufgelöst wird.

                      mit await wartet dann javascript darauf bis das aufgelöst wird und gibt das ergebnis dann weiter falls da was zugewiesen ist
                      ohne await geht es gleich weiter auch wenn die funktion noch nicht abgearbeitet wurde.

                      David G.D Online
                      David G.D Online
                      David G.
                      wrote on last edited by David G.
                      #10

                      @oliverio

                      Hier mein fertiges Blockly für interessierte:

                      833ca05b-bebd-4765-a4a3-f476e7b0a1a5-image.png

                      <xml xmlns="https://developers.google.com/blockly/xml">
                       <variables>
                         <variable id="#^~=}RQE~[:hE?sXCoB$">Bildpfad</variable>
                         <variable id="o2iepdh*h(;FbS4Z=9{J">api_key</variable>
                         <variable id="Uh*o[9LxAdT1B2TiZdAr">Frage</variable>
                       </variables>
                       <block type="procedures_defcustomreturn" id="k1J9z=^XFMFehGb%0.og" x="-663" y="-688">
                         <mutation statements="false">
                           <arg name="Bildpfad" varid="#^~=}RQE~[:hE?sXCoB$"></arg>
                           <arg name="api_key" varid="o2iepdh*h(;FbS4Z=9{J"></arg>
                           <arg name="Frage" varid="Uh*o[9LxAdT1B2TiZdAr"></arg>
                         </mutation>
                         <field name="NAME">Bild_Analysieren</field>
                         <field name="SCRIPT">Y29uc3QgZnMgPSByZXF1aXJlKCdmcycpOw0KY29uc3QgT3BlbkFJID0gcmVxdWlyZSgnb3BlbmFpJyk7DQoNCi8vIFZhcmlhYmxlbiBmw7xyIEFQSS1LZXksIEJpbGRwZmFkIHVuZCBGcmFnZQ0KY29uc3QgQVBJX0tFWSA9IGFwaV9rZXk7DQpjb25zdCBJTUFHRV9QQVRIID0gQmlsZHBmYWQ7DQpjb25zdCBRVUVTVElPTiA9IEZyYWdlOw0KDQovLyBPcGVuQUktQ2xpZW50IGluaXRpYWxpc2llcmVuDQpjb25zdCBjbGllbnQgPSBuZXcgT3BlbkFJKHsNCiAgYXBpS2V5OiBBUElfS0VZLCAvLyBWZXJ3ZW5kZSBkaWUgVmFyaWFibGUgZsO8ciBkZW4gQVBJLVNjaGzDvHNzZWwNCn0pOw0KDQovLyBGdW5rdGlvbiB6dW0gS29kaWVyZW4gZGVzIEJpbGRlcyBpbiBCYXNlNjQNCmZ1bmN0aW9uIGVuY29kZUltYWdlKGltYWdlUGF0aCkgew0KICBjb25zdCBpbWFnZUJ1ZmZlciA9IGZzLnJlYWRGaWxlU3luYyhpbWFnZVBhdGgpOw0KICByZXR1cm4gaW1hZ2VCdWZmZXIudG9TdHJpbmcoJ2Jhc2U2NCcpOw0KfQ0KDQovLyBCYXNlNjQtU3RyaW5nIGRlcyBCaWxkZXMgZXJzdGVsbGVuDQpjb25zdCBiYXNlNjRJbWFnZSA9IGVuY29kZUltYWdlKElNQUdFX1BBVEgpOyAvLyBWZXJ3ZW5kZSBkaWUgVmFyaWFibGUgZsO8ciBkZW4gQmlsZHBmYWQNCg0KLy8gQW5mcmFnZSBhbiBPcGVuQUkgc2VuZGVuDQphc3luYyBmdW5jdGlvbiBhbmFseXplSW1hZ2UoKSB7DQogIHRyeSB7DQogICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuY2hhdC5jb21wbGV0aW9ucy5jcmVhdGUoew0KICAgICAgbW9kZWw6ICdncHQtNG8tbWluaScsDQogICAgICBtZXNzYWdlczogWw0KICAgICAgICB7DQogICAgICAgICAgcm9sZTogJ3VzZXInLA0KICAgICAgICAgIGNvbnRlbnQ6IFsNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLA0KICAgICAgICAgICAgICB0ZXh0OiBRVUVTVElPTiwgLy8gVmVyd2VuZGUgZGllIFZhcmlhYmxlIGbDvHIgZGllIEZyYWdlDQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICB0eXBlOiAnaW1hZ2VfdXJsJywNCiAgICAgICAgICAgICAgaW1hZ2VfdXJsOiB7DQogICAgICAgICAgICAgICAgdXJsOiBgZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCwke2Jhc2U2NEltYWdlfWAsDQogICAgICAgICAgICAgIH0sDQogICAgICAgICAgICB9LA0KICAgICAgICAgIF0sDQogICAgICAgIH0sDQogICAgICBdLA0KICAgIH0pOw0KDQogICAgLy8gTnVyIGRlbiBjb250ZW50IGF1cyBkZXIgQW50d29ydCB6dXLDvGNrZ2ViZW4NCiAgICByZXR1cm4gcmVzcG9uc2UuY2hvaWNlc1swXS5tZXNzYWdlLmNvbnRlbnQ7DQogIH0gY2F0Y2ggKGVycm9yKSB7DQogICAgY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyb3IpOw0KICB9DQp9DQoNCi8vIEZ1bmt0aW9uIGF1c2bDvGhyZW4NCmFuYWx5emVJbWFnZSgpLnRoZW4oKHJlc3VsdCkgPT4gew0KICBjb25zb2xlLmxvZyhyZXN1bHQpOw0KfSk7DQo=</field>
                         <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                       </block>
                       <block type="http_get" id="%@DtL{e5a7xB/z4QWJJD" x="-662" y="-637">
                         <field name="TIMEOUT">2000</field>
                         <field name="UNIT">ms</field>
                         <field name="TYPE">arraybuffer</field>
                         <value name="URL">
                           <shadow type="text" id="KylM(z%z`LA/%XK_x^*D">
                             <field name="TEXT">http://192.168.99.93/cgi-bin/api.cgi?cmd=Snap&amp;channel=0&amp;user=admin&amp;password=abcd</field>
                           </shadow>
                         </value>
                         <statement name="STATEMENT">
                           <block type="debug" id="d:IY2pT_WNG/EqsBccvX">
                             <field name="Severity">info</field>
                             <value name="TEXT">
                               <shadow type="text" id="+Kg)Y%9AYp}{tY^/Vv|_">
                                 <field name="TEXT">test</field>
                               </shadow>
                               <block type="procedures_callcustomreturn" id="Th(%,~XXrnkE8m#b)/9D">
                                 <mutation name="Bild_Analysieren">
                                   <arg name="Bildpfad"></arg>
                                   <arg name="api_key"></arg>
                                   <arg name="Frage"></arg>
                                 </mutation>
                                 <value name="ARG0">
                                   <block type="http_response_tofile" id="w[MNq!R0Lr|-N$Go+E@L">
                                     <value name="FILENAME">
                                       <shadow type="text" id="#5YFt*N{B7dOcv]kFRP$">
                                         <field name="TEXT">eingang.jpg</field>
                                       </shadow>
                                     </value>
                                   </block>
                                 </value>
                                 <value name="ARG1">
                                   <block type="text" id="qD1A7?Y)DhcB{4-ff0T=">
                                     <field name="TEXT">xyz</field>
                                   </block>
                                 </value>
                                 <value name="ARG2">
                                   <block type="text" id="DjqZIXmZJ[JX-JqvE=/4">
                                     <field name="TEXT">Was ist das für ein Foto?</field>
                                   </block>
                                 </value>
                               </block>
                             </value>
                           </block>
                         </statement>
                       </block>
                      </xml>
                      

                      const fs = require('fs');
                      const OpenAI = require('openai');
                      
                      // Variablen für API-Key, Bildpfad und Frage
                      const API_KEY = api_key;
                      const IMAGE_PATH = Bildpfad;
                      const QUESTION = Frage;
                      
                      // OpenAI-Client initialisieren
                      const client = new OpenAI({
                       apiKey: API_KEY, // Verwende die Variable für den API-Schlüssel
                      });
                      
                      // Funktion zum Kodieren des Bildes in Base64
                      function encodeImage(imagePath) {
                       const imageBuffer = fs.readFileSync(imagePath);
                       return imageBuffer.toString('base64');
                      }
                      
                      // Base64-String des Bildes erstellen
                      const base64Image = encodeImage(IMAGE_PATH); // Verwende die Variable für den Bildpfad
                      
                      // Anfrage an OpenAI senden
                      async function analyzeImage() {
                       try {
                         const response = await client.chat.completions.create({
                           model: 'gpt-4o-mini',
                           messages: [
                             {
                               role: 'user',
                               content: [
                                 {
                                   type: 'text',
                                   text: QUESTION, // Verwende die Variable für die Frage
                                 },
                                 {
                                   type: 'image_url',
                                   image_url: {
                                     url: `data:image/jpeg;base64,${base64Image}`,
                                   },
                                 },
                               ],
                             },
                           ],
                         });
                      
                         // Nur den content aus der Antwort zurückgeben
                         return response.choices[0].message.content;
                       } catch (error) {
                         console.error('Error:', error);
                       }
                      }
                      
                      // Funktion ausführen
                      analyzeImage().then((result) => {
                       console.log(result);
                      });
                      
                      

                      In der Javascriptinstant noch folgende 2 Module hinzufügen.
                      c9090244-d9a4-41f9-b896-680411412654-image.png

                      javascript.0	14:07:17.248	info	Start JavaScript script.js.Eigene_Scripte.Tests.Foto_KI_Test (Blockly)
                      javascript.0	14:07:17.269	info	script.js.Eigene_Scripte.Tests.Foto_KI_Test: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                      javascript.0	14:07:17.837	info	script.js.Eigene_Scripte.Tests.Foto_KI_Test: undefined
                      javascript.0	14:07:21.943	info	script.js.Eigene_Scripte.Tests.Foto_KI_Test: Das Foto zeigt eine Straßenansicht, aufgenommen aus einem Fenster. Man sieht mehrere Häuser, eine kurvenreiche Straße und einige Bäume im Hintergrund. Der Himmel ist bewölkt und es scheint, als wäre es tagsüber. Die Sicht ist etwas trüb, wahrscheinlich aufgrund von Wetterbedingungen oder Schmutz auf dem Fenster.
                      

                      @OliverIO
                      Eine Idee wo das undefined her kommt?

                      Zeigt eure Lovelace-Visualisierung klick
                      (Auch ideal um sich Anregungen zu holen)

                      Meine Tabellen für eure Visualisierung klick

                      OliverIOO 1 Reply Last reply
                      0
                      • David G.D David G.

                        @oliverio

                        Hier mein fertiges Blockly für interessierte:

                        833ca05b-bebd-4765-a4a3-f476e7b0a1a5-image.png

                        <xml xmlns="https://developers.google.com/blockly/xml">
                         <variables>
                           <variable id="#^~=}RQE~[:hE?sXCoB$">Bildpfad</variable>
                           <variable id="o2iepdh*h(;FbS4Z=9{J">api_key</variable>
                           <variable id="Uh*o[9LxAdT1B2TiZdAr">Frage</variable>
                         </variables>
                         <block type="procedures_defcustomreturn" id="k1J9z=^XFMFehGb%0.og" x="-663" y="-688">
                           <mutation statements="false">
                             <arg name="Bildpfad" varid="#^~=}RQE~[:hE?sXCoB$"></arg>
                             <arg name="api_key" varid="o2iepdh*h(;FbS4Z=9{J"></arg>
                             <arg name="Frage" varid="Uh*o[9LxAdT1B2TiZdAr"></arg>
                           </mutation>
                           <field name="NAME">Bild_Analysieren</field>
                           <field name="SCRIPT">Y29uc3QgZnMgPSByZXF1aXJlKCdmcycpOw0KY29uc3QgT3BlbkFJID0gcmVxdWlyZSgnb3BlbmFpJyk7DQoNCi8vIFZhcmlhYmxlbiBmw7xyIEFQSS1LZXksIEJpbGRwZmFkIHVuZCBGcmFnZQ0KY29uc3QgQVBJX0tFWSA9IGFwaV9rZXk7DQpjb25zdCBJTUFHRV9QQVRIID0gQmlsZHBmYWQ7DQpjb25zdCBRVUVTVElPTiA9IEZyYWdlOw0KDQovLyBPcGVuQUktQ2xpZW50IGluaXRpYWxpc2llcmVuDQpjb25zdCBjbGllbnQgPSBuZXcgT3BlbkFJKHsNCiAgYXBpS2V5OiBBUElfS0VZLCAvLyBWZXJ3ZW5kZSBkaWUgVmFyaWFibGUgZsO8ciBkZW4gQVBJLVNjaGzDvHNzZWwNCn0pOw0KDQovLyBGdW5rdGlvbiB6dW0gS29kaWVyZW4gZGVzIEJpbGRlcyBpbiBCYXNlNjQNCmZ1bmN0aW9uIGVuY29kZUltYWdlKGltYWdlUGF0aCkgew0KICBjb25zdCBpbWFnZUJ1ZmZlciA9IGZzLnJlYWRGaWxlU3luYyhpbWFnZVBhdGgpOw0KICByZXR1cm4gaW1hZ2VCdWZmZXIudG9TdHJpbmcoJ2Jhc2U2NCcpOw0KfQ0KDQovLyBCYXNlNjQtU3RyaW5nIGRlcyBCaWxkZXMgZXJzdGVsbGVuDQpjb25zdCBiYXNlNjRJbWFnZSA9IGVuY29kZUltYWdlKElNQUdFX1BBVEgpOyAvLyBWZXJ3ZW5kZSBkaWUgVmFyaWFibGUgZsO8ciBkZW4gQmlsZHBmYWQNCg0KLy8gQW5mcmFnZSBhbiBPcGVuQUkgc2VuZGVuDQphc3luYyBmdW5jdGlvbiBhbmFseXplSW1hZ2UoKSB7DQogIHRyeSB7DQogICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuY2hhdC5jb21wbGV0aW9ucy5jcmVhdGUoew0KICAgICAgbW9kZWw6ICdncHQtNG8tbWluaScsDQogICAgICBtZXNzYWdlczogWw0KICAgICAgICB7DQogICAgICAgICAgcm9sZTogJ3VzZXInLA0KICAgICAgICAgIGNvbnRlbnQ6IFsNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLA0KICAgICAgICAgICAgICB0ZXh0OiBRVUVTVElPTiwgLy8gVmVyd2VuZGUgZGllIFZhcmlhYmxlIGbDvHIgZGllIEZyYWdlDQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICB0eXBlOiAnaW1hZ2VfdXJsJywNCiAgICAgICAgICAgICAgaW1hZ2VfdXJsOiB7DQogICAgICAgICAgICAgICAgdXJsOiBgZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCwke2Jhc2U2NEltYWdlfWAsDQogICAgICAgICAgICAgIH0sDQogICAgICAgICAgICB9LA0KICAgICAgICAgIF0sDQogICAgICAgIH0sDQogICAgICBdLA0KICAgIH0pOw0KDQogICAgLy8gTnVyIGRlbiBjb250ZW50IGF1cyBkZXIgQW50d29ydCB6dXLDvGNrZ2ViZW4NCiAgICByZXR1cm4gcmVzcG9uc2UuY2hvaWNlc1swXS5tZXNzYWdlLmNvbnRlbnQ7DQogIH0gY2F0Y2ggKGVycm9yKSB7DQogICAgY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyb3IpOw0KICB9DQp9DQoNCi8vIEZ1bmt0aW9uIGF1c2bDvGhyZW4NCmFuYWx5emVJbWFnZSgpLnRoZW4oKHJlc3VsdCkgPT4gew0KICBjb25zb2xlLmxvZyhyZXN1bHQpOw0KfSk7DQo=</field>
                           <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                         </block>
                         <block type="http_get" id="%@DtL{e5a7xB/z4QWJJD" x="-662" y="-637">
                           <field name="TIMEOUT">2000</field>
                           <field name="UNIT">ms</field>
                           <field name="TYPE">arraybuffer</field>
                           <value name="URL">
                             <shadow type="text" id="KylM(z%z`LA/%XK_x^*D">
                               <field name="TEXT">http://192.168.99.93/cgi-bin/api.cgi?cmd=Snap&amp;channel=0&amp;user=admin&amp;password=abcd</field>
                             </shadow>
                           </value>
                           <statement name="STATEMENT">
                             <block type="debug" id="d:IY2pT_WNG/EqsBccvX">
                               <field name="Severity">info</field>
                               <value name="TEXT">
                                 <shadow type="text" id="+Kg)Y%9AYp}{tY^/Vv|_">
                                   <field name="TEXT">test</field>
                                 </shadow>
                                 <block type="procedures_callcustomreturn" id="Th(%,~XXrnkE8m#b)/9D">
                                   <mutation name="Bild_Analysieren">
                                     <arg name="Bildpfad"></arg>
                                     <arg name="api_key"></arg>
                                     <arg name="Frage"></arg>
                                   </mutation>
                                   <value name="ARG0">
                                     <block type="http_response_tofile" id="w[MNq!R0Lr|-N$Go+E@L">
                                       <value name="FILENAME">
                                         <shadow type="text" id="#5YFt*N{B7dOcv]kFRP$">
                                           <field name="TEXT">eingang.jpg</field>
                                         </shadow>
                                       </value>
                                     </block>
                                   </value>
                                   <value name="ARG1">
                                     <block type="text" id="qD1A7?Y)DhcB{4-ff0T=">
                                       <field name="TEXT">xyz</field>
                                     </block>
                                   </value>
                                   <value name="ARG2">
                                     <block type="text" id="DjqZIXmZJ[JX-JqvE=/4">
                                       <field name="TEXT">Was ist das für ein Foto?</field>
                                     </block>
                                   </value>
                                 </block>
                               </value>
                             </block>
                           </statement>
                         </block>
                        </xml>
                        

                        const fs = require('fs');
                        const OpenAI = require('openai');
                        
                        // Variablen für API-Key, Bildpfad und Frage
                        const API_KEY = api_key;
                        const IMAGE_PATH = Bildpfad;
                        const QUESTION = Frage;
                        
                        // OpenAI-Client initialisieren
                        const client = new OpenAI({
                         apiKey: API_KEY, // Verwende die Variable für den API-Schlüssel
                        });
                        
                        // Funktion zum Kodieren des Bildes in Base64
                        function encodeImage(imagePath) {
                         const imageBuffer = fs.readFileSync(imagePath);
                         return imageBuffer.toString('base64');
                        }
                        
                        // Base64-String des Bildes erstellen
                        const base64Image = encodeImage(IMAGE_PATH); // Verwende die Variable für den Bildpfad
                        
                        // Anfrage an OpenAI senden
                        async function analyzeImage() {
                         try {
                           const response = await client.chat.completions.create({
                             model: 'gpt-4o-mini',
                             messages: [
                               {
                                 role: 'user',
                                 content: [
                                   {
                                     type: 'text',
                                     text: QUESTION, // Verwende die Variable für die Frage
                                   },
                                   {
                                     type: 'image_url',
                                     image_url: {
                                       url: `data:image/jpeg;base64,${base64Image}`,
                                     },
                                   },
                                 ],
                               },
                             ],
                           });
                        
                           // Nur den content aus der Antwort zurückgeben
                           return response.choices[0].message.content;
                         } catch (error) {
                           console.error('Error:', error);
                         }
                        }
                        
                        // Funktion ausführen
                        analyzeImage().then((result) => {
                         console.log(result);
                        });
                        
                        

                        In der Javascriptinstant noch folgende 2 Module hinzufügen.
                        c9090244-d9a4-41f9-b896-680411412654-image.png

                        javascript.0	14:07:17.248	info	Start JavaScript script.js.Eigene_Scripte.Tests.Foto_KI_Test (Blockly)
                        javascript.0	14:07:17.269	info	script.js.Eigene_Scripte.Tests.Foto_KI_Test: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                        javascript.0	14:07:17.837	info	script.js.Eigene_Scripte.Tests.Foto_KI_Test: undefined
                        javascript.0	14:07:21.943	info	script.js.Eigene_Scripte.Tests.Foto_KI_Test: Das Foto zeigt eine Straßenansicht, aufgenommen aus einem Fenster. Man sieht mehrere Häuser, eine kurvenreiche Straße und einige Bäume im Hintergrund. Der Himmel ist bewölkt und es scheint, als wäre es tagsüber. Die Sicht ist etwas trüb, wahrscheinlich aufgrund von Wetterbedingungen oder Schmutz auf dem Fenster.
                        

                        @OliverIO
                        Eine Idee wo das undefined her kommt?

                        OliverIOO Offline
                        OliverIOO Offline
                        OliverIO
                        wrote on last edited by
                        #11

                        @david-g sagte in Bilder mittels LLM analysieren:

                        Eine Idee wo das undefined her kommt?

                        es sieht nach einer console.log Ausgabe aus.
                        Ergänze mal deinen Lösungspost nochmal mit dem kompletten Javascript was im funktionsblock enthalten ist

                        Meine Adapter und Widgets
                        TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                        Links im Profil

                        David G.D 1 Reply Last reply
                        0
                        • OliverIOO OliverIO

                          @david-g sagte in Bilder mittels LLM analysieren:

                          Eine Idee wo das undefined her kommt?

                          es sieht nach einer console.log Ausgabe aus.
                          Ergänze mal deinen Lösungspost nochmal mit dem kompletten Javascript was im funktionsblock enthalten ist

                          David G.D Online
                          David G.D Online
                          David G.
                          wrote on last edited by David G.
                          #12

                          @oliverio

                          Done

                          Edit
                          Noch einen Fehler gefunden.
                          Die Antwort kommt garnicht aus meinem Debug aus Blockly, sondern aus dem Script direkt.
                          Das undefined ist der Debug im Blockly.

                          Wie gebe ich die Antwort in das result bzw den return für den JS-Baustein? Evtl kann @paul53 mir das grad sagen. Du hast irgendwann mal gesagt, dass du blockly nicht nutzt ^^.

                          Zeigt eure Lovelace-Visualisierung klick
                          (Auch ideal um sich Anregungen zu holen)

                          Meine Tabellen für eure Visualisierung klick

                          paul53P 1 Reply Last reply
                          0
                          • David G.D David G.

                            @oliverio

                            Done

                            Edit
                            Noch einen Fehler gefunden.
                            Die Antwort kommt garnicht aus meinem Debug aus Blockly, sondern aus dem Script direkt.
                            Das undefined ist der Debug im Blockly.

                            Wie gebe ich die Antwort in das result bzw den return für den JS-Baustein? Evtl kann @paul53 mir das grad sagen. Du hast irgendwann mal gesagt, dass du blockly nicht nutzt ^^.

                            paul53P Offline
                            paul53P Offline
                            paul53
                            wrote on last edited by paul53
                            #13

                            @david-g sagte: Das undefined ist der Debug im Blockly.

                            Man kann aus einer Callback-Funktion kein Ergebnis an das Hauptprogramm übergeben. Das Hauptprogramm ist beendet, bevor die Callback-Funktion ausgeführt wird.

                            Übrigens ist das Modul "fs" Bestandteil von Node.js und muss nicht installiert werden.

                            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                            David G.D 1 Reply Last reply
                            0
                            • paul53P paul53

                              @david-g sagte: Das undefined ist der Debug im Blockly.

                              Man kann aus einer Callback-Funktion kein Ergebnis an das Hauptprogramm übergeben. Das Hauptprogramm ist beendet, bevor die Callback-Funktion ausgeführt wird.

                              Übrigens ist das Modul "fs" Bestandteil von Node.js und muss nicht installiert werden.

                              David G.D Online
                              David G.D Online
                              David G.
                              wrote on last edited by
                              #14

                              @paul53

                              Das ist ja "doof".

                              Bleibt also nur ein normales JS?

                              Zeigt eure Lovelace-Visualisierung klick
                              (Auch ideal um sich Anregungen zu holen)

                              Meine Tabellen für eure Visualisierung klick

                              paul53P 1 Reply Last reply
                              0
                              • David G.D David G.

                                @paul53

                                Das ist ja "doof".

                                Bleibt also nur ein normales JS?

                                paul53P Offline
                                paul53P Offline
                                paul53
                                wrote on last edited by
                                #15

                                @david-g sagte: Bleibt also nur ein normales JS?

                                Du kannst das Ergebnis in einen eigenen Datenpunkt schreiben und diesen dann auswerten.

                                analyzeImage().then((result) => {
                                  console.log(result);
                                  setState('0_userdata.0.OpenAI.Antwort', result, true);
                                });
                                

                                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                David G.D 1 Reply Last reply
                                0
                                • paul53P paul53

                                  @david-g sagte: Bleibt also nur ein normales JS?

                                  Du kannst das Ergebnis in einen eigenen Datenpunkt schreiben und diesen dann auswerten.

                                  analyzeImage().then((result) => {
                                    console.log(result);
                                    setState('0_userdata.0.OpenAI.Antwort', result, true);
                                  });
                                  
                                  David G.D Online
                                  David G.D Online
                                  David G.
                                  wrote on last edited by David G.
                                  #16

                                  @paul53
                                  Okay, das ist ein gehbarer Workarround.
                                  Wenn ich nicht schön anzuschauen 🤣

                                  Edit
                                  Hab noch keinen wirklichen Einsatzzweck, aber eine Art Chatbot zum testen klappt schonmal ^^.

                                  Screenshot_20241214_190702_Chrome.jpg

                                  Screenshot_20241214_190706_Telegram.jpg

                                  Zeigt eure Lovelace-Visualisierung klick
                                  (Auch ideal um sich Anregungen zu holen)

                                  Meine Tabellen für eure Visualisierung klick

                                  1 Reply Last reply
                                  1
                                  • David G.D David G.

                                    LÖSUNG MEINER FRAGE VON UNTEN IN DIESEM BEITRAG

                                    Hallo,

                                    ich möchte hier gerne meine Lösung (danke an alle hier im Thread die geholfen haben) zum Analysieren von Bildern mittels ioBroker vorstellen.

                                    Die Bilder werden mittels GPT Vision analysiert.

                                    Dazu benötigt man nur folgende kleine Funktion in Blockly:

                                    1e5476c2-0f36-4121-aae4-f25fcdc688cc-image.png

                                    <block xmlns="https://developers.google.com/blockly/xml" type="procedures_defcustomnoreturn" id="jsyp;7{c1^]s%u;Qm.[B" x="313" y="-662">
                                     <mutation statements="false">
                                       <arg name="Bildpfad" varid="#^~=}RQE~[:hE?sXCoB$"></arg>
                                       <arg name="api_key" varid="o2iepdh*h(;FbS4Z=9{J"></arg>
                                       <arg name="Frage" varid="Uh*o[9LxAdT1B2TiZdAr"></arg>
                                       <arg name="DP_Antwort" varid="$xhtlk=y!MtLBX7u:Zew"></arg>
                                     </mutation>
                                     <field name="NAME">Bildanalyse</field>
                                     <field name="SCRIPT">Y29uc3QgZnMgPSByZXF1aXJlKCdmcycpOw0KY29uc3QgT3BlbkFJID0gcmVxdWlyZSgnb3BlbmFpJyk7DQogDQovLyBWYXJpYWJsZW4gZsO8ciBBUEktS2V5LCBCaWxkcGZhZCB1bmQgRnJhZ2UNCmNvbnN0IEFQSV9LRVkgPSBhcGlfa2V5Ow0KY29uc3QgSU1BR0VfUEFUSCA9IEJpbGRwZmFkOw0KY29uc3QgUVVFU1RJT04gPSBGcmFnZTsNCmNvbnN0IERQID0gRFBfQW50d29ydCANCiANCi8vIE9wZW5BSS1DbGllbnQgaW5pdGlhbGlzaWVyZW4NCmNvbnN0IGNsaWVudCA9IG5ldyBPcGVuQUkoew0KIGFwaUtleTogQVBJX0tFWSwgLy8gVmVyd2VuZGUgZGllIFZhcmlhYmxlIGbDvHIgZGVuIEFQSS1TY2hsw7xzc2VsDQp9KTsNCiANCi8vIEZ1bmt0aW9uIHp1bSBLb2RpZXJlbiBkZXMgQmlsZGVzIGluIEJhc2U2NA0KZnVuY3Rpb24gZW5jb2RlSW1hZ2UoaW1hZ2VQYXRoKSB7DQogY29uc3QgaW1hZ2VCdWZmZXIgPSBmcy5yZWFkRmlsZVN5bmMoaW1hZ2VQYXRoKTsNCiByZXR1cm4gaW1hZ2VCdWZmZXIudG9TdHJpbmcoJ2Jhc2U2NCcpOw0KfQ0KIA0KLy8gQmFzZTY0LVN0cmluZyBkZXMgQmlsZGVzIGVyc3RlbGxlbg0KY29uc3QgYmFzZTY0SW1hZ2UgPSBlbmNvZGVJbWFnZShJTUFHRV9QQVRIKTsgLy8gVmVyd2VuZGUgZGllIFZhcmlhYmxlIGbDvHIgZGVuIEJpbGRwZmFkDQogDQovLyBBbmZyYWdlIGFuIE9wZW5BSSBzZW5kZW4NCmFzeW5jIGZ1bmN0aW9uIGFuYWx5emVJbWFnZSgpIHsNCiB0cnkgew0KICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuY2hhdC5jb21wbGV0aW9ucy5jcmVhdGUoew0KICAgICBtb2RlbDogJ2dwdC00bycsDQogICAgIG1lc3NhZ2VzOiBbDQogICAgICAgew0KICAgICAgICAgcm9sZTogJ3VzZXInLA0KICAgICAgICAgY29udGVudDogWw0KICAgICAgICAgICB7DQogICAgICAgICAgICAgdHlwZTogJ3RleHQnLA0KICAgICAgICAgICAgIHRleHQ6IFFVRVNUSU9OLCAvLyBWZXJ3ZW5kZSBkaWUgVmFyaWFibGUgZsO8ciBkaWUgRnJhZ2UNCiAgICAgICAgICAgfSwNCiAgICAgICAgICAgew0KICAgICAgICAgICAgIHR5cGU6ICdpbWFnZV91cmwnLA0KICAgICAgICAgICAgIGltYWdlX3VybDogew0KICAgICAgICAgICAgICAgdXJsOiBgZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCwke2Jhc2U2NEltYWdlfWAsDQogICAgICAgICAgICAgfSwNCiAgICAgICAgICAgfSwNCiAgICAgICAgIF0sDQogICAgICAgfSwNCiAgICAgXSwNCiAgICAgIm1heF90b2tlbnMiOiA1MDAwDQogICB9KTsNCiANCiAgIC8vIE51ciBkZW4gY29udGVudCBhdXMgZGVyIEFudHdvcnQgenVyw7xja2dlYmVuDQogICByZXR1cm4gcmVzcG9uc2UuY2hvaWNlc1swXS5tZXNzYWdlLmNvbnRlbnQ7DQogfSBjYXRjaCAoZXJyb3IpIHsNCiAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycm9yKTsNCiB9DQp9DQogDQovLyBGdW5rdGlvbiBhdXNmw7xocmVuDQphbmFseXplSW1hZ2UoKS50aGVuKChyZXN1bHQpID0+IHsNCg0KIHNldFN0YXRlKERQLCByZXN1bHQsIHRydWUpOw0KIA0KfSk7DQogDQo=</field>
                                     <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                                    </block>
                                    

                                    • Unter Bildpfad muss der Pfad zum Bild angegeben werden was analysiert werden soll
                                    • Unter api_key euer openAI Api Key.
                                    • Unter Frage die Frage zum Bild
                                    • Unter DP_Antwort ein DP in den die Antwort geschrieben werden soll.

                                    Damit das Blockly funktioniert müssen in den Settings vom Javascript-Adapter diese 2 Module hinzugefügt werden.

                                    In der Javascriptinstanz noch folgende 2 Module hinzufügen.
                                    c9090244-d9a4-41f9-b896-680411412654-image.png

                                    Man könnte zB so Bilder seiner Überwachungskamera Analysieren:
                                    3eb6fb1c-9f72-4e90-bb20-0856bf220684-image.png

                                    Zum testen hab ich auch einen kleinen "Bot" für Telegram geschrieben.
                                    Das sieht dann so aus:
                                    Screenshot_20241214_190706_Telegram.jpg
                                    _ _
                                    Hallo,

                                    ich weiß nicht so ganz, ob ich hier im Bereich richtig bin.
                                    Meine Frage ist sehr allgemein.....
                                    Falls es möglich ist, dann vermutlich mit JS.....

                                    Ich habe folgendes für HA gesehen und finde es ziemlich cool:
                                    https://community.home-assistant.io/t/llm-vision-let-home-assistant-see/729241

                                    Man kann Bilder nach OpenAI etc hochladen und analysieren lassen.

                                    Bekommt man sowas als Script umgesetzt?
                                    Lokales Bild hochladen, Frage mitgeben und dann eine Antwort bekommen?

                                    Zu einer Api von OpenAI finde ich nichts....

                                    NegaleinN Offline
                                    NegaleinN Offline
                                    Negalein
                                    Global Moderator
                                    wrote on last edited by
                                    #17

                                    @david-g sagte in Bilder mittels LLM ChatGPT Vision ananalysieren:

                                    Die Bilder werden mittels GPT Vision analysiert.

                                    Hallo David!

                                    Hab dein Blockly hier in der Sammlung aufgenommen. 🙂

                                    ° Node.js: 20.17.0 NPM: 10.8.2
                                    ° Proxmox, Ubuntu 22.04.3 LTS
                                    ° Fixer ---> iob fix

                                    1 Reply Last reply
                                    2
                                    Reply
                                    • Reply as topic
                                    Log in to reply
                                    • Oldest to Newest
                                    • Newest to Oldest
                                    • Most Votes


                                    Support us

                                    ioBroker
                                    Community Adapters
                                    Donate

                                    415

                                    Online

                                    32.4k

                                    Users

                                    81.4k

                                    Topics

                                    1.3m

                                    Posts
                                    Community
                                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                    ioBroker Community 2014-2025
                                    logo
                                    • Login

                                    • Don't have an account? Register

                                    • Login or register to search.
                                    • First post
                                      Last post
                                    0
                                    • Recent
                                    • Tags
                                    • Unread 0
                                    • Categories
                                    • Unreplied
                                    • Popular
                                    • GitHub
                                    • Docu
                                    • Hilfe