Spaces:
Sleeping
Sleeping
| import os | |
| import random | |
| from functools import partial | |
| import json | |
| import base64 | |
| import gradio as gr | |
| import firebase_admin | |
| from firebase_admin import credentials | |
| from firebase_admin import firestore | |
| from utils import get_youtube | |
| from model import summarize_video | |
| # η°ε’ε€ζ°γγη§ε―ι΅γεεΎ | |
| encoded_key = os.environ["FIREBASE_CREDENTIALS_BASE64"] | |
| # Base64γ¨γ³γ³γΌγγγγη§ε―ι΅γγγ³γΌγ | |
| decoded_key = base64.b64decode(encoded_key) | |
| # γγ³γΌγγγγη§ε―ι΅γδ½Ώγ£γ¦CredentialγͺγγΈγ§γ―γγδ½ζ | |
| cred = credentials.Certificate(json.loads(decoded_key)) | |
| # cred = credentials.Certificate('/home/kazuki/casp/fastperson-538e9-firebase-adminsdk-285dh-fa3faea9d0.json') | |
| # Firebase Admin SDKγεζε | |
| firebase_admin.initialize_app(cred) | |
| db = firestore.client() | |
| def log_firestore(db, local_id="000000", action="test", user_id=""): | |
| data = { | |
| "local_id": local_id, | |
| "timestamp": firestore.SERVER_TIMESTAMP, | |
| "action": action, | |
| "user_id": user_id | |
| } | |
| doc_ref = db.collection("exp.1").document() | |
| doc_ref.set(data) | |
| local_id = random.randint(0, 10000000) | |
| def store_local_id(user_id, local_id, db): | |
| log_firestore(db, local_id=str(local_id), action='ID', user_id=str(user_id)) | |
| # ---- Gradio Layout ----- | |
| youtube_url_in = gr.Textbox(label="Youtube url", lines=1, interactive=True) | |
| video_in = gr.Video(label="Input Video", mirror_webcam=False, interactive=True) | |
| video_out = gr.Video(label="Output Video") | |
| summary_text = gr.Textbox(label="Video Transcription Summary") | |
| transcription_text = gr.HTML(label="Full Transcription") | |
| demo = gr.Blocks() | |
| demo.encrypt = False | |
| with demo: | |
| with gr.Column(): | |
| gr.Markdown(''' | |
| <div style="text-align: center"> | |
| <h1 style='text-align: center'>Video Summarization</h1> | |
| </div> | |
| ''') | |
| with gr.Row(): | |
| gr.Markdown(''' | |
| ### Summarize video | |
| <ul> | |
| <li>Step 1. download a video from youtube (select one of the examples and press the Download button)</li> | |
| <li>Step 2: Select the summary rate and playback speed (select with slider)</li> | |
| <li>Step 3: Generate a summarized video (press the Summarize button)</li> | |
| </ul> | |
| ''') | |
| with gr.Row(): | |
| gr.Markdown(''' | |
| #### Output | |
| <ul> | |
| <li>An original downloaded video is displayed on the left side of the screen, and a summarized video is displayed on the right side of the screen.</li> | |
| <li>A text summary of the video is displayed below it.</li> | |
| <li>A transcription of the original video is displayed further down (the part extracted from the summarized video is highlighted).</li> | |
| </ul> | |
| ''') | |
| with gr.Row(): | |
| gr.Markdown(''' | |
| ### User ID | |
| Fill in the user ID if the author of this system has instructed you to do so. | |
| ''') | |
| with gr.Column(): | |
| user_id_input = gr.Textbox(placeholder="Enter your user ID", label="User ID") | |
| store_local_id_wrapped = partial(store_local_id, local_id=local_id, db=db) | |
| user_id_btn = gr.Button("Submit User ID") | |
| user_id_btn.click(store_local_id_wrapped, inputs=[user_id_input]) | |
| with gr.Row(): | |
| gr.Markdown(''' | |
| ### You can test by following examples: | |
| ''') | |
| examples = gr.Examples(examples= | |
| [ "https://www.youtube.com/watch?v=QghjaS0WQQU", | |
| "https://www.youtube.com/watch?v=k_04qb_65l0", | |
| "https://www.youtube.com/watch?v=yArB4rgA1hM", | |
| "https://www.youtube.com/watch?v=SzAuB2FG79A", | |
| "https://www.youtube.com/watch?v=f60dheI4ARg" | |
| ], | |
| label="Examples", inputs=[youtube_url_in]) | |
| with gr.Column(): | |
| youtube_url_in.render() | |
| download_youtube_btn = gr.Button("Download Youtube video") | |
| get_youtube_wrapped = partial(get_youtube, local_id=local_id, db=db) | |
| download_youtube_btn.click(get_youtube_wrapped, [youtube_url_in], [video_in]) | |
| with gr.Row(): | |
| sum_ratio = gr.Slider(label="Summarize Ratio", minimum=0.3, maximum=0.8, step=0.05, value=0.6) | |
| playback_speed = gr.Slider(label="Playback Speed", minimum=0.5, maximum=2.0, step=0.25, value=1.0) | |
| with gr.Row(): | |
| upload_output_video_btn = gr.Button("Summarize Video") | |
| summarize_video_wrapped = partial(summarize_video, local_id=local_id, db=db) | |
| upload_output_video_btn.click(summarize_video_wrapped, [video_in, sum_ratio, playback_speed], [video_out, summary_text, transcription_text]) | |
| with gr.Row(): | |
| video_in.render() | |
| video_out.render() | |
| with gr.Row(): | |
| summary_text.render() | |
| with gr.Row(): | |
| transcription_text.render() | |
| # demo.launch(debug=True, share=True) | |
| demo.launch(debug=True) |