カテゴリー
データ可視化

バスケットボール中継のハイライト動画をPythonで作る

Python で NBAハイライト動画を自動生成するという記事が面白かったのでご紹介。

ゲームをまるごと観戦する暇がない時、ハイライト動画を見て済ますスポーツファンは多いでしょう。ハイライト動画は球団やテレビ局などが編集して出してきますが、必ず見られるわけでも、自分が見たい粒度のハイライト動画が必ずあるわけでもないかもしれません。

ノーム・エフラットさん(Noam Ephrat)が自分だけのハイライト動画を自動で作るために使ったのは、Python、NBA公式のAPI、録画したゲーム動画、OCRライブラリ。

NBAのAPI(参考) では何分何秒にどちらのチームの誰がどういうプレイをして、シュートが入ったとか外れたとかいうプレイバイプレイ(play-by-play, PBP)の情報が公開されています。日付、ゲームID、ピリオド(クオーター)を指定するとJSONが返ってきます。これが一つ目の要素。

https://data.nba.net/data/10s/prod/v1/20220201/0022100784_pbp_1.json

そして、録画した動画をフレームごとに切り出して、中継中に表示されたゲーム時計の部分を OCR ライブラリの Tesseract でピリオドやゲーム時間を抽出します。これが二つ目の要素

あとは、プレイバイプレイの重要シーンの発生した時刻に合わせて、動画のフレームを切り出し、切り出したところをつなげていくと、ゲームが動いたところだけがまとまったハイライト動画を作ることができたということ。

ざっと見てみて、プレイバイプレイのデータにあるところだけだと、どうしても点が増えたシュート成功の場面が多くなるのかな、とも思いましたが、人間が編集したハイライト動画でも成功シーンが多いので気のせいかもしれません。

作ったハイライト動画を公開するのは著作権的にだめだと思いますが、個人でハイライトを作って観るのは問題なさそうでは。

自分の基準で抜き出すところを選べるからには、

  • ひいきチームの得点シーンばかりを集めたり
  • 応援する特定の選手の絡むシーンだけを集めたり
  • 点差や時間を考えて、より劇的にゲームが動いたシーンだけを集めたり(これは人が編集する時と似た結果になるかも)
  • 自分の使える時間に応じてハイライト動画の長さを指定して変えたり

など、よりパーソナライズされたハイライト動画を作れる可能性もありますね。

バスケットボールという競技が特に時計が重要で、常時正確な時刻が中継に表示されていることや、APIで提供されるゲームログにも時刻情報がふんだんに含まれているという点も、うまく自動生成にマッチしているというのもありそうですね。

カテゴリー
ネットのサービス

Phonetic Bad Word Filter – 読むと不適切に聴こえる文章をフィルタしてくれるAPI

Phonetic Bad Word Filter API は、字面では一見問題なさそうに見えるが、声に出して読み上げるとヤバイ単語に聴こえてしまう文章や、スペルをわざと間違えることでテキスト合致によるフィルタをすり抜けようとする侮辱語などを発見してブロックするための API です。

API は RapidAPI のサービスで提供されていて、無料枠の利用でもクレジットカードの登録が必要です。

APIの呼び出しサンプルでは、実際のヘイトな単語を使うわけにはいかないので “car” という単語がまずい単語だと見立てて、”kar” という似たような発音になる綴りで置き換えても”car”を検知できますよ、というものになっています。

実際にはここに、いわゆるNワードなどを検知するように指定するということですね。

APIの使い道

APIの作者はもともと、Talking Banana(話すバナナ)というアイデアで、バナナの形の人形に YouTube や Twitch での中継中に視聴者のコメントを自動読み上げさせていたようです。

しかし、入力した結果が大勢の人に見られているライブ動画ですぐ読み上げられるとなると、出てくるのがイタズラ。特に侮辱後や人種差別にあたる言葉をわざと打ち込むというイタズラが登場してしまいました。

