Bildverarbeitung im Flow#

Experimentelles Feature

Dies ist ein experimentelles Feature und kann sich jederzeit ändern. Erfahren Sie mehr.

PromptFlow definiert einen Vertrag zur Darstellung von Bilddaten.

Datenklasse#

promptflow.contracts.multimedia.Image Die Image-Klasse ist eine Unterklasse von bytes, sodass Sie auf die Binärdaten zugreifen können, indem Sie das Objekt direkt verwenden. Sie verfügt über ein zusätzliches Attribut source_url, um die Ursprungs-URL des Bildes zu speichern. Dies kann nützlich sein, wenn Sie die URL anstelle des Inhalts des Bildes an APIs wie das GPT-4V-Modell übergeben möchten.

Datentyp für Flow-Eingabe#

Setzen Sie den Typ der Flow-Eingabe auf image, und Promptflow behandelt sie als Bild.

Bildreferenz in Prompt-Vorlage#

In Prompt-Vorlagen, die Bilder unterstützen (z. B. im OpenAI GPT-4V-Tool), wird die Markdown-Syntax verwendet, um anzugeben, dass eine Vorlagen-Eingabe ein Bild ist: ![image]({{test_image}}). In diesem Fall wird test_image durch Base64 oder source_url (falls gesetzt) ersetzt, bevor es an das LLM-Modell gesendet wird.

Serialisierung/Deserialisierung#

Promptflow verwendet ein spezielles Wörterbuch, um Bilder darzustellen. {"data:image/<mime-type>;<representation>": "<value>"}

  • <mime-type> kann ein HTML-Standard- MIME-Typ für Bilder sein. Das Festlegen auf einen bestimmten Typ kann beim korrekten Anzeigen des Bildes helfen, oder es kann * für unbekannte Typen sein.

  • <representation> ist die serialisierte Darstellung des Bildes. Es werden 3 Typen unterstützt:

    • url

      Es kann auf eine öffentlich zugängliche Web-URL verweisen. Z. B.:

      {“data:image/png;url”: “https://developer.microsoft.com/_devcom/images/logo-ms-social.png”}

    • base64

      Es kann die Base64-Kodierung des Bildes sein. Z. B.:

      {“data:image/png;base64”: “iVBORw0KGgoAAAANSUhEUgAAAGQAAABLAQMAAAC81rD0AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABlBMVEUAAP7////DYP5JAAAAAWJLR0QB/wIt3gAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1FB+QIGBcKN7/nP/UAAAASSURBVDjLY2AYBaNgFIwCdAAABBoAAaNglfsAAAAZdEVYdGNvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVDnr0DLAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIwLTA4LTI0VDIzOjEwOjU1KzAzOjAwkHdeuQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMC0wOC0yNFQyMzoxMDo1NSswMzowMOEq5gUAAAAASUVORK5CYII=”}

    • path

      Es kann auf eine Bilddatei auf der lokalen Festplatte verweisen. Sowohl absolute als auch relative Pfade werden unterstützt. In Fällen, in denen die serialisierte Bilddarstellung in einer Datei gespeichert wird, wird ein relativer Pfad zum enthaltenden Ordner dieser Datei empfohlen, wie bei Flow-IO-Daten. Z. B.:

      {“data:image/png;path”: “./my-image.png”}

Bitte beachten Sie, dass die path-Darstellung im Deployment-Szenario nicht unterstützt wird.

Batch-Eingabedaten#

Batch-Eingabedaten, die Bilder enthalten, können in 2 Formaten vorliegen:

  1. Das gleiche jsonl-Format wie bei regulären Batch-Eingaben, mit der Ausnahme, dass einige Spalten serialisierte Bilddaten oder zusammengesetzte Datentypen (Wörterbuch/Liste) mit Bildern enthalten können. Die serialisierten Bilder können nur URL oder Base64 sein. Z. B.:

    {"question": "How many colors are there in the image?", "input_image": {"data:image/png;url": "https://developer.microsoft.com/_devcom/images/logo-ms-social.png"}}
    {"question": "What's this image about?", "input_image": {"data:image/png;url": "https://developer.microsoft.com/_devcom/images/404.png"}}
    
  2. Ein Ordner, der eine jsonl-Datei unter dem Stammverzeichnis enthält, welche serialisierte Bilder im Dateireferenzformat enthält. Die referenzierten Dateien werden im Ordner gespeichert, und ihr relativer Pfad zum Stammverzeichnis wird als Pfad in der Dateireferenz verwendet. Hier ist eine Beispiel-Batch-Eingabe. Beachten Sie, dass der Name von input.jsonl beliebig ist, solange es sich um eine jsonl-Datei handelt.

    BatchInputFolder
    |----input.jsonl
    |----image1.png
    |----image2.png
    

    Inhalt von input.jsonl

    {"question": "How many colors are there in the image?", "input_image": {"data:image/png;path": "image1.png"}}
    {"question": "What's this image about?", "input_image": {"data:image/png;path": "image2.png"}}