5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

笑顔じゃなくなったらGoogle Meetから強制退出させられるchrome拡張機能を作った

Last updated at Posted at 2022-03-06

これはなに

先日参加したハッカソンにて作成したchrome拡張について語る記事。
ちなみに、chromeストアでの公開はしていません。

何を作ったのか

笑顔の間はGoogle Meetへの接続が継続され、笑顔が消えると切断されるchrome拡張。

ega_meet_extension_demo_resize.gif

技術構成

スクリーンショット 2022-02-28 19.01.07.png

  • chrome拡張
    • JavaScript
  • 笑顔判定API
    • (Docker)
      • ローカル環境汚したくなかった&ローカルでしか動かせない状態
    • Flask
    • OpenCV

ちなみに、自分がchrome拡張を担当し、APIは友人にお任せ状態。

以下、アイコン取得元。
(各アイコン毎にライセンス定められている系アイコン素材サイト)

思い出

どうやってchrome拡張で笑顔判定するか

chrome拡張単体というかjs単体で、顔検出して笑顔判定までできれば楽そうだし、face-api.jsという良さげなものあった。
しかし、Node.js使う必要性があり、Node.jsで作ったモノをchrome拡張に変換した際に上手く動くのかパッと予想できなかったため、不採用。
(変換さえできればNode.jsモジュールは全てchrome拡張で使えるのだろうか…?)

そのため、笑顔判定用APIを別途自作し、chrome拡張からはそのAPIを叩く方針に決定。

Google MeetのAPIが存在しない

笑顔判定すべき画像をいかに入手するか問題。
Google MeetにAPIが用意されていて通話中の動画を取得できれば楽だったが、そのようなものは見つけられず。

結局、ブラウザの画面をキャプチャし、キャプチャした内容を<video>タグに書き出し、動画を一時停止して<canvas>タグに画像を書き出す形を採用。

以下、参考にした記事。

笑顔判定の精度調整

笑顔判定API自体は友人が作ってくれたので、そのデバッグ要員として良さげに笑顔がされるまで笑顔と真顔を繰り返して数値調整。
エッジ検出して判定しているそうで、メガネなしで笑った方が精度良かった。

以下、参考にした記事。

しれっとchrome拡張manifest.jsonのv3が登場していた

情報追いかけてなかった自分に非があるが、chrome拡張の公式Docs見たら2021年1月からManifest V3がChromeストアでも利用可能になったらしい。
しかし、日本語の良さげな参考記事はv2を用いた内容のものが多かったので、v2を採用。
公式Docs読む際もv2のものを閲覧するように注意した。

chrome拡張での実装方法を検索しにくい

画面キャプチャの実装方法をググる際、「chrome拡張 画面キャプチャ」と検索すると画面キャプチャ用のchrome拡張が引っかかる。
そのため、chrome拡張はjsで書くことから、基本的にググる時は「js 画面キャプチャ」とするのが良さそう。

さいごに

今回初めてchrome拡張作ったが、想像以上にお手軽かつ色々とできそうなので、今後はchromeストアでの公開目指して何か作りたい。
今回作ったものを公開するかどうかは検討中…

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?