Python 변환에서 미디어 집합 사용하기
미디어 집합은 PDF, 이미지, 음성, 영상 등 미디어 항목을 관리합니다. Python 변환으로 텍스트 추출, OCR, 이미지 타일링과 메타데이터 처리를 수행하고 다른 미디어 집합이나 표 데이터셋에 결과를 쓸 수 있습니다.
Code Repositories의 Libraries에서 transforms-media를 설치합니다. Spark에서는 transform.spark.using() 또는 기존 transform() 선언에 MediaSetInput과 MediaSetOutput을 연결합니다. 빌드 시 선언은 각각 실제 MediaSetInputParam, MediaSetOutputParam 핸들로 해석됩니다. 여러 미디어 집합과 표 데이터셋 등 허용되는 입출력을 함께 사용할 수 있습니다.
Code Repositories의 Preview는 미디어 변환을 지원하지 않습니다. VS Code Preview Engine에서는 미디어 출력에 put_media_item()만 사용할 수 있으며, 미디어 증분 미리보기는 지원하지 않습니다. 그 밖의 미디어 출력과 증분 처리는 빌드하여 실행합니다.
항목 하나 복사하기
다음 가상 입력에는 image1.jpg가 있다고 가정합니다. 출력은 JPEG를 받을 수 있는 이미지 미디어 집합이어야 합니다.
from transforms.api import transform
from transforms.mediasets import MediaSetInput, MediaSetOutput
@transform.spark.using(
images=MediaSetInput("/Example Project/Inputs/images"),
copied=MediaSetOutput("/Example Project/Outputs/copied_images"),
)
def compute(images, copied):
with images.get_media_item_by_path("image1.jpg") as image:
copied.put_media_item(image, "copied_image1.jpg")
get_media_item_by_path(path)는 경로로, get_media_item(rid)는 항목 RID로 데이터를 엽니다. 파일 접근은 io.open()의 옵션을 지원하며 반환값은 파일 유사 스트림입니다. 임의 접근을 위한 seek는 지원하지 않습니다. 이미지 전체를 내려받지 않고 이미지 크기나 음성 길이 등의 정보를 읽으려면 get_media_item_metadata(rid)를 사용합니다.
Code Repositories에서 출력 만들기
프로젝트나 폴더의 미디어 집합 생성 대화상자를 사용할 수도 있고, 코드의 출력 선언에서 만들 수도 있습니다.
- MediaSetOutput에 새 출력 경로와 이름을 지정합니다.
- 아직 자산이 없으면 경로에 빨간 밑줄이 표시됩니다.
- 해당 줄의 전구 메뉴에서
Create media set을 선택합니다.
Path에서 Name과 Location을 정하고Schema,Write mode,Advanced settings단계에서 미디어 형식과 필요한 구성을 선택합니다.
- Create를 선택하면 생성에 필요한 annotation 필드가 MediaSetOutput에 채워집니다. 실제 새 미디어 집합은 첫 Python 변환 빌드 뒤 생성됩니다. 생성한 뒤에는 이 annotation 필드를 편집하지 않습니다.
그림의 구성 예시는 다음과 같습니다. 이 값들을 모든 미디어 집합의 기본값으로 해석하지 않습니다.
| 생성 필드 | 그림의 예시 값과 의미 |
|---|---|
media_set_schema | schema_type="imagery", primary_format="jpg": JPEG 이미지 schema |
additional_allowed_input_formats | 빈 목록: 추가 입력 형식을 지정하지 않음 |
storage_configuration | type="native": 네이티브 저장 구성 |
retention_policy | "forever": 선택한 보존 정책 |
write_mode | "transactionless": 생성 시 선택한 트랜잭션 정책 |
생성 annotation의 transactionless 정책과 런타임의 set_write_mode("modify"/"replace")는 서로 다른 설정입니다. 또 생성 schema의 imagery와 fluent API의 filter_to("image")도 별도 인터페이스의 식별자입니다.
Spark와 단일 노드
Lightweight의 transform.using()도 미디어 집합을 지원합니다. 목록을 Pandas 같은 단일 노드 라이브러리로 읽고 일반 표 출력에 쓸 수 있습니다. Spark에 의존하는 put_dataset_files()는 lightweight에서 지원하지 않습니다.
미디어 입력의 증분 읽기와 미디어 출력의 증분 쓰기는 @incremental(v2_semantics=True)에서 지원합니다. 각 자산의 트랜잭션 정책과 브랜치 조건을 적용하며, 미디어 입력의 배치 제한은 Spark 전용입니다.
주제별 사용법
- 목록, 메타데이터와 텍스트 읽기는 Spark/Pandas 목록, JSON 메타데이터, OCR 및 layout-aware V2를 설명합니다.
- 업로드와 쓰기 모드는 스트림 업로드, 빠른 복사, PDF 첫 페이지 이미지와 참조, Catalog 파일 업로드를 설명합니다.
- 증분 미디어 처리는 읽기 모드, 경로 덮어쓰기, transactionless 제약과 배치 제한을 설명합니다.
- Fluent API는 schema별 35개 메서드의 인자, 반환값과 오류 정책을 연결합니다.
- 언어 코드는 OCR 언어/문자체와 음성 전사 언어를 구분합니다.