شکل موج صوتی
شکل موج صوتی

پیاده‌سازی تبدیل متن به گفتار با BARK با استفاده از کتابخانه Transformers هوگینگ فیس در محیط گوگل کولب

فناوری تبدیل متن به گفتار (TTS) در سال‌های اخیر به طور چشمگیری تکامل یافته است، از صداهای رباتیک گرفته تا ترکیب گفتار بسیار طبیعی. BARK یک مدل TTS متن‌باز چشمگیر است که توسط Suno توسعه یافته و می‌تواند گفتاری به طرز قابل توجهی شبیه به انسان را به چندین زبان، همراه با صداهای غیرکلامی مانند خنده، آه کشیدن و گریه تولید کند.

در این آموزش، ما BARK را با استفاده از کتابخانه Transformers هوگینگ فیس در یک محیط گوگل کولب پیاده‌سازی خواهیم کرد. در پایان، شما قادر خواهید بود:

  • BARK را در کولب تنظیم و اجرا کنید
  • از ورودی متن، گفتار تولید کنید
  • با صداها و سبک‌های گفتاری مختلف آزمایش کنید
  • برنامه‌های کاربردی TTS عملی ایجاد کنید

BARK جذاب است زیرا یک مدل کاملاً تولیدی متن به صدا است که می‌تواند گفتار طبیعی، موسیقی، نویز پس‌زمینه و جلوه‌های صوتی ساده تولید کند. برخلاف بسیاری از سیستم‌های TTS دیگر که به پیش‌پردازش صوتی گسترده و شبیه‌سازی صدا متکی هستند، BARK می‌تواند صداهای متنوعی را بدون آموزش خاص گوینده تولید کند.

بیایید شروع کنیم!

مراحل پیاده‌سازی

مرحله 1: تنظیم محیط

ابتدا باید کتابخانه‌های مورد نیاز را نصب کنیم. BARK به کتابخانه Transformers از هوگینگ فیس به همراه چند وابستگی دیگر نیاز دارد:

# Install the required libraries
!pip install transformers==4.31.0
!pip install accelerate
!pip install scipy
!pip install torch
!pip install torchaudio

در مرحله بعد، کتابخانه‌هایی را که استفاده خواهیم کرد، وارد می‌کنیم:

import torch
import numpy as np
import IPython.display as ipd
from transformers import BarkModel, BarkProcessor

# Check if GPU is available
device = "cuda" if torch.cuda.is_available() else "cpu"
print(f"Using device: {device}")

مرحله 2: بارگیری مدل BARK

اکنون، اجازه دهید مدل و پردازنده BARK را از هوگینگ فیس بارگیری کنیم:

# Load the model and processor
model = BarkModel.from_pretrained("suno/bark")
processor = BarkProcessor.from_pretrained("suno/bark")

# Move model to GPU if available
model = model.to(device)

BARK یک مدل نسبتاً بزرگ است، بنابراین این مرحله ممکن است یک یا دو دقیقه طول بکشد تا وزن‌های مدل را دانلود کند.

مرحله 3: تولید گفتار اساسی

بیایید با یک مثال ساده برای تولید گفتار از متن شروع کنیم:

# Define text input
text = "Hello! My name is BARK. I'm an AI text to speech model. It's nice to meet you!"
# Preprocess text
inputs = processor(text, return_tensors="pt").to(device)
# Generate speech
speech_output = model.generate(**inputs)
# Convert to audio
sampling_rate = model.generation_config.sample_rate
audio_array = speech_output.cpu().numpy().squeeze()
# Play the audio
ipd.display(ipd.Audio(audio_array, rate=sampling_rate))
# Save the audio file
from scipy.io.wavfile import write
write("basic_speech.wav", sampling_rate, audio_array)
print("Audio saved to basic_speech.wav")

