aliceer commited on
Commit
1676524
·
0 Parent(s):

Initial commit

Browse files
Files changed (5) hide show
  1. .gitattributes +35 -0
  2. README.md +26 -0
  3. app.py +72 -0
  4. packages.txt +1 -0
  5. requirements.txt +6 -0
.gitattributes ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: Thai Speech Recognition
3
+ emoji: 🎤
4
+ colorFrom: blue
5
+ colorTo: purple
6
+ sdk: gradio
7
+ sdk_version: "4.19.2"
8
+ app_file: app.py
9
+ pinned: false
10
+ ---
11
+
12
+ # ระบบถอดความเสียงภาษาไทย
13
+
14
+ แอปพลิเคชันนี้ใช้โมเดล Whisper ที่ปรับแต่งสำหรับภาษาไทยโดยเฉพาะ (biodatlab/whisper-th-medium-combined) เพื่อถอดความเสียงพูดภาษาไทยเป็นข้อความ
15
+
16
+ ## วิธีใช้งาน
17
+
18
+ 1. อัพโหลดไฟล์เสียงของคุณ (รองรับหลายฟอร์แมต เช่น .mp3, .wav)
19
+ 2. รอสักครู่ระบบจะประมวลผล
20
+ 3. ผลลัพธ์การถอดความจะแสดงในกล่องข้อความด้านล่าง
21
+
22
+ ## หมายเหตุ
23
+
24
+ - รองรับไฟล์เสียงความยาวไม่จำกัด (จะถูกแบ่งเป็นช่วงละ 30 วินาที)
25
+ - เหมาะสำหรับเสียงพูดภาษาไทย
26
+ - คุณภาพการถอดความขึ้นอยู่กับความชัดเจนของเสียงต้นฉบับ
app.py ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ import gradio as gr
3
+ from transformers import pipeline
4
+ from pyannote.audio import Pipeline
5
+ import datetime
6
+ from pydub import AudioSegment
7
+ import os
8
+
9
+ # โมเดลถอดเสียง
10
+ MODEL_NAME = "biodatlab/whisper-th-medium-combined"
11
+ device = 0 if torch.cuda.is_available() else "cpu"
12
+
13
+ pipe = pipeline(
14
+ task="automatic-speech-recognition",
15
+ model=MODEL_NAME,
16
+ chunk_length_s=30,
17
+ device=device,
18
+ )
19
+
20
+ # โมเดลแยกเสียงคนพูด
21
+ HF_TOKEN = os.environ.get("HF_TOKEN")
22
+ if not HF_TOKEN:
23
+ raise ValueError("กรุณาตั้งค่า HF_TOKEN ใน environment variables")
24
+
25
+ diarization = Pipeline.from_pretrained(
26
+ "pyannote/speaker-diarization@2.1",
27
+ use_auth_token=HF_TOKEN
28
+ )
29
+
30
+ def format_timestamp(seconds):
31
+ return str(datetime.timedelta(seconds=seconds)).split(".")[0]
32
+
33
+ def process_audio(audio_file):
34
+ if audio_file is None:
35
+ return "กรุณาอัพโหลดไฟล์เสียง"
36
+
37
+ try:
38
+ # แยกเสียงคนพูด
39
+ diarization_result = diarization(audio_file)
40
+
41
+ # ถอดความและจัดรูปแบบผลลัพธ์
42
+ transcription = pipe(
43
+ audio_file,
44
+ generate_kwargs={"language": "<|th|>", "task": "transcribe"},
45
+ batch_size=16
46
+ )["text"]
47
+
48
+ # สร้างผลลัพธ์ที่มีการแยกคนพูด
49
+ result = []
50
+ for turn, _, speaker in diarization_result.itertracks(yield_label=True):
51
+ start_time = format_timestamp(turn.start)
52
+ end_time = format_timestamp(turn.end)
53
+ result.append(f"[{start_time} - {end_time}] {speaker}:")
54
+
55
+ # รวมผลลัพธ์
56
+ final_result = "\n".join(result) + "\n\nคำถอดความ:\n" + transcription
57
+ return final_result
58
+
59
+ except Exception as e:
60
+ return f"เกิดข้อผิดพลาด: {str(e)}"
61
+
62
+ # สร้าง Gradio Interface
63
+ iface = gr.Interface(
64
+ fn=process_audio,
65
+ inputs=gr.Audio(type="filepath", label="อัพโหลดไฟล์เสียงของคุณ"),
66
+ outputs=gr.Textbox(label="ผลการถอดความ"),
67
+ title="ระบบถอดความเสียงภาษาไทยพร้อมแยกเสียงคนพูด",
68
+ description="ใช้โมเดล Whisper สำหรับถอดความเสียงภาษาไทย และ pyannote.audio สำหรับแยกเสียงคนพูด"
69
+ )
70
+
71
+ # รัน app
72
+ iface.launch()
packages.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ ffmpeg
requirements.txt ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ transformers
2
+ torch
3
+ librosa
4
+ gradio
5
+ pyannote.audio
6
+ pydub