WordPress Luxeritas Theme is provided by "Thought is free". プロジェクトの用意 OpenCVで顔を判定し、判定された顔の座標を取得してpillowで切り抜き、縮小・拡大して再度貼り付けることでモザイク加工をする。 pillowで開いた画像はそのままではOpenCVで開けないため、OpenCV用に変換して表示する。 10個できましたが、cascade.xmlしか使わなそうです。 cascade.xmlの容量は5KB。・・・軽い。 自作分類器で顔認識のテスト. face[1]+face[3])), # 切り抜いた画像を1/20に縮小する。 WEBカメラに映った顔を認識してトラックしてみます. リアルタイムで顔にモザイクをかけるPythonと、画像処理のライブラリ「OpenCV」で、リアルタイムで顔にモザイクをかけます。OpenCVを使って、Webカメラから映像を取得します。取得した映像から、リアルタイムで顔にモザイクをかけていき for face in faces: # 顔を切り抜く faces = cascade.detectMultiScale(img_gray, scaleFactor=1.1, minNeighbors=1, minSize=(100, 100)). Webカメラ... こんにちは。引き続き今回も暗号についての内容です。今回はヴィジュネル暗号について取り上げます。 minSize で顔判定する際の最小の四角の大きさを指定できる。 img_dst = np.asarray(img_edit), # 表示 img_src = cv2.imread("./image/physicists.jpg", 1), # 結果を保存するための変数を用意しておく。 WordPress Luxeritas Theme is provided by "Thought is free". 席替えのシミュレーション あの席をただ一つねらっているんだよ(高校生が考えたモデル化とシミュレーション03). import numpy as np 本日は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という関数を使います。 ヴィジ... こんにちは。前回は距離の考え方がいろいろあるということを確認しました。今回は、それらをプログラムで書いてみよ... こんにちは。最近、Webカメラやスマートフォンのカメラなどを取り上げているので、今回も似たようなことをしてみ... こんにちは。今日はJavaScriptでスマートフォンのカメラに写っているものを表示したり、停止したりしてみ... 情報科の目で見る数学科学習指導要領(4)Pythonでニュートン法と二分法(極限). img_edit = Image.open("./image/physicists.jpg"), #顔判定 """ cascade_path = os.path.dirname(os.path.abspath(__file__)) + "/haarcascades/haarcascade_frontalface_alt.xml" 前回は、静止画において顔検出器を使い、顔を認識することが出来ました。 今度は動画でリアルタイムに顔検出をさせたいと思います。 動画について. """ import os 前回は、静止画において顔検出器を使い、顔を認識することが出来ました。今度は動画でリアルタイムに顔検出をさせたいと思います。, まず動画は、静止画をパラパラアニメのように高速で映し出すことでスムーズに動いているように見えます。 その1コマの静止画をフレームといい、1秒間あたりに表示されるフレームの数によって表示速度(動きのなめらかさ)を表します。通常、テレビ等は30fps(frame per second:1秒間に30コマ)で表示されています。, ここに前回、使用した顔検知のプログラムを追加します。動画の場合は、高速な処理が要求されるため、カスケード型の識別器を利用することが多いです。今回は顔を自動的にモザイク処理する処理も追加してみました。, 自動的に顔にモザイクが掛かっています。ただし、顔検知が正面顔の検知しかしないため、横顔や後ろを向くとモザイクがはずれてしまいます。横顔検知の検出器を組み合わせると横顔も隠せそうですね。, 今回は動画の読込み処理を行い、リアルタイムに顔検知を行い、画像処理(モザイク処理)を行いました。動画を複数毎の静止画の集まりと考えれば、それほど複雑ではなく、他の画像処理を組み合わせることで色んな事が出来そうです。アプリ等で自動的に猫耳が付いたり、顔を盛れるのも顔検知と画像処理を組み合わせて行っていることがわかりました。次回は、YOLOを利用した物体検知を行ってみたいと思います。, (第5回)Python + OpenCV で遊んでみる(YOLOを用いた物体検出編). OpenCVとWebカメラでリアルタイム顔認識をする. pillowで開いた画像はそのままではOpenCVで開けないため、OpenCV用に変換して表示する。 Python, OpenCVでカスケード型分類器を使った顔検出と瞳検出(顔認識と瞳認識)を行う。以下に公式のチュートリアル(英語)がある。OpenCV: Face Detection using Haar Cascades ここでは、静止画: 画像ファイルを読み込んで顔検出と瞳検出 動画: カメラを使ってリアルタイムで顔検出と瞳検出 について … cut_face = img_edit.crop((face[0], 現在のフレームと以前フレームと比較するので、早歩きする場合は上記のように残像(移動量)が残ります。, この現象はcv2.accumulateWeightedのalphaパラメータを調整することで微調整が可能せです。, ちょっと昔、ARが一時的に流行った時に遊んでみた経験だけでこの空き状況を把握するプロジェクトにアサインされましたが、実は私も初心者です。その頃の記憶を辿りながらググりながらなんとなくプロジュエクトを進めています。, 改めて色々触りながら気づきましたが、OpenCVのごく一部機能でさらに数行だけで動体検知が出来るのはすごい。びっくりしました。, 本記事はシンプルに動体検知を行い、重要なソースコードだけ記載しましたが、最適化でGaussianBlurを利用して平滑化をしてノイズ除去したり、dilateを関数を使って膨張を行い輪郭を表示するときに計算が簡単になったりします。後ほどまた機会があれば続きでそこらへんもやってみたいと思います。, CyberAgentのエンジニア。CyberAgentの社内で困っていることや改善すべきことをシステム化して解決してます。ReactNative, Unityなどハイブリッド開発が好き。最近はMachine Learning勉強に夢中, CyberAgent Developers Advent Calendar 2017. [/shell], 今回も偉大なる物理学者の方々も顔判定してみる。 cut_face = cut_face.resize((int(face[2]/4), int(face[3]/4)), Image.LINEAR) face[0]+face[2], [amazonjs asin="4061538225″ locale="JP" title="OpenCVによる画像処理入門 (KS情報科学専門書)"], 顔判定の時の徳川慶喜(yoshinobu.jpg)を使った。wikipediaから拝借して、source/imageディレクトリにyoshinobu.jpgファイルを設置しておく。, OpenCVでは一部の画像の加工をスマートにやる方法が見つからなかったため、pillowを使った。, [shell title="pillowのインストール"] minSize で顔判定する際の最小の四角の大きさを指定できる。 """ もはや定番となってますが、顔検出のサンプルコード "samples/c/facedetect.cpp" をベースに、検出された顔の領域にモザイクをかけるようにしてみた。コードはgist:1148913へ。 本格的な画像処理や画像認識の機能をお手軽に試せてしまうの楽しい。 すごいぞ、OpenCV! 今回はOpenCVとWebカメラを使ってリアルタイムで顔認識をしてみます。 今回の構成 ・Windows7 64bit ・Webカメラ 「HD ウェブカメラ C270」 ・C++ ・OpenCV4.0.1 ・Visual Studio2017. source/image ディレクトリにphysicists.jpgを設置する。, [python] sourceディレクトリにface_mosaic.pyを作成する。, [python title="face_mosaic.pyの内容"] cv2.imshow("Show MOSAIC FACES Image", img_dst) cv2.waitKey(0) 電子工作やロボットの情報をメインに発信していきます!, ・Windows7 64bit・Webカメラ 「HD ウェブカメラ C270」・C++・OpenCV4.0.1・Visual Studio2017, Visual Studioを起動して「新規作成」→「プロジェクト」を選択します。「空のプロジェクト」を選択して名前を設定します。今回は「detectFacefromCamera」にします。, プロジェクトができたら「ソースファイル」を右クリックして「新しい項目の追加」から「detectFacefromCamera.cpp」を追加します。, 「detectFacefromCamera.cpp」に以下のソースをまるっとコピーして貼り付けます。パスはカスケードファイルが格納されているところを指定してください。, プロパティマネージャーの「detectFacefromCamera」をダブルクリックしてビルドに必要なプロパティの設定をしていきます。, プルダウンで「Release」「x64」を選択して「実行」ボタンを押下します。こちらは先程のプロパティの設定と合わせてください。私は64bitを使用しているので「x64」を選択します。WebカメラはあらかじめPCのUSBポートに接続しておきます。, 思っていたよりスムーズに顔認識してくれてよかったです。正面の顔は認識されますが、横顔とかだとあまり認識されないようです。ここまでは比較的簡単にできたのでもっと改良していきたいと思います。, KAZUKIです。 OpenCVにデフォルトで付属しているカスケードフィルターファイルは以下のとおり。haarcascade_eye.xmlh ... https://symfoware.blog.fc2.com/blog-entry-1556.html, 17~23行目で、認識した顔を加工しています。 19行目では認識した顔を縮小し、20行目で元のサイズに戻すことでモザイクにしています。 21・22行目は枠の色と太さを決めて、23行目で枠を付けています。, ここまで、簡単に認識できそうに書いてきましたが、実はカスケードファイルを読み込むところでハマりました。, はじめはGitHubに上がっているカスケードファイルを使っていました。ところが、どうやらそれがよくなかったようです。, 公式サイトからソースをダウンロード・解凍して、opencv-3.*. img_edit.paste(cut_face, tuple(face[:2])), #pillow用のデータをOpenCVデータに変換 [/shell], OpenCVで顔を判定し、判定された顔の座標を取得してpillowで切り抜き、縮小・拡大して再度貼り付けることでモザイク加工をする。 こんにちは。最近、Webカメラやスマートフォンのカメラなどを取り上げているので、今回も似たようなことをしてみます。, 早速ですが、プログラムです。いくつかのサイトに載っているプログラムを参考にして、不要な箇所を削除するなどにより短くしています。, このプログラムでは、顔を認識したら、顔の範囲に枠を付けてその範囲にモザイクをかける処理をしています。. opencv 3.3.1; Macの場合はbrewで手軽に環境構築が出来るのでおすすめします。 ※AVI動画をOpenCVで扱うにはcontribのffmpegを入れることをおすすめします。Python2やOpenCV2は大きく構造が違うのでご注意ください。 動画(カメラ)から動体検知する流れ 元画像(加工前) import math img_edit = Image.open("./image/yoshinobu.jpg"), # グレースケールに変換 # -*- coding: UTF-8 -*-, # 画像の読み込み """ img_src = cv2.imread("./image/yoshinobu.jpg", 1), # 結果を保存するための変数を用意しておく。 実行環境は前回と同じです. ・macOS Mojave 10.14.5 ・Python 3.6.8 ・opencv-python-4.1.0.25. 数枚の正解画像で、なんとかなるものではありません。, 開発プロデューサーは、分類器作成を依頼するなら、その人の好き嫌いを十分配慮したほうがよいです。本当に。, 2次元画像(アニメキャラ)顔識別をOpenCVで手軽にやってみた | IT技術情報局. MacbookAirのカメラで顔が写ったらモザイク加工(Python3+OpenCV3+PIL), Facebook で共有するにはクリックしてください (新しいウィンドウで開きます), MacbookAirのカメラで顔が写ったら顔のエッジ抽出(Python3+OpenCV3+PIL), MacbookAirのカメラで顔が写ったら顔をネガポジ変換(Python3+OpenCV3+PIL), MacbookAirのカメラで顔が写ったら顔を笑い男マーク(Python3+OpenCV3+PIL), プログラミングのハードルの高いところは「英語」ではない。「人に教える能力」である。, HTML5 formとinputを分けて記述する方法 | from umentu import stupid, 【Nuxt.js】@nuxtjs/dotenvと@nuxtjs/axiosでBaseURLの設定が必要ない話, NuxtJSでdotenvを利用してaxiosのホスト設定をする – My Tech Log, 最強のFish Shell環境 - Fisher + ghq + peco で最強のgit環境 | from umentu import stupid, PythonとSlackでtipsボットを作る4【受けとったtipsを管理する】|24才からIT企業. cut_face = cut_face.resize((int(face[2]/4), int(face[3]/4)), Image.LINEAR), [shell] [/python], [python title="face2.pyの内容"] モノづくりが好きで、ブログでは電子工作やゴミ回収ロボットのことを書いています。, ゴミ回収ロボットを一緒に開発してくれる方がいらっしゃいましたらお問い合わせフォームからご連絡ください。, 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)について. (opencv_python)$ pip install pillow # 切り抜いた画像を1/4に縮小する。 Python+OpenCVで顔認識してみた ... 19行目では認識した顔を縮小し、20行目で元のサイズに戻すことでモザイクにしています。 21・22行目は枠の色と太さを決めて、23行目で枠を付けていま … [/shell], Mac,OpenCV,OpenCV3,pillow,python,python2,python3face,mosaic,OpenCV,OpenCV3,PIL,pillow,python,python2,python3,モザイク,顔判定. face[1], faces = cascade.detectMultiScale(img_gray, scaleFactor=1.1, minNeighbors=1, minSize=(100, 100)) # 複数の顔があった場合、1つずつ四角で囲っていく 前回は、静止画において顔検出器を使い、顔を認識することが出来ました。 今度は動画でリアルタイムに顔検出をさせたいと思います。 動画について. Kazuki Room ~電子工作・ロボット・3Dプリンター・RaspberryPi~ cut_face = cut_face.resize((int(face[2]/20), int(face[3]/20)), Image.LINEAR), # 縮小した画像を本のサイズに戻す。 Releases Skip to primary navigation Skip to main content OpenCV Open Computer Vision Library Abo ... 実行結果は、次のようになりました。実はスクリーンショットはうまく顔を認識しているところで取っていますが、認識しなかったり違う部分が誤認識されてしまったりということはあります。. (opencv_python)$ python face_mosaic.py 顔の判定とモザイク加工. cv2.destroyAllWindows(), [shell] OpenCVとWebカメラでリアルタイム顔認識をする. 前回、人の顔を認識するテストに引き続き、今度は人物を特定するための分類器を自作したいと思います。, 斜め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(face[2:], Image.LINEAR), # 元の画像に加工した顔画像を貼り付ける。 Copyright © 2020 from umentu import stupid All Rights Reserved. # -*- coding: UTF-8 -*-, import cv2 Copyright © 2018-2020 KASUGAI Yu All Rights Reserved. こんにちは。今回はドラゴン曲線をタートルグラフィックスで描いてみます。なぜドラゴ ... こんにちは。前回は音の標本化周波数や量子化ビット数を変えてみて、その音の違いを聞 ... こんにちは。今回も数学科の学習指導要領解説から題材を取り上げます。このサイトは「 ... こんにちは。まだまだ待ち行列のプログラムに手を加えていくことにします。 Pyth ... こんにちは。今回は久しぶりに暗号の話に戻ります。公開鍵暗号方式の一つであるエルガ ... このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。.