canksdi commited on
Commit
c9f6731
·
verified ·
1 Parent(s): e20ecea

Upload 3 files

Browse files
Files changed (3) hide show
  1. README.md +68 -41
  2. app.py +43 -10
  3. requirements.txt +3 -3
README.md CHANGED
@@ -1,41 +1,68 @@
1
- ---
2
- title: MoodF - Duygusal Destek Asistanı
3
- emoji: 🔥
4
- colorFrom: blue
5
- colorTo: purple
6
- sdk: gradio
7
- sdk_version: 5.22.0
8
- app_file: app.py
9
- pinned: false
10
- license: apache-2.0
11
- ---
12
-
13
- # MoodF - Duygusal Destek Asistanı
14
-
15
- Bu uygulama, kullanıcıların duygusal durumlarını analiz edip destekleyici yanıtlar veren bir yapay zeka asistanıdır.
16
-
17
- ## Özellikler
18
-
19
- - 🧠 Duygu analizi - Kullanıcının yazısındaki duygu durumunu tespit eder
20
- - 💬 Destekleyici mesajlar - Kullanıcı üzgünse veya olumsuz hissettiğinde motive edici cevaplar üretir
21
- - 🔊 Sesli yanıt - Üretilen cevapları sesli olarak sunar
22
-
23
- ## Nasıl Kullanılır
24
-
25
- 1. Duygularınızı veya düşüncelerinizi metin kutusuna yazın
26
- 2. "Gönder" düğmesine basın
27
- 3. MoodF size destek olacak bir yanıt verecek ve yanıtı seslendirecektir
28
-
29
- ## Teknik Detaylar
30
-
31
- Bu proje üç farklı yapay zeka modelini bir araya getirir:
32
- - **Duygu Analizi**: CardiffNLP Twitter RoBERTa modeli
33
- - **Metin Üretme**: Mistral-7B-Instruct modeli
34
- - **Seslendirme**: Tacotron2-DDC modeli
35
-
36
- ## Kurulum
37
-
38
- ```bash
39
- pip install -r requirements.txt
40
- python app.py
41
- ```
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: MoodF - Duygusal Destek Asistanı
3
+ emoji: 😊
4
+ colorFrom: blue
5
+ colorTo: purple
6
+ sdk: gradio
7
+ sdk_version: "3.32.0"
8
+ app_file: app.py
9
+ pinned: false
10
+ ---
11
+
12
+ # MoodF - Duygusal Destek Asistanı
13
+
14
+ Bu uygulama, kullanıcıların duygusal durumlarını analiz edip destekleyici yanıtlar veren ve bunları insan sesine yakın bir sesle seslendiren gelişmiş bir yapay zeka asistanıdır.
15
+
16
+ ## Özellikler
17
+
18
+ - 🧠 **Duygu analizi** - Kullanıcının yazısındaki duygu durumunu tespit eder
19
+ - 💬 **Gerçek zamanlı metin üretimi** - Türkçe dil modeli kullanarak özgün destekleyici mesajlar üretir
20
+ - 🔊 **İnsan sesine yakın seslendirme** - SpeechT5 modeli ile doğal sesli yanıtlar üretir
21
+
22
+ ## Nasıl Kullanılır
23
+
24
+ 1. Duygularınızı veya düşüncelerinizi metin kutusuna yazın
25
+ 2. "Gönder" düğmesine tıklayın
26
+ 3. MoodF size özgün bir destekleyici yanıt verecek ve bunu insan sesine yakın bir şekilde seslendirecektir
27
+
28
+ ## Teknik Detaylar
29
+
30
+ Bu proje üç farklı yapay zeka modelini bir araya getirir:
31
+
32
+ - **Duygu Analizi**: DistilBERT modeli
33
+ - **Metin Üretme**: dbmdz/turkish-gpt2 - Türkçe dili için özel olarak eğitilmiş metin üretme modeli
34
+ - **Seslendirme**: Microsoft SpeechT5 - İnsan sesine çok yakın doğal seslendirme yapan gelişmiş TTS modeli
35
+
36
+ ## API Kullanımı
37
+
38
+ Bu Space, API endpoint'i üzerinden erişilebilir:
39
+
40
+ ```
41
+ https://huggingface.co/spaces/canksdi/cancan/api/predict/
42
+ ```
43
+
44
+ POST isteği ile şu formatta veri gönderilebilir:
45
+
46
+ ```json
47
+ {
48
+ "data": ["Bugün kendimi çok kötü hissediyorum."]
49
+ }
50
+ ```
51
+
52
+ Yanıt olarak metin ve ses dosyası URL'si alınır.
53
+
54
+ ## Kurulum
55
+
56
+ ### Bağımlılıklar:
57
+
58
+ ```
59
+ gradio==3.32.0
60
+ transformers==4.30.2
61
+ torch==2.0.1
62
+ soundfile==0.12.1
63
+ datasets==2.13.0
64
+ numpy>=1.17.0
65
+ protobuf==3.20.3
66
+ tqdm
67
+ sentencepiece
68
+ ```
app.py CHANGED
@@ -1,7 +1,10 @@
1
  import gradio as gr
2
  from transformers import pipeline, AutoModelForCausalLM, AutoTokenizer
 
3
  import torch
4
- from TTS.api import TTS
 
 
5
  import os
6
  import time
7
 
@@ -15,16 +18,22 @@ sentiment_model = pipeline(
15
  device=-1 # CPU üzerinde çalıştır
16
  )
17
 
