เขียน shell script รันไฟล์ python แปลงเสียงเป็นข้อความ พร้อมจัดการผลที่ออกมาอัตโนมัต

แชร์ความรู้ Linux Ubuntu Web Server บทความ การ config server Linux FreeBSD Apache
การติดตั้ง XAMPP Mysql PHP ใครต้องการแชร์ความรู้เรื่องต่างๆ เหล่านี้ให้ ท่านหรืออื่น โพสที่หมวดนี้ได้

Moderator: mindphp, ผู้ดูแลกระดาน

ภาพประจำตัวสมาชิก
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
โพสต์: 46264
ลงทะเบียนเมื่อ: 22/09/2008 6:18 pm
ติดต่อ:

เขียน shell script รันไฟล์ python แปลงเสียงเป็นข้อความ พร้อมจัดการผลที่ออกมาอัตโนมัต

โพสต์ที่ยังไม่ได้อ่าน โดย mindphp »

เขียน shell script รันไฟล์ python แปลงเสียงเป็นข้อความ พร้อมจัดการผลที่ออกมาอัตโนมัต
สำหรับไฟล์ mtotext3.py เป็นเวอร์ชั่น 3 ที่ได้เขียน python เพื่อแปลงเสียงเป็นข้อความอัตโนมัต รองรับภาษาไทย และ ใช้โมเดลที่ถูกเทรนมา ขนาดใหญ่สุด
ทำงาน บน Cloud Server ไฟล์เสียง จาก logs call โทรศัพท์ 1 นาที่จะใช้เวลา แปลงเป็นข้อความประมาณ 5 นาที
เป็น lib ของ pyhton ที่ให้ผลดีกว่าการใช้ speech_recognition เพราะแยกประโยคให้อัตโนมัติ และ ไม่ต้องใช้ API ภายนอก แต่ข้อเสียคือจะใช้ cpu สูง
ข้อมูลที่ให้ อิงกับ cpu 8 core ram 16GB

โค้ด: เลือกทั้งหมด

#!/bin/bash

# Environment Variables
BASE_DIR="/home/tools/mtotext"
SOURCE_FOLDER="$BASE_DIR/source_m4a"
OUTPUT_FOLDER="$BASE_DIR/output_txt"
CHUNKS_FOLDER="$BASE_DIR/chunks"
PYTHON_SCRIPT="$BASE_DIR/mtotext3.py"
LOG_FILE="$BASE_DIR/transcription_progress.log"
ENV_DIR="$BASE_DIR"  # Virtual Environment อยู่ใน /home/tools/mtotext/

# Create necessary directories
mkdir -p "$SOURCE_FOLDER"
mkdir -p "$OUTPUT_FOLDER"
mkdir -p "$CHUNKS_FOLDER"

# Change to base directory
cd "$BASE_DIR" || { echo "ไม่สามารถเข้าถึงไดเรกทอรี $BASE_DIR"; exit 1; }

# Activate Python virtual environment
if [ -f "$ENV_DIR/bin/activate" ]; then
    source "$ENV_DIR/bin/activate" || { echo "ไม่สามารถเปิดใช้งาน environment"; exit 1; }
else
    echo "ไม่พบ environment ที่ $ENV_DIR"
    exit 1
fi

# Start logging
echo "เริ่มการถอดเสียง..." | tee -a "$LOG_FILE"

