이미지 변환 API
이 장의 함수 예제에서 입력과 출력은 실제 변환에 주입된 미디어 핸들입니다. 출력은 작업 결과의 형식을 받을 수 있는 schema로 준비합니다. 이미지 자체를 바꾸는 메서드는 MediaSetInputTransform을 반환하고 출력의 write()로 실행합니다.
공통 인자
resize, crop, binarize, rotate, grayscale, equalize, rayleigh, tile, encrypt와 decrypt는 다음 인자를 공통으로 받습니다.
| 인자 | 자료형 | 기본값과 의미 |
|---|---|---|
media_item_rid | Optional[str] | None: 집합 전체. 지정하면 해당 항목만 처리 |
output_format | str | PNG. JPEG 등의 출력 이미지 형식 선택 |
convert_image_to_document는 media_item_rid만 받고 출력은 PDF입니다. generate_image_embeddings는 아래의 별도 추출 계약을 따릅니다.
resize
| 인자 | 자료형 | 기본값과 조건 |
|---|---|---|
width | Optional[int] | 1024. height를 지정하지 않으면 필요 |
height | Optional[int] | 1024. width를 지정하지 않으면 필요 |
maintain_aspect_ratio | bool | True. 원래 비율을 유지하면서 지정한 크기 안에 맞춤 |
def resize_images(images, output):
output.write(images.transform().resize())
crop
왼쪽 위 기준점과 폭/높이를 사용합니다.
| 인자 | 자료형 | 기본값과 조건 |
|---|---|---|
width | Union[int, Column] | 필수 |
height | Union[int, Column] | 필수 |
x_offset | Union[int, Column] | 0 |
y_offset | Union[int, Column] | 0 |
df | Optional[DataFrame] | 동적 인자를 제공하거나 처리 대상을 제한할 Spark 표 |
on | Optional[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))
밝기와 방향 처리
| 메서드 | 추가 인자와 기본값 | 동작 |
|---|---|---|
binarize | threshold: Optional[int], 생략하면 입력에서 계산 | threshold 이상은 255, 미만은 0 |
rotate | angle, 기본 DEGREE_90 | DEGREE_90, DEGREE_180, DEGREE_270 중 각도로 회전 |
grayscale | 없음 | 회색조로 변환 |
equalize | 없음 | 회색조 히스토그램 평활화로 낮은 대비 개선 |
rayleigh | sigma: 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억인 이미지를 지원합니다.
| 인자 | 자료형 | 기본값과 조건 |
|---|---|---|
zoom | Union[int, Column] | 0, 음수가 아닌 정수 |
x | Union[int, Column] | 0, 서쪽에서 동쪽으로 증가. 0 <= x < 2**zoom |
y | Union[int, Column] | 0, 북쪽에서 남쪽으로 증가. 0 <= y < 2**zoom |
df | Optional[DataFrame] | 동적 인자를 제공하는 표. 미디어와의 교집합만 처리 |
on | Optional[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 이미지 키로 암호화하거나 복호화합니다. 두 메서드는 같은 인자 구조를 사용합니다.
| 인자 | 자료형 | 조건 |
|---|---|---|
polygons | Union[list[api.Polygon], Column] | 필수. 처리할 다각형 목록 |
cipher_license_rid | Union[str, Column] | 필수. 작업에 사용할 Cipher 라이선스 RID |
media_item_rid | Optional[str] | 기본 None, 개별 항목 지정 가능 |
df | Optional[DataFrame] | 열에서 인자를 읽거나 대상 항목을 제한하는 표 |
on | Optional[str] | media_item_rid 또는 media_reference. df와 함께 지정 |
output_format | str | 기본 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_rid | Optional[str] | None: 집합 전체 |
model_id | Optional[str] | GOOGLE_SIGLIP_2 |
suppress_errors | bool | True. 집합 전체의 오류를 결과에 포함. 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)