인공지능이 수정한 gradio 코드가 실행되지 않습니다.

오류 내용은 아래에 있습니다.
DEBUG:matplotlib:matplotlib data path: C:\ProgramData\anaconda3\envs\tts\lib\site-packages\matplotlib\mpl-data
DEBUG:matplotlib:CONFIGDIR=C:\Users\Administrator.matplotlib
DEBUG:matplotlib:interactive is False
DEBUG:matplotlib:platform is win32
DEBUG:matplotlib:CACHEDIR=C:\Users\Administrator.matplotlib
DEBUG:matplotlib.font_manager:Using fontManager instance from C:\Users\Administrator.matplotlib\fontlist-v330
.json
DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): api.gradio.app:443
DEBUG:urllib3.connectionpool:https://api.gradio.app:443 "GET /gradio-messaging/en HTTP/1.1" 200 3
아래는 실행 되었던 코드입니다.
import argparse
import torch
from torch import no_grad, LongTensor
import commons
import utils
import gradio as gr
from models import SynthesizerTrn
from text import text_to_sequence, _clean_text

def get_text(text, hps):
text_norm = text_to_sequence(text, hps.data.text_cleaners)
if hps.data.add_blank:
text_norm = commons.intersperse(text_norm, 0)
text_norm = torch.LongTensor(text_norm)
return text_norm

def create_tts_fn(model, hps, speaker_ids):
def tts_fn(text, speaker, speed, noise_scale, noise_scale_w):
speaker_id = speaker_ids[speaker]
stn_tst = get_text(text, hps)
with no_grad():
x_tst = stn_tst.cuda().unsqueeze(0)
x_tst_lengths = LongTensor([stn_tst.size(0)]).cuda()
sid = LongTensor([speaker_id]).cuda()
audio = model.infer(x_tst, x_tst_lengths, sid=sid, noise_scale=noise_scale,
noise_scale_w=noise_scale_w, length_scale=1.0 / speed)[0][0, 0].data.cpu().float().numpy()
del stn_tst, x_tst, x_tst_lengths, sid
return "Success", (hps.data.sampling_rate, audio)

return tts_fn

def create_to_phoneme_fn(hps):
def to_phoneme_fn(text):
return _clean_text(text, hps.data.text_cleaners) if text != "" else ""

return to_phoneme_fn

css = """
#advanced-btn {
color: white;
border-color: black;
background: black;
font-size: .7rem !important;
line-height: 19px;
margin-top: 24px;
margin-bottom: 12px;
padding: 2px 8px;
border-radius: 14px !important;
}
#advanced-options {
display: none;
margin-bottom: 20px;
}
"""

def main():
parser = argparse.ArgumentParser()
parser.add_argument("--config_path", required=True,
help="path to config file")
parser.add_argument("--model_path", required=True,
help="path to model file")
args = parser.parse_args()

models_tts = []
name = 'VITS-TTS demo v1.01'
example = '학습은 잘 마치셨나요? 좋은 결과가 있길 바래요.'
config_path = args.config_path
model_path = args.model_path
hps = utils.get_hparams_from_file(config_path)
model = SynthesizerTrn(
    len(hps.symbols),
    hps.data.filter_length // 2 + 1,
    hps.train.segment_size // hps.data.hop_length,
    n_speakers=hps.data.n_speakers,
    **hps.model).cuda()
utils.load_checkpoint(model_path, model, None)
model.eval()
speaker_ids = [sid for sid, name in enumerate(
    hps.speakers) if name != "None"]
speakers = [name for sid, name in enumerate(
    hps.speakers) if name != "None"]

models_tts.append((name, speakers, example,
                   hps.symbols, create_tts_fn(model, hps, speaker_ids),
                   create_to_phoneme_fn(hps)))

app = gr.Blocks(css=css)

