본문 바로가기
IT/CHATGPT

[ChatGPT] Vision API (with Python)

by Tony Jung 2024. 12. 9.
반응형

ChatGPT Vision API (With Python)

ChatGPT Vision은 대규모 언어 모델(LLM)과 이미지,화면캡처 등의 추가 양식이 통합되어 언어적 기능과 함께 시각적 정보를 처리함으로써 인공지능의 새로운 지평을 열어주고 있는 모델 입니다.

와이어프레임이나 UI 디자인을 제공함으로써 코드를 생성할 수 있고, 필기 텍스트를 바로 번역할 수 있으며, 간단하거나 복잡한 인포그래픽,다이어그램에 대한 빠른 해석과 설명, 음식 레시시피 설명 등 다양한 분야에서 활용이 가능합니다아마 이 기능은 곧 영상과 연결되어 실시간 주변 상황을 판단하고, 위험요소 식별, 번역,안내 등 광범위한 분야로의 발전을 이루어 나갈 것입니다

  • Case1 : 이미지 링크를 이용한 Vision 사용 

인터넷 또는 회사의 사이트에서 이미지 (여기서는 봉골레 파스타 이미지를 사용했답니다.) URL을 복사하여 아래와 같은 코드를 작성해 봅니다.  질문은 "이 음식의 레시피를 알려줘 입니다"

import openai
openai.api_key=‘Your Key'
 
response=openai.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        {
            "role":"user",
            "content":[
                {"type":"text","text":"이 음식의 레시피를 알려주세요"},
                {
                    "type":"image_url",
                    "image_url":{
                        "url":"https://search.pstatic.net/sunny/?src=https%3A%2F%2Fimage.utoimage.com%2Fpreview%2Fcp871385%2F2017%2F07%2F201707004599_500.jpg&type=sc960_832"
                    }, #이미지 URL 정보를 입력합니다. 
                },
            ]
        },
    ],
    max_tokens=1000,  #답변이 길어질 수 있으니 사용할 token의 제한을 설정합니다.
)
print(response.choices[0])

자 그럼 봉골레 파스타 이미지를 GPT가 이해하고 질문 ("이 음식의 레시피를 알려주세요")에 대한 답변 결과를 보겠습니다.

더보기

이 음식은 조개 파스타로 보입니다. 여기 조개 파스타의 기본 레시피를 소개할게요.

재료

-스파게티 면 200g

-조개(바지락 또는 모시조개) 300g

-마늘 3(다진 것)

-올리브 오일 3큰술

-화이트 와인 1/2(선택 사항)

-레드 페퍼 플레이크 (원하는 만큼)

-파슬리 (다진 것)

-소금과 후추 (기호에 따라)

-치즈 (파르마산 또는 페코리노, 선택 사항)

조리 방법

1.면 삶기: 큰 냄비에 물을 끓이고 소금을 넣은 후, 스파게티 면을 삶아 미지근한 상태로 둡니다.

2.조개 준비: 조개는 미리 소금물에 담가 모래를 빼고 깨끗이 씻습니다.

3.소스 만들기:

 - 팬에 올리브 오일을 두르고 다진 마늘을 넣어 약한 불에서 향을 내도록 볶습니다.

 - 마늘이 황금색이 되면 레드 페퍼 플레이크를 추가하고, 조개를 넣습니다.

 - 조개가 열릴 때까지 볶습니다. 이때 화이트 와인을 넣으면 더욱 풍미가 살아납니다.

4.면 결합: 삶은 스파게티 면을 팬에 추가하고 잘 섞습니다. 필요에 따라 면 수가 필요할 수도 있으니 조금씩 추가합니다.

5.마무리: 소금, 후추로 간을 맞추고, 다진 파슬리와 취향에 따라 치즈를 리고 섞습니다.

6.서빙: 그릇에 담고, 위에 여분의 파슬리와 치즈를 뿌려서 장식합니다.

맛있게 드세요!'

아하.. 이젠 우리도 봉골레 파스타를 만들 수 있을까요??. 답변의 길이는 코드에서 설정한 max_tokens 값에 제한되어 결과 답변을 진행합니다. 만약 답변이 너무 짧거나,내용이 부족하다면 max_tokens  값 또는 Prompt의 설명을 변경하면서 실행하시면 만족스러운 답변을 받아 보실 수 있을 것입니다.

 

