Upload 3 files
Browse files- README.md +68 -41
- app.py +43 -10
- 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:
|
8 |
-
app_file: app.py
|
9 |
-
pinned: false
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
-
|
20 |
-
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
- **Duygu Analizi**:
|
33 |
-
- **Metin Üretme**:
|
34 |
-
- **Seslendirme**:
|
35 |
-
|
36 |
-
##
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
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 |
-
|
|
|
|
|
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
|
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("
|
23 |
|
24 |
-
#
|
25 |
-
print("
|
26 |
-
|
27 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
78 |
-
print("
|
79 |
audio_path = "response.wav"
|
80 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
-
|
5 |
-
|
6 |
-
|
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
|