Yell Striker 2025

https://github.com/0-s0g0/Giravanz-Hack

Next.js

Python

応援で盛り上げろ!

十河伶衣

松木薗弥也

下平稔明

推しアイデア

盛り上げ度はウチらが一番!リモートでも会場でもどこでも対戦可能なリアルタイム通信ゲーム

作った背景

"応援"というコンテンツにプラスαとなる対戦型ゲーム要素を提供し、より盛り上がりのある応援文化を創出したい!

推し技術

複数デバイス間でリアルタイムな画像・音声処理を実現!

プロジェクト詳細

Yell Striker 2025

「いざ応援でバトル!」

対戦型応援ゲームだよ! 応援中の歓声や表情をもとに、あなたの応援を点数化します。

概要

このアプリはデバイスのカメラ及びマイクから取得したデータを用いて、リアルタイムに画像・音声処理を行い応援の盛り上がりを数値的に評価するアプリケーションです。 その評価数値を用いた、対戦ゲームを提供します。

遊び方

  1. 対戦する「グループ数」と「時間」を入力しよう image
  2. 対戦グループにURLを送りつけよう(QRでも可)

image image 3. セッションを許可してね image 4. カメラが起動したら全力で応援📣📣 5. 結果はお楽しみに

使用技術

アプリケーション構成

  • フロントエンド TypeScript, Next.js(React)
  • バックエンド Python, FastAPI
  • インフラ Docker/Docker, Cloudeflare Tunnels

画像処理

image

  • OpenCV (顔検出:Haar Cascade Classifier) 顔検出: haarcascade_frontalface_default.xml , 非ディープラーニング手法(Haar特徴 + AdaBoost分類器)を採用。軽量かつリアルタイム処理に適した構成。Gaussian Blur 検出精度向上のためのノイズ除去。
  • Py-Feat (Facial Expression Analysis Toolbox) 内部で PyTorchベースの学習済みCNN(ResNet系) を使用。 AffectNet / FER2013 / Aff-Wild2 などの大規模表情データセットで学習されたValence–Arousal モデルを利用。 画像から感情価(Valence)と覚醒度(Arousal)を推定。 Arousalスコアリングロジック とは Arousal(-1〜+1)→ 0〜100(線形変換) 高スコアほど興奮・覚醒度が高い表情を意味する。

音声処理

  • sounddevice マイク入力からリアルタイム録音を行う。NumPy配列形式で音声データを取得。
  • scipy.io.wavfile WAVファイルの入出力を担当(録音結果の一時保存)。
  • NumPy 信号処理・振幅演算・FFT(高速フーリエ変換)を用いた周波数解析。)
  • クリップ補正 音圧信号がゼロ平均のガウス分布に従うと仮定し、マイクでとらえきれない高音圧帯の音を推測する。
  • Web Speech API 音声認識、文字起こしで採用。

評価指標

  • 表情(100点) Valence(感情価) 感情の正負(快/不快)を表す連続値(−1〜+1) Arousal(覚醒度) 感情の活動レベル(沈静〜興奮)を表す連続値(−1〜+1)
  • 音声(100点) 仮想dB値 聴覚上の音圧強度に近づけた値。 高周波成分率 高いほど興奮度が高いとみなす。
  • 総合評価 表情と音声の平均値。

技術的工夫点

  • 観測困難な音圧を統計的に予測
  • 単なる笑顔検出ではなく盛り上がりを評価するため重みつき平均で複数感情を統合
  • バイナリデータへ変換することでメモリコピーを最小化
  • リアルタイム双向通信のアーキテクチャ構成
  • 音声認識による柔軟なキーワードの採用
const keywordGroups = [ { image: logo.src, keywords: ['ギラヴァンツ', 'ギラ'] }, { image: sunzin.src, keywords: ['すんじん', '新人'] } ];

担当

  • アプリ構成:十河 伶衣
  • 顔検出・表情推定:松木薗 弥也
  • 周波数分析・音圧解析:下平 稔明

十河伶衣

@98aa691a657e77d6