Python Flask 프레임워크로 텍스트 음성 변환 서비스 구축

텍스트 음성 변환 기술은 디지털 텍스트를 큰 소리로 읽습니다. 컴퓨터, 스마트폰, 태블릿 등에서 단어를 가져와 오디오로 변환할 수 있습니다. Python에는 편리하고 쉽게 액세스할 수 있는 라이브러리가 많이 포함되어 있으며 pyttsx3을 사용하여 Python으로 텍스트를 음성으로 변환하는 방법을 보여 드리겠습니다. pyttsx3는 Python의 텍스트 음성 변환 라이브러리입니다. 대체 라이브러리와 달리 오프라인에서 작동하며 Python 2 및 3과 모두 호환됩니다. 입력된 텍스트를 오디오로 변환하는 라이브러리를 사용하기 쉽습니다.

비디오 확인


단계:


  • 응용 프로그램이 pyttsx3.init() 팩토리 함수를 호출하여 pyttsx3.Engine 인스턴스에 대한 참조를 가져옵니다.
  • getProperty('rate') 메서드를 사용하면 현재 말하기 속도를 설정할 수 있습니다.
  • 마찬가지로 getProperty('volume')는 볼륨을 설정하는 데 도움이 됩니다.
    (최소=0 및 최대=1)
  • voice는 활성 음성의 문자열 식별자입니다.
  • 현재 대기열에 있는 모든 명령을 처리하는 동안 runAndWait()가 차단됩니다. 엔진 알림에 대한 콜백을 적절하게 호출합니다. 이 호출 전에 대기 중인 모든 명령이 대기열에서 비워지면 반환됩니다.
    ## 텍스트를 음성으로 변환하는 코드

  • import pyttsx3
    
    
    def text_to_speech(text, gender):
        """
        Function to convert text to speech
        :param text: text
        :param gender: gender
        :return: None
        """
        voice_dict = {'Male': 0, 'Female': 1}
        code = voice_dict[gender]
    
        engine = pyttsx3.init()
    
        # Setting up voice rate
        engine.setProperty('rate', 125)
    
        # Setting up volume level  between 0 and 1
        engine.setProperty('volume', 0.8)
    
        # Change voices: 0 for male and 1 for female
        voices = engine.getProperty('voices')
        engine.setProperty('voice', voices[code].id)
    
        engine.say(text)
        engine.runAndWait()
    
    

  • 오디오로 변환할 텍스트를 만듭니다.
  • 음성 어시스턴트를 선택합니다.

  • text = 'Hello ! My name is Siddhesh.'
    gender = 'Male'  # Voice assistant 
    text_to_speech(text, gender)
    

    웹 서비스 구축



    이것은 기본 경로가 있는 기본 플라스크 애플리케이션입니다. 또한 아래와 같이 특정 플라스크 라이브러리와 몇 가지 다른 라이브러리를 가져와야 합니다.

    # Importing the necessary Libraries
    from flask_cors import cross_origin
    from flask import Flask, render_template, request
    from main import text_to_speech
    
    app = Flask(__name__)
    
    
    @app.route('/', methods=['POST', 'GET'])
    @cross_origin()
    def homepage():
        if request.method == 'POST':
            text = request.form['speech']
            gender = request.form['voices']
            text_to_speech(text, gender)
            return render_template('frontend.html')
        else:
            return render_template('frontend.html')
    
    
    if __name__ == "__main__":
        app.run(port=8000, debug=True)
    

    HTML 템플릿 코드



    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <meta http-equiv="X-UA-Compatible" content="ie=edge" />
        <title>Browser voices</title>
        <style type="text/css">
                                * {
                          box-sizing: border-box;
                        }
                        html,
                        body {
                          min-height: 100vh;
                          margin: 0;
                          padding: 0;
                        }
                        body {
                          font-family: Helvetica, Arial, sans-serif;
                          color: #0d122b;
                          display: flex;
                          flex-direction: column;
                          padding-left: 1em;
                          padding-right: 1em;
                        }
                        h1 {
                          text-align: center;
                          font-weight: 100;
                        }
                        header {
                          border-bottom: 1px solid #0d122b;
                          margin-bottom: 2em;
                        }
                        main {
                          flex-grow: 2;
                          display: flex;
                          justify-content: space-around;
                          align-items: center;
                          background-color: #fff;
                          border-radius: 12px;
                          margin-bottom: 2em;
                        }
                        @keyframes bg-pulse {
                          0% {
                            background-color: #fff;
                          }
    
                          50% {
                            background-color: #c7ecee;
                          }
    
                          100% {
                            backgrouond-color: #fff;
                          }
                        }
                        main.speaking {
                          animation: bg-pulse 1.5s alternate ease-in-out infinite;
                        }
                        .input {
                          text-align: center;
                          width: 100%;
                        }
                        label {
                          display: block;
                          font-size: 18px;
                          margin-bottom: 1em;
                        }
                        .field {
                          margin-bottom: 2em;
                        }
                        input {
                          font-size: 24px;
                          padding: 0.5em;
                          border: 1px solid rgba(13, 18, 43, 0.25);
                          border-radius: 6px;
                          width: 75%;
                          display: inline-block;
                          transition: border-color 0.25s;
                          text-align: center;
                        }
                        input:focus,
                        select:focus {
                          border-color: rgba(13, 18, 43, 1);
                        }
                        select {
                          width: 75%;
                          font-size: 24px;
                          padding: 0.5em;
                          border: 1px solid rgba(13, 18, 43, 0.25);
                          border-radius: 6px;
                          transition: border-color 0.25s;
                        }
                        button {
                          font-size: 18px;
                          font-weight: 200;
                          padding: 1em;
                          width: 200px;
                          background: transparent;
                          border: 4px solid #f22f46;
                          border-radius: 4px;
                          transition: all 0.4s ease 0s;
                          cursor: pointer;
                          color: #f22f46;
                          margin-bottom: 2em;
                        }
                        button:hover,
                        button:focus {
                          background: #f22f46;
                          color: #fff;
                        }
    
                        a {
                          color: #0d122b;
                        }
                        .error {
                          color: #f22f46;
                          text-align: center;
                        }
                        footer {
                          border-top: 1px solid #0d122b;
                          text-align: center;
                        }
        </style>
      </head>
          <body>
    
              <header>
                  <h1>Text to Speech</h1>
              </header>
    
            <main>
              <form class="input" id="voice-form" method="post">
                    <div class="field">
                        <label for="speech">Type Something</label>
                        <input type="text" name="speech" id="speech" required />
                    </div>
                    <div class="field">
                        <label for="voices">Choose a Voice Assistant</label>
                          <select name="voices" id="voices">
                              <option value="Male">Male</option>
                              <option value="Female">Female</option>
                          </select>
                    </div>
                  <button>
                        Say it!
                  </button>
              </form>
            </main>
    
            <footer>
                <p>
                    Built by <a href=<BLOG LINK>><YOUR NAME></a>
                </p>
            </footer>
    
          </body>
    </html>
    

    Python에서 텍스트를 음성으로 변환하는 데 사용할 수 있는 몇 가지 API가 있습니다. gTTS도 동일한 작업을 수행하는 데 사용할 수 있습니다. Google 번역의 텍스트 음성 변환 API와 인터페이스하는 Python 라이브러리 및 CLI 도구입니다.

    이 게시물이 도움이 되었기를 바랍니다. 이는 최종 사용자가 플라스크를 사용하여 웹 애플리케이션을 구축하고 텍스트를 음성으로 변환하는 데 도움이 됩니다.

    Octocat이 내 GitHub 리포지토리로 이동합니다...

    좋은 웹페이지 즐겨찾기