Spaces:
Sleeping
Sleeping
File size: 5,981 Bytes
bf1a4b4 | 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 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 | # ########## Overview ################################################################
# The application is divided into three main components:
# Extracts metadata, transcripts, and thumbnails from YouTube videos.
# Summarizes the extracted transcripts using the OpenAI API.
# Builds a Streamlit web interface that ties everything together.
#
#Step 1: Extracting YouTube Data
# The first step involves extracting the video ID, metadata (title and channel name),
# transcript, and thumbnail image from a YouTube URL.
#
#Step 2: Summarizing the Transcript
# With the transcript in hand, the next step is to summarize it. This is done using
# the OpenAI API in summarize_text.py. Before running this script, make sure to set
# your OpenAI API key as an environment variable:
#
#Step 3: Building the Web Interface
# Finally, the web interface is created using Streamlit. Streamlit is a Python library
# that simplifies the process of creating web applications for data science and machine
# learning projects. This file combines the functionality of the other two scripts and
# provides a user-friendly interface.
#Bringing It All Together
# Extract Video ID and Metadata: When a user inputs a YouTube URL, the app extracts the
# video ID and retrieves the title and channel name using extract_metadata(url).
# Download Thumbnail: The app downloads the video’s thumbnail and displays it using
# get_thumbnail_from_url(url).
# Get and Summarize Transcript: The transcript is fetched using get_transcript_from_url(url)
# and summarized using summarize_transcript(transcript, language). The summary is displayed
# in the selected language.
#################################################################################################
# TO RUN, execute on the terminal:
#streamlit run C:\projects\ewp\ai-projects\ewp-sales-bots-repo\ewp-sales-bots-program\notebooks\summarize_mp4_video.py
#
import os
import subprocess
from moviepy.video.io.VideoFileClip import VideoFileClip
from moviepy.audio.io.AudioFileClip import AudioFileClip
import whisper
from openai import OpenAI
from fastapi import FastAPI
from transformers import pipeline
#import os
#os.system("apt-get update && apt-get install -y ffmpeg")
#result = subprocess.run(["ffmpeg", "-version"], capture_output=True, text=True)
#print(result.stdout)
#input_file = "input.mp4"
#output_file = "output.mp3"
#subprocess.run(["ffmpeg", "-i", input_file, output_file])
## create a new FASTAPI app instance
app=FastAPI()
# Initialize the text generation pipeline
#pipe = pipeline("text2text-generation", model="google/flan-t5-small")
@app.get("/")
def home():
return {"message":"Hello World"}
# Define a function to handle the GET request at `/generate`
@app.get("/generate")
def generate(text:str):
## use the pipeline to generate text from given input text
output=pipe(text)
## return the generate text in Json reposne
return {"output":output[0]['generated_text']}
@app.get("/transcribe")
def get_transcript_mp4(self,mp4_path):
#path_to_check = r"C:\Program Files\ffmpeg\bin"
#if path_to_check in os.environ["PATH"]:
#print(f"{path_to_check} is in the PATH")
#else:
#print(f"{path_to_check} is NOT in the PATH")
#os.environ["PATH"] += os.pathsep + path_to_check
ffmpeg_version = subprocess.run(["ffmpeg", "-version"], capture_output=True, text=True)
print(ffmpeg_version.stdout)
# Assuming the mp4 file has a transcript available
# This is a placeholder function. You would need to implement actual transcript extraction from mp4.
# For now, we will return a dummy transcript.
if os.path.exists(mp4_path):
print("File exists!: ", mp4_path)
# construct mp3 path
# Replace the .mp4 extension with .mp3
# Get the file name without extension
base_name = os.path.splitext(mp4_path)[0]
mp3_path = f"{base_name}.mp3" # Append .mp3 extension
#construct wav file path
wav_path = f"{base_name}.wav" # Append .mp3 extension
# construct the file to store the transcript
transcript_path = f"{base_name}_transcript.txt"
video = VideoFileClip(mp4_path)
video.audio.write_audiofile(mp3_path)
print("Conversion to mp3 complete!")
audio = AudioFileClip(mp3_path)
audio.write_audiofile(wav_path)
print("Conversion to wav complete!")
# Initialize the Whisper model (small model is a good balance for speed and accuracy)
print("Transcribing audio...")
model = whisper.load_model("tiny.en") # Options: "tiny", "base", "small", "medium", "large"
# Transcribe the audio
result = model.transcribe(wav_path)
print("Transcription completed!")
meet_data=result["text"]
with open(transcript_path, "w") as file:
file.write(meet_data)
print("Txt written to file: ", transcript_path)
return meet_data
else:
print("File NOT found! Check the path for: ", mp4_path)
return "Test summary"
@app.get("/summarize")
def summarize_text(self,text, lang='en'):
OpenAI.api_key = os.getenv("OPENAI_API_KEY")
client = OpenAI(api_key=OpenAI.api_key)
prompt = f"""
The following text is in its original language. Provide the output in this language: {lang}.
Format the output as follows:
Summary:
short summary of the video
Key Takeaways:
succinct bullet point list of key takeaways
Detailed important points:
succinct bullet point list of feature details
input text: {text}
"""
response = client.chat.completions.create(
messages=[{"role": "user", "content": prompt}],
model="gpt-4o",
temperature=0,
#model="gpt-4-turbo", # better performance, slower inference
)
summary_text = response.to_dict()['choices'][0]['message']['content']
return summary_text
|