brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Nov 23. 2024

AI 9탄-3. 이미지를 음성으로 설명 듣기-3/10

<8> 이미지를 음성으로 설명 듣기- TTS (실습)-5


외부에 노출 하기 - 허깅페이스 , 스트립릿 이용- 앱만들기





<8> 이미지를 음성으로 설명 듣기- TTS (실습)-5


1

AI 도슨트 서비스 


예제코드 다운로드 5장  https://wikibook.co.kr/llm-projects/




# VSCODE 에서 코드 읽기 - OPENAI API 키 입력하기

# Command 창에서 코드 실행하기

#    model="gpt-4o-mini",  로 변경하기!



##### 기본 정보 입력 ####

# Streamlit 패키지 추가

import streamlit as st

# OpenAI 패키지 추가

from openai import OpenAI

# 이미지를 처리하기 위한 파이썬 기본 패키지

import os

import io

import base64

from PIL import Image

# GPT-4V와 TTS를 위한 client 선언

client = OpenAI(

    api_key = 'sk-proj-0sylvk4-YRSzQHz7zTodZiJeTqPx3-4zGnTWdUVIXCqS-rFhahjUPaGQA'

)

#### 기능 구현 함수 정리 ####

# GPT-4V

def describe(text):

    response = client.chat.completions.create(

    model="gpt-4o-mini",

    messages=[

        {

        "role": "user",

        "content": [

            {"type": "text", "text": "이 이미지에 대해서 아주 자세히 묘사해줘"},

            {

            "type": "image_url",

            "image_url": {

                "url": text,

            },

            },

        ],

        }

    ],

    max_tokens=1024,

    )

    return response.choices[0].message.content

# TTS

def TTS(response):    

    # TTS를 활용하여 만든 음성을 파일로 저장.

    response = client.audio.speech.create(

    model="tts-1",

    voice="onyx",

    input=response

    )

    filename = "output.mp3"

    response.stream_to_file(filename)

    # 저장한 음성 파일 자동 재생

    with open(filename, "rb") as f:

        data = f.read()

        b64 = base64.b64encode(data).decode()

        # HTML 문법을 사용하여 자동으로 음원을 재생하는 코드를 작성하여

        # streamlit 안에서 HTML 문법 구현에 사용되는 st.markdown() 을 활용하여 실행을 합니다.

        md = f"""

            <audio autoplay="True">

            <source src="data:audio/mp3;base64,{b64}" type="audio/mp3">

            </audio>

            """

        st.markdown(md, unsafe_allow_html=True,)

    # 폴더에 남지 않도록 파일 삭제

    os.remove(filename)

##### 메인 함수 #####

def main():

    st.image('ai.png', width=200)

    st.title("� 이미지를 해설해드립니다.")

    # 이미지를 업로드

    img_file_buffer = st.file_uploader('Upload a PNG image', type='png')

    if img_file_buffer is not None:

        image = Image.open(img_file_buffer)

        # 업로드한 이미지를 화면에 출력

        st.image(image, caption='Uploaded Image.', use_column_width=True)

        # 이미지 => 바이트 버퍼로 변환

        buffered = io.BytesIO()

        image.save(buffered, format="PNG")        

        # 바이트 버퍼 => Base64 인코딩 바이트 문자열로 변환

        img_base64 = base64.b64encode(buffered.getvalue())        

        # Base64 인코딩 바이트 문자열 => UTF-8 문자열로 디코딩

        img_base64_str = img_base64.decode('utf-8')

        # GPT-4V에서 입력받을 수 있는 형태로 변환

        # 예시 참고: https://platform.openai.com/docs/guides/vision/uploading-base-64-encoded-images

        image = f"data:image/jpeg;base64,{img_base64_str}"

        # GPT4V가 이미지에 대한 설명을 반환하고 이를 st.info()로 출력.

        text = describe(image)

        st.info(text)

        # 이미지에 대한 설명을 음성으로 변환.

        TTS(text)

if __name__=="__main__":

    main()







2


# 가상환경 생성하기

command 창에서


C:\0ai\07-ai\ch05\>python -m venv ch05_env


C:\0ai\07-ai\ch05\ch05_env\Scripts>activate.bat


(ch04_env) C:\0ai\07-ai\ch05\ch05_env\Scripts>




pip install openai

pip install streamlit




# API 키 입력


from openai import OpenAI

client = OpenAI(

    api_key = '여러분들의 OpenAI Key 값'

)




3

model 변경


https://platform.openai.com/settings/organization/limits



 model="gpt-4o-mini",




4

이미지  업로드하면


openai.NotFoundError: Error code: 404 - {'error': {'message': 'The model `gpt-4-vision-preview` has been deprecated, learn more here: https://platform.openai.com/docs/deprecations', 'type': 'invalid_request_error', 'param': None, 'code': 'model_not_found'}}





4

실행

(ch04_env) C:\0ai\07-ai\ch05>streamlit run ch05_docent.py




PS C:\07-openai\openai-api-tutorial-main\ch05> python .\ch05_docent.py



5



text로 설명해준다.

음성으로도 설명해준다.






6


# 앱 만들기 - 외부에 노출 하기 - 허깅페이스 이용



외부에 노출 하기 - 허깅페이스 , 스트림릿 이용 

https://huggingface.co/spaces/topasvga/image1



7

참고 자료


# 허깅페이스 가입


https://huggingface.co/



# 앱 만들기 - 외부에 노출 하기 - 허깅페이스 이용


https://brunch.co.kr/@topasvga/3911




다음

https://brunch.co.kr/@topasvga/4158


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari