Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

이미지 변환 API

이 장의 함수 예제에서 입력과 출력은 실제 변환에 주입된 미디어 핸들입니다. 출력은 작업 결과의 형식을 받을 수 있는 schema로 준비합니다. 이미지 자체를 바꾸는 메서드는 MediaSetInputTransform을 반환하고 출력의 write()로 실행합니다.

공통 인자

resize, crop, binarize, rotate, grayscale, equalize, rayleigh, tile, encrypt와 decrypt는 다음 인자를 공통으로 받습니다.

인자자료형기본값과 의미
media_item_ridOptional[str]None: 집합 전체. 지정하면 해당 항목만 처리
output_formatstrPNG. JPEG 등의 출력 이미지 형식 선택

convert_image_to_document는 media_item_rid만 받고 출력은 PDF입니다. generate_image_embeddings는 아래의 별도 추출 계약을 따릅니다.

resize

인자자료형기본값과 조건
widthOptional[int]1024. height를 지정하지 않으면 필요
heightOptional[int]1024. width를 지정하지 않으면 필요
maintain_aspect_ratioboolTrue. 원래 비율을 유지하면서 지정한 크기 안에 맞춤
def resize_images(images, output):
    output.write(images.transform().resize())

crop

왼쪽 위 기준점과 폭/높이를 사용합니다.

인자자료형기본값과 조건
widthUnion[int, Column]필수
heightUnion[int, Column]필수
x_offsetUnion[int, Column]0
y_offsetUnion[int, Column]0
dfOptional[DataFrame]동적 인자를 제공하거나 처리 대상을 제한할 Spark 표
onOptional[str]media_item_rid 또는 media_reference. df와 함께 지정

df를 지정하면 입력 미디어 집합과 표에 모두 있는 항목에만 적용합니다. 매개변수가 모두 상수여도 df를 전달하면 대상이 그 교집합으로 제한됩니다.

아래 예제의 boxes는 media_item_rid, x1, y1, x2, y2 열이 있는 실제 Spark DataFrame입니다. 각 함수는 서로 다른 자르기 구성을 보여 줍니다.

def crop_fixed(images, output):
    output.write(images.transform().crop(width=100, height=100, x_offset=10, y_offset=10))


def crop_from_boxes(images, output, boxes):
    output.write(images.transform().crop(
        width=boxes.x2 - boxes.x1, height=boxes.y2 - boxes.y1,
        x_offset=boxes.x1, y_offset=boxes.y1,
        df=boxes, on="media_item_rid",
    ))


def crop_fixed_size_dynamic_position(images, output, boxes):
    output.write(images.transform().crop(
        width=30, height=50, x_offset=boxes.x1, y_offset=boxes.y1,
        df=boxes, on="media_item_rid",
    ))


def crop_fixed_subset(images, output, boxes):
    output.write(images.transform().crop(
        width=30, height=50, x_offset=20, y_offset=60,
        df=boxes, on="media_item_rid",
    ))


def crop_fixed_all(images, output):
    output.write(images.transform().crop(width=30, height=50, x_offset=20, y_offset=60))

밝기와 방향 처리

메서드추가 인자와 기본값동작
binarizethreshold: Optional[int], 생략하면 입력에서 계산threshold 이상은 255, 미만은 0
rotateangle, 기본 DEGREE_90DEGREE_90, DEGREE_180, DEGREE_270 중 각도로 회전
grayscale없음회색조로 변환
equalize없음회색조 히스토그램 평활화로 낮은 대비 개선
rayleighsigma: float, 기본 0.5, 0~1 범위회색조 밝기 히스토그램을 Rayleigh 분포 형태로 조정
def threshold_images(images, output):
    output.write(images.transform().binarize(threshold=150))


def rotate_images(images, output):
    output.write(images.transform().rotate(angle="DEGREE_180"))


def grayscale_images(images, output):
    output.write(images.transform().grayscale())


def equalize_images(images, output):
    output.write(images.transform().equalize())


def adjust_rayleigh(images, output):
    output.write(images.transform().rayleigh(sigma=0.7))

tile

