brunch

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

by Master Seo

<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

50 이미지.png



text로 설명해준다.

음성으로도 설명해준다.

40 표시,설명.png



4.png




6


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



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

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



7

참고 자료


# 허깅페이스 가입


https://huggingface.co/



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


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




다음

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


keyword
매거진의 이전글AI 9탄-2. OpenAI Whisper로 음성 비서