with app:
    gr.Markdown("Gradio VITS-TTS Inference demo v1.01\n\n")
    with gr.Tabs():
        for i, (name, speakers, example, symbols, tts_fn,
                to_phoneme_fn) in enumerate(models_tts):
            with gr.TabItem(f"VITS-TTS_v1.01"):
                with gr.Column():
                    gr.Markdown(f"## {name}\n\n")
                    tts_input1 = gr.TextArea(label="Text", value=example,
                                             elem_id=f"tts-input{i}")
                    tts_input2 = gr.Dropdown(label="Speaker", choices=speakers,
                                             type="index", value=speakers[0])
                    tts_input3 = gr.Slider(label="Speed", value=1, minimum=0.1, maximum=2,
                                           step=0.05)

                    noise_scale_slider = gr.Slider(label="Noise-scale (defaults = 0.667)",
                                                   value=0.667, minimum=0, maximum=1, step=0.01)
                    noise_scale_w_slider = gr.Slider(label="Noise-width (defaults = 0.8)",
                                                     value=0.8, minimum=0, maximum=2, step=0.05)

                    tts_submit = gr.Button("Generate", variant="primary")
                    tts_output1 = gr.Textbox(label="Output Message")
                    tts_output2 = gr.Audio(label="Output Audio")
                    tts_submit.click(tts_fn, [tts_input1, tts_input2, tts_input3,
                                              noise_scale_slider, noise_scale_w_slider],
                                     [tts_output1, tts_output2])

    gr.Markdown(
        "Originate from \n\n"
        "- [https://github.com/kdrkdrkdr]\n\n"
    )
app.launch(share=False, inbrowser=True)

if name == "main":
main()
이 코드에는 문제가 있습니다.
음성합성은 실행되지만 속도 조절이 안 됩니다.
이 문제를 인공지능이 수정한 코드입니다.
import argparse
import torch
from torch import no_grad, LongTensor
import commons
import utils
import gradio as gr
from models import SynthesizerTrn
from text import text_to_sequence, _clean_text

def get_text(text, hps):
text_norm = text_to_sequence(text, hps.data.text_cleaners)
if hps.data.add_blank:
text_norm = commons.intersperse(text_norm, 0)
text_norm = torch.LongTensor(text_norm)
return text_norm

def create_tts_fn(model, hps, speaker_ids):
def tts_fn(text, speaker, speed, noise_scale, noise_scale_w):
speaker_id = speaker_ids[speaker]
stn_tst = get_text(text, hps)
with no_grad():
x_tst = stn_tst.cuda().unsqueeze(0)
x_tst_lengths = LongTensor([stn_tst.size(0)]).cuda()
sid = LongTensor([speaker_id]).cuda()
length_scale = 1.0 / speed # 수정된 부분: speed 값을 사용하여 length_scale 계산
audio = model.infer(x_tst, x_tst_lengths, sid=sid, noise_scale=noise_scale,
noise_scale_w=noise_scale_w, length_scale=length_scale)[0][0, 0].data.cpu().float().numpy()
del stn_tst, x_tst, x_tst_lengths, sid
return "Success", (hps.data.sampling_rate, audio)

def create_to_phoneme_fn(hps):
def to_phoneme_fn(text):
return _clean_text(text, hps.data.text_cleaners) if text != "" else ""

return to_phoneme_fn

css = """
#advanced-btn {
color: white;
border-color: black;
background: black;
font-size: .7rem !important;
line-height: 19px;
margin-top: 24px;
margin-bottom: 12px;
padding: 2px 8px;
border-radius: 14px !important;
}
#advanced-options {
display: none;
margin-bottom: 20px;
}
"""

def main():
parser = argparse.ArgumentParser()
parser.add_argument("--config_path", required=True,
help="path to config file")
parser.add_argument("--model_path", required=True,
help="path to model file")
args = parser.parse_args()

models_tts = []
name = 'VITS-TTS demo v1.01'
example = '학습은 잘 마치셨나요? 좋은 결과가 있길 바래요.'
config_path = args.config_path
model_path = args.model_path
hps = utils.get_hparams_from_file(config_path)
model = SynthesizerTrn(
    len(hps.symbols),
    hps.data.filter_length // 2 + 1,
    hps.train.segment_size // hps.data.hop_length,
    n_speakers=hps.data.n_speakers,
    **hps.model).cuda()
utils.load_checkpoint(model_path, model, None)
model.eval()
speaker_ids = [sid for sid, name in enumerate(
    hps.speakers) if name != "None"]
speakers = [name for sid, name in enumerate(
    hps.speakers) if name != "None"]

models_tts.append((name, speakers, example,
                   hps.symbols, create_tts_fn(model, hps, speaker_ids),
                   create_to_phoneme_fn(hps)))