ヘイトスピーチにあたるような単語をブラックリスト登録することで、元の文に問題のある単語が直接含まれている場合は読み上げがされないよう対処できたのですが、イタズラする方に「機械に喋らせたら、問題のある単語に聴こえるような別の単語の組み合わせ」を入れてくる人が現れたんだそう。

単語一つだけでも、機械に合成させたら禁止ワードに聴こえる組み合わせをリスト化するのは大変そうです。さらに、単語単位での置き換えではなく、ひとつながりの複数の単語の並びの中に、喋ってみたら禁止ワードが聴こえてしまう、というようなものについて、事前にブロックリストを作るのはかなり難しいことでしょう。

喋らせてみたらまずいかも、という入力を実際に合成させた音をチェックさせるというアイデア、誤検出もありそうには思いますが前記のような用途であれば、ファンの入れた単語が間違って読み上げられなくてもそこまで大きな問題ではないのでしょう。

ユーザー入力をそのまま使うサービスというのは攻撃の対象になりやすいもので、できれば作らない方が楽だとは思います。しかし参加者のフィードバックが表示されることの価値も多いんでしょうね。今回の話は、技術と工夫で一旦はイタズラに勝った、という話で、いつもこういう勝ち筋があるといいのですが。

via reddit

カテゴリー
ネットのサービス

YouTube の低評価(dislike)を取り戻すブラウザ拡張/スクリプト Return YouTube Dislike Count

Return youtube dislike countは、名前が示すとおり、YouTube 上での動画への低評価情報が今後隠されてていくのに対し、dislike 数の表示を復活させようというプロジェクトです。

評判が悪かったり出来の悪い動画を見分ける方法として使われていたであろう「低評価の数」ですが、嫌がらせで多数押されるケースなどがあり表示しないようにした、というのがYouTube の説明です。

これにより、動画のオーナー以外は dislike の数を知る方法がなくなります。

Return youtube dislike countは、この dislike 数の表示を元通りに復活させるブラウザ拡張になります。

このブラウザ拡張(Chrome, Firefox)や User Script を入れることで、dislike数が隠された動画においても、dislike 数が元通り表示されるようになります。少なくとも今は。

拡張作者はオリジナルの like/dislike 形式だけでなく、棒グラフで like/dislike の比率を見せるような表示形式も考えているとか。YouTube の方針とは異なり、dislike 数をより素早く確認することもできるかもしれませんね。

拡張を入れて実際に dislike を復活表示させてみようとしたのですが、まだ dislike の数字が消えた動画ってないですね。dislike 表示の無効化は地域やユーザー毎に少しずつ行われていくのかもしれません。

このブラウザ拡張の今現在の仕組みは、「YouTube 公式APIを呼ぶ」というもの。

しかし、12月13日からは API でも(動画の所有者以外は)dislike数を取れなくなるということなので、これだけでは1か月後には動かなくなってしまうでしょう。そこで、それまでの間に API 経由で取得した dislike数を自前のAPIサービスでキャッシュしていくのだとか。APIが止まった後の dislike は、まずはこのキャッシュされた数になりそうです。

そしてその後は、この拡張機能自体が dislike が押されたという情報を(YouTube本体にも送ると思いますが、)独自にカウントしていくようにする。拡張機能を使うユーザーがそれなりにいれば、dislike 数については YouTube 公式が集計しているdislike とは独立して dislike のデータベースが出来上がるということですね。

そんなにうまくいくかな、サーバ代も大変そうだし。と思ってしまいますが、拡張ユーザーだけで独自の dislike DB が意味のあるレベルで成立するかは、API で取れなくなるまでの期間にユーザーをどれだけ増やせるかに掛かってるといえるでしょう。

Firefox拡張の方は公式の拡張機能ストアに登録され簡単にインストールできますが、Chrome拡張は自分でダウンロードして設定からインストールする必要があります。拡張の性質上、Chrome Storeの審査は通りにくいかもしれませんね。

via reddit