18
- # Türkçe Metin Üretme Modeli - Türkçe destekleyen bir model
19
  print("Metin üretme modeli yükleniyor...")
20
  tokenizer = AutoTokenizer.from_pretrained("dbmdz/turkish-gpt2")
21
  text_model = AutoModelForCausalLM.from_pretrained("dbmdz/turkish-gpt2")
22
- print("Model yüklendi.")
23
 
24
- # Daha profesyonel TTS modeli
25
- print("TTS modeli yükleniyor...")
26
- tts_model = TTS(model_name="tts_models/tr/common-voice/glow-tts")
27
- print("TTS modeli yüklendi.")
 
 
 
 
 
 
28
 
29
  def generate_turkish_text(prompt, max_length=100):
30
  """Türkçe metin üretme fonksiyonu"""
@@ -43,6 +52,23 @@ def generate_turkish_text(prompt, max_length=100):
43
  generated_text = generated_text[len(prompt):].strip()
44
  return generated_text
45
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  def process_input(text):
47
  try:
48
  if not text or text.strip() == "":
@@ -74,10 +100,17 @@ def process_input(text):
74
 
75
  print(f"Üretilen yanıt: {response[:50]}...")
76
 
77
- # Yüksek kaliteli TTS ile seslendirme yap
78
- print("Ses dosyası oluşturuluyor...")
79
  audio_path = "response.wav"
80
- tts_model.tts_to_file(text=response, file_path=audio_path)
 
 
 
 
 
 
 
81
 
82
  print(f"İşlem tamamlandı ({time.time() - start_time:.2f} saniye)")
83
 
 
1
  import gradio as gr
2
  from transformers import pipeline, AutoModelForCausalLM, AutoTokenizer
3
+ from transformers import SpeechT5Processor, SpeechT5ForTextToSpeech, SpeechT5HifiGan
4
  import torch
5
+ import soundfile as sf
6
+ from datasets import load_dataset
7
+ import numpy as np
8
  import os
9
  import time
10
 
 
18
  device=-1 # CPU üzerinde çalıştır
19
  )
20
 
21
+ # Türkçe Metin Üretme Modeli
22
  print("Metin üretme modeli yükleniyor...")
23
  tokenizer = AutoTokenizer.from_pretrained("dbmdz/turkish-gpt2")
24
  text_model = AutoModelForCausalLM.from_pretrained("dbmdz/turkish-gpt2")
25
+ print("Metin modeli yüklendi.")
26
 
27
+ # Yüksek kaliteli SpeechT5 TTS modeli
28
+ print("SpeechT5 modeli yükleniyor...")
29
+ processor = SpeechT5Processor.from_pretrained("microsoft/speecht5_tts")
30
+ tts_model = SpeechT5ForTextToSpeech.from_pretrained("microsoft/speecht5_tts")
31
+ vocoder = SpeechT5HifiGan.from_pretrained("microsoft/speecht5_hifigan")
32
+ print("SpeechT5 modeli yüklendi.")
33
+
34
+ # Konuşmacı embedding'i al - kadın sesi
35
+ embeddings_dataset = load_dataset("Matthijs/cmu-arctic-xvectors", split="validation")
36
+ speaker_embeddings = torch.tensor(embeddings_dataset[7306]["xvector"]).unsqueeze(0) # Kadın ses
37
 
38
  def generate_turkish_text(prompt, max_length=100):
39
  """Türkçe metin üretme fonksiyonu"""
 
52
  generated_text = generated_text[len(prompt):].strip()
53
  return generated_text
54
 
55
+ def create_speech(text):
56
+ """Yüksek kaliteli konuşma üretme fonksiyonu"""
57
+ # Metni işle
58
+ inputs = processor(text=text, return_tensors="pt")
59
+
60
+ # Ses üret
61
+ speech = tts_model.generate_speech(
62
+ inputs["input_ids"],
63
+ speaker_embeddings,
64
+ vocoder=vocoder
65
+ )
66
+
67
+ # Numpy dizisine dönüştür
68
+ speech_np = speech.numpy()
69
+
70
+ return speech_np
71
+
72
  def process_input(text):
73
  try:
74
  if not text or text.strip() == "":
 
100
 
101
  print(f"Üretilen yanıt: {response[:50]}...")
102
 
103
+ # Yüksek kaliteli ses üret
104
+ print("Yüksek kaliteli ses dosyası oluşturuluyor...")
105
  audio_path = "response.wav"
106
+
107
+ # Türkçe metni İngilizce telaffuz edebilecek hale getir
108
+ # SpeechT5 sadece İngilizce için eğitilmiş, bu yüzden bir miktar uyarlama gerekiyor
109
+ response_for_speech = response
110
+
111
+ # Sesi oluştur ve kaydet
112
+ speech_array = create_speech(response_for_speech)
113
+ sf.write(audio_path, speech_array, 16000)
114
 
115
  print(f"İşlem tamamlandı ({time.time() - start_time:.2f} saniye)")
116
 
requirements.txt CHANGED
@@ -1,9 +1,9 @@
1
  gradio==3.32.0
2
  transformers==4.30.2
3
  torch==2.0.1
4
- TTS==0.17.4
5
- numpy==1.22.0
6
- scipy==1.11.2
7
  protobuf==3.20.3
8
  tqdm
9
  sentencepiece
 
1
  gradio==3.32.0
2
  transformers==4.30.2
3
  torch==2.0.1
4
+ soundfile==0.12.1
5
+ datasets==2.13.0
6
+ numpy>=1.17.0
7
  protobuf==3.20.3
8
  tqdm
9
  sentencepiece