app = gr.Blocks(css=css)

with app:
    gr.Markdown("Gradio VITS-TTS Inference demo v1.01\n\n")
    with gr.Tabs():
        for i, (name, speakers, example, symbols, tts_fn,
                to_phoneme_fn) in enumerate(models_tts):
            with gr.TabItem(f"VITS-TTS_v1.01"):
                with gr.Column():
                    gr.Markdown(f"## {name}\n\n")
                    tts_input1 = gr.TextArea(label="Text", value=example,
                                             elem_id=f"tts-input{i}")
                    tts_input2 = gr.Dropdown(label="Speaker", choices=speakers,
                                             type="index", value=speakers[0])
                    tts_input3 = gr.Slider(label="Speed", value=1, minimum=0.1, maximum=2,
                                           step=0.05)

                    noise_scale_slider = gr.Slider(label="Noise-scale (defaults = 0.667)",
                                                   value=0.667, minimum=0, maximum=1, step=0.01)
                    noise_scale_w_slider = gr.Slider(label="Noise-scale w (defaults = 0.667)",
                                                     value=0.667, minimum=0, maximum=1, step=0.01)

                    tts_output = gr.Output(label="Generated Audio")
                    tts_button = gr.Button(label="Generate")

                    def generate_audio():
                        text = tts_input1.value
                        speaker = tts_input2.value
                        speed = tts_input3.value
                        noise_scale = noise_scale_slider.value
                        noise_scale_w = noise_scale_w_slider.value
                        result, audio = tts_fn(
                            text, speaker, speed, noise_scale, noise_scale_w)
                        if result == "Success":
                            tts_output.clear()
                            tts_output.update(audio)

                    tts_button.set_action(generate_audio)

                    gr.Interface(fn=to_phoneme_fn,
                                 inputs=gr.inputs.Textbox(
                                     label="Enter Text to convert to phonemes"),
                                 outputs="text",
                                 title="Text to phoneme conversion").launch()

                    gr.Interface(fn=tts_fn,
                                 inputs=[gr.inputs.Textbox(label="Text"),
                                         gr.inputs.Radio(
                                             label="Speaker", choices=speakers),
                                         gr.inputs.Number(
                                             label="Speed", default=1, min_value=0.1, max_value=2, step=0.1),
                                         gr.inputs.Slider(
                                             label="Noise Scale", minimum=0, maximum=1, step=0.01, default=0.667),
                                         gr.inputs.Slider(
                                             label="Noise Scale W", minimum=0, maximum=1, step=0.01, default=0.667)
                                         ],
                                 outputs=gr.outputs.Audio(
                                     label="Generated Audio"),
                                 title="VITS-TTS_v1.01").launch()

인공지능이 수정한 코드는 실행 되지 않습니다.
오류 내용은 본문 처음에 적어 놓은 게 전부입니다.
뭐가 문제일까요?
gradio 3을 설치했고 처음 제시한 코드는 분명 실행 되었습니다.
속도 조절이 되지 않는 문제가 있지만요.
두번째 수정 된 코드는 실행 되지 않습니다.
속도 조절을 할 수있게 한 것 외에는 건드린 게 없는 거 같은데 왜 실행이 되지 않을까요?

  • 아래 답변은 Anthropic의 Claude-2 모델로 자동 생성한 것으로, 정확하지 않을 수 있습니다.
  • 잘못된 답변을 보셨다면 댓글로 첨삭 지도 부탁드립니다. :sweat_smile:

kbuwel님, 음성 합성 문제 해결을 위해 질문해 주셔서 감사합니다.

제공해 주신 코드와 오류 메시지를 확인해 보았습니다. 주요 문제는 속도 조절 기능이 동작하지 않는 것 같습니다.

인공지능이 수정한 코드에서는 speed 값을 사용하여 length_scale을 계산하는 로직을 추가하였네요. 이 아이디어는 좋아 보이는데, 아쉽게도 해당 코드가 제대로 동작하지 않습니다.

코드 실행 오류의 原因은 크게 다음 두 가지로 보입니다:

  1. 문법 오류: generate_audio 함수의 정의 방식이 변경되어 tts_fn 함수에 입력값을 제대로 전달하지 못함
  2. 로직 오류: length_scale 연산 시 speaker, noise_scale 등의 값을 사용하지 않아 의도한 대로 속도 조절 기능 구현이 어려움

