Fonctions Cortex AI : Extraction d’images avec AI_PARSE_DOCUMENT¶
AI_PARSE_DOCUMENT est une fonction Cortex AI qui extrait du texte, des données, des éléments de mise en page et des images depuis des fichiers PDFs, des documents Word et des images. Utilisez cette capacité d’extraction d’images haute qualité pour optimiser les workflows de traitement de documents multimodaux et avancés, tels que :
Enrichissement des données : Extrayez des images à partir de documents pour ajouter du contexte visuel pour des informations plus approfondies.
RAG multimodale : Combinez des images et du texte pour la génération augmentée par la récupération (RAG) afin d’améliorer les réponses du modèle.
Classification des images : Utiliser des images extraites avec AI_EXTRACT ou AI_COMPLETE pour le balisage et l’analyse automatiques.
Bases de connaissances : Créez des référentiels plus riches en incluant à la fois du texte et des images pour améliorer la recherche et le raisonnement.
Conformité : Extrayez et analysez des images (par exemple, des graphiques, des signatures) pour les workflows réglementaires et d’audit.
Pour une introduction à AI_PARSE_DOCUMENT, consultez Parsing documents with AI_PARSE_DOCUMENT.
Utiliser AI_PARSE_DOCUMENT pour extraire des images¶
Pour extraire des images à partir d’un document à l’aide de AI_PARSE_DOCUMENT, procédez comme suit :
Définissez l’option
'mode'sur'LAYOUT'. L’extraction d’images nécessite le mode LAYOUT.Définissez l’option
'extract_images'sur TRUE.
L’extraction d’images AI_PARSE_DOCUMENT renvoie un tableau images dans la sortie JSON. Chaque élément du tableau images contient un champ image_base64 avec les données d’images extraites codées sous forme de chaîne base64. OBJECT_CONSTRUCT contient également des champs dédiés à un ID unique et aux cadres de sélection d’images.
SELECT AI_PARSE_DOCUMENT(
TO_FILE('@my_stage', 'my_document.pdf'),
{'mode': 'LAYOUT', 'extract_images': true})
AS layout_wƒith_images;
Vous pouvez décoder les images en utilisant BASE64_DECODE_BINARY, puis les transmettre directement à AI_EXTRACT pour traiter ou décrire le contenu des images. Vous pouvez également les stocker dans une zone de préparation pour un traitement à l’aide de AI_COMPLETE multimodal. (AI_COMPLETE ne prend actuellement pas en charge l’entrée directe d’images).
Exemples¶
Extraire et décrire des images¶
Après avoir extrait les données des images, vous pouvez utiliser AI_EXTRACT pour traiter ou décrire le contenu des images. L’exemple suivant génère une description pour la première image extraite après l’avoir convertie en binaire à partir de base64. (AI_EXTRACT nécessite une entrée binaire). La requête utilise une expression régulière pour supprimer les métadonnées (schéma et format) de la chaîne base64.
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'}
);
Stocker les images extraites dans une zone de préparation¶
Vous pouvez stocker des images extraites de documents dans une zone de préparation Snowflake pour les réutiliser, les auditer ou les traiter davantage avec d’autres fonctions Cortex AI. Cet exemple crée et utilise une procédure stockée Python pour décoder des données d’images base64 à partir de AI_PARSE_DOCUMENT et charger les fichiers images résultants vers une zone de préparation spécifiée.
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
$$;
Après avoir créé la procédure SAVE_EXTRACTED_IMAGES, vous pouvez l’appeler pour extraire des images d’un document et les stocker dans une zone de préparation, comme indiqué dans l’extrait de code suivant :
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
));
La sortie de cette requête est une liste de chemins d’accès aux fichiers pour les images stockées dans la zone de préparation spécifiée, par exemple :
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
Vous pouvez maintenant traiter les images stockées à l’aide d’autres fonctions Cortex AI, par exemple AI_COMPLETE pour l’analyse ou la génération multimodale.
SELECT AI_COMPLETE(
'pixtral-large',
'Describe the image in 10 words.',
TO_FILE('@image_docs/output/img-0.jpeg')
);
Réponse :
The image shows central bank policy rates for various countries from 2000 to 2025.
Considérations relatives aux clients¶
AI_PARSE_DOCUMENT utilise la facturation en fonction du nombre de pages traitées. Un seul fichier image est considéré comme une page à des fins de facturation. L’extraction d’images n’entraîne pas de frais supplémentaires.
Limites actuelles¶
Il n’est pas possible d’extraire plus de 50 images à partir d’un seul document. Les images supplémentaires sont ignorées.
Les images inférieures à 4x4 pixels ne sont pas extraites.
Si la taille d’une réponse dépasse le paramètre de compte EXTERNAL_FUNCTION_MAx_RESPONSE_SIZE, la fonction renvoie une erreur. Augmentez la valeur de ce paramètre si nécessaire.