สำหรับไฟล์ 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