wear用コーデ画像の顔隠し作業を自動化してみた
皆さん、WEAR(ウェア)ってご存知ですか?
WEARはファッションコーディネートサイトで、弊社サービスの一つです。
要するに各自のファッションコーディネートをシェアし合うSNSです。
そんなWEARの中で、理由はよくわからないですが、顔をアイコンなどで隠して投稿するのが流行っているみたいです。
顔が無い方がコーディネートを客観的に見れるからですかね?
ただ、顔隠す作業って意外にめんどくさく、これ自動化できたらいいな...と思い、アイコン自動配置のプログラムを実装してみました。
ソースコード
import os.path
import datetime
import cv2
import time
# 定数
# dataフォルダ
DATA_PATH = "data"
# resultフォルダ
RESULT_PATH = "result"
# カスケードパス
CASCADE_PATH = "haarcascade_frontalface_default.xml"
def main():
# カレントディレクトリを取得
current_path = os.getcwd()
icon_image_path = os.path.join(current_path, "icon.png")
icon_image = cv2.imread(cv2.samples.findFile(icon_image_path))
# dataディレクトリを取得
data_path = os.path.join(current_path, DATA_PATH)
# dataディレクトリを取得
result_path = os.path.join(current_path, RESULT_PATH)
# ディレクトリ直下のファイル一覧を取得
data_list = os.listdir(data_path)
for file in data_list:
# 処理時間計測タイマースタート
start = time.time()
# ファイルの拡張子を取得
file_name, ext = os.path.splitext(file)
# 拡張子がpng、jpegの場合
if ext == u'.png' or ext == u'.jpg' or ext == u'.jpeg':
# 画像を読み込む
input_path = os.path.join(data_path, file)
# 入力画像格納
image = cv2.imread(cv2.samples.findFile(input_path))
# グレースケール変換
image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# カスケード分類器の特徴量を取得する
cascade = cv2.CascadeClassifier(CASCADE_PATH)
face_rect = cascade.detectMultiScale(image_gray, 1.1, 3, 5)
if 0 < len(face_rect):
print("Face discovery")
for x, y, w, h in face_rect:
# 顔を隠す
image = put_icon(image, (x, y, x + w, y + h), icon_image)
else:
print("Face not found")
output_path = os.path.join(result_path, create_time_path(file_name, ".png"))
# 画像を保存
cv2.imwrite(output_path, image)
# 処理時間計測タイマーストップ
t = time.time() - start
print(output_path, ":", t)
# 時刻込みのユニークのファイルパスを出力する
def create_time_path(file_name, ext):
# 現在時刻を取得
time = datetime.datetime.now()
# パスを作成
path = file_name + time.strftime("%Y%m%d%H%M%S") + ext
return path
def put_icon(img, rect, icon_image):
# アイコンを被せる領域を取得
x1, y1, x2, y2 = rect
w = x2 - x1
h = y2 - y1
# アイコンを画像に重ねる
img2 = img.copy()
icon_image = cv2.resize(icon_image, (w, h), cv2.INTER_AREA)
img2[y1:y2, x1:x2] = icon_image
return img2
if __name__ == '__main__':
main()
実行結果
import os.path
import datetime
import cv2
import time
# 定数
# dataフォルダ
DATA_PATH = "data"
# resultフォルダ
RESULT_PATH = "result"
# カスケードパス
CASCADE_PATH = "haarcascade_frontalface_default.xml"
def main():
# カレントディレクトリを取得
current_path = os.getcwd()
icon_image_path = os.path.join(current_path, "icon.png")
icon_image = cv2.imread(cv2.samples.findFile(icon_image_path))
# dataディレクトリを取得
data_path = os.path.join(current_path, DATA_PATH)
# dataディレクトリを取得
result_path = os.path.join(current_path, RESULT_PATH)
# ディレクトリ直下のファイル一覧を取得
data_list = os.listdir(data_path)
for file in data_list:
# 処理時間計測タイマースタート
start = time.time()
# ファイルの拡張子を取得
file_name, ext = os.path.splitext(file)
# 拡張子がpng、jpegの場合
if ext == u'.png' or ext == u'.jpg' or ext == u'.jpeg':
# 画像を読み込む
input_path = os.path.join(data_path, file)
# 入力画像格納
image = cv2.imread(cv2.samples.findFile(input_path))
# グレースケール変換
image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# カスケード分類器の特徴量を取得する
cascade = cv2.CascadeClassifier(CASCADE_PATH)
face_rect = cascade.detectMultiScale(image_gray, 1.1, 3, 5)
if 0 < len(face_rect):
print("Face discovery")
for x, y, w, h in face_rect:
# 顔を隠す
image = put_icon(image, (x, y, x + w, y + h), icon_image)
else:
print("Face not found")
output_path = os.path.join(result_path, create_time_path(file_name, ".png"))
# 画像を保存
cv2.imwrite(output_path, image)
# 処理時間計測タイマーストップ
t = time.time() - start
print(output_path, ":", t)
# 時刻込みのユニークのファイルパスを出力する
def create_time_path(file_name, ext):
# 現在時刻を取得
time = datetime.datetime.now()
# パスを作成
path = file_name + time.strftime("%Y%m%d%H%M%S") + ext
return path
def put_icon(img, rect, icon_image):
# アイコンを被せる領域を取得
x1, y1, x2, y2 = rect
w = x2 - x1
h = y2 - y1
# アイコンを画像に重ねる
img2 = img.copy()
icon_image = cv2.resize(icon_image, (w, h), cv2.INTER_AREA)
img2[y1:y2, x1:x2] = icon_image
return img2
if __name__ == '__main__':
main()
実行後は見事にアイコンがフィット!!!
面倒だった作業があっという間に!!
アイコン画像が適当なのは気にしないでください...
最後に
顔認証の精度がそんなに良いわけではないので、写真によってはいくつもアイコンがセットされてしまうので、軽く使ってみるくらいが良いかもしれません。
Author And Source
この問題について(wear用コーデ画像の顔隠し作業を自動化してみた), 我々は、より多くの情報をここで見つけました https://qiita.com/ikeponsu/items/dab3b4a0ce47190c2659著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .