Skip to content

suupoo/shoki

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SHOKI:音声文字起こしシステム

AI技術を活用して音声を文字起こしする「SHOKI」システムです。会議や講義の録音から簡単に文字起こしを生成し、AIによる要約・文章補正機能も利用できます。

主な機能

  • 音声文字起こし: OpenAI Whisperを使用した高精度な音声認識
  • 話者ラベル: 会議の参加者ごとにセリフを分類
  • AI文章補正: 文字起こし結果を自然な文章に補正(Gemini AI)
  • AI要約生成: 文字起こし内容の要点をまとめた要約を生成(Gemini AI)
  • 複数フォーマット: 標準、箇条書き、会議議事録など様々な形式で要約
  • 独立要約ツール: 任意のテキストを要約できる専用ツール
  • 履歴管理: 過去の文字起こし結果を参照・再利用
  • 結果エクスポート: テキスト、Markdown、CSVなど様々な形式での保存

1. 必要な環境

  • Docker および Docker Compose
  • 4GB以上のRAM
  • インターネット接続(初回のモデルダウンロード用)
  • Gemini APIキー(要約機能を使用する場合)

2. セットアップ手順

  1. リポジトリをクローンまたはファイルをダウンロード
git clone https://github.com/suupoo/shoki.git
cd shoki
  1. 環境設定

.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 から選択
  1. Dockerコンテナのビルドと起動
docker-compose up -d
  1. 初回起動時の注意点
  • 初回起動時には、Whisperモデルがダウンロードされるため、数分〜数十分かかることがあります
  • ダウンロードの進行状況はログで確認できます:docker-compose logs -f

3. 使用方法

音声文字起こし

  1. ブラウザでアクセス:http://localhost:9999
  2. 音声ファイルをアップロードし、必要に応じてオプションを設定
  3. 「処理を開始」ボタンをクリックして文字起こしを実行
  4. 処理完了後、結果を確認・ダウンロード

AI要約機能

  1. 文字起こし後、「要約」タブをクリック
  2. 要約フォーマットとモデルを選択
  3. 「生成」ボタンを押すと、AIによる文章補正と要約が行われます
  4. 結果をコピーまたはダウンロード可能

要約フォーマット

  • 標準形式: 段落形式の要約
  • 箇条書き形式: 要点をリスト形式で整理
  • 見出し形式: トピックごとに見出しと説明で整理
  • Q&A形式: 質問と回答の形式でまとめ
  • エグゼクティブサマリー: ビジネス文書向けの簡潔な要約
  • 会議議事録形式: 開催日、参加者、内容、タスクを構造化

独立要約ツール

  1. トップページの「テキスト要約ツール」リンクをクリック(または直接 http://localhost:9999/summarize.php にアクセス)
  2. 要約したいテキストを入力
  3. フォーマットとモデルを選択して「要約する」ボタンをクリック
  4. 結果をコピーまたは保存

履歴の利用

  1. トップページの「履歴を表示」ボタンをクリック
  2. 過去の文字起こし一覧から選択
  3. 「読み込む」ボタンで過去のデータを表示
  4. 文字起こし結果や要約を確認、必要に応じて新たに要約を生成

4. システム仕様

対応音声フォーマット

  • MP3, WAV, M4A, OGG
  • 最大ファイルサイズ: 500MB

音声認識モデルサイズと性能

  • tiny: 最も軽量、低精度(低スペックPCに最適)
  • base: 軽量、やや低精度
  • small: 中程度のサイズと精度
  • medium: バランスの取れた精度と処理速度(推奨)
  • large: 最高精度、高負荷

Gemini AIモデル

  • gemini-1.5-flash: 高速処理向け(推奨)
  • gemini-1.5-pro: 高精度処理向け(複雑な会議議事録等に最適)
  • gemini-pro: 旧モデル(安定性重視)

メモリ要件

  • 文字起こし: 2GB以上のRAM
  • 要約処理: 特に追加要件なし

5. システム構成

ディレクトリ構造

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.php

  • API機能を提供する中核ファイル
  • 文字起こしリクエストを処理する機能
  • 要約リクエストの処理
  • 履歴管理と文字起こしデータの読み込み
  • エラーハンドリングとログ記録
  • ZIPアーカイブの作成

gemini_helper.php

  • Gemini APIとの通信機能
  • テキスト分割と大規模テキスト処理
  • 文章補正と要約の処理ロジック
  • 複数フォーマットの要約テンプレート管理

summarize.php

  • 独立した要約ツールのインターフェース
  • Gemini APIを使用した要約生成
  • 複数フォーマットでの要約オプション

index.php

  • ウェブインターフェースの提供
  • ファイルアップロードと要約フォーム
  • 処理結果の表示と履歴管理

6. トラブルシューティング

一般的な問題

  • エラー「メモリ不足」: モデルサイズを小さくする
  • 処理が遅い: より小さいモデルサイズを選択
  • 特定の言語での精度が低い: 適切な言語コードを指定
  • NumPyエラー: Dockerfileの依存関係バージョンを確認・修正
  • 「APIキーが設定されていません」: .envファイルにGemini APIキーを設定
  • 要約中の500エラー: 非常に長いテキストの場合は複数回に分けて要約

長いテキストの処理

非常に長いテキスト(10,000文字以上)を要約する場合、システムは自動的にテキストを分割して処理します。この場合:

  • 処理時間が長くなる場合があります
  • 要約結果が複数のチャンクから構成される場合があります
  • 「チャンク数」が処理結果に表示されます

ログの確認

docker-compose logs -f

キャッシュのクリア

docker-compose down
rm -rf ./data/cache/*
docker-compose up -d

7. Gemini API利用について

本システムの要約機能はGoogle Gemini APIを使用しています。利用にあたっては以下の点に注意してください:

  • API利用制限: Free Tierでは毎分60リクエスト、月間60,000リクエストの制限があります
  • 料金体系: Free Tier以上の利用には料金が発生します(詳細はGoogle AI Studio Pricingを参照)
  • 利用規約: Gemini APIの使用にはGoogle APIサービス利用規約が適用されます
  • プライバシー: 処理されるデータはGoogleのプライバシーポリシーに準拠して取り扱われます
  • モデル制限: モデルによって処理できるトークン数(文字数)が異なります

Gemini APIキーの取得方法:

  1. Google AI Studioにアクセス
  2. Googleアカウントでログイン
  3. 「Get API key」からAPIキーを作成
  4. 作成したキーを.envファイルのGEMINI_API_KEYに設定

8. 開発者向け情報

コード構成

システムのコードは以下の主要なコンポーネントで構成されています:

  1. API処理ロジック

    • リクエスト検証
    • Python処理連携
    • ファイル管理
    • JSONレスポンス生成
  2. Gemini API連携

    • API通信処理
    • テキスト分析
    • 長文処理の最適化
    • フォーマット変換
  3. ウェブインターフェース

    • ファイルアップロード
    • 処理結果表示
    • 履歴管理
    • ユーザー設定

コード改良

コードの主な改良ポイント:

  • エラーハンドリングを強化し、より詳細なログ記録
  • 重複コードの削減と関数のモジュール化
  • 処理フローの明確化とコードの可読性向上
  • リクエスト検証の強化

謝辞

このプロジェクトは以下のオープンソースプロジェクトとAPIに支えられています:

各プロジェクトの開発者の皆様に感謝いたします。

About

Dockerとwhisperを使ったローカル文字起こしシステム

Resources

License

Stars

Watchers

Forks