qwen_asr_once.py ダウンロード/コピー

qwen_asr_once.py をダウンロード

qwen_asr_once.py
qwen_asr_once.py
 1#!/usr/bin/env python3
 2"""
 3概要:
 4    Qwen3-ASR Transformersの推論を1回実行して終了するスクリプトです。
 5
 6詳細説明:
 7    このファイルは呼び出しごとにモデルをロードするように意図的に設計されています。
 8    リクエスト間でGPUメモリを解放するため、qwen_asr_flask.pyから呼び出されることを想定しています。
 9
10関連リンク:
11    qwen_asr_once_usage
12"""
13
14from __future__ import annotations
15
16import argparse
17import json
18import sys
19from pathlib import Path
20
21
22def main() -> int:
23    """
24    概要:
25        コマンドライン引数を解析し、音声ファイルを推論して結果を出力します。
26
27    詳細説明:
28        音声ファイルパスとモデル名を引数として受け取り、Qwen3ASRModelを初期化します。
29        推論結果はJSON形式の文字列として標準出力に表示されます。
30        入力ファイルが見つからない場合はエラーメッセージを標準エラーに出力し、2を返します。
31
32    戻り値:
33        :returns: 正常終了時は0、入力ファイルが見つからない場合は2。
34        :rtype: int
35    """
36    parser = argparse.ArgumentParser()
37    parser.add_argument("--audio", required=True, type=Path)
38    parser.add_argument("--model", default="Qwen/Qwen3-ASR-1.7B")
39    args = parser.parse_args()
40    if not args.audio.is_file():
41        print(f"input file not found: {args.audio}", file=sys.stderr)
42        return 2
43
44    import torch
45    from qwen_asr import Qwen3ASRModel
46
47    model = Qwen3ASRModel.from_pretrained(
48        args.model,
49        dtype=torch.bfloat16,
50        device_map="cuda:0",
51        max_inference_batch_size=1,
52        max_new_tokens=4096,
53    )
54    results = model.transcribe(audio=str(args.audio), language=None)
55    result = results[0]
56    print(json.dumps({"text": result.text, "language": result.language}, ensure_ascii=False))
57    return 0
58
59
60if __name__ == "__main__":
61    raise SystemExit(main())