技術者ブログ(1) – PythonとOpenCVで顔を認識する

技術者ブログと題して社員が日ごろ取り組んでいる学習内容を紹介します。
第1回は、AIをテーマにしている第1ユニットです。

今回のテーマ
『画像の中から顔を判別する』

使用する言語 – Python

機械学習向けのライブラリなど環境が充実しており情報も集めやすいです。

使ったもの – OpenCV

OpenCV(正式名称: Open Source Computer Vision Library)は、オープンソースのコンピューター・ビジョン・ライブラリです。コンピューターで画像や動画を処理するのに必要な、さまざま機能が実装されており、BSDライセンスで配布されていることから学術用途だけでなく商用目的でも利用できます。加えて、マルチプラットフォーム対応されているため、幅広い場面で利用されていることが特徴です。

引用
https://www.buildinsider.net/small/opencv/001


OpenCVには画像の特徴から判断するためのライブラリがあらかじめ用意されています。(カスケード型分類器とか言ったりするらしい)

今回はそれを利用し、用意した画像から顔を認識させ、顔の部分だけ切り出した画像を出力するプログラムを作成します。

ソースコード(抜粋)

トライ&エラーの過程は省略させていただき、実際に作った内容をざっくりと書きます。

openCVのインポート

import cv2

カスケード型分類器に使用する分類器のデータ(xmlファイル)を読み込み

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt2.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

カスケード型分類器に使用する分類器のデータ(xmlファイル)を読み込みます。
今回は顔と目検出を行いたいため、上記2つのファイルを指定します。

カスケード型分類器を使用して画像ファイルから顔部分を検出する

faces = face_cascade.detectMultiScale(img, 1.02, 5)

顔検出を行います。検出に成功した場合は画像のサイズが出力されます。

検出部分を切り出して画像保存

x,y,w,h = item['frame']
face = rotated[y:y+h, x:x+w]
face = cv2.resize(face, (IMAGE_SIZE, IMAGE_SIZE))
web_path = '%s/%s_%s.jpg' % (out_dir, fn, item['face_id'])
out_file = '%s/%s' % (base_dir, web_path)
cv2.imwrite(out_file, face)


実際にやってみた

  

この画像を指定してプログラムを実行すると…

   ↓

顔だけ認識された画像が生成されました!

  作ってみた感想

検索すると沢山の情報がでてきて、案外簡単につくることができました。
実際にソースを書く部分より、PythonやOpenCVのインストールなどの環境構築のほうが苦戦したかもしれません。
みなさんも興味があれば挑戦してみてください。

ここから切り出した画像を使い、誰の顔か判定する仕組みを作ってみたりしましたが、この先の話はまた次の機会に書きたいと思います。

5月社内コンテスト告知!

弊社で開発中のカードゲーム『Hello World』のテストプレイを兼ねて、5月某日に社内で大会を開催します。

大会は実力勝負の個人戦です。
参加者特典もあるので、社員は奮って参加してください。

社外の方には、大会終了後に、このブログにて大会の様子や結果をお届けする予定です。

Hello World ※画像は開発中のものです


『Hello World』(ハローワールド) とは…

弊社で現在開発中のカードゲームです。
プログラム要素をヒントに、プログラミング学習を始める前のお子様からでも学んで遊べるゲームとして開発しています。
※具体的なゲーム内容はまだナイショです。製品版をお待ちください!

社員紹介(1)

ダンデライオンズのことを少しでも知っていただくため、
弊社の社員を毎月一人づつ紹介していきます。

1人目はSNS担当 べー です!

肩書
2018年度入社、肩書は第1ユニット サブリーダーです。

経歴
大学時代は経済学部で、プログラミングは入門の講義を少し齧った程度。
IT業界に就職し、現在社会人5年目。
Java,C#での開発とシステム保守(インフラ系)を2年ずつ経験しています。

現在の業務内容
Javaを使用してWebシステムの作成を行っています。

新しい技術を調べて取り込んでいくのは大変で、うまくいかないことも多いです。
また、自分で作ったモノを他人に見てもらうときはとても緊張します。
けれど、プログラムを書くのは楽しいですし、作ったものを、お客様に見せて納得していただたときにはとても嬉しく、自分の成長を実感できるので続けられています。

自己アピール
趣味はゲーム、読書、カメラ、ギター、自転車などです。
最近は『隻狼』というPS4のゲームにはまっています。

散歩中に撮った桜の写真です。自分で撮った写真なんかもアップしていきたいです。

以上、社員紹介1人目でした!
次回更新をお楽しみに

Hello world!

ダンデライオンズのブログの更新を始めました。
弊社の活動や雰囲気を更新していきます。
よろしくお願いいたします。