LoginSignup
1
2

More than 1 year has passed since last update.

データセット用の顔画像をすぐに用意したい iPhoneの写真から、顔だけを数秒で100枚切り出す

Last updated at Posted at 2022-01-12

iPhoneのフォトライブラリから、顔だけを切り出す方法です

データセットを用意するのは大変

たとえば機械学習などで、データセットとして顔写真や人体の写真が数千枚必要なケースがあります。
しかし、手動で顔写真を切り出すのは大変です。

手元のiPhoneの写真が使えたら便利

たいていの人のiPhoneには、人の写っている写真が数百〜数千枚はあるでしょう。
それらの写真の顔だけを抽出できれば、迅速なデータセット作成に活かせそうです。

SemanticImageでiPhoneの写真を高速処理できる

SemanticImageというライブラリを使えば、高速で写真から顔だけを切り抜けます。

手順

SwiftPackageManagerでSemanticImageをインストール。

let semanticImage = SemanticImage()

PhPickerでiPhoneのフォトライブラリから、複数写真を選択します。

Personで検索すると、人の画像だけ切り抜きにかけられて便利です。

var configuration = PHPickerConfiguration()
configuration.selectionLimit = 0 // 選択する写真の数を無制限にする
configuration.filter = .images
let picker = PHPickerViewController(configuration: configuration)
picker.delegate = self
present(picker, animated: true)

取得した写真をSemanticImageの顔切り抜き機能にかけます。

func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
    picker.dismiss(animated: true)

    for result in results { // フォトライブラリから取得した写真を順次処理
        if result.itemProvider.canLoadObject(ofClass: UIImage.self) {
            result.itemProvider.loadObject(ofClass: UIImage.self) { [weak self] image, error  in
                if let image = image as? UIImage,  let safeSelf = self {
                    DispatchQueue.main.async {
                        if let faceImage = safeSelf.sematicImage.faceRectangle(uiImage: image) { // 顔を切り抜く
                            UIImageWriteToSavedPhotosAlbum(maskImage, nil, nil, nil) // フォトライブラリに保存
                        }
                    }
                }
            }
        }
    }
}

これで、切り抜かれた顔の画像がフォトライブラリに保存されます。
100枚程度だと、14秒で処理でき、メモリとCPU使用量も安全です(iPhone11)。
(数千枚一気に処理すると、画像データを保持しきれず、メモリがオーバーするので、数百枚ずつ処理するのが良さそうです)

添付画像は全部マスクしてデータとしては意味ない感じですが、著者は照れ屋なので、すみません。

全身データや、犬、猫のデータにも

SemanticImageは、全身やペットを検出して切り抜く機能もあるので、さまざまなデータ作成に活かせます。

🐣


フリーランスエンジニアです。
お仕事のご相談こちらまで
rockyshikoku@gmail.com

Core MLやARKitを使ったアプリを作っています。
機械学習/AR関連の情報を発信しています。

Twitter
Medium

1
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
1
2