
OpenAI to Z Challenge 대회 개요 및 참여 가이드

- OpenAI to Z Challenge는 인공지능과 오픈소스 데이터를 활용해 아마존 열대우림의 미지의 고고학 유적지를 발견하는 해커톤 대회입니다.
- 참가자들은 위성 이미지, LiDAR, 역사적 문서 등 다양한 데이터를 수집·분석하고, GPT-4.1 및 o3/o4 mini 모델을 사용하여 유적지를 탐색 및 검증합니다.
- 대회 참가를 위한 단계별 가이드와 코드 예제, 프롬프트 최적화 전략, 보고서 작성법 등 실질적 실행 가이드가 상세히 제공됩니다.
대회 개요
manus 로 한국어 가이드를 배포했습니다.
참여하셔서 25만 달러 상금을 노려보세요.
https://lohktqzz.manus.space/model
OpenAI to Z Challenge는 OpenAI의 o3/o4 mini 및 GPT-4.1 모델을 활용하여 아마존 열대우림 지역에서 이전에 알려지지 않은 고고학적 유적지를 발견하는 해커톤입니다. 이 대회는 오픈소스 데이터를 활용하여 아마존 생물군계 내에서 새로운 고고학적 발견을 이루어내는 것을 목표로 합니다.
대회의 의도
이 대회의 주요 의도는 다음과 같습니다:
1.인공지능 기술의 고고학적 응용: OpenAI의 최신 모델을 활용하여 전통적인 고고학 연구 방법으로는 발견하기 어려운 유적지를 찾아내는 것입니다.
2.오픈소스 데이터의 활용: 위성 이미지, LiDAR 데이터, 역사적 문서 등 공개적으로 접근 가능한 데이터를 창의적으로 조합하여 새로운 발견을 이끌어내는 것입니다.
3.협업 연구 촉진: 인공지능 전문가, 데이터 과학자, 고고학자 간의 협업을 통해 학제간 연구를 장려합니다.
4.아마존 역사 보존: 삼림 벌채와 개발로 인해 위협받고 있는 고고학적 유적지를 식별하고 보존하는 데 기여합니다.
주요 정보
•대회 기간: 2025년 5월 15일 ~ 2025년 6월 29일
•제출 마감: 2025년 6월 29일 오후 11시 59분(UTC)
•상금:
•1등: $250,000 (현금과 OpenAI 크레딧 50:50 비율)
•2등: $100,000 (현금과 OpenAI 크레딧 50:50 비율)
•3등: $50,000 (현금과 OpenAI 크레딧 50:50 비율)
•추가 혜택: 1등 팀은 현지 고고학자와 협력하여 연구를 계속할 수 있는 자금 지원 및 현장 방문 기회
평가 기준
제출된 작업은 다음 기준에 따라 평가됩니다:
1.고고학적 영향력(20점): 제안된 발견이 아마존 역사에 대한 이해를 얼마나 발전시키는지
2.증거의 깊이(20점): 데이터의 품질과 범위(LiDAR, 다중분광, 역사적 문서, 구전 지도 등)
3.명확성(20점): 공간 중첩, 측정의 명확성, 그리고 얼마나 설득력 있게 특정 지점으로 수렴하는지
4.재현 가능성(20점): 설명이 간결하고 논리적으로 정렬되어 있으며 다른 사람들이 쉽게 재실행할 수 있는지
5.독창성(20점): 참가자가 진정으로 새롭거나 창의적인 것을 발견했는지
6.발표 기술: 최종 5개 팀은 라이브 스트림에서 심사위원들에게 발표해야 함
대회 참여를 위한 핵심 단계
1.Kaggle 계정 생성 및 대회 등록
•Kaggle.com에 계정 생성
•OpenAI to Z Challenge 대회 페이지에서 참가 등록
2.데이터 수집 및 분석 계획 수립
•활용 가능한 데이터 소스 파악
•분석 방법론 설계
•OpenAI 모델 활용 전략 수립
3.데이터 수집 및 전처리
•위성 이미지, LiDAR 데이터 수집
•역사적 문서, 학술 논문 검토
•데이터 정제 및 통합
4.OpenAI 모델을 활용한 분석
•데이터 패턴 분석
•잠재적 유적지 식별
•가설 검증
5.발견 검증
•두 가지 독립적인 방법으로 위치 확인
•증거 수집 및 정리
•발견의 고고학적 의미 평가
6.제출 문서 작성
•Kaggle Writeup 형식으로 작성
•모든 증거와 방법론 상세 기술
•시각적 자료 준비
7.제출 및 발표 준비
•Kaggle 플랫폼에 최종 제출
•최종 5개 팀에 선정될 경우 라이브 발표 준비
OpenAI to Z Challenge 단계별 참여 가이드
이 가이드는 OpenAI to Z Challenge에 혼자 참가하는 분들을 위한 상세한 단계별 안내입니다. 각 단계에서 필요한 작업과 추천 방법을 자세히 설명합니다.
1단계: Kaggle 계정 생성 및 대회 등록
계정 생성
1.Kaggle 웹사이트에 접속합니다.
2.오른쪽 상단의 'Register' 버튼을 클릭하거나 Google, Facebook 계정으로 가입합니다.
3.필요한 정보를 입력하고 계정을 생성합니다.
대회 등록
1.Kaggle에 로그인한 후, OpenAI to Z Challenge 페이지로 이동합니다.
2.'Join Competition' 버튼을 클릭합니다.
3.대회 규칙을 읽고 동의합니다.
2단계: 연구 영역 선정 및 계획 수립
연구 영역 선정
아마존 생물군계는 매우 광범위하므로, 특정 지역에 집중하는 것이 효율적입니다. 다음 지역들이 고고학적 발견 가능성이 높습니다:
1.브라질 쉥구 강(Xingu River) 유역: 이미 Kuhikugu라는 20개 정착지의 패치워크가 발견된 지역으로, 추가 발견 가능성이 높습니다.
2.볼리비아 북부 지역: 최근 LiDAR 기술로 저밀도 도시화의 증거가 발견된 지역입니다.
3.브라질 산타렘(Santarém) 지역: 선행 연구에서 대규모 선사시대 마을의 증거가 발견되었습니다.
4.페루-브라질 국경 지역: 전설적인 도시 '파이티티(Paititi)'와 관련된 지역으로, 탐험 가치가 있습니다.
연구 계획 수립
1.연구 질문 정의: 예를 들어, "쉥구 강 유역에서 아직 발견되지 않은 선사시대 정착지가 있는가?"
2.작업 일정 수립: 대회 마감일(2025년 6월 29일)을 고려하여 각 단계별 일정을 계획합니다.
3.필요한 도구 및 기술 파악: Python, QGIS, Google Earth Engine 등의 도구와 OpenAI API 사용 계획을 세웁니다.
3단계: 데이터 수집 및 전처리
위성 이미지 데이터
1.Google Earth Engine(GEE) 활용:
•Google Earth Engine에 가입합니다.
•다음 코드 예시를 참고하여 아마존 지역의 Sentinel-2 이미지를 수집합니다:
import ee
ee.Initialize()
# 관심 지역 정의 (예: 쉥구 강 유역)
roi = ee.Geometry.Rectangle([-53.5, -10.5, -52.5, -9.5])
# Sentinel-2 이미지 수집
sentinel = ee.ImageCollection('COPERNICUS/S2_SR') \
.filterBounds(roi) \
.filterDate('2024-01-01', '2025-01-01') \
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20))
# 이미지 합성
composite = sentinel.median()
# 시각화 매개변수
vis_params = {
'bands': ['B8', 'B4', 'B3'],
'min': 0,
'max': 3000
}
# 지도에 표시
Map = geemap.Map()
Map.centerObject(roi, 10)
Map.addLayer(composite, vis_params, 'Sentinel-2 Composite')
Map
1.LiDAR 데이터 수집:
•OpenTopography에서 아마존 지역의 LiDAR 데이터를 검색합니다.
•다음 지역의 데이터를 우선적으로 확인하세요:
•볼리비아 모호스 평원(Llanos de Moxos)
•브라질 쉥구 강 유역
•브라질 아크레(Acre) 주 지역
2.역사적 문서 및 학술 논문:
•Internet Archive에서 아마존 탐험 관련 역사적 문서를 검색합니다.
•Library of Congress에서 공개된 탐험 일지를 확인합니다.
•첨부 파일에 제공된 학술 논문 링크를 통해 최신 연구 결과를 검토합니다.
데이터 전처리
1.위성 이미지 전처리:
# 구름 제거 및 이미지 향상
import rasterio
from rasterio.plot import show
import numpy as np
from skimage import exposure
# 이미지 로드
with rasterio.open('sentinel_image.tif') as src:
image = src.read()
profile = src.profile
# 히스토그램 평활화로 대비 향상
image_eq = np.zeros_like(image)
for i in range(image.shape[0]):
image_eq[i] = exposure.equalize_hist(image[i])
# 저장
with rasterio.open('enhanced_image.tif', 'w', **profile) as dst:
dst.write(image_eq)
1.LiDAR 데이터 처리:
# LiDAR 데이터에서 디지털 지형 모델(DTM) 생성
import pdal
import json
pipeline_json = """
[
"input.laz",
{
"type": "filters.outlier",
"method": "statistical",
"mean_k": 8,
"multiplier": 3.0
},
{
"type": "filters.smrf",
"window": 18,
"slope": 0.5,
"threshold": 0.5,
"scalar": 1.25
},
{
"type": "filters.hag_nn"
},
{
"type": "writers.gdal",
"filename": "dtm.tif",
"output_type": "idw",
"resolution": 1.0,
"window_size": 6
}
]
"""
pipeline = pdal.Pipeline(pipeline_json)
pipeline.execute()
4단계: OpenAI 모델을 활용한 분석
OpenAI API 설정
1.OpenAI 플랫폼에서 계정을 생성하고 API 키를 발급받습니다.
2.Python 환경에 OpenAI 라이브러리를 설치합니다:
pip install openai
1.API 키를 설정합니다:
import openai openai.api_key = "your-api-key"
이미지 분석을 위한 GPT-4.1 활용
import openai
import base64
# 이미지 파일을 base64로 인코딩
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode('utf-8')
# 처리된 위성 이미지 경로
image_path = "enhanced_image.tif"
base64_image = encode_image(image_path)
# GPT-4.1에 이미지 분석 요청
response = openai.ChatCompletion.create(
model="gpt-4.1",
messages=[
{
"role": "system",
"content": "당신은 고고학적 유적지를 식별하는 전문가입니다. 아마존 열대우림 지역의 위성 이미지에서 인간의 활동 흔적(기하학적 패턴, 토양 변화, 식생 변화 등)을 식별해주세요."
},
{
"role": "user",
"content": [
{"type": "text", "text": "이 위성 이미지에서 고고학적으로 중요할 수 있는 패턴이나 특징을 식별해주세요."},
{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{base64_image}"}}
]
}
],
max_tokens=1000
)
print(response.choices[0].message.content)
LiDAR 데이터 분석을 위한 o3/o4 mini 활용
# DTM 이미지를 분석하여 인공 구조물 패턴 식별
dtm_image_path = "dtm.tif"
base64_dtm = encode_image(dtm_image_path)
response = openai.ChatCompletion.create(
model="o4-mini", # o3-mini 또는 o4-mini 사용
messages=[
{
"role": "system",
"content": "당신은 LiDAR 데이터에서 고고학적 특징을 식별하는 전문가입니다. 디지털 지형 모델(DTM)에서 인공 구조물, 도로, 운하, 토양 변형 등의 패턴을 식별해주세요."
},
{
"role": "user",
"content": [
{"type": "text", "text": "이 DTM 이미지에서 고고학적으로 중요할 수 있는 인공 구조물이나 지형 변화를 식별해주세요."},
{"type": "image_url", "image_url": {"url": f"data:image/tiff;base64,{base64_dtm}"}}
]
}
],
max_tokens=1000
)
print(response.choices[0].message.content)
역사적 문서 분석
# 역사적 문서에서 관련 정보 추출
def analyze_historical_document(document_text):
response = openai.ChatCompletion.create(
model="gpt-4.1",
messages=[
{
"role": "system",
"content": "당신은 역사적 문서에서 고고학적으로 중요한 정보를 추출하는 전문가입니다. 아마존 지역의 정착지, 도시, 구조물에 관한 언급을 찾아 위치 정보와 함께 정리해주세요."
},
{
"role": "user",
"content": document_text
}
],
max_tokens=1500
)
return response.choices[0].message.content
# 예시 문서 분석
with open("historical_document.txt", "r") as file:
document_text = file.read()
analysis = analyze_historical_document(document_text)
print(analysis)
5단계: 발견 검증
위치 확인을 위한 두 가지 독립적 방법
1.위성 이미지와 LiDAR 데이터 교차 검증:
import rasterio
import numpy as np
import matplotlib.pyplot as plt
from scipy.spatial import distance
# 위성 이미지에서 식별된 관심 지점
satellite_points = np.array([
[x1, y1],
[x2, y2],
# 추가 지점들...
])
# LiDAR 데이터에서 식별된 관심 지점
lidar_points = np.array([
[x1, y1],
[x2, y2],
# 추가 지점들...
])
# 두 데이터셋 간의 최소 거리 계산
min_distances = []
for sp in satellite_points:
distances = [distance.euclidean(sp, lp) for lp in lidar_points]
min_distances.append(min(distances))
# 임계값 이하의 거리를 가진 지점들을 일치하는 것으로 간주
threshold = 50 # 미터 단위
matching_points = satellite_points[np.array(min_distances) < threshold]
# 결과 시각화
plt.figure(figsize=(10, 10))
plt.scatter(satellite_points[:, 0], satellite_points[:, 1], c='blue', label='Satellite')
plt.scatter(lidar_points[:, 0], lidar_points[:, 1], c='red', label='LiDAR')
plt.scatter(matching_points[:, 0], matching_points[:, 1], c='green', label='Matching')
plt.legend()
plt.title('Cross-validation of Potential Archaeological Sites')
plt.savefig('validation_plot.png')
1.역사적 문서와 공간 데이터 비교:
# 역사적 문서에서 추출한 위치 정보
historical_locations = [
{"name": "Village X", "description": "Large settlement near river bend", "approx_coords": [-53.2, -10.1]},
{"name": "Ancient path", "description": "Road connecting settlements", "approx_coords": [-53.1, -10.2]},
# 추가 위치들...
]
# 발견된 위치와 역사적 기록 비교
for hl in historical_locations:
hl_point = np.array(hl["approx_coords"])
distances = [distance.euclidean(hl_point, mp) for mp in matching_points]
if min(distances) < threshold:
print(f"발견된 위치가 역사적 기록 '{hl['name']}'과 일치합니다: {hl['description']}")
# 일치하는 지점 저장
validated_points.append({
"coords": matching_points[np.argmin(distances)],
"historical_reference": hl
})
증거 수집 및 정리
발견한 각 유적지에 대해 다음 정보를 체계적으로 정리합니다:
1.위치 정보: 정확한 위도와 경도
2.발견 방법: 사용한 데이터 소스와 분석 방법
3.물리적 특성: 크기, 형태, 구조적 특징
4.역사적 맥락: 관련된 역사적 기록이나 유사한 알려진 유적지
5.시각적 증거: 처리된 이미지, 3D 모델, 지도 등
6단계: 제출 문서 작성
Kaggle Writeup 작성 가이드
Kaggle Writeup은 다음 구조로 작성하는 것이 좋습니다:
1.제목 및 요약:
•명확하고 흥미로운 제목 선택
•주요 발견과 의의를 간결하게 요약 (250단어 이내)
2.서론:
•연구 배경 및 목적 설명
•연구 질문 명시
•선행 연구 간략 소개
3.방법론:
•데이터 소스 상세 설명 (최소 2개 이상의 검증 가능한 공개 소스)
•분석 방법 단계별 설명
•OpenAI 모델 활용 방법 상세 기술
4.결과:
•발견한 유적지 상세 설명
•위치 정보 (위도/경도) 제공
•시각적 증거 (이미지, 지도, 도표 등) 포함
•두 가지 독립적 방법으로 검증한 결과 제시
5.논의:
•발견의 고고학적, 역사적 의미 해석
•기존 지식과의 관계 설명
•한계점 및 불확실성 인정
6.결론:
•주요 발견 요약
•향후 연구 방향 제안
7.참고문헌:
•모든 데이터 소스 및 참고 문헌 나열
•표준 인용 형식 사용
시각적 자료 준비
효과적인 시각적 자료는 다음을 포함해야 합니다:
1.위치 지도: 발견 지점을 명확히 표시한 지도
import folium
# 발견 위치 지도 생성
m = folium.Map(location=[-10.2, -53.1], zoom_start=10)
# 발견 지점 표시
for point in validated_points:
folium.Marker(
location=[point["coords"][1], point["coords"][0]],
popup=f"Site: {point.get('historical_reference', {}).get('name', 'Unknown')}",
icon=folium.Icon(color='red', icon='info-sign')
).add_to(m)
# 지도 저장
m.save('discovery_map.html')
1.비교 이미지: 처리 전/후 이미지 비교
2.3D 시각화: 지형 모델의 3D 렌더링
3.분석 다이어그램: 분석 과정과 결과를 보여주는 도표
7단계: 제출 및 발표 준비
최종 제출
1.Kaggle 대회 페이지에서 'New Writeup' 버튼을 클릭합니다.
2.작성한 내용을 Kaggle Writeup 형식에 맞게 업로드합니다.
3.모든 시각적 자료와 코드를 첨부합니다.
4.제출 전 모든 링크와 참조가 올바르게 작동하는지 확인합니다.
5.'Submit' 버튼을 클릭하여 최종 제출합니다.
발표 준비 (최종 5개 팀에 선정될 경우)
1.발표 구조 계획:
•5-7분 길이의 간결한 발표 준비
•주요 발견, 방법론, 증거, 의의를 포함
2.시각적 자료 최적화:
•고해상도 이미지 준비
•애니메이션이나 동영상으로 발견 과정 시각화
3.질문 예상 및 준비:
•방법론에 관한 기술적 질문
•발견의 역사적 맥락에 관한 질문
•증거의 신뢰성에 관한 질문
추천 연구 영역
혼자 참가하는 경우, 다음 특정 영역에 집중하는 것이 효율적입니다:
1.브라질 쉥구 강 상류 지역:
•좌표 범위: 약 -53.5° ~ -52.5° 경도, -10.5° ~ -9.5° 위도
•이미 Kuhikugu 유적지가 발견된 지역으로, 주변에 추가 유적지가 있을 가능성이 높습니다.
•특징: 기하학적 형태의 토공(earthworks), 원형 마을 구조, 운하 시스템
2.볼리비아 모호스 평원 북부:
•좌표 범위: 약 -66.0° ~ -65.0° 경도, -13.5° ~ -12.5° 위도
•최근 LiDAR로 저밀도 도시화의 증거가 발견된 지역입니다.
•특징: 대형 플랫폼 마운드, 인공 연못, 직선 도로망
3.브라질-페루 국경 지역 (아크레 주):
•좌표 범위: 약 -72.0° ~ -70.0° 경도, -9.0° ~ -8.0° 위도
•지오글리프(geoglyphs)가 다수 발견된 지역으로, 추가 발견 가능성이 있습니다.
•특징: 기하학적 지상 도형, 원형 및 사각형 구조물
이 지역들은 선행 연구에서 고고학적 중요성이 입증되었으며, 추가 발견 가능성이 높습니다. 특히 OpenAI 모델을 활용하여 위성 이미지와 LiDAR 데이터에서 미세한 패턴을 식별하는 데 집중하면 좋은 결과를 얻을 수 있을 것입니다.
OpenAI 모델을 활용한 아마존 고고학 유적지 발견 가이드
이 문서는 OpenAI to Z Challenge 참가자를 위한 OpenAI 모델 활용 가이드입니다. 대회에서 요구하는 o3/o4 mini 및 GPT-4.1 모델을 효과적으로 활용하는 방법을 설명합니다.
OpenAI 모델 개요
OpenAI to Z Challenge에서는 다음 모델을 활용해야 합니다:
1.o3/o4 mini: 이미지 인식 및 분석에 특화된 모델
2.GPT-4.1: 텍스트 분석 및 멀티모달 작업에 활용되는 모델
이 모델들은 다음과 같은 고고학적 작업에 활용될 수 있습니다:
•위성 이미지에서 인공 구조물 패턴 식별
•LiDAR 데이터에서 지형 변화 분석
•역사적 문서에서 관련 정보 추출
•다양한 데이터 소스의 정보 통합 및 해석
API 설정 및 기본 사용법
1. API 키 발급 및 설정
import openai
# API 키 설정
openai.api_key = "your-api-key" # 실제 API 키로 교체
2. 텍스트 분석 기본 예제
response = openai.ChatCompletion.create(
model="gpt-4.1",
messages=[
{"role": "system", "content": "당신은 아마존 고고학 전문가입니다."},
{"role": "user", "content": "아마존 지역에서 발견된 원형 정착지의 특징을 설명해주세요."}
],
max_tokens=1000
)
print(response.choices[0].message.content)
3. 이미지 분석 기본 예제
import base64
# 이미지 파일을 base64로 인코딩
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode('utf-8')
# 이미지 경로
image_path = "satellite_image.jpg"
base64_image = encode_image(image_path)
# o4-mini 모델에 이미지 분석 요청
response = openai.ChatCompletion.create(
model="o4-mini", # o3-mini도 사용 가능
messages=[
{
"role": "system",
"content": "당신은 위성 이미지에서 고고학적 특징을 식별하는 전문가입니다."
},
{
"role": "user",
"content": [
{"type": "text", "text": "이 위성 이미지에서 인공 구조물이나 패턴을 식별해주세요."},
{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{base64_image}"}}
]
}
],
max_tokens=1000
)
print(response.choices[0].message.content)
고고학적 분석을 위한 고급 활용법
1. 위성 이미지 분석 프롬프트 최적화
효과적인 위성 이미지 분석을 위한 프롬프트 예시:
system_prompt = """
당신은 아마존 열대우림 지역의 고고학적 유적지를 식별하는 전문가입니다. 다음 특징에 주목해주세요:
1. 기하학적 패턴 (원형, 사각형, 직선 등)
2. 토양 변화 (색상 차이, 텍스처 변화)
3. 식생 변화 (수종 차이, 밀도 변화)
4. 인공 구조물 흔적 (마운드, 도랑, 도로망 등)
5. 수로 변경 흔적 (운하, 댐, 저수지 등)
각 특징을 발견하면 정확한 위치(이미지 내 좌표)와 함께 설명해주세요.
발견한 패턴이 자연적인 것인지 인공적인 것인지 구분하고, 확신도를 1-5 척도로 표시해주세요.
"""
user_prompt = """
이 위성 이미지는 브라질 쉥구 강 유역(-53.2, -10.1 부근)에서 촬영되었습니다.
이 지역에서 선사시대 정착지의 흔적을 찾아주세요.
특히 원형 마을 구조, 도로망, 토공(earthworks)에 주목해주세요.
"""
2. LiDAR 데이터 분석을 위한 프롬프트
lidar_system_prompt = """
당신은 LiDAR 데이터에서 고고학적 특징을 식별하는 전문가입니다.
디지털 지형 모델(DTM)에서 다음 특징을 식별해주세요:
1. 지형 변화 (인공 마운드, 도랑, 제방 등)
2. 선형 구조물 (도로, 운하, 경계선 등)
3. 기하학적 패턴 (원형, 사각형, 격자 패턴 등)
4. 자연 지형과 구분되는 인공 구조물
각 특징의 크기, 방향, 패턴을 측정하고, 유사한 알려진 고고학적 구조물과 비교해주세요.
"""
3. 다중 이미지 비교 분석
# 여러 이미지를 비교 분석하는 예제
def compare_multiple_images(image_paths, location_info):
base64_images = [encode_image(path) for path in image_paths]
# 이미지 설명 생성
image_descriptions = []
for i, img in enumerate(image_paths):
if "lidar" in img.lower():
image_descriptions.append(f"이미지 {i+1}: LiDAR 기반 DTM")
elif "sentinel" in img.lower():
image_descriptions.append(f"이미지 {i+1}: Sentinel-2 위성 이미지")
else:
image_descriptions.append(f"이미지 {i+1}: 위성/항공 이미지")
# 메시지 구성
messages = [
{
"role": "system",
"content": "당신은 여러 유형의 원격 감지 데이터를 비교 분석하여 고고학적 특징을 식별하는 전문가입니다."
},
{
"role": "user",
"content": [
{"type": "text", "text": f"다음 이미지들은 모두 같은 지역({location_info})을 다른 방식으로 촬영한 것입니다. 각 이미지에서 발견되는 고고학적 특징을 식별하고, 여러 이미지에서 일관되게 나타나는 패턴을 중점적으로 분석해주세요.\n\n" + "\n".join(image_descriptions)}
]
}
]
# 이미지 추가
for i, base64_img in enumerate(base64_images):
messages[1]["content"].append(
{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{base64_img}"}}
)
response = openai.ChatCompletion.create(
model="gpt-4.1",
messages=messages,
max_tokens=2000
)
return response.choices[0].message.content
# 사용 예시
image_paths = ["lidar_dtm.tif", "sentinel_image.jpg", "false_color_composite.jpg"]
location_info = "브라질 쉥구 강 유역 (-53.2, -10.1)"
analysis = compare_multiple_images(image_paths, location_info)
print(analysis)
4. 역사적 문서와 공간 데이터 통합 분석
def analyze_historical_context(document_text, image_path, location_info):
base64_image = encode_image(image_path)
response = openai.ChatCompletion.create(
model="gpt-4.1",
messages=[
{
"role": "system",
"content": "당신은 역사적 문서와 공간 데이터를 통합하여 고고학적 맥락을 분석하는 전문가입니다."
},
{
"role": "user",
"content": [
{"type": "text", "text": f"다음은 {location_info} 지역에 관한 역사적 문서입니다:\n\n{document_text}\n\n이 문서의 내용을 바탕으로, 첨부된 위성/LiDAR 이미지에서 문서에 언급된 장소나 특징과 일치할 수 있는 요소를 식별해주세요."},
{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{base64_image}"}}
]
}
],
max_tokens=1500
)
return response.choices[0].message.content
발견 검증 및 보고서 작성 지원
1. 발견 신뢰성 평가
def evaluate_discovery_reliability(discovery_description, evidence_images):
base64_images = [encode_image(path) for path in evidence_images]
# 메시지 구성
messages = [
{
"role": "system",
"content": "당신은 고고학적 발견의 신뢰성을 평가하는 전문가입니다. 제시된 증거를 바탕으로 발견의 신뢰성을 객관적으로 평가해주세요."
},
{
"role": "user",
"content": [
{"type": "text", "text": f"다음은 아마존 지역에서의 고고학적 발견에 대한 설명입니다:\n\n{discovery_description}\n\n첨부된 이미지들은 이 발견을 뒷받침하는 증거입니다. 이 발견의 신뢰성을 다음 기준으로 평가해주세요:\n1. 증거의 품질 및 명확성\n2. 자연 현상과의 구분 가능성\n3. 유사한 알려진 유적지와의 비교\n4. 다양한 데이터 소스 간의 일관성\n5. 대안 설명의 가능성"}
]
}
]
# 이미지 추가
for base64_img in base64_images:
messages[1]["content"].append(
{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{base64_img}"}}
)
response = openai.ChatCompletion.create(
model="gpt-4.1",
messages=messages,
max_tokens=1500
)
return response.choices[0].message.content
2. 학술적 보고서 작성 지원
def generate_academic_report_outline(discovery_data):
response = openai.ChatCompletion.create(
model="gpt-4.1",
messages=[
{
"role": "system",
"content": "당신은 고고학 분야의 학술 보고서 작성을 지원하는 전문가입니다."
},
{
"role": "user",
"content": f"다음은 아마존 지역에서의 고고학적 발견에 관한 데이터입니다:\n\n{discovery_data}\n\n이 데이터를 바탕으로 Kaggle Writeup 형식에 맞는 학술적 보고서의 상세 개요를 작성해주세요. 각 섹션에 포함되어야 할 핵심 내용과 구체적인 예시를 제공해주세요."
}
],
max_tokens=2000
)
return response.choices[0].message.content
모델 활용 팁 및 주의사항
효과적인 프롬프트 작성 전략
1.구체적인 지시 제공: "패턴을 찾아주세요" 대신 "원형, 사각형, 직선 패턴을 찾고 각각의 크기와 방향을 측정해주세요"와 같이 구체적으로 요청하세요.
2.전문 용어 활용: "earthworks", "geoglyphs", "platform mounds" 등 고고학적 전문 용어를 사용하면 더 정확한 결과를 얻을 수 있습니다.
3.맥락 정보 제공: 분석하는 지역의 위치, 알려진 역사적 배경, 유사한 유적지 정보 등을 함께 제공하세요.
4.단계적 분석 요청: 한 번에 모든 분석을 요청하기보다 단계별로 나누어 요청하세요. 예를 들어:
•1단계: 이미지에서 인공 구조물 식별
•2단계: 식별된 구조물의 특성 분석
•3단계: 역사적 맥락과 연결
주의사항
1.모델의 한계 인식: AI 모델은 때로 패턴을 과대해석하거나 자연 현상을 인공 구조물로 오인할 수 있습니다. 항상 다른 방법으로 교차 검증하세요.
2.해상도 제한: 저해상도 이미지에서는 모델의 분석 능력이 제한될 수 있습니다. 가능한 고해상도 데이터를 사용하세요.
3.데이터 전처리 중요성: 이미지 대비 향상, 노이즈 제거 등의 전처리가 모델의 분석 능력을 크게 향상시킬 수 있습니다.
4.윤리적 고려사항: 원주민 공동체의 문화적 유산과 관련된 발견은 윤리적 측면을 고려해야 합니다. 원주민 지식과 관점을 존중하고 포함시키세요.
결론
OpenAI의 o3/o4 mini 및 GPT-4.1 모델은 아마존 지역의 고고학적 유적지 발견에 강력한 도구가 될 수 있습니다. 다양한 데이터 소스를 통합하고, 체계적인 분석 방법을 적용하며, 발견을 철저히 검증함으로써 의미 있는 고고학적 기여를 할 수 있습니다. 이 가이드에서 제공하는 코드 예제와 프롬프트 전략을 활용하여 OpenAI to Z Challenge에서 성공적인 결과를 얻으시길 바랍니다.


