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())