🔊 Voskとは?Pythonで簡単に使えるオフライン音声認識ライブラリ

🔊 Voskとは?Pythonで簡単に使えるオフライン音声認識ライブラリ

Vosk(ヴォスク)は、オフラインで使える音声認識ライブラリで、特にPython環境での使いやすさと精度の高さから注目を集めています。

従来の音声認識といえばGoogle・AmazonのAPI・OpenAI社のWhisperなど利用するクラウド型が主流とは思われるが、Voskは完全にローカル環境で動作可能。これにより、通信不要・高速・プライバシー保護といった多くのメリットを得られます。


🧠 Voskの歴史と背景:Kaldiをもっと手軽に

Voskの開発は、音声認識エンジン「Kaldi」が背景にあります。Kaldiは音響・言語モデルの研究において非常に高機能ですが、導入や設定が難しく、初心者には敷居が高いというデメリットがありました。

この課題を解決するために、Alpha Cephei社によって開発されたのがVoskです。VoskはKaldiの認識エンジンをベースにしながらも、簡単なAPI、マルチプラットフォーム対応、軽量設計を実現しています。

GitHub上でオープンソースとして公開されており、現在も活発に開発が続けられています。


🚀 Voskの主な特徴

特徴内容
✅ オフライン動作インターネット接続不要、完全ローカル処理
🌍 多言語対応日本語、英語、中国語など20言語以上
🐍 Python対応pip install voskで簡単に導入
📱 軽量動作Raspberry Piや組込み機器でも使用可能
🎯 高精度Kaldiベースの高精度エンジンを採用

🛠 PythonでのVosk導入と使い方【サンプル付き】

① インストール

bashコピーする編集するpip install vosk pyaudio

② モデルの準備

以下のリンクから日本語モデル(例:vosk-model-small-ja-0.22)をダウンロード:
👉 Vosk公式モデル一覧

③ サンプルコード(リアルタイム認識)

pythonコピーする編集するfrom vosk import Model, KaldiRecognizer
import pyaudio
import json

model = Model("model")  # モデルディレクトリ
rec = KaldiRecognizer(model, 16000)

p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paInt16, channels=1, rate=16000,
                input=True, frames_per_buffer=4000)
stream.start_stream()

print("音声認識を開始します。Ctrl+Cで終了")

try:
    while True:
        data = stream.read(4000, exception_on_overflow=False)
        if rec.AcceptWaveform(data):
            result = json.loads(rec.Result())
            print("認識結果:", result['text'])
except KeyboardInterrupt:
    print("終了しました")

⚠ よくあるエラー:OSError [Errno -9981] Input overflowed の対処法

リアルタイム音声認識中に以下のようなエラーが出ることがあります:

plaintextコピーする編集するOSError: [Errno -9981] Input overflowed

これは音声入力の処理が追いつかず、内部バッファが溢れてしまったことを意味します。

