File size: 3,238 Bytes
638be90
6e941de
638be90
3b83cb7
d2639f0
e129c20
 
 
d2639f0
ae41ebd
 
 
 
d2639f0
 
 
 
 
 
 
 
 
 
 
 
 
fc46af4
d2639f0
 
 
71dc53b
d2639f0
 
17b56f6
 
 
 
d2639f0
ae41ebd
97c6b92
8078e71
e5be212
 
 
 
 
d2639f0
af53e78
d2639f0
af53e78
17b56f6
4f921f8
17b56f6
26b8bf9
17b56f6
42f8b47
af53e78
 
d2639f0
42f8b47
d2639f0
 
 
 
e5be212
e129c20
638be90
d834007
638be90
d834007
 
 
2fd9b5b
 
638be90
ae41ebd
97c6b92
 
 
 
 
 
e129c20
d834007
e129c20
 
 
 
 
 
e0aae73
ae41ebd
e129c20
638be90
 
 
 
 
 
 
 
 
 
 
 
71dc53b
0c9ce61
638be90
 
9ddc002
638be90
 
 
 
 
ae41ebd
638be90
 
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
import gradio as gr

from pytube import YouTube
import random
import requests,json





def create(prompt,openai_key):
  
    headers = {
        'Content-Type': 'application/json',
        'Authorization': f'Bearer {openai_key}',
       
    }
    data =   {
        "model": "text-davinci-003",
        "prompt": prompt,
        "temperature": 0.7,
        "max_tokens": 1024,
        "top_p": 1.0,
        "frequency_penalty": 0.0,
        "presence_penalty": 0.0
    }
    print(headers ,prompt,openai_key)
    url = 'https://api.openai.com/v1/completions'
    r = requests.post(url,headers=headers,
            data=json.dumps(data))
    print(r.text)
    return r.json()

def split_list(l, n):
    for i in range(0, len(l), n):
        yield l[i:i+n]
        

def convert(res,openai_key):


    data = res.json()
    prediction = data['prediction']
    content = []
    for x in prediction:
        content.append(x['transcription'])
    auido_txt = '\n'.join(content)
    answer = ''

    try:
        answer = ''
        for txt_line in split_list(content,10):
            txt_line_content = '\n'.join(txt_line)
            prompt = f"\n\n将下面的内容使用简体中文总结5条要点出来:\n\n{txt_line_content}"
            open_ai_res = create(prompt,openai_key)
            answer += prompt + '\n GPT3:\n' + open_ai_res['choices'][0]['text']
    except Exception as e:
        print('open ai api error',e)

    res_content = f'{answer}'

    return res_content

    
        

def get_audio(url):
    
    yt = YouTube(url)
    audio_file = f'{random.randint(10000,100000)}.mp4'
    print(f'{url} {audio_file} start get audio ...')
    yt.streams.filter(only_audio=True)[0].download(filename=audio_file)
    print('aodio over ..')
    return audio_file

def get_transcript(url,openai_key):
    headers = {
        'accept': 'application/json',
        'x-gladia-key': '89b0adf5-fb2c-48ba-8a66-76b02827fd14',
        # requests won't add a boundary if this header is set when you pass files=
        # 'Content-Type': 'multipart/form-data',
    }
    audio_file = get_audio(url)
    # audio_file = 'tmp.mp4'
    files = {
        'audio': (f"{audio_file}", open(f'{audio_file}', 'rb'), 'video/mp4'),
        'language': (None, 'english'),
        'language_behaviour': (None, 'automatic single language'),
    }
    response = requests.post('https://api.gladia.io/audio/text/audio-transcription/', headers=headers, files=files)
    print(response.text)
    return convert(response,openai_key)
    




with gr.Blocks() as demo:

    with gr.Row():

        with gr.Column():

            with gr.Row():
                url = gr.Textbox(placeholder='Youtube video URL', label='URL')
                openai_key = gr.Textbox(placeholder='Your openai key', label='OPENAI KEY')
               

            with gr.Row():
                gr.Markdown("自动从youtube视频中,获取音频内容,并使用GPT总结其要点")
                transcribe_btn = gr.Button('Transcribe')

        with gr.Column():
            outputs = gr.Textbox(placeholder='Transcription of the video', label='Transcription')

    transcribe_btn.click(get_transcript, inputs=[url,openai_key], outputs=outputs)

demo.launch(debug=True)