Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

More than 5 years have passed since last update.

HackDay2019に出場してSNSを薄めるChrome Extensionを作った話

Last updated at Posted at 2019-12-23

HackDay2019に出場して、SNSを薄めるChrome Extensionを作成してプレゼンをしたのですが、裏の仕組みはどうなっているのか聞きたい、という意見をちらほら頂けたので、振り返りの意味も込めてQiitaに投稿していきたいと思います。

つくったもの

Facebookの投稿内容を薄める拡張機能を作りました。
投稿したテキストの内容をいい感じに一言で表現して、さらに投稿された画像も抽象度の高い画像に変換して表示してくれます。

変換前
スクリーンショット 2020-01-03 14.30.05.png

変換後
スクリーンショット 2020-01-03 14.29.58.png

当日の発表の様子がYouTubeに公開されているので、ぜひ気になる方は見てください。
https://youtu.be/HNjXZwRTybU?t=13336

全体構成

今回作成したプロダクトの全体構成は以下の図のような感じです。
ここからはそれぞれの要素について解説していきたいと思います。

全体構成.png

Chrome Extension

Chrome Extensionでは以下を行います。

  • 投稿したテキストと画像情報をDOMから取得する

  • 取得した情報をテキスト変換API, 画像生成/配信APIに渡す

  • 変換前のテキストを変換後のテキストに書き換える

  • 画像生成APIを叩いて生成された画像の特徴タグと画像のパスを受け取る

  • 変換前の画像のパスを生成した画像のパスに置き換える

文章情報と画像情報の取得

Facebook上に投稿された画像の特徴情報として、今回はFacebookの自動代替テキストという機能を利用しました。

自動代替テキストは、物体認識技術を利用して、視覚に障がいを持つ方のために写真の説明を生成します。写真の自動代替テキストを編集する方法については、こちらをご覧ください

この機能を提供するために、Facebookの画像が置かれたimgタグのalt属性には画像の特徴を表すキーワードが格納されています。
今回は、このキーワードを利用することで画像の特徴を取得しました。

例えば、Facebookで以下のように画像を投稿すると、
screenshot.png
imgタグのalt属性には、画像の特徴を表す「1人」、「帽子」というキーワードが格納されています。

<img alt="画像に含まれている可能性があるもの:1人、帽子" width="500" height="468">

文章変換API

文章変換APIは以下をおこなうシンプルなREST APIです。

  • Chrome ExtensionからHTTPリクエストとして、投稿した文章データを受け取る

  • HTTPリクエストとして受け取った文章データを、自作した文章変換ライブラリに渡して変換された文章データを取得する

  • 変換された文章データをHTTPレスポンスとしてChrome Extensionに返す

自然言語処理周りのライブラリが豊富という点からPythonを利用することになったため、PythonのWebフレームワークであるFlaskを用いて実装しました。
Djangoなど別のWebフレームワークの選択肢もありましたが、実装を担当した自分がPythonの開発経験がほとんどなかったこと、APIとしてやりたいことがとてもシンプルだったことを考慮してより軽量なフレームワークを利用しました。

ソースコードはGitHubで公開しているので、詳細は以下を参照してください。
https://github.com/urashin/futakoburakuda/tree/master/textapi

画像生成/配信API

画像生成/配信APIの文章変換APIと同じく、以下をおこなうシンプルなREST APIです。

画像生成API

  • 画像の特徴タグの文字列を受け取り、画像生成モジュールに渡すパラメータに変換する

  • 変換対象の画像のパスをハッシュ化してユニークなファイル名を生成する

  • 画像生成モジュールに、パラメータと、生成したファイル名を渡し、画像をローカルに生成する

  • 生成した画像のファイル名をHTTPレスポンスとしてChrome Extensionに返す

画像配信API

  • パスパラメータで指定されたファイル名と一致するファイルを返す

画像生成/配信APIも文章変換APIと同じくFlaskを用いて実装しました。
ソースコードはGitHubで公開しているので、詳細は以下を参照してください。
https://github.com/urashin/futakoburakuda/tree/master/imgapi

文章変換ライブラリ

文章変換ライブラリの詳細は以下の記事にまとめてあります。
https://qiita.com/lipt03458/private/8c94b1bfff8d447d7a45

画像生成ライブラリ

画像生成ライブラリの詳細は以下の記事にまとめてあります。
https://qiita.com/urashin/private/580f842a19a90aee93ed

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?