✅ 対処法一覧

  1. exception_on_overflow=False を追加 pythonコピーする編集するdata = stream.read(4000, exception_on_overflow=False) これでエラーを回避できます(処理落ち時に欠落の可能性あり)。
  2. frames_per_buffer を調整 pythonコピーする編集するframes_per_buffer=1600 # 小さくすると安定することも
  3. 音声データを一定量まとめてから処理 pythonコピーする編集するchunk = [] for _ in range(4): # 約1秒分 chunk.append(stream.read(4000, exception_on_overflow=False)) if rec.AcceptWaveform(b''.join(chunk)): print(json.loads(rec.Result())['text'])
  4. より安定した音声ライブラリへの切り替え(例:sounddevice PyAudioに比べてエラーが出にくい。

🎯 Voskが活躍するユースケース

  • 会議や講義の文字起こしツール
  • スマートホーム向け音声操作
  • Raspberry Pi音声プロジェクト
  • 録音ファイルの自動文字変換
  • プライバシー重視のアプリケーション(医療・法務分野)

📝 まとめ:Voskはオフライン音声認識の最適解!

Voskは、Pythonで使える数少ないオフライン対応の高精度音声認識ライブラリです。導入のしやすさ、軽量さ、Kaldiベースの精度を兼ね備えており、個人開発から業務利用まで幅広く活用できます。

Pythonのデコレータ(@記号)とは?

Pythonでマウス&キーボード操作を自動化!pyautoguiの使い方と応用例

Pythonでマウス&キーボード操作を自動化!

マウス操作やキーボード入力をPythonから自動化したいと考えたことはありませんか? そんなときに非常に便利なのが「pyautogui」というライブラリです。この記事では、pyautoguiを使ってPC操作を自動化する方法を、初心者向けに分かりやすく解説します。GUI操作の自動化や画像認識クリック、キーボード入力などをPythonで制御したい方は必見です。

pyautoguiとは?

pyautogui は、PythonでGUI(グラフィカル・ユーザー・インターフェース)操作を自動化するためのクロスプラットフォーム対応ライブラリです。人間が行うようなマウスの移動・クリックやキーボード入力をプログラムから再現することができます。

主な機能

  • マウスの移動、クリック、ドラッグ
  • キーボード入力(文字、キー送信)
  • スクリーンショット撮影
  • 画像認識による画面上の操作

pyautoguiのインストール方法

インストールは非常に簡単で、pipコマンドを使って以下のように導入できます:

pip install pyautogui

macOSやLinuxでは追加でpython3-tkscrotなどの依存パッケージが必要な場合があります。

pyautoguiの基本操作まとめ

まずは、よく使う基本操作から紹介します。

import pyautogui

# 画面サイズの取得
print(pyautogui.size())  # 例: Size(width=1920, height=1080)

# マウスを指定座標へ移動(1秒かけて)
pyautogui.moveTo(100, 200, duration=1)

# 左クリック
pyautogui.click()

# ドラッグ(押したまま移動)
pyautogui.dragTo(500, 500, duration=1)

# キーボード入力
pyautogui.write('Hello, world!', interval=0.1)

# 特殊キーの送信(Enterなど)
pyautogui.press('enter')

スクリーンショットの取得

画面のキャプチャを撮ることも可能です。

screenshot = pyautogui.screenshot()
screenshot.save('screenshot.png')

画像認識でクリックする方法

対象のボタンやアイコンを「画像」で指定して自動クリックすることができます。

location = pyautogui.locateOnScreen('button.png')
if location:
    pyautogui.click(location)

よくある使い方:

  • アプリ起動後に「OKボタン」などを画像で指定して押す
  • ゲームや業務アプリのボタン操作を自動化

実践例:メモ帳に自動で文字を入力

import pyautogui
import time

# メモ帳を手動で開いておく
print("5秒後に入力開始...")
time.sleep(5)

pyautogui.write("こんにちは、これは自動入力です!", interval=0.1)
pyautogui.press("enter")

エラー防止と緊急停止方法

pyautoguiには、安全対策も用意されています。

マウス移動で強制停止

マウスカーソルを画面の左上(座標 0,0)に移動すると、自動操作が強制終了されます。

pyautogui.FAILSAFE = True

実行速度を遅くする

操作が速すぎてうまく動かない場合は、間隔を入れましょう。

pyautogui.PAUSE = 0.5

pyautoguiでできること

pyautoguiを使えば、GUIアプリの自動テストや業務の自動化、ゲームの操作補助など、さまざまなPC操作をPythonで制御することが可能になります。実行中の安全対策もあり、安心して自動化処理を作ることができます。

これからPC操作の自動化に挑戦したい人は、まずはpyautoguiから始めてみましょう。繰り返し作業を効率化したい人や、自動入力・クリック処理を組み込みたいエンジニアに特におすすめです。

Python API Gateway からCSVダウンロードする

Python Lambda で作ったカンマ区切り文字列を API Gateway 経由で CSVダウンロードする

API Gateway から Python ( Lambda ) で作成した カンマ文字列を CSV形式でダウンロードできるようにする方法です

Lambda 側で headersを指定して返せば どんなフォーマットでも返すことは可能です

CSVファイルを返す場合 ヘッダーは Content-TypeContent-disposition を使います

Python ( Lambda )コード例 ↓

def lambda_handler(event, context):
    body_str = """column1,column2,column3
"値1","値2","値3"
"""
    return {
        'statusCode': 200,
        "isBase64Encoded": True,
        "headers":{
            "Content-Type": "application/vnd.ms-excel",
            "Content-disposition": "attachment; filename=hoge.csv" # CSVファイル名を指定
        },
        "body": f"\ufeff{body_str}" # BOMを設定
    }

body_strという変数に、 カンマ区切り文字列を代入し

その値をCSVファイルとして ダウンロードできるように返しています

文字列の先頭に \ufeff を入れるのは、 BOMです

API Gateway のURLにアクセスすると、下のようにCSVファイル形式でダウンロードできました

body_str に代入したカンマ区切りの文字列