cv2.destroyAllWindows(), [shell] cascade = cv2.CascadeClassifier(cascade_path), # 画像の読み込み [/shell], OpenCVで顔を判定し、判定された顔の座標を取得してpillowで切り抜き、縮小・拡大して再度貼り付けることでモザイク加工をする。 img_edit = Image.open("./image/yoshinobu.jpg"), # グレースケールに変換 (小さい値を指定し過ぎると顔っぽい小さなシミのような部分も判定されてしまう。) 数枚の正解画像で、なんとかなるものではありません。, 開発プロデューサーは、分類器作成を依頼するなら、その人の好き嫌いを十分配慮したほうがよいです。本当に。, 2次元画像(アニメキャラ)顔識別をOpenCVで手軽にやってみた | IT技術情報局. 前回は、静止画において顔検出器を使い、顔を認識することが出来ました。 今度は動画でリアルタイムに顔検出をさせたいと思います。 動画について. face[1]+face[3])), # 切り抜いた画像を1/20に縮小する。 こんにちは。最近、Webカメラやスマートフォンのカメラなどを取り上げているので、今回も似たようなことをしてみます。, 早速ですが、プログラムです。いくつかのサイトに載っているプログラムを参考にして、不要な箇所を削除するなどにより短くしています。, このプログラムでは、顔を認識したら、顔の範囲に枠を付けてその範囲にモザイクをかける処理をしています。. img_dst = np.asarray(img_edit), # 表示 cut_face = cut_face.resize(face[2:], Image.LINEAR), # 元の画像に加工した顔画像を貼り付ける。 プロジェクトの用意 [/shell], Mac,OpenCV,OpenCV3,pillow,python,python2,python3face,mosaic,OpenCV,OpenCV3,PIL,pillow,python,python2,python3,モザイク,顔判定. ヴィジ... こんにちは。前回は距離の考え方がいろいろあるということを確認しました。今回は、それらをプログラムで書いてみよ... こんにちは。最近、Webカメラやスマートフォンのカメラなどを取り上げているので、今回も似たようなことをしてみ... こんにちは。今日はJavaScriptでスマートフォンのカメラに写っているものを表示したり、停止したりしてみ... 情報科の目で見る数学科学習指導要領(4)Pythonでニュートン法と二分法(極限). もはや定番となってますが、顔検出のサンプルコード "samples/c/facedetect.cpp" をベースに、検出された顔の領域にモザイクをかけるようにしてみた。コードはgist:1148913へ。 本格的な画像処理や画像認識の機能をお手軽に試せてしまうの楽しい。 すごいぞ、OpenCV! [/python], のminSizeを(10, 10)にする。また、以下のように顔部分の縮小・拡大比率を変更する。, [python] pillowで開いた画像はそのままではOpenCVで開けないため、OpenCV用に変換して表示する。 こんにちは。今回は、Webカメラをつないで画面に表示するプログラムを紹介します。 CyberAgent Developers Advent Calendar 2017の14日目の記事です。 OpenCVとWebカメラでリアルタイム顔認識をする. for face in faces: # 顔を切り抜く 現在のフレームと以前フレームと比較するので、早歩きする場合は上記のように残像(移動量)が残ります。, この現象はcv2.accumulateWeightedのalphaパラメータを調整することで微調整が可能せです。, ちょっと昔、ARが一時的に流行った時に遊んでみた経験だけでこの空き状況を把握するプロジェクトにアサインされましたが、実は私も初心者です。その頃の記憶を辿りながらググりながらなんとなくプロジュエクトを進めています。, 改めて色々触りながら気づきましたが、OpenCVのごく一部機能でさらに数行だけで動体検知が出来るのはすごい。びっくりしました。, 本記事はシンプルに動体検知を行い、重要なソースコードだけ記載しましたが、最適化でGaussianBlurを利用して平滑化をしてノイズ除去したり、dilateを関数を使って膨張を行い輪郭を表示するときに計算が簡単になったりします。後ほどまた機会があれば続きでそこらへんもやってみたいと思います。, CyberAgentのエンジニア。CyberAgentの社内で困っていることや改善すべきことをシステム化して解決してます。ReactNative, Unityなどハイブリッド開発が好き。最近はMachine Learning勉強に夢中, CyberAgent Developers Advent Calendar 2017. img_edit = Image.open("./image/physicists.jpg"), #顔判定 img_src = cv2.imread("./image/yoshinobu.jpg", 1), # 結果を保存するための変数を用意しておく。 face[0]+face[2], WordPress Luxeritas Theme is provided by "Thought is free". [/shell], 今回も偉大なる物理学者の方々も顔判定してみる。 モノづくりが好きで、ブログでは電子工作やゴミ回収ロボットのことを書いています。, ゴミ回収ロボットを一緒に開発してくれる方がいらっしゃいましたらお問い合わせフォームからご連絡ください。, Kazuki Room ~電子工作・ロボット・3Dプリンター・RaspberryPi~, "C:\\OpenCV4.0.1\\sources\\data\\haarcascades\\haarcascade_frontalface_default.xml", Kazuki Room ~電子工作・ロボット・3Dプリンター・RaspberryPi~ by, 解決!「Arduino ‘read’ was not declared in this scope」というコンパイルエラーについて, Blenderと3Dプリンターを使用してミニ四駆を作ってみた!【3Dプリンターで出力可能な3Dデータを作ります!】, RaspberryPiとMJPG-Streamerでライブストリーミングをする方法, 保護中: C++でNon-local Means Filterを自作して画像のノイズを除去する, 保護中: pythonによる効果的な適応的二値化処理(adaptiveThreshold)について. 前回、人の顔を認識するテストに引き続き、今度は人物を特定するための分類器を自作したいと思います。, 斜め45度を向いている少年の画像を機械学習させ、分類器を作り、似たような角度で写っている少年の画像を認識させようと思います。, 正解画像と不正解画像をあわせて10,000枚くらい用意して、機械にひたすら学習させるようです。, そこまで頑張れないので、1枚の正解画像を変形させ、正解画像を量産する方法を取ります。, 具体的な分類器作成の流れは、「OpenCVで物体検出器を作成する⑤ ~createsamples~」を、参考とさせて頂きました。, 参考サイトを見ながら、正解画像を量産させる「opencv_createsamples.exe」を実行させようとしたのですが、PC内を検索しても見つかりません。, ファイル名からの推測ですが、OpenCV2.4.11環境を用意しないとダメそうです。, で、opencv: 2.4.11がインストールされます。(2017/8月時点では), これを「cleatesamples」で量産します。やり方は前述の参考サイトをご確認ください。, 私のディレクトリ構成だと、コマンドプロントでC:\traincascadeに移動して、下記の命令を実行します。, 正解画像が変形しながらが量産され、C:\traincascade\vecに「1.vec」という正解特徴データが生成されます。, C:\traincascade\cascade\trained_dataに、分類器のxmlが生成されます。, Python 3.6.1+OpenCV 3.3.0の環境に戻し、下記Pythonファイルを実行します。, 変なところも認識していますが・・・不正解画像の学習が、テントウムシとか8枚だけなので、仕方ないでしょう。, 人物特定の分類器を自作するには、大量の画像に向き合える根性が必要です。 cut_face = cut_face.resize((int(face[2]/20), int(face[3]/20)), Image.LINEAR), # 縮小した画像を本のサイズに戻す。 OpenCVにデフォルトで付属しているカスケードフィルターファイルは以下のとおり。haarcascade_eye.xmlh ... https://symfoware.blog.fc2.com/blog-entry-1556.html, 17~23行目で、認識した顔を加工しています。 19行目では認識した顔を縮小し、20行目で元のサイズに戻すことでモザイクにしています。 21・22行目は枠の色と太さを決めて、23行目で枠を付けています。, ここまで、簡単に認識できそうに書いてきましたが、実はカスケードファイルを読み込むところでハマりました。, はじめはGitHubに上がっているカスケードファイルを使っていました。ところが、どうやらそれがよくなかったようです。, 公式サイトからソースをダウンロード・解凍して、opencv-3.*. img_src = cv2.imread("./image/physicists.jpg", 1), # 結果を保存するための変数を用意しておく。 # -*- coding: UTF-8 -*-, # 画像の読み込み (opencv_python)$ python face_mosaic.py (小さい値を指定し過ぎると顔っぽい小さなシミのような部分も判定されてしまう。) """ faces = cascade.detectMultiScale(img_gray, scaleFactor=1.1, minNeighbors=1, minSize=(100, 100)). face[1], それでは少年の顔を特定できるか?自作分類器を試しましょう。 Python 3.6.1+OpenCV 3.3.0の環境に戻し、下記Pythonファイルを実行します。 席替えのシミュレーション あの席をただ一つねらっているんだよ(高校生が考えたモデル化とシミュレーション03). 顔の判定とモザイク加工. cv2.waitKey(0) """ import math import os sourceディレクトリにface_mosaic.pyを作成する。, [python title="face_mosaic.pyの内容"] 今回はOpenCVとWebカメラを使ってリアルタイムで顔認識をしてみます。 今回の構成 ・Windows7 64bit ・Webカメラ 「HD ウェブカメラ C270」 ・C++ ・OpenCV4.0.1 ・Visual Studio2017. img_edit.paste(cut_face, tuple(face[:2])), #pillow用のデータをOpenCVデータに変換 """ cut_face = cut_face.resize((int(face[2]/4), int(face[3]/4)), Image.LINEAR), [shell] source/image ディレクトリにphysicists.jpgを設置する。, [python] リアルタイムで顔にモザイクをかけるPythonと、画像処理のライブラリ「OpenCV」で、リアルタイムで顔にモザイクをかけます。OpenCVを使って、Webカメラから映像を取得します。取得した映像から、リアルタイムで顔にモザイクをかけていき (opencv_python)$ python face_mosaic2.py (opencv_python)$ pip install pillow Kazuki Room ~電子工作・ロボット・3Dプリンター・RaspberryPi~ from PIL import Image, # 顔判定で使うxmlファイルを指定する。 cut_face = cut_face.resize((int(face[2]/4), int(face[3]/4)), Image.LINEAR) Copyright © 2020 from umentu import stupid All Rights Reserved. WEBカメラに映った顔を認識してトラックしてみます. cv2.imshow("Show MOSAIC FACES Image", img_dst) """ 本日はOpenCVを利用して動画(カメラ)から動体検知をする方法について紹介したいと思います。, 全社システム本部はサイバーエージェント本体や、グループ会社の各種事業に対する技術支援など幅広い領域に手掛けることができる部署です。, 今回の記事は全社システム本部で色々積んできた業務経験の内、一つの業務経験を元にして記事にしました。みなさんの役に立ったらいいですね。, 今回のプロジェクトでは、カメラから画像情報を取り出し加工して空き状況を分析するというお仕事にアサインされたので、OpenCVを使いながら色々学んだ情報を共有したいと思います。, 本記事はOpenCVについての概要と開発環境の説明そして大まかな流れ説明しています。本記事を読む前にこちらのチュートリアルサイトの一読をおすすめします, OpenCV(Open Source Computer Vision Library)とはインテルが開発・公開したオープンソースのコンピュータビジョンライブラリーです。, 画像や動画を処理するのに必要な様々な機能が備わっています。いわゆる画像編集ツール機能が低水準で操作することが出来る素晴らしいライブラリーです。, 言語はJava、Python、C++などマルチプラットフォームなのでUnix系OS、Linux、Windows、Android、iOS等幅広くサポートしています。, 非公式ではC#, Go, Processing, Lua, Ruby, PHP, Haskellなどあります。, 物体認識、輪郭抽出、ノイズ除去、ぼかし、切り出し、フィルター処理、領域分割、特徴点抽出、回転など画像処理に関して盛りだくさんの機能が備わっています。, 最近は機械学習などでも利用されてコンピュータビジョンライブラリとして高い知名度を誇ります。, ※AVI動画をOpenCVで扱うにはcontribのffmpegを入れることをおすすめします。Python2やOpenCV2は大きく構造が違うのでご注意ください。, 画像をグレースケールにする一番大きい理由は彩度0にすることで不要な作業を減らすことができます。そして、OpenCVの2値化関数は入力にグレースケール画像を受け付けるため、カラー画像を2値化するなら、最初にグレースケール化を行う必要があります。, 常に現在のフレームと以前フレームと比較するため取っておく必要があります。現在のフレームと以前フレームは両方グレースケール画像です。, 現在のフレームと以前のフレームとの間の加重平均を累積して計算します。accumulateWeightedを毎フレーム実行することで精度を上げることができます。, 閾値を設定し、フレームを2値化します。cv2.thresholdこの処理によって画像が黒と白に分かれます。下の画像を参考にしてください。, 画像の輪郭抽出を行う場合には、cv2.findContoursという関数を使います。 [/python], [python title="face2.pyの内容"] https://algorithm.joho.info/machine-learning/haar-like-casca... haarcascade-・・・というファイルがいろいろありますが、これらの違いについて書いてあるページは次のリンク先にあります。, OpenCV 使用可能なCascadeClassifierの種類と効果 - Symfoware. 今回はOpenCVとWebカメラを使ってリアルタイムで顔認識をしてみます。 今回の構成 ・Windows7 64bit ・Webカメラ 「HD ウェブカメラ C270」 ・C++ ・OpenCV4.0.1 ・Visual Studio2017. import numpy as np Python+OpenCVで顔認識してみた ... 19行目では認識した顔を縮小し、20行目で元のサイズに戻すことでモザイクにしています。 21・22行目は枠の色と太さを決めて、23行目で枠を付けていま … faces = cascade.detectMultiScale(img_gray, scaleFactor=1.1, minNeighbors=1, minSize=(100, 100)) faces = cascade.detectMultiScale(img_gray, scaleFactor=1.1, minNeighbors=1, minSize=(10, 10)), # 切り抜いた画像を1/4に縮小する。 minSize で顔判定する際の最小の四角の大きさを指定できる。 Python, OpenCVでカスケード型分類器を使った顔検出と瞳検出(顔認識と瞳認識)を行う。以下に公式のチュートリアル(英語)がある。OpenCV: Face Detection using Haar Cascades ここでは、静止画: 画像ファイルを読み込んで顔検出と瞳検出 動画: カメラを使ってリアルタイムで顔検出と瞳検出 について …