지리 정보가 포함된 TIFF 또는 NITF 이미지에서 EPSG 3857 Slippy map 타일을 생성합니다. 총 픽셀 수가 최대 1억인 이미지를 지원합니다.

인자자료형기본값과 조건
zoomUnion[int, Column]0, 음수가 아닌 정수
xUnion[int, Column]0, 서쪽에서 동쪽으로 증가. 0 <= x < 2**zoom
yUnion[int, Column]0, 북쪽에서 남쪽으로 증가. 0 <= y < 2**zoom
dfOptional[DataFrame]동적 인자를 제공하는 표. 미디어와의 교집합만 처리
onOptional[str]media_item_rid 또는 media_reference. df와 함께 지정

zoom 0에서는 전 세계가 타일 하나이며, 한 단계 올리면 공간 해상도가 두 배가 되고 타일 개수는 네 배가 됩니다. 공통 media_item_rid와 output_format도 사용할 수 있습니다.

def tile_fixed(images, output):
    output.write(images.transform().tile(zoom=2, x=1, y=1))


def tile_from_rows(images, output, tiles):
    output.write(images.transform().tile(
        zoom=tiles.zoom, x=tiles.x, y=tiles.y,
        df=tiles, on="media_item_rid",
    ))

tiles는 실제 미디어 식별자와 zoom/x/y 열을 가진 Spark DataFrame입니다.

encrypt와 decrypt

선택한 이미지 영역을 Cipher 이미지 키로 암호화하거나 복호화합니다. 두 메서드는 같은 인자 구조를 사용합니다.

인자자료형조건
polygonsUnion[list[api.Polygon], Column]필수. 처리할 다각형 목록
cipher_license_ridUnion[str, Column]필수. 작업에 사용할 Cipher 라이선스 RID
media_item_ridOptional[str]기본 None, 개별 항목 지정 가능
dfOptional[DataFrame]열에서 인자를 읽거나 대상 항목을 제한하는 표
onOptional[str]media_item_rid 또는 media_reference. df와 함께 지정
output_formatstr기본 PNG

다각형은 좌표들로 영역을 지정합니다. 예를 들어 (10,10), (100,10), (100,100), (10,100)의 네 꼭짓점이 직사각형을 이룹니다. 다음 함수는 호출자가 SDK의 Polygon/Coordinate 타입으로 구성한 실제 다각형 목록과 라이선스 RID 및 대상 항목 RID를 받습니다.

def encrypt_regions(images, output, polygons, cipher_license_rid, media_item_rid):
    operation = images.transform().encrypt(
        polygons=polygons,
        cipher_license_rid=cipher_license_rid,
        media_item_rid=media_item_rid,
    )
    return output.write(operation)


def decrypt_regions(images, output, polygons, cipher_license_rid, media_item_rid):
    operation = images.transform().decrypt(
        polygons=polygons,
        cipher_license_rid=cipher_license_rid,
        media_item_rid=media_item_rid,
    )
    return output.write(operation)

DataFrame 열을 사용할 때도 입력 집합과 df에 모두 있는 항목에만 적용합니다. 라이선스와 허용된 작업 범위를 갖춘 실제 호출 환경이 필요합니다.

convert_image_to_document

이미지를 PDF로 바꾸며 추가 인자는 media_item_rid: Optional[str]=None입니다. 집합 전체 또는 지정한 한 이미지를 처리하고 MediaSetInputTransform을 반환합니다.

def images_to_pdf(images, documents):
    documents.write(images.transform().convert_image_to_document())

generate_image_embeddings

인자자료형기본값과 의미
media_item_ridOptional[str]None: 집합 전체
model_idOptional[str]GOOGLE_SIGLIP_2
suppress_errorsboolTrue. 집합 전체의 오류를 결과에 포함. False이면 빌드 실패

개별 항목은 벡터 임베딩을 담은 JSON 문자열을 반환합니다. 집합 전체는 media_item_rid, path, media_reference, embeddings 열의 DataFrame을 반환하며 embeddings는 문자열입니다. 개별 항목에는 집합용 suppress_errors 옵션이 적용되지 않습니다.

def image_embeddings(images, dataset_output):
    result = images.transform().generate_image_embeddings()
    dataset_output.write_dataframe(result)