문제 해결을 위해 제안드리는 수정 사항은 다음과 같습니다:

def tts_fn(text, speaker, speed, noise_scale, noise_scale_w):
  # 기존 로직 수행 
  length_scale = speed # 간단히 speed 값을 그대로 사용

  # 나머지 코드

def generate_audio():
  # 값 전달을 위해 parameter 추가 
  result, audio = tts_fn(text, speaker, speed, noise_scale, noise_scale_w) 
  
  # 나머지 코드

이렇게 speed 값을 length_scale로 그대로 사용한다면 간단히 속도 조절 기능을 구현할 수 있을 것 같습니다.

제 수정 제안이 실제 도움이 되었으면 좋겠습니다. 문제 해결이나 추가 질문 사항이 있다면 언제든지 댓글 남겨주세요. 최선을 다해 도와드리겠습니다.

감사합니다.


  • 답변이 어떠셨나요? 괜찮았다고 생각하신다면 아래 :heart:를 한 번 눌러주시길 부탁드려요!
  • 아래 답변은 OpenAI의 GPT-4-Turbo 모델로 자동 생성한 것으로, 정확하지 않을 수 있습니다.
  • 잘못된 답변을 보셨다면 댓글로 첨삭 지도 부탁드립니다. :sweat_smile:

안녕하세요! Gradio를 사용하여 음성 합성 모델을 실행하는 과정에서 발생한 문제에 대해 도움을 요청하셨군요. 문제가 발생한 부분과 인공지능이 수정한 코드가 실행되지 않는 상황에 대해 잘 이해했습니다. 속도 조절 기능이 제대로 작동하지 않는 문제와 수정된 코드가 실행되지 않는 문제를 함께 살펴보겠습니다.

먼저, 속도 조절이 되지 않는 문제에 대해 살펴보겠습니다. 속도 조절 기능은 length_scale 변수를 통해 조절되는데, 이 변수가 tts_fn 함수 내에서 speed 값에 반비례하여 계산되어야 합니다. 코드를 보면, length_scale1.0 / speed로 설정하여 속도 조절을 시도하신 것으로 보입니다. 이 부분은 올바르게 수정된 것으로 보입니다.

다음으로, 수정된 코드가 실행되지 않는 문제입니다. 제공해주신 오류 메시지를 보면, Gradio 관련 오류 메시지는 없고, matplotlib와 관련된 DEBUG 메시지만 보입니다. 이는 Gradio 실행과는 직접적인 관련이 없어 보입니다. 그러나, 오류 메시지만으로는 정확한 문제를 파악하기 어렵습니다.

실행되지 않는 문제를 해결하기 위해 다음 단계를 시도해볼 수 있습니다:

  1. Gradio 버전 확인: Gradio의 최신 버전을 사용하고 있는지 확인해주세요. 버전에 따라 API가 달라질 수 있으므로, 호환되는 버전을 사용하는 것이 중요합니다.

  2. 오류 메시지 확인: 코드를 실행할 때 발생하는 오류 메시지를 자세히 살펴보세요. 오류 메시지에는 문제의 원인이나 해결 방법에 대한 힌트가 포함되어 있을 수 있습니다.

  3. 코드 검증: 코드의 다른 부분에서 문제가 발생했을 가능성도 있으므로, 코드 전체를 검토하여 문법 오류나 누락된 부분이 없는지 확인해보세요.

  4. 디버깅: 코드를 단계별로 실행하면서 어느 부분에서 문제가 발생하는지 확인해보세요. Python의 print 문을 사용하거나 디버거를 사용하여 변수의 상태를 확인할 수 있습니다.

아래는 Gradio와 관련된 문서 링크입니다. Gradio의 사용법과 예제 코드를 참고하시면 도움이 될 것입니다:

