Cortex AI 함수: AI_PARSE_DOCUMENT를 사용하여 이미지 추출¶
AI_PARSE_DOCUMENT는 PDFs, Word 문서, 이미지에서 텍스트, 데이터, 레이아웃 요소, 이미지를 추출하는 Cortex AI 함수입니다. 이 고화질 이미지 추출 기능을 사용하여 다음과 같은 고급 멀티모달 문서 처리 워크플로를 지원합니다.
데이터 보강: 문서에서 이미지를 추출하여 보다 심층적인 인사이트를 위한 시각적 컨텍스트를 추가합니다.
멀티모달 RAG: 검색 증강 생성(RAG)을 위해 이미지와 텍스트를 결합하여 모델 응답을 개선합니다.
이미지 분류: 자동 태그 지정 및 분석을 위해 AI_EXTRACT 또는 AI_COMPLETE로 추출된 이미지를 사용합니다.
지식 기반: 더 나은 검색과 추론을 위해 텍스트와 이미지를 모두 포함하여 더 풍부한 리포지토리를 구축합니다.
규정 준수: 규제 및 감사 워크플로를 위한 이미지(예: 차트, 서명)를 추출하고 분석합니다.
AI_PARSE_DOCUMENT에 대한 소개는 :doc:`/user-guide/snowflake-cortex/parse-document`를 참조하세요.
AI_PARSE_DOCUMENT를 사용하여 이미지 추출¶
AI_PARSE_DOCUMENT를 사용하여 문서에서 이미지를 추출하려면 다음을 수행합니다.
'mode'옵션을'LAYOUT'로 설정합니다. 이미지 추출에는 LAYOUT 모드가 필요합니다.'extract_images'옵션을 TRUE 로 설정합니다.
AI_PARSE_DOCUMENT 이미지 추출은 JSON 출력에서 배열 images``를 반환합니다. ``images``의 각 요소는 추출된 이미지 데이터가 base64 문자열로 인코딩된 ``image_base64 필드를 포함합니다. 이미지 OBJECT_CONSTRUCT에는 고유한 ID 및 이미지 경계 상자에 대한 필드도 포함됩니다.
SELECT AI_PARSE_DOCUMENT(
TO_FILE('@my_stage', 'my_document.pdf'),
{'mode': 'LAYOUT', 'extract_images': true})
AS layout_wƒith_images;
BASE64_DECODE_BINARY를 사용하여 이미지를 디코딩한 후 AI_EXTRACT에 직접 전달하여 이미지 내용을 처리하거나 설명할 수 있습니다. 또는 멀티모달 AI_COMPLETE를 사용하여 처리하기 위해 스테이지에 저장할 수 있습니다. (AI_COMPLETE는 현재 직접 이미지 입력을 지원하지 않습니다.)
예¶
이미지 추출 및 설명하기¶
이미지 데이터를 추출한 후 AI_EXTRACT를 사용하여 이미지 내용을 처리하거나 설명할 수 있습니다. 다음 예제에서는 base64에서 바이너리로 변환한 후 첫 번째로 추출된 이미지에 대한 설명을 생성합니다. (AI_EXTRACT에는 이진 입력이 필요합니다.) 이 쿼리는 정규식을 사용하여 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'}
);
추출된 이미지를 스테이지에 저장¶
문서에서 추출된 이미지를 Snowflake 스테이지에 저장하여 재사용, 감사 또는 다른 Cortex AI 함수와의 추가 처리를 수행할 수 있습니다. 이 예제에서는 Python 저장 프로시저를 생성 및 사용하여 AI_PARSE_DOCUMENT에서 base64 이미지 데이터를 디코딩하고 결과 이미지 파일을 지정된 스테이지에 업로드합니다.
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
$$;
SAVE_EXTRACTED_IMAGES 프로시저가 생성되면 다음 코드 조각과 같이 이 함수를 호출하여 문서에서 이미지를 추출하고 스테이지에 저장할 수 있습니다.
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
));
이 쿼리의 출력은 다음과 같이 지정된 스테이지에 저장된 이미지의 파일 경로 목록입니다.
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
이제 멀티모달 분석 또는 생성을 위해 다른 Cortex AI 함수(예: AI_COMPLETE)를 사용하여 저장된 이미지를 처리할 수 있습니다.
SELECT AI_COMPLETE(
'pixtral-large',
'Describe the image in 10 words.',
TO_FILE('@image_docs/output/img-0.jpeg')
);
응답:
The image shows central bank policy rates for various countries from 2000 to 2025.
비용 고려 사항¶
AI_PARSE_DOCUMENT는 처리된 페이지 수를 기준으로 청구됩니다. 청구 목적상 단일 이미지 파일은 페이지로 간주됩니다. 이미지 추출에는 추가 비용이 발생하지 않습니다.
현재 제한 사항¶
단일 문서에서 50개 이상의 이미지를 추출할 수 없습니다. 추가 이미지는 무시됩니다.
4x4 픽셀보다 작은 이미지는 추출되지 않습니다.
응답 크기가 계정 매개 변수인 EXTERNAL_FUNCTION_MAx_RESPONSE_SIZE를 초과하는 경우 이 함수는 오류를 반환합니다. 필요한 경우 이 매개 변수의 값을 늘리세요.