본문 바로가기
  • think normal
새로워지기/마흔의 생활코딩

LLM | GPT 4o API 실습 Beginning - 1. Image( multi modal)

by 청춘만화 2024. 5. 15.

Openai의  Vision 및 Text용 API를 통해 GPT-4O(Omni Model)를 사용해보기 위한 튜토리얼 

MY GPT 4o API Beginning Course
👉  1. Image( multi modal)
2. Summary( Video + Audio)
3. QA( Video + Audio based chat)

 

OpenAI, Spring Update(May 13, 2024) 이후, 유뷰브와 뉴스 등 온라인 미디어는 말 그대로 충격의 도가니탕이다. 발표와 시연 영상들이 복붙에 복붙에 복붙으로 바이럴? 콘텐츠처럼 퍼지고 있다. 나 또한 믿기지 않는 시연에 한 동안 그냥 충격으로 멍했던 것 같다. 그리고 관련 코드를 찾아 바로 GPT 4o API 실습을 진행해보았다.

 

 

실습 환경설정

01) root폴더에 api key 및 깃헙 설정 파일을 추가한다 

.env 파일 작성
        OPENAI_API_KEY=OpenAI에서발급받은API키
.gitignore 작성
        참조 링크 - https://docs.github.com/ko/get-started/getting-started-with-git/ignoring-files

02) 로컬에 있는 다른 프로젝트관련 패키지 의존성 충돌을 피하기 위해 별도 가상환경 설정하고 실행한다.

가상환경 생성
        python -m venv 내가정하고싶은가상환경이름
가상환경 실행
       mac - source 내가정하고싶은가상환경이름/bin/activate
       win  -  내가정하고싶은가상환경이름\bin\activate

03) 의존 패키지 설치
         pip install -U openai opencv-python moviepy python-dotenv

 

 

 

GPT 4o API  실습1. 기본 채팅 구성 

- code 

# dotenv 패키지에서 load_dotenv 함수 로드 
from dotenv import load_dotenv
# .env라는 파일로부터 환경변수를 불러오는 함수 실행
load_dotenv() 

# OpenAI 패키지 추가 
from openai import OpenAI
# OpenAI 클라이언트 생성
client = OpenAI()
# 사용할 채팅 모델 지정
MODEL="gpt-4o"

# OpenAI API를 사용하여 반환된 채팅 응답을 저장하기 위한 'completion' 객체를 생성
completion = client.chat.completions.create(
  model=MODEL,  # 사용할 모델
  messages=[    # 시간순으로 메시지 객체를 배열로 전달
    {"role": "system", "content": "You are a helpful assistant. Help me with my math homework!"},
    {"role": "user", "content": "Hello! Could you solve 2+2?"}
  ]
)

# 채팅봇의 응답을'choices' 속성에서 첫 번째 선택사항을 가져와 출력
print("Assistant: " + completion.choices[0].message.content)

- result 

GPT 4o API study : Math

 

 

 

 

GPT 4o API  실습2. 멀티 모달 - 로컬 

: 로컬에 있는 이미지를 인식한 후 해석한 후 수학 문제 풀기

- resource

GPT 4o API study - multi modal(Image) input

- code

# 환경변수 로딩
from dotenv import load_dotenv
load_dotenv() 

# 이미지 처리 라이브러리와 OpenAI 라이브러리 불러오기
from openai import OpenAI 
import base64

client = OpenAI()   # OpenAI 클라이언트 초기화
MODEL="gpt-4o"  # 모델 지정
IMAGE_PATH = "resource/triangle.png"  # 이미지 경로 지정

# 함수 정의: 이미지 파일을 base64로 인코딩하는 함수
def encode_image(image_path):
    with open(image_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode("utf-8")

# 이미지 인코딩
base64_image = encode_image(IMAGE_PATH)

# 대화형 요청(챗창과 유사) 생성.
# system과 user의 역할이 있고, 각각 메시지를 담고 있음.
# user의 메시지 중 삼각형 이미지가 첨부됨.
response = client.chat.completions.create(
    model=MODEL,
    messages=[
        {"role": "system", "content": "You are a helpful assistant that responds in Markdown. Help me with my math homework!"},
        {"role": "user", "content": [
            {"type": "text", "text": "What's the area of the triangle?"},
            {"type": "image_url", "image_url": {"url": f"data:image/png;base64,{base64_image}"}
            }
        ]}
    ],
    temperature=0.0,
)

# 응답 출력
print(response.choices[0].message.content)

- result

GPT 4o API study - multi modal(Image) output

 

 

GPT 4o API  실습3. 멀티 모달 - 온라인 

: 온라인(url)에 있는 이미지를 인식한 후 수학 문제 풀기

- resource

GPT 4o API study - multi modal(sketch, url) input

- code

# 환경변수 로딩
from dotenv import load_dotenv
load_dotenv() 

# 이미지 처리 라이브러리와 OpenAI 라이브러리 불러오기
from openai import OpenAI 

client = OpenAI()
MODEL="gpt-4o"

# 클라이언트를 사용하여 대화를 생성
# system과 user의 역할이 있고, 각각 메시지를 담고 있음
# 시스템의 메시지를 제공하여 챗봇의 역할을 정의
# user의 메시지에 핵심 질문과 함께 삼각형의 이미지가 있는 URL을 제공
response = client.chat.completions.create(
    model=MODEL,
    messages=[
        {"role": "system", "content": "You are a helpful assistant that responds in Markdown. Help me with my math homework!"},
        {"role": "user", "content": [
            {"type": "text", "text": "What's the area of the triangle?"},
            {"type": "image_url", "image_url": {"url": "<https://github.com/normalstory/gpt4o_beginning/blob/main/resource/triangle_note.png?raw=true>"}
            }
        ]}
    ],
    temperature=0.0,
)

# 응답 출력
print(response.choices[0].message.content)

- result

GPT 4o API study - multi modal(url) output

 

 

개인적으로 수학에 대한 풀이 과정도 놀라웠지만.. 이미지를 인식하고 해석하는 부분에 있어서는 충격적이었다. 첫 이미지는 구글 슬라이드로 작성했었지만 두 번째 이미지는 포스트잇 위에 손으로 그리고 주변까지 포함한 이미지를 첨부음에도 너무 잘 인식하고 문제를 풀어줬기 때문이다. 

ChatGPT의 등장과 함께 영어 교육 시장이 큰 변화가 일고 있는 것으로 알고 있다. 그동안 산수도 잘 못하던 LLM이.. 이제 상당히 많이 업데이트 된 것 같다. 아니, 그보다.. 단순히 발전의 문제가 아닌, 보편화 되었다. 조만간 다른 llm들도 상향 평준화될 것이 분명한데.. 이를 통해 이번엔 수학 관련 제품 시장에서의 큰 변화가 예상된다.  

댓글