-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathyoutubeVideo.py
92 lines (69 loc) · 3.04 KB
/
youtubeVideo.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
from transformers import pipeline
from youtube_transcript_api import YouTubeTranscriptApi
from pytube import YouTube
from bardapi import Bard
import streamlit as st
from googletrans import Translator
def getNonTranscriptVideo(youtube_video):
YouTube(youtube_video).streams\
.filter(only_audio = True, file_extension= 'mp4') \
.first() \
.download(filename = 'ytaudio.mp4') \
# pipe = pipeline("automatic-speech-recognition",
# model="openai/whisper-large-v2")
# audio_text = pipe(audio)
return 1
def getTrasnscriptVideo(video_id):
try:
YouTubeTranscriptApi.get_transcript(video_id)
transcript = YouTubeTranscriptApi.get_transcript(video_id)
result = ""
for i in transcript:
result += ' ' + i['text']
except Exception as e:
return 'fail', 'Could not extract transcript. Please try a different video.'
return result
def getSummary(summary):
pipe = pipeline("summarization", model="facebook/bart-large-cnn")
summarized = pipe(summary, max_length=130, min_length=30)
# if summarized and isinstance(summarized[0], dict) and 'summary_text' in summarized[0]:
# return summarized[0]['summary_text']
# else:
# return "Summary not available"
return summarized[0]['summary_text']
def generateCourse(transcript):
secret_api_key = st.secrets["BARD_API_KEY"]
headers = {
"authorization": secret_api_key,
"content-type": "application/json"
}
bard = Bard(token=headers['authorization'])
prompt = f"Act like a teacher, now create a study course based on this transcript: {transcript}, include the 1. learning objectives, 2. the course outline and 3. the course content divided in it's respective sections along with 4. a few important questions"
result = bard.get_answer(prompt)['content']
return result
def askQuestions(transcript, question):
pipe = pipeline("question-answering", model="deepset/roberta-base-squad2")
# translator = Translator()
# questionEn = translator.translate(question, dest='en').text
result = pipe(question=question, context=transcript)
return result['answer']
# print(getSummary(getTrasnscriptVideo("NiKtZgImdlY")))
def main():
st.set_page_config(page_title="Tutor AI", page_icon="📖", layout = 'wide',)
st.header("Tutor AI: Learn any topic from YouTube videos ")
youtube_video = st.text_input("Enter a YouTube video link:")
if youtube_video:
st.video(youtube_video)
video_id = youtube_video.split("=")[1]
# st.write(f"You entered: {video_id}")
transcript = getTrasnscriptVideo(video_id)
with st.expander("Course Outline"):
st.write(generateCourse(transcript))
with st.expander("Course Summary"):
st.write(getSummary(transcript))
question = st.text_input("Ask a question about the video:")
if question:
with st.expander("Answer"):
st.write(askQuestions(transcript, question))
if __name__ == "__main__":
main()