خروجی: برای گوش دادن به صدا لطفاً به نوت‌بوک مراجعه کنید (لطفاً لینک پیوست شده را در انتها پیدا کنید

مرحله 4: استفاده از تنظیمات از پیش تعیین شده گوینده مختلف

BARK با چندین تنظیم از پیش تعیین شده گوینده به زبان‌های مختلف ارائه می‌شود. بیایید نحوه استفاده از آنها را بررسی کنیم:

# List available English speaker presets
english_speakers = [
   "v2/en_speaker_0",
   "v2/en_speaker_1",
   "v2/en_speaker_2",
   "v2/en_speaker_3",
   "v2/en_speaker_4",
   "v2/en_speaker_5",
   "v2/en_speaker_6",
   "v2/en_speaker_7",
   "v2/en_speaker_8",
   "v2/en_speaker_9"
]
# Choose a speaker preset
speaker = english_speakers[3]  # Using the fourth English speaker preset
# Define text input
text = "BARK can generate speech in different voices. This is an example of a different speaker preset."
# Add speaker preset to the input
inputs = processor(text, return_tensors="pt", voice_preset=speaker).to(device)
# Generate speech
speech_output = model.generate(**inputs)
# Convert to audio
audio_array = speech_output.cpu().numpy().squeeze()
# Play the audio
ipd.display(ipd.Audio(audio_array, rate=sampling_rate))

مرحله 5: تولید گفتار چند زبانه

BARK از چندین زبان خارج از جعبه پشتیبانی می‌کند. بیایید گفتار را به زبان‌های مختلف تولید کنیم:

# Define texts in different languages
texts = {
   "English": "Hello, how are you doing today?",
   "Spanish": "¡Hola! ¿Cómo estás hoy?",
   "French": "Bonjour! Comment allez-vous aujourd'hui?",
   "German": "Hallo! Wie geht es Ihnen heute?",
   "Chinese": "??!?????",
   "Japanese": "?????!????????????"
}
# Generate speech for each language
for language, text in texts.items():
   print(f"\nGenerating speech in {language}...")
   # Choose appropriate voice preset if available
   voice_preset = None
   if language == "English":
       voice_preset = "v2/en_speaker_1"
   elif language == "Spanish":
       voice_preset = "v2/es_speaker_1"
   elif language == "German":
       voice_preset = "v2/de_speaker_1"
   elif language == "French":
       voice_preset = "v2/fr_speaker_1"
   elif language == "Chinese":
       voice_preset = "v2/zh_speaker_1"
   elif language == "Japanese":
       voice_preset = "v2/ja_speaker_1"
   # Process text with language-specific voice preset if available
   if voice_preset:
       inputs = processor(text, return_tensors="pt", voice_preset=voice_preset).to(device)
   else:
       inputs = processor(text, return_tensors="pt").to(device)
   # Generate speech
   speech_output = model.generate(**inputs)
   # Convert to audio
   audio_array = speech_output.cpu().numpy().squeeze()
   # Play the audio
   ipd.display(ipd.Audio(audio_array, rate=sampling_rate))
   write("basic_speech_multilingual.wav", sampling_rate, audio_array)
   print("Audio saved to basic_speech_multilingual.wav")

مرحله 6: ایجاد یک برنامه کاربردی عملی - تولید کننده کتاب صوتی

بیایید یک تولید کننده کتاب صوتی ساده بسازیم که بتواند پاراگراف‌های متن را به گفتار تبدیل کند:

def generate_audiobook(text, speaker_preset="v2/en_speaker_2", chunk_size=250):
   """
   Generate an audiobook from a long text by splitting it into chunks
   and processing each chunk separately.
   Args:
       text (str): The text to convert to speech
       speaker_preset (str): The speaker preset to use
       chunk_size (int): Maximum number of characters per chunk
   Returns:
       numpy.ndarray: The generated audio as a numpy array
   """
   # Split text into sentences
   import re
   sentences = re.split(r'(?<=[.!?])\s+', text)
   chunks = []
   current_chunk = ""
   # Group sentences into chunks
   for sentence in sentences:
       if len(current_chunk) + len(sentence) < chunk_size:
           current_chunk += sentence + " "
       else:
           chunks.append(current_chunk.strip())
           current_chunk = sentence + " "
   # Add the last chunk if it's not empty
   if current_chunk:
       chunks.append(current_chunk.strip())
   print(f"Split text into {len(chunks)} chunks")
   # Process each chunk
   audio_arrays = []
   for i, chunk in enumerate(chunks):
       print(f"Processing chunk {i+1}/{len(chunks)}")
       # Process text
       inputs = processor(chunk, return_tensors="pt", voice_preset=speaker_preset).to(device)
       # Generate speech
       speech_output = model.generate(**inputs)
       # Convert to audio
       audio_array = speech_output.cpu().numpy().squeeze()
       audio_arrays.append(audio_array)
   # Concatenate audio arrays
   import numpy as np
   full_audio = np.concatenate(audio_arrays)
   return full_audio
# Example usage with a short excerpt from a book
book_excerpt = """
Alice was beginning to get very tired of sitting by her sister on the bank, and of having nothing to do. Once or twice she had peeped into the book her sister was reading, but it had no pictures or conversations in it, \"and what is the use of a book,\" thought Alice, \"without pictures or conversations?\"\nSo she was considering in her own mind (as well as she could, for the hot day made her feel very sleepy and stupid), whether the pleasure of making a daisy-chain would be worth the trouble of getting up and picking the daisies, when suddenly a White Rabbit with pink eyes ran close by her.\n"""
# Generate audiobook
audiobook = generate_audiobook(book_excerpt)
# Play the audio
ipd.display(ipd.Audio(audiobook, rate=sampling_rate))
# Save the audio file
write("alice_audiobook.wav", sampling_rate, audiobook)
print("Audiobook saved to alice_audiobook.wav")

در این آموزش ما با موفقیت مدل تبدیل متن به گفتار BARK را با استفاده از کتابخانه Transformers هوگینگ فیس در گوگل کولب پیاده‌سازی کردیم. در این آموزش، ما یاد گرفتیم که چگونه:

  1. مدل BARK را در یک محیط کولب تنظیم و بارگیری کنیم
  2. گفتار اساسی را از ورودی متن تولید کنیم
  3. از تنظیمات از پیش تعیین شده گوینده مختلف برای تنوع استفاده کنیم
  4. گفتار چند زبانه ایجاد کنیم
  5. یک برنامه کاربردی تولید کننده کتاب صوتی عملی بسازیم

BARK نشان دهنده پیشرفت چشمگیری در فناوری تبدیل متن به گفتار است که تولید گفتار با کیفیت بالا و رسا را ​​بدون نیاز به آموزش یا تنظیم دقیق گسترده ارائه می‌دهد.

تجربیات آینده که می‌توانید امتحان کنید

برخی از مراحل بعدی احتمالی برای بررسی بیشتر و گسترش کار خود با BARK:

  1. شبیه‌سازی صدا: با تکنیک‌های شبیه‌سازی صدا آزمایش کنید تا گفتاری تولید کنید که از گویندگان خاص تقلید کند.
  2. ادغام با سیستم‌های دیگر: BARK را با سایر مدل‌های هوش مصنوعی مانند مدل‌های زبانی برای دستیارهای صوتی شخصی‌سازی شده در پویایی‌هایی مانند رستوران‌ها و پذیرش، تولید محتوا، سیستم‌های ترجمه و غیره ترکیب کنید.
  3. برنامه وب: یک رابط وب برای سیستم TTS خود بسازید تا دسترسی به آن آسان‌تر شود.
  4. تنظیم دقیق سفارشی: تکنیک‌هایی را برای تنظیم دقیق BARK در حوزه‌های خاص یا سبک‌های گفتاری بررسی کنید.
  5. بهینه‌سازی عملکرد: روش‌هایی را برای بهینه‌سازی سرعت استنتاج برای برنامه‌های کاربردی بی‌درنگ بررسی کنید. این یک جنبه مهم برای هر برنامه کاربردی در تولید خواهد بود زیرا زمان استنتاج برای پردازش حتی یک قطعه کوچک از متن، این مدل‌های غول‌پیکر به دلیل تعمیم خود برای تعداد زیادی از موارد استفاده، زمان قابل توجهی را صرف می‌کنند.
  6. ارزیابی کیفیت: معیارهای ارزیابی عینی و ذهنی را برای ارزیابی کیفیت گفتار تولید شده پیاده‌سازی کنید.

زمینه تبدیل متن به گفتار به سرعت در حال تکامل است و پروژه‌هایی مانند BARK مرزهای آنچه ممکن است را پیش می‌برند. همانطور که به کاوش در این فناوری ادامه می‌دهید، برنامه‌های کاربردی و پیشرفت‌های هیجان‌انگیزتری را کشف خواهید کرد. 


در اینجا نوت‌بوک کولب وجود دارد. همچنین، فراموش نکنید که ما را در توییتر دنبال کنید و به کانال تلگرام و گروه لینکدین بپیوندید. فراموش نکنید که به ساب‌ردیت 80 هزار نفری ML ما بپیوندید.

⚨ با Parlant آشنا شوید: یک چارچوب هوش مصنوعی مکالمه‌ای اول LLM که برای ارائه کنترل و دقتی که توسعه‌دهندگان به آن نیاز دارند بر روی نمایندگان خدمات مشتری هوش مصنوعی خود طراحی شده است، با استفاده از دستورالعمل‌های رفتاری و نظارت در زمان اجرا. 🔧 🎛 با استفاده از یک CLI با کاربری آسان 📟 و SDKهای کلاینت بومی در پایتون و TypeScript 📦 کار می‌کند.