반응형

 

  • Case2 : 이미지 업로드 (Base 64)

로컬에 있는 이미지를 업로드 하여 모델에 전달할 수 있습니다. 다만 이때는 Base64인코딩된 형식으로 전달을 하여야 하기에 약간의 코드가 추가 됩니다.

Chat Completions  API업로드된 이미지를 저장하지 않습니다. 동일한 이미지에 대해 여러 번 전달하여 질문을 하려면 그때 마다 동일 이미지를 업로드 하여야 합니다.

import base64
import requests
import openai
 
Base64_image=base64.b64encode(open('test.jpg',"rb").read()).decode('utf-8')
#.로컬에 있는 파일 경로를 지정 open('test.jpg',"rb") 후 Base64형식으로 변경 
headers={
    "Contnet-Type":"application/json",
    "Authorization":f"Bearer {‘Your-Key'}"
}
payload={
   
    "model":"gpt-4o-mini",
    "messages":[
        {
            "role":"user",
            "content":[
                {
                    "type":"text",
                    "text" :"이 음식의 레시피를 알려주세요"
                },
                {
                    "type":"image_url",
                    "image_url":{
                        "url":f"data:image/jpeg;base64,{Base64_image}"
                    }
                }
            ]
        }
    ],
    "max_tokens":1000
}
response=requests.post("https://api.openai.com/v1/chat/completions",headers=headers,json=payload)

print(response.json())

이 코드를 실행하면 Case1과 동일한 결과물을 받아 보실 수 있을 것입니다. 

  • Vision API 의 제한 

Vision을 사용하실 때는 몇가지 제한 사항이 있습니다. 우리는 모델의 한계를 이해하는 것으로 부터 다양한 활용방안을 찾아 낼 수 있을 것입니다.  

  1. 의료 이미지  : CT, 엑스레이같은 의료용 이미지를 해석하는데 적합하지 않기에 의학적 조언을 위해서 사용하면 안됩니다.
  2. 언어 : 영어가 아닌 언어의 텍스트가 포함된 이미지를 처리할 때 최적 성능을 발휘하지 못합니다
  3. 작은 텍스트 , 이미지 회전 모델이 정확한 판단을 할 수 없을 수도 있습니다.
  4. 시각적요소 : 모델은 점선/실선 등이 포함된 다양한 그래프와 텍스트를 이해하는데 어려움을 겪을 수도 있습니다.
  5. 공간추론: 체스,장기,바둑 위치 식별과 같이 공간 위치 파악이 필요할 경우 어려움을 겪을 수 있습니다.
  6. 정확성 : 모델이 특정 시나리오에 대하여 잘못된 설명을 생성 할 수 있습니다.
  7. 이미지모양 : 파노라마, 어안 이미지에 대한 어려움을 겪습니다.
  8. 메타데이터 및 크기 조정 : 모델은 원본 파일 이름 또는 메타 데이터를 처리하지 않으며, 분석전에 이미지 크기가 조정되어 원래 크기에 영향을 줍니다.
  9.  카운팅 : 이미지의 개체에 대한 대략적인개수를 제공할 수 있습니다.
  10. Captcha : 안전상의 이유로 CAPTCHA를 차단하는 시스템이 적용되었습니다.
* CAPTCHA는 기계는 인식할 수 없으나 사람은 쉽게 인식할 수 있는 텍스트, 이미지를 통해 사람과 기계를 구별하는 프로그램.

 

위의 제한 사항을 읽다 보면 모델의 완성도를  떠나서 발생할 수 있는 모든 리스크에 대하여 사전에 안전장치를 해 놓은 느낌이 듭니다. 아마 모델이 더욱 정교해 지더라도 혹시나 발생 할 수 있는 오류 나 책임소재, 위험방지를 위해 제한 사항은 지속적으로 유지될 듯합니다

사용자가 링크나 업로드를 통해 이미지를 전달하면 GPT가 이를 파악하고 질문을 답변을 하는 형태로 기업의 업무나 일상생활에 있어서 놀랄만한 활용이 가능할 것입니다. 많은 케이스로 테스트를 해보시고 활용도를 높여보시기 바랍니다.

 Cheers!!

 

반응형

댓글