소개
스터디 시간에 멤버 아이디어 "시니어분들 자서전 쓰는 것 만들고 싶습니다. 예를 들어, 어린시절 부터 지금까지에 대한 30가지 질문에 답을 내용으로 자서전을 써 주고 읽어주고 영상으로도 만드는 것"
진행 방법
어떤 도구를 사용했고, 어떻게 활용하셨나요?
커서에게 질문을 했다, 아래 처럼
커서가 자서전 스트림릿 사이트를 만들기 위한 코드를 작성
처음에는 10개의 질문만 나와서 30개를 완성하라고 했다
커서가 인생 시기별로 5개 질문을 총 30개 만들었다
결과와 배운 점
배운 점과 나만의 꿀팁을 알려주세요.
핵심 키워드 몇개를 제공하면 커서는 생각 보다 좋은 결과를 만들어 준다
과정 중에 어떤 시행착오를 겪었나요?
첫번째 시도에서 라이브러리 설치 및 가상환경 구성에서 실패
다시 첫 질문으로 돌아가서 1번 동일한 프롬프트를 주고 성공
성공한 코드 전문
import streamlit as st
import os
from gtts import gTTS
from moviepy.editor import ImageClip, AudioFileClip, concatenate_videoclips
import tempfile
from PIL import Image
import io
# 페이지 설정
st.set_page_config(page_title="시니어 자서전 작성", layout="wide")
# 질문 목록
questions = [
# 어린 시절 (1-5)
"어린 시절 가장 기억에 남는 추억은 무엇인가요?",
"어린 시절 꿈꾸던 미래의 모습은 어떤 것이었나요?",
"어린 시절 가장 좋아했던 장난감이나 놀거리는 무엇이었나요?",
"어린 시절 가장 친했던 친구와의 추억은 무엇인가요?",
"어린 시절 부모님과의 특별한 추억은 무엇이 있나요?",
# 학창 시절 (6-10)
"학창 시절 가장 좋아했던 과목은 무엇이었나요?",
"학창 시절 가장 기억에 남는 선생님은 누구인가요?",
"학창 시절 가장 자랑스러웠던 순간은 언제인가요?",
"학창 시절 겪었던 가장 큰 어려움은 무엇이었나요?",
"학창 시절 가장 좋아했던 학교 행사는 무엇이었나요?",
# 청년 시절 (11-15)
"처음으로 꿈을 꾸게 된 계기는 무엇이었나요?",
"청년 시절 가장 큰 도전은 무엇이었나요?",
"청년 시절 가장 자랑스러운 성취는 무엇인가요?",
"청년 시절 가장 좋아했던 취미는 무엇이었나요?",
"청년 시절 가장 큰 실패와 그로부터 배운 점은 무엇인가요?",
# 성인 시절 (16-20)
"인생의 전환점이 된 순간은 언제였나요?",
"가장 어려웠던 시기와 그 시기를 이겨낸 방법은 무엇이었나요?",
"가장 자랑스러운 성취는 무엇인가요?",
"가족과의 특별한 추억은 무엇이 있나요?",
"좋아하는 취미나 특기는 무엇인가요?",
# 인생의 교훈 (21-25)
"인생의 모범이 되는 사람은 누구인가요?",
"후배들에게 전하고 싶은 조언은 무엇인가요?",
"인생에서 가장 후회되는 순간은 언제인가요?",
"인생에서 가장 감사한 순간은 언제인가요?",
"인생의 목표와 꿈은 무엇인가요?",
# 미래와 희망 (26-30)
"앞으로 이루고 싶은 꿈이 있나요?",
"후손들에게 전하고 싶은 이야기는 무엇인가요?",
"인생을 다시 살 수 있다면 어떤 것을 다르게 하고 싶으신가요?",
"행복하다고 느끼는 순간은 언제인가요?",
"인생의 의미는 무엇이라고 생각하시나요?"
]
def create_audio(text, lang='ko'):
tts = gTTS(text=text, lang=lang)
with tempfile.NamedTemporaryFile(delete=False, suffix='.mp3') as fp:
tts.save(fp.name)
return fp.name
def create_video(audio_path, image_path, output_path):
audio = AudioFileClip(audio_path)
image = ImageClip(image_path).set_duration(audio.duration)
video = image.set_audio(audio)
video.write_videofile(output_path, fps=24)
def main():
st.title("시니어 자서전 작성")
# 사용자 정보 입력
name = st.text_input("이름을 입력해주세요")
# 배경 이미지 업로드
uploaded_image = st.file_uploader("배경 이미지를 업로드해주세요", type=['jpg', 'jpeg', 'png'])
# 질문에 대한 답변 입력
answers = {}
for i, question in enumerate(questions, 1):
st.subheader(f"질문 {i}: {question}")
answers[question] = st.text_area(f"답변 {i}", key=f"answer_{i}")
if st.button("자서전 생성"):
if not name:
st.error("이름을 입력해주세요")
return
if not uploaded_image:
st.error("배경 이미지를 업로드해주세요")
return
# 자서전 텍스트 생성
autobiography = f"{name}님의 자서전\n\n"
for question, answer in answers.items():
autobiography += f"Q: {question}\nA: {answer}\n\n"
# 텍스트 파일로 저장
with open(f"{name}_자서전.txt", "w", encoding="utf-8") as f:
f.write(autobiography)
# 음성 생성
audio_path = create_audio(autobiography)
# 이미지 처리
image = Image.open(uploaded_image)
image_path = "temp_image.jpg"
image.save(image_path)
# 영상 생성
output_path = f"{name}_자서전.mp4"
create_video(audio_path, image_path, output_path)
# 결과물 다운로드
with open(f"{name}_자서전.txt", "rb") as f:
st.download_button("자서전 텍스트 다운로드", f, file_name=f"{name}_자서전.txt")
with open(output_path, "rb") as f:
st.download_button("자서전 영상 다운로드", f, file_name=f"{name}_자서전.mp4")
# 임시 파일 정리
os.remove(audio_path)
os.remove(image_path)
os.remove(output_path)
if __name__ == "__main__":
main()
도움 받은 글 (옵션)
참고한 지피터스 글이나 외부 사례를 알려주세요.
(내용 입력)