# Find all .m4a files in the source folder
FILES=("$SOURCE_FOLDER"/*.m4a)
TOTAL_FILES=${#FILES[@]}

if [ "$TOTAL_FILES" -eq 0 ]; then
    echo "ไม่มีไฟล์ .m4a ในโฟลเดอร์ $SOURCE_FOLDER" | tee -a "$LOG_FILE"
    deactivate
    exit 1
fi

echo "พบทั้งหมด $TOTAL_FILES ไฟล์ที่ต้องแปลง" | tee -a "$LOG_FILE"

# Initialize counter
COUNT=0

for FILE in "${FILES[@]}"; do
    COUNT=$((COUNT + 1))
    BASENAME=$(basename "$FILE")
    
    # Sanitize BASENAME to handle special characters and spaces
    SAFE_BASENAME=$(echo "$BASENAME" | sed 's/[^a-zA-Z0-9ก-ฮ0-9._-]/_/g')

    echo "[$COUNT/$TOTAL_FILES] กำลังประมวลผลไฟล์: \"$SAFE_BASENAME\"" | tee -a "$LOG_FILE"

    # Run the Python script to process the file with its full path
    python3 "$PYTHON_SCRIPT" "$FILE" --language "th" --model "large" >> "$LOG_FILE" 2>&1
    if [ $? -ne 0 ]; then
        echo "เกิดข้อผิดพลาดในการประมวลผลไฟล์: \"$SAFE_BASENAME\"" | tee -a "$LOG_FILE"
        continue
    fi

    # Move .txt files to the output folder
    TXT_FILE_BASENAME="${SAFE_BASENAME%.*}.txt"
    GENERATED_TXT="$BASE_DIR/result_txt/$TXT_FILE_BASENAME"
    if [ -f "$GENERATED_TXT" ]; then
        mv "$GENERATED_TXT" "$OUTPUT_FOLDER/"
        echo "ย้ายไฟล์ผลลัพธ์: $TXT_FILE_BASENAME ไปที่ $OUTPUT_FOLDER" | tee -a "$LOG_FILE"

        # ลบไฟล์ชั่วคราวหลังจากแปลงเสร็จสิ้น
        echo "ลบไฟล์ชั่วคราวในโฟลเดอร์ $CHUNKS_FOLDER" | tee -a "$LOG_FILE"
        rm -rf "$CHUNKS_FOLDER"/*
    else
        echo "ไม่พบไฟล์ผลลัพธ์: $TXT_FILE_BASENAME" | tee -a "$LOG_FILE"
    fi

    echo "เสร็จสิ้นไฟล์: \"$SAFE_BASENAME\"" | tee -a "$LOG_FILE"
done

echo "การถอดเสียงเสร็จสิ้น! ผลลัพธ์ถูกบันทึกในโฟลเดอร์ $OUTPUT_FOLDER" | tee -a "$LOG_FILE"

# Deactivate the environment
if type deactivate >/dev/null 2>&1; then
    deactivate
else
    echo "คำสั่ง deactivate ไม่พร้อมใช้งาน" | tee -a "$LOG_FILE"
fi
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042
ภาพประจำตัวสมาชิก
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
โพสต์: 46264
ลงทะเบียนเมื่อ: 22/09/2008 6:18 pm
ติดต่อ:

Re: เขียน shell script รันไฟล์ python แปลงเสียงเป็นข้อความ พร้อมจัดการผลที่ออกมาอัตโนมัต

โพสต์ที่ยังไม่ได้อ่าน โดย mindphp »

โมดูลที่ใช้ใน python
ค่าที่กำหนดนี้ มีผลต่อความเร็วในการถอดเสียง เป็น ข้อความอย่างมาก

โค้ด: เลือกทั้งหมด

          audio_path,
            language=language,
            temperature=0.0,
            beam_size=5,  # เพิ่ม beam size เพื่อให้มีการวิเคราะห์หลายตัวเลือก
            patience=1.5,  # เพิ่ม patience เพื่อใช้เวลาในการถอดเสียงมากขึ้น
            fp16=False,
            logprob_threshold=-0.5,  # เพิ่มเกณฑ์ความมั่นใจ
            no_speech_threshold=0.6,  # กำหนดเกณฑ์สำหรับช่วงที่ไม่มีเสียงพูด
            condition_on_previous_text=False  # ลดการยึดติดกับข้อความก่อนหน้า
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042
ตอบกลับโพส
  • Similar Topics
    ตอบกลับ
    แสดง
    โพสต์ล่าสุด

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และบุคลทั่วไป 2