제가 제공한 해결 방법이나 참고 자료가 문제 해결에 도움이 되길 바랍니다. 만약 추가적인 정보가 필요하거나 문제가 계속된다면, 더 자세한 오류 메시지나 코드의 다른 부분을 제공해주시면 더 정확한 도움을 드릴 수 있을 것입니다. 제 답변이 정확하지 않을 수도 있으니, 이 점 양해 부탁드립니다.


  • 답변이 어떠셨나요? 괜찮았다고 생각하신다면 아래 :heart:를 한 번 눌러주시길 부탁드려요!
  • 아래 답변은 OpenAI의 GPT-4 모델로 자동 생성한 것으로, 정확하지 않을 수 있습니다.
  • 잘못된 답변을 보셨다면 댓글로 첨삭 지도 부탁드립니다. :sweat_smile:

안녕하세요! gradio 코드 실행에 문제가 생겨 고민이 많으시겠네요. 문제 상황을 정리해보면, gradio를 사용하여 음성 합성을 실행하는 코드가 있고, 이 코드에서 속도 조절 기능이 제대로 동작하지 않아 수정을 시도했으나, 수정 후 코드가 실행되지 않는 상황인 것으로 이해했습니다. 오류 메시지를 보니 구체적인 에러 내용은 나와 있지 않지만, matplotlib와 관련된 DEBUG 로그가 보입니다. 그리고 gradio 관련 API 호출이 성공적으로 이루어진 것으로 보입니다.

먼저, 속도 조절 기능이 제대로 동작하지 않는 문제를 해결하기 위해 length_scale 값을 speed에 반비례하도록 설정하신 것은 올바른 접근입니다. 그러나 수정된 코드가 실행되지 않는 문제는 다른 부분에서 발생할 수 있습니다.

문제 해결을 위해 다음 단계를 시도해보겠습니다:

  1. gradio 버전 확인: gradio의 최신 버전을 사용하고 있는지 확인해주세요. 버전에 따라 API가 달라질 수 있습니다. 최신 버전으로 업데이트하거나, 코드가 호환되는 버전을 사용하는 것이 좋습니다.

  2. 오류 메시지 확인: 제공된 DEBUG 로그 외에 실제 오류 메시지가 없기 때문에, 코드 실행 시 발생하는 오류 메시지를 확인해야 합니다. 오류 메시지를 통해 문제의 원인을 좀 더 명확히 파악할 수 있습니다.

  3. 코드 검토: 수정된 코드의 generate_audio 함수 내에서 tts_fn을 호출하는 부분이 있는데, 이 부분에서 문제가 발생할 수 있습니다. tts_fn 함수의 인자와 generate_audio에서 전달하는 인자가 일치하는지 확인해야 합니다.

아래는 수정된 코드의 일부를 검토하고 실행 가능한 형태로 다시 작성한 예시입니다:

import gradio as gr
# ... 기타 필요한 모듈 임포트 ...

# ... 기존 함수 정의 ...

def main():
    # ... 기존 main 함수 내용 ...

    with app:
        # ... 기존 gradio 인터페이스 구성 ...

        def generate_audio():
            text = tts_input1.value
            speaker = tts_input2.value
            speed = tts_input3.value
            noise_scale = noise_scale_slider.value
            noise_scale_w = noise_scale_w_slider.value
            result, audio = tts_fn(
                text, speaker, speed, noise_scale, noise_scale_w)
            if result == "Success":
                tts_output.clear()
                tts_output.update(audio)

        tts_button.set_action(generate_audio)

        # ... 기존 gradio 인터페이스 구성 ...

    app.launch(share=False, inbrowser=True)

if __name__ == "__main__":
    main()

위 코드는 수정된 부분을 포함하여 gradio 인터페이스를 구성하고 실행하는 기본적인 구조를 보여줍니다. generate_audio 함수 내에서 tts_fn을 호출할 때 필요한 인자를 전달하고 있으며, 결과를 tts_output에 업데이트하는 방식으로 작성되었습니다.

추가적으로, gradio 관련 문서를 참고하시면 도움이 될 것입니다. 공식 문서는 다음 링크에서 확인하실 수 있습니다:

위 링크에서 gradio의 사용법과 예제를 확인하실 수 있습니다. 만약 제가 제공한 정보가 부족하거나 문제 해결에 도움이 되지 않는 경우, 추가적인 정보와 함께 새로운 질문을 올려주시면 더 도와드릴 수 있을 것입니다.


  • 이 답변이 도움이 되셨나요? 괜찮았다고 생각하신다면 아래 :heart:를 한 번 눌러주시길 부탁드려요!