워크시트

[GCP] Google Colab Enterprise와 Gemini로 손쉽게 대시보드 이미지 분석 및 보고서 자동 생성하기

Simon Yoon 2024. 11. 23. 22:33

데이터 시각화된 대시보드 이미지를 매번 일일이 확인하고 보고서를 작성하는 것은 번거로운 작업입니다. 이번 포스팅에서는 Google Colab Enterprise와 Gemini를 활용하여 Storage Bucket에 저장된 대시보드 이미지를 자동으로 분석하고, 그 결과를 바탕으로 현황 보고서를 생성하는 방법을 소개합니다.

예시 코드 전체도 맨 아래에 작성해두었으니 필요하신 분은 참고하시면 됩니다.

왜 Google Colab Enterprise인가?

Google Colab Enterprise는 Google Cloud Platform의 강력한 기능을 제공하면서도, 익숙한 Jupyter Notebook 환경을 제공합니다. 특히, 인증 절차 없이 Google Cloud 환경에 있는 Storage Bucket에 손쉽게 접근할 수 있다는 점이 큰 장점입니다.

 

구현 과정:

1. Storage Bucket 준비:

 

1-1. Bucket 생성

Google Cloud Storage에 대시보드 이미지를 저장할 Bucket을 생성합니다.

클라우드 스토리지에서 '버킷'을 눌러서 버킷 창을 열어주세요.

버킷 화면에서 만들기를 눌러서 쉽게 몇 번의 세팅만으로 버킷을 생성할 수 있습니다. 버킷 생성으로는 비용이 발생하지 않습니다. 그리고 대용량 파일을 올리지 않는 이상 비용도 별로 많이 나오지 않아요.

저는 이미 'bucket-for-anything'이라는 이름의 버킷을 만들었기 때문에 이것을 사용하도록 하겠습니다.

 

이제 분석에 필요한 대시보드 이미지를 업로드 해줍니다.

저는 bucket-for-anything 버킷 안에 images 라는 폴더를 만들어서 그 경로에 대시보드 이미지를 업로드 했습니다. 사용한 대시보드 이미지는 아래와 같습니다.

https://public.tableau.com/app/profile/iaroslava/viz/TelecomCustomersChurnDashboard/OVERVIEW

필요하신 분은 링크로 가셔서 다운받으시면 되겠습니다.

 

2. Gemini를 활용한 이미지 분석:

2-1. Colab에서 Python 코드를 사용하여 Bucket에 접근하고, 이미지 파일을 불러옵니다. 이 때 데이터 타입을 변환해야 하니 그 부분만 신경써주면 됩니다.

# GCS에서 파일 읽기 설정
bucket_name = 'bucket-for-anything/images'
file_name = 'dashboard_telecom_churn.png'
project_id = '프로젝트id를 적어주세요'

# GCS에서 이미지 파일 읽기
fs = gcsfs.GCSFileSystem(project=project_id)
with fs.open(f'{bucket_name}/{file_name}', 'rb') as f:
    image_bytes = f.read()
    # 이미지를 base64로 인코딩
    image_b64 = base64.b64encode(image_bytes).decode('utf-8')

 

2-2. 불러온 이미지를 Gemini 모델에 입력하여 이미지 내의 핵심 정보를 추출합니다. 예를 들어, 차트의 트렌드, 특정 값, 이상 징후 등을 파악할 수 있습니다.

저는 프롬프트는 매우 간단하게 작성했습니다.

def generate(image):
    # 이미지를 Part 객체로 변환
    image_part = Part.from_data(
        mime_type="image/jpeg",  # 이미지 형식에 맞게 MIME 타입 지정
        data=base64.b64decode(image)
    )

    # 프롬프트 작성
    prompt = """이 대시보드에 있는 차트를 확인하고 주요 내용을 요약해서 레포트 형식으로 작성해줘.
    단, 레포트는 한국어로 작성해야해."""

    # 이미지와 텍스트를 함께 전달
    responses = model.generate_content(
        [
            image_part,
            Part.from_text(prompt)
        ],
        generation_config=generation_config,
        safety_settings=safety_settings,
        stream=True,
    )

    # 응답 출력
    for response in responses:
        print(response.text, end="")

 

3. 보고서 생성:

Gemini의 분석 결과를 바탕으로, 텍스트 기반의 보고서를 생성합니다.

필요에 따라, 생성된 보고서를 Google Docs, Slack 등으로 전달할 수 있습니다.

 

 

코드 예시:

# 데이터 처리를 위한 라이브러리
import gcsfs
import base64
from vertexai.generative_models import GenerativeModel, Part, SafetySetting
import vertexai

# GCS에서 파일 읽기 설정
bucket_name = 'bucket-for-anything/images'
file_name = 'dashboard_telecom_churn.png'
project_id = '프로젝트id를 입력해주세요'

# GCS에서 이미지 파일 읽기
fs = gcsfs.GCSFileSystem(project=project_id)
with fs.open(f'{bucket_name}/{file_name}', 'rb') as f:
    image_bytes = f.read()
    # 이미지를 base64로 인코딩
    image_b64 = base64.b64encode(image_bytes).decode('utf-8')
    
    
# Vertex AI Gemini 설정
import vertexai
from vertexai.generative_models import GenerativeModel, SafetySetting, Part

# Vertex AI 초기화
vertexai.init(project=project_id, location="us-central1")
model = GenerativeModel("gemini-1.5-flash-002")

# 생성 설정
generation_config = {
    "max_output_tokens": 8192,
    "temperature": 1,
    "top_p": 0.95,
}

# 안전 설정
safety_settings = [
    SafetySetting(
        category=SafetySetting.HarmCategory.HARM_CATEGORY_HATE_SPEECH,
        threshold=SafetySetting.HarmBlockThreshold.OFF
    ),
    SafetySetting(
        category=SafetySetting.HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
        threshold=SafetySetting.HarmBlockThreshold.OFF
    ),
    SafetySetting(
        category=SafetySetting.HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT,
        threshold=SafetySetting.HarmBlockThreshold.OFF
    ),
    SafetySetting(
        category=SafetySetting.HarmCategory.HARM_CATEGORY_HARASSMENT,
        threshold=SafetySetting.HarmBlockThreshold.OFF
    ),
]


def generate(image):
    # 이미지를 Part 객체로 변환
    image_part = Part.from_data(
        mime_type="image/jpeg",  # 이미지 형식에 맞게 MIME 타입 지정
        data=base64.b64decode(image)
    )

    # 프롬프트 작성
    prompt = """이 대시보드에 있는 차트를 확인하고 주요 내용을 요약해서 레포트 형식으로 작성해줘.
    단, 레포트는 한국어로 작성해야해."""

    # 이미지와 텍스트를 함께 전달
    responses = model.generate_content(
        [
            image_part,
            Part.from_text(prompt)
        ],
        generation_config=generation_config,
        safety_settings=safety_settings,
        stream=True,
    )

    # 응답 출력
    for response in responses:
        print(response.text, end="")
        
        
   generate(image_b64)

 

 

마무리:

Google Colab Enterprise와 Gemini를 활용하면, 복잡한 데이터 분석 작업을 간단하게 수행할 수 있습니다. 이번 포스팅을 통해, 여러분도 손쉽게 대시보드 이미지 분석 시스템을 구축해 보시기 바랍니다.