Cortex AI-Funktionen: Image-Extraktion mit AI_PARSE_DOCUMENT¶
AI_PARSE_DOCUMENT ist eine Cortex-AI-Funktion, die Text, Daten, Layout-Elemente und Bilder aus PDFs, Word-Dokumenten und Bildern extrahiert. Verwenden Sie diese Funktion zur Extraktion von Daten mit hoher Genauigkeit, um fortgeschrittene, multidimensionale Dokumentenverarbeitungs-Workflows zu ermöglichen, wie z. B.:
Daten anreichern: Extrahieren Sie Bilder aus Dokumenten, um visuellen Kontext für tiefere Einblicke hinzuzufügen.
Multimodales RAG: Kombinieren Sie Bilder und Text für die Retrieval-Augmented Generation (RAG), um die Antworten der Modelle zu verbessern.
Bildklassifizierung: Verwenden Sie extrahierte Bilder mit AI_EXTRACT oder AI_COMPLETE für das automatische Tagging und die automatische Analyse.
Wissensdatenbanken: Erstellen Sie inhaltsreichere Repositorys, indem Sie sowohl Text als auch Bilder für eine bessere Suche und Argumentation einbeziehen.
Konformität: Extrahieren und analysieren Sie Bilder (z. B. Diagramme, Signaturen) für Regulierungs- und Audit-Workflows.
Für eine Einführung in AI_PARSE_DOCUMENT finden Sie unter Parsing documents with AI_PARSE_DOCUMENT.
Verwenden von AI_PARSE_DOCUMENT, um Bilder zu extrahieren¶
So extrahieren Sie Bilder mit AI_PARSE_DOCUMENT aus einem Dokument:
Setzen Sie die Option
'mode'auf'LAYOUT'. Die Image-Extraktion erfordert den LAYOUT-Modus.Setzen Sie die Option
'extract_images'auf TRUE.
Die AI_PARSE_DOCUMENT Bildextraktion gibt ein Array, images, in der JSON-Ausgabe zurück. Jedes Element von images enthält ein Feld ``image_base64``mit den extrahierten Bilddaten, die als base64-Zeichenfolge codiert sind. Image OBJECT_CONSTRUCT enthält auch Felder für eine eindeutige ID und Bildbegrenzungsrahmen.
SELECT AI_PARSE_DOCUMENT(
TO_FILE('@my_stage', 'my_document.pdf'),
{'mode': 'LAYOUT', 'extract_images': true})
AS layout_wƒith_images;
Sie können die Bilder mit BASE64_DECODE_BINARY dekodieren und sie dann direkt an AI_EXTRACT übergeben, um den Inhalt des Bildes zu verarbeiten oder zu beschreiben. Alternativ können Sie sie auch in einem Stagingbereich speichern, um sie mit multimodalem AI_COMPLETE zu verarbeiten. (AI_COMPLETE unterstützt derzeit keine direkte Bildeingabe).
Beispiele¶
Bilder extrahieren und beschreiben¶
Nachdem Sie die Bilddaten extrahiert haben, können Sie AI_EXTRACT verwenden, um den Bildinhalt zu verarbeiten oder zu beschreiben. Das folgende Beispiel generiert eine Beschreibung für das erste extrahierte Bild, nachdem es von base64 in einen Binärwert konvertiert wurde. (AI_EXTRACT erfordert eine Binäreingabe.) Die Abfrage verwendet einen regulären Ausdruck, um die Metadaten (Schema und Format) aus der base64-Zeichenfolge zu entfernen.
SELECT AI_EXTRACT(
file_data => BASE64_DECODE_BINARY(
REGEXP_REPLACE(
(
SELECT (
AI_PARSE_DOCUMENT(
TO_FILE('@image_docs', 'my_document.pdf'),
{'mode': 'LAYOUT', 'extract_images': true}
):images[0]['image_base64']
)::STRING
),
'^data:image/[^;]+;base64,', '')
),
responseFormat => {'Image Name': 'Describe the image'}
);
Extrahierte Bilder in einem Stagingbereich speichern¶
Sie können extrahierte Bilder aus Dokumenten in einem Snowflake-Stagingbereich zur Wiederverwendung, Prüfung oder Weiterverarbeitung mit anderen Cortex AI-Funktionen speichern. In diesem Beispiel wird eine gespeicherte Python-Prozedur erstellt und verwendet, um base64-Bilddaten aus AI_PARSE_DOCUMENT zu decodieren und die resultierenden Bilddateien in einen bestimmten Stagingbereich hochzuladen.
CREATE OR REPLACE PROCEDURE SAVE_EXTRACTED_IMAGES(r VARIANT)
RETURNS ARRAY
LANGUAGE PYTHON
RUNTIME_VERSION = '3.9'
PACKAGES = ('pillow', 'snowflake-snowpark-python')
HANDLER = 'run'
AS
$$
import base64
import io
import os
import tempfile
from PIL import Image
def process_parse_document_result(data: dict) -> tuple[str, str, str]:
images = data["images"]
for image in images:
id = image["id"]
data, image_base64 = image["image_base64"].split(";", 1)
extension = data.split("/")[1]
base64 = image_base64.split(",")[1]
yield id, extension, base64
def decode_base64(encoded_image: str) -> bytes:
return base64.b64decode(encoded_image)
def run(session, r):
destination_path = r["DESTINATION_PATH"]
parse_document_result = r["PARSE_DOCUMENT_RESULT"]
if not destination_path:
return ["Error: destination_path parameter is required"]
if not destination_path.startswith("@"):
return ["Error: destination_path must start with @ (e.g. @output_stage/path"]
if destination_path == "@":
return ["Error: destination_path must include a stage name after @"]
# Clean the result directory
session.sql(f"RM destination_path")
uploaded_files = []
with tempfile.TemporaryDirectory() as temp_dir:
for image_id, extension, encoded_image in process_parse_document_result(parse_document_result):
image_bytes = decode_base64(encoded_image)
image: Image = Image.open(io.BytesIO(image_bytes))
image_path = os.path.join(temp_dir, image_id)
image.save(image_path)
# Use session.file.put with source file path and auto_compress=False
session.file.put(
image_path, destination_path, auto_compress=False, overwrite=True
)
uploaded_files.append(f"{destination_path}/{image_id}")
# Cleanup
os.remove(image_path)
return uploaded_files
$$;
Nach dem Erstellen der Prozedur SAVE_EXTRACTED_IMAGES können Sie sie aufrufen, um Bilder aus einem Dokument zu extrahieren und in einem Stagingbereich zu speichern, wie im folgenden Codeausschnitt gezeigt:
CALL SAVE_EXTRACTED_IMAGES(
(
SELECT OBJECT_CONSTRUCT(*)
FROM ( SELECT
'@image_docs/output' as destination_path,
AI_PARSE_DOCUMENT(
TO_FILE('@image_docs/my_document.pdf'),
{'mode': 'LAYOUT', 'extract_images': true}
) as parse_document_result
) LIMIT 1
));
Die Ausgabe dieser Abfrage ist eine Liste von Dateipfaden für die Images, die im angegebenen Stagingbereich gespeichert sind, wie z. B.:
image_docs/output/img-0.jpeg
image_docs/output/img-1.jpeg
image_docs/output/img-10.jpeg
image_docs/output/img-11.jpeg
image_docs/output/img-12.jpeg
image_docs/output/img-13.jpeg
Jetzt können Sie die gespeicherten Bilder mit anderen Cortex AI-Funktionen verarbeiten, wie z. B. AI_COMPLETE für die multimodale Analyse oder Generierung.
SELECT AI_COMPLETE(
'pixtral-large',
'Describe the image in 10 words.',
TO_FILE('@image_docs/output/img-0.jpeg')
);
Antwort:
The image shows central bank policy rates for various countries from 2000 to 2025.
Hinweise zu Kosten¶
AI_PARSE_DOCUMENT verwendet die Abrechnung auf der Grundlage der Anzahl der verarbeiteten Seiten. Eine einzelne Bilddatei wird für Abrechnungszwecke als eine Seite betrachtet. Das Extrahieren von Bildern verursacht keine zusätzlichen Kosten.
Aktuelle Einschränkungen¶
Aus einem einzelnen Dokument können nicht mehr als fünfzig Bilder extrahiert werden. Zusätzliche Bilder werden ignoriert.
Bilder, die kleiner als 4 × 4 Pixel sind, werden nicht extrahiert.
Wenn die Größe einer Antwort den Kontoparameter überschreitet EXTERNAL_FUNCTION_MAx_RESPONSE_SIZE überschreitet, gibt die Funktion einen Fehler zurück. Erhöhen Sie den Wert dieses Parameters, falls erforderlich.