33
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

クソアプリAdvent Calendar 2024

Day 23

「写真の顔を隠したい」「でもちゃんと区別がつくようにしたい」を実現するアプリを作りました

Last updated at Posted at 2024-12-23

こちらはクソアプリ - Qiita Advent Calendar 2024 23日目の記事です。

はじめに

このように顔を隠した写真をSNSで見ることがあると思います。

20240812_003126~3.jpg

しかし、スタンプで隠すとあまりに 誰が誰かわからない

とはいえ、「顔は出したくないんだよな……」 という気持ちもわかる。

なら、こうすればいいじゃないか。

1000014708_20241223121643.png
(4人中2人アイコンで顔が出ていないか?)

アプリについて

ということで、「Face Swapper」 というアプリを作りました。

以下はアプリの使い方です。

事前に顔とアイコンを保存しておく

残念ながらここは完全手オペです。そして、現在この画面は私側で管理しています。
つまり、アプリをリリースしているものの、顔ハメが適用されるのはここに登録している一部の方のみです。本当はユーザーが個別で登録できるようにしたい。

スクリーンショット 2024-12-23 21.22.45.png

集合写真をアップロードする

ユーザーが見れるのは、画像アップロード用のトップページと画像生成後画面のみです。

非同期処理とかにしているわけではないので、処理がわりと遅いです。途中で離脱したくなるかもしれませんが勘弁してください。

貼り付けた画像_2024_12_23_21_27.png

完成!

合成後写真がダウンロードできます。ぜひSNSで使ってください。

技術スタック

今回、機能が限定的なこともあってとてもシンプルです。

Amazon Rekognition

コアの部分です。CompareFacesを使いました。かなり精度が高かったので「もうこれだけでいいじゃん」となりました。
難点としては1対多の比較しかできないので、1つの画像に対してユーザー分N+1リクエストで判定しています。そのため、保存しているユーザー数が多ければ多いほど処理が重く長くなります。

Rekognitionは従量課金ですが、よっぽど使い倒さない限り数百円で収まりそうです。

MiniMagick

画像加工はMiniMagickを使いました。

  • アイコン画像をアップロードしたら丸く切り抜くようにする処理
  • アイコンを顔の上に重ねる処理

Rekognitionの返り値で、顔の位置情報も取得できるので、それを使ってアイコン画像を重ねるようにしています。素直に重ねるとアイコンが縦長になる(基本的に顔面は縦長なので)ので、アスペクト比が壊れないように調整しています。

Rails 8

Rekognitionを使って、ローカルで検証して動くことを確認したので、アプリ自体は手慣れたRailsで2日くらいで作りました。
あと、S3との連携に頭を使わなくてもいいので、ActiveStorageは楽です。

Render.com

最近はバックエンドがあるアプリをあまり作っていなかったので、いろいろな情報からデプロイが楽らしいというRender.comに登録しました。
無料なのでサクサクというわけではないですが、まあ許容範囲といったところです。放置するとスリープするため、UptimeRobotで定期的に起こすようにしています。

おわりに

アイデア自体は「わりといいのでは?」と思ったものの、いろいろと粗がある出来です。さすがに個人でも登録して使えるようにしたいので、それができ次第きちんとリリースをしたいです。

とはいえ、クソアプリハッカソン 2024をきっかけにアイデアを形にすることができたので、とても楽しかったです!

33
11
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
33
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?