anpigon commited on
Commit
38b983a
Β·
verified Β·
1 Parent(s): 23006ff

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +84 -0
app.py ADDED
@@ -0,0 +1,84 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from pytubefix import YouTube
3
+ from pytubefix.cli import on_progress
4
+ import google.generativeai as genai
5
+ import time
6
+ import os
7
+
8
+ # Gemini API ν‚€ μ„€μ •
9
+ genai.configure(api_key=os.environ["GOOGLE_API_KEY"])
10
+
11
+
12
+ def process_video(url):
13
+ with st.spinner("λ™μ˜μƒ 처리 쀑..."):
14
+ yt = YouTube(url, on_progress_callback=on_progress)
15
+ st.sidebar.info(f"제λͺ©: {yt.title}")
16
+
17
+ video_file_name = "video.mp4"
18
+ ys = yt.streams.get_lowest_resolution()
19
+ ys.download(filename=video_file_name)
20
+
21
+ st.sidebar.info("유튜브 λ™μ˜μƒ λ‹€μš΄λ‘œλ“œ μ™„λ£Œ")
22
+
23
+ video_file = genai.upload_file(path=video_file_name)
24
+ st.sidebar.info(f"generativeai에 λ™μ˜μƒ μ—…λ‘œλ“œ μ™„λ£Œ")
25
+
26
+ while video_file.state.name == "PROCESSING":
27
+ st.sidebar.info("처리 쀑...")
28
+ time.sleep(10)
29
+ video_file = genai.get_file(video_file.name)
30
+
31
+ if video_file.state.name == "FAILED":
32
+ raise ValueError(video_file.state.name)
33
+
34
+ prompt = "이 λ™μ˜μƒμ„ μš”μ•½ν•©λ‹ˆλ‹€. μ£Όμš” λ‚΄μš©μ„ 5개의 bullet point둜 μ •λ¦¬ν•˜κ³ , κ·Έ μ•„λž˜μ— μƒμ„Έν•œ μš”μ•½μ„ μ œκ³΅ν•΄μ£Όμ„Έμš”."
35
+ model = genai.GenerativeModel(model_name="gemini-1.5-pro")
36
+
37
+ st.sidebar.info("AI λͺ¨λΈμ΄ λ™μ˜μƒμ„ 뢄석 쀑...")
38
+ response = model.generate_content(
39
+ [video_file, prompt], request_options={"timeout": 600}
40
+ )
41
+
42
+ genai.delete_file(video_file.name)
43
+ st.sidebar.info("μž„μ‹œ 파일 μ‚­μ œ μ™„λ£Œ")
44
+
45
+ os.remove(video_file_name)
46
+ st.sidebar.info("μž„μ‹œ λΉ„λ””μ˜€ 파일 μ‚­μ œ μ™„λ£Œ")
47
+
48
+ return response.text
49
+
50
+
51
+ st.set_page_config(page_title="유튜브 λ™μ˜μƒ μš”μ•½ μ•±", layout="wide")
52
+
53
+ st.title("πŸŽ₯ 유튜브 λ™μ˜μƒ μš”μ•½ μ•±")
54
+
55
+ url = st.text_input("유튜브 URL을 μž…λ ₯ν•˜μ„Έμš”:")
56
+
57
+ if st.button("μš”μ•½ν•˜κΈ°", key="summarize"):
58
+ if url:
59
+ try:
60
+ summary = process_video(url)
61
+
62
+ st.success("μš”μ•½μ΄ μ™„λ£Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€!")
63
+
64
+ # μš”μ•½ κ²°κ³Ό ν‘œμ‹œ
65
+ st.header("πŸ“Š μš”μ•½ κ²°κ³Ό")
66
+
67
+ # μ£Όμš” λ‚΄μš© (bullet points)
68
+ st.subheader("μ£Όμš” λ‚΄μš©")
69
+ bullet_points = summary.split("\n\n")[0].split("\n")[1:]
70
+ for point in bullet_points:
71
+ st.markdown(f"- {point.strip()}")
72
+
73
+ # 상세 μš”μ•½
74
+ st.subheader("상세 μš”μ•½")
75
+ detailed_summary = "\n\n".join(summary.split("\n\n")[1:])
76
+ st.markdown(detailed_summary)
77
+
78
+ except Exception as e:
79
+ st.error(f"였λ₯˜ λ°œμƒ: {str(e)}")
80
+ else:
81
+ st.warning("URL을 μž…λ ₯ν•΄μ£Όμ„Έμš”.")
82
+
83
+ # μ‚¬μ΄λ“œλ°”μ— 둜그 정보 ν‘œμ‹œ
84
+ st.sidebar.title("처리 둜그")