AI技術を活用して音声を文字起こしする「SHOKI」システムです。会議や講義の録音から簡単に文字起こしを生成し、AIによる要約・文章補正機能も利用できます。
- 音声文字起こし: OpenAI Whisperを使用した高精度な音声認識
- 話者ラベル: 会議の参加者ごとにセリフを分類
- AI文章補正: 文字起こし結果を自然な文章に補正(Gemini AI)
- AI要約生成: 文字起こし内容の要点をまとめた要約を生成(Gemini AI)
- 複数フォーマット: 標準、箇条書き、会議議事録など様々な形式で要約
- 独立要約ツール: 任意のテキストを要約できる専用ツール
- 履歴管理: 過去の文字起こし結果を参照・再利用
- 結果エクスポート: テキスト、Markdown、CSVなど様々な形式での保存
- Docker および Docker Compose
- 4GB以上のRAM
- インターネット接続(初回のモデルダウンロード用)
- Gemini APIキー(要約機能を使用する場合)
- リポジトリをクローンまたはファイルをダウンロード
git clone https://github.com/suupoo/shoki.git
cd shoki- 環境設定
.envファイルを作成して設定をカスタマイズします:
# ポート設定
PORT=9999
# 音声認識設定
MODEL_SIZE=base # tiny, base, small, medium, large から選択
LANGUAGE=ja # 主に使用する言語コード
# Gemini API設定
GEMINI_API_KEY=your_gemini_api_key_here # 要約機能用APIキー
GEMINI_MODEL=gemini-1.5-flash # gemini-pro, gemini-1.5-flash, gemini-1.5-pro から選択
- Dockerコンテナのビルドと起動
docker-compose up -d- 初回起動時の注意点
- 初回起動時には、Whisperモデルがダウンロードされるため、数分〜数十分かかることがあります
- ダウンロードの進行状況はログで確認できます:
docker-compose logs -f
- ブラウザでアクセス:
http://localhost:9999 - 音声ファイルをアップロードし、必要に応じてオプションを設定
- 「処理を開始」ボタンをクリックして文字起こしを実行
- 処理完了後、結果を確認・ダウンロード
- 文字起こし後、「要約」タブをクリック
- 要約フォーマットとモデルを選択
- 「生成」ボタンを押すと、AIによる文章補正と要約が行われます
- 結果をコピーまたはダウンロード可能
- 標準形式: 段落形式の要約
- 箇条書き形式: 要点をリスト形式で整理
- 見出し形式: トピックごとに見出しと説明で整理
- Q&A形式: 質問と回答の形式でまとめ
- エグゼクティブサマリー: ビジネス文書向けの簡潔な要約
- 会議議事録形式: 開催日、参加者、内容、タスクを構造化
- トップページの「テキスト要約ツール」リンクをクリック(または直接
http://localhost:9999/summarize.phpにアクセス) - 要約したいテキストを入力
- フォーマットとモデルを選択して「要約する」ボタンをクリック
- 結果をコピーまたは保存
- トップページの「履歴を表示」ボタンをクリック
- 過去の文字起こし一覧から選択
- 「読み込む」ボタンで過去のデータを表示
- 文字起こし結果や要約を確認、必要に応じて新たに要約を生成
- MP3, WAV, M4A, OGG
- 最大ファイルサイズ: 500MB
- tiny: 最も軽量、低精度(低スペックPCに最適)
- base: 軽量、やや低精度
- small: 中程度のサイズと精度
- medium: バランスの取れた精度と処理速度(推奨)
- large: 最高精度、高負荷
- gemini-1.5-flash: 高速処理向け(推奨)
- gemini-1.5-pro: 高精度処理向け(複雑な会議議事録等に最適)
- gemini-pro: 旧モデル(安定性重視)
- 文字起こし: 2GB以上のRAM
- 要約処理: 特に追加要件なし
SHOKI/
├── compose.yaml # Docker Compose設定
├── .env # 環境変数設定
├── src/ # PHPソースコード (コンテナ内の/var/www/html)
│ ├── helpers # ヘルパー関数
│ ├── ApiHelper.php # データモデル
│ ├── SummaryHelper.php # ファイル管理
│ └── TextProcessingHelper.php # Whisper API連携
│ ├── index.php # Webインターフェース
│ ├── api.php # APIエンドポイント
│ ├── gemini_helper.php # Gemini API連携
│ ├── summarize.php # 独立要約ツール
│ └── .htaccess # Apache設定
├── whisper/ # ビルド関連ファイル
│ ├── Dockerfile # Dockerイメージ定義
│ └── php.ini # PHP設定
└── data/ # データディレクトリ
├── uploads/ # アップロードファイル
├── processed/ # 処理済みファイル
├── exports/ # エクスポートファイル
├── logs/ # ログファイル
├── config/ # 設定ファイル
├── cache/ # キャッシュ
└── archives/ # アーカイブ
- API機能を提供する中核ファイル
- 文字起こしリクエストを処理する機能
- 要約リクエストの処理
- 履歴管理と文字起こしデータの読み込み
- エラーハンドリングとログ記録
- ZIPアーカイブの作成
- Gemini APIとの通信機能
- テキスト分割と大規模テキスト処理
- 文章補正と要約の処理ロジック
- 複数フォーマットの要約テンプレート管理
- 独立した要約ツールのインターフェース
- Gemini APIを使用した要約生成
- 複数フォーマットでの要約オプション
- ウェブインターフェースの提供
- ファイルアップロードと要約フォーム
- 処理結果の表示と履歴管理
- エラー「メモリ不足」: モデルサイズを小さくする
- 処理が遅い: より小さいモデルサイズを選択
- 特定の言語での精度が低い: 適切な言語コードを指定
- NumPyエラー: Dockerfileの依存関係バージョンを確認・修正
- 「APIキーが設定されていません」:
.envファイルにGemini APIキーを設定 - 要約中の500エラー: 非常に長いテキストの場合は複数回に分けて要約
非常に長いテキスト(10,000文字以上)を要約する場合、システムは自動的にテキストを分割して処理します。この場合:
- 処理時間が長くなる場合があります
- 要約結果が複数のチャンクから構成される場合があります
- 「チャンク数」が処理結果に表示されます
docker-compose logs -fdocker-compose down
rm -rf ./data/cache/*
docker-compose up -d本システムの要約機能はGoogle Gemini APIを使用しています。利用にあたっては以下の点に注意してください:
- API利用制限: Free Tierでは毎分60リクエスト、月間60,000リクエストの制限があります
- 料金体系: Free Tier以上の利用には料金が発生します(詳細はGoogle AI Studio Pricingを参照)
- 利用規約: Gemini APIの使用にはGoogle APIサービス利用規約が適用されます
- プライバシー: 処理されるデータはGoogleのプライバシーポリシーに準拠して取り扱われます
- モデル制限: モデルによって処理できるトークン数(文字数)が異なります
Gemini APIキーの取得方法:
- Google AI Studioにアクセス
- Googleアカウントでログイン
- 「Get API key」からAPIキーを作成
- 作成したキーを
.envファイルのGEMINI_API_KEYに設定
システムのコードは以下の主要なコンポーネントで構成されています:
-
API処理ロジック:
- リクエスト検証
- Python処理連携
- ファイル管理
- JSONレスポンス生成
-
Gemini API連携:
- API通信処理
- テキスト分析
- 長文処理の最適化
- フォーマット変換
-
ウェブインターフェース:
- ファイルアップロード
- 処理結果表示
- 履歴管理
- ユーザー設定
コードの主な改良ポイント:
- エラーハンドリングを強化し、より詳細なログ記録
- 重複コードの削減と関数のモジュール化
- 処理フローの明確化とコードの可読性向上
- リクエスト検証の強化
このプロジェクトは以下のオープンソースプロジェクトとAPIに支えられています:
各プロジェクトの開発者の皆様に感謝いたします。