Python(基礎編:顔認証・画像処理)
おはようございます。今日は画像処理のライブラリ「OpenCV」を勉強していきます。
・Pillow(PIL): 画像処理ライブラリ
・NumPy: 科学計算ライブラリ
・OpenCV: コンピュータビジョンライブラリ
OpenCV(Open Souece Computer Vision Library)
画像や動画を処理するための機能がまとめて実装されているオープンソースライブラリー。
ではさっそくやっていきましょう。
新規プロジェクト追加
lesson5のフォルダを作りました。
OpenCV(cv2)
OpenCVはAnacondaに含まれていないので、インストールが必要となる。Anaconda Promptでインストールする。
・スタートボタンからAnaconda Promptを選ぶ。
・pipを使って、「opencv-python」をインストールする。
pip install opencv-python
入力して実行。
「Successfully installed」で成功が確認できる。
「numpy」という数学的モジュールも追加されています。
「PyCharm」に戻り、「ファイル」「設定」のプロジェクトインタープリターから追加する。
「opencv」で検索して、出てきたら選択して「パッケージのインストール」
「opencv」が追加されたことを確認して「OK」
main.pyに書き込んでいきます。
モジュールはimportしないと使えないので、importします。
import cv2
ちょっと見えにくいので、色を変えます。
外観の変更方法
「設定」「外観」「ルック&フィール」▼から変更します。
変更できました。これで見やすくなりましたね。
フォントなどの変更もできるので、自分好みのものに変えておきましょう。
バージョン確認
import cv2
print('opencv:{}'.format(cv2.__version__))
ちゃんと出ました。importにも成功しています。
画像はデスクトップに「gazou」フォルダーをつくって中に入れました。
画像ファイルを読み込み(imread)
cv2.imread(filepath , flags )
第一引数:filepath
第二引数:どういう形で読み込むか。省略するとIMREAD_COLORになる。
import cv2
# 画像ファイルを読み込む
image = cv2.imread(r'C:\Users\admin\Desktop\gazou\picture2.png')
・グレースケールで読み込む
image = cv2.imread(r'C:\Users\admin\Desktop\gazou\picture2.png', cv2.IMREAD_GRAYSCALE)
画像ファイルの表示(imshow)
import cv2
# 画像ファイルを読み込む
image = cv2.imread(r'C:\Users\admin\Desktop\gazou\picture2.png')
# 画像ファイルの表示
cv2.imshow('o-i',image)
# キーイベントの待機処理
cv2.waitKey(0)
でました。画像が表示されました。
ここは表示されたときに出る名前っぽいです。👆
cv2.waitKey(0)👈コレがないと、画像が走ってすぐ消えました。
グレースケールで読み込み、表示
import cv2
# 画像ファイルを読み込む
image = cv2.imread(r'C:\Users\admin\Desktop\gazou\picture2.png', cv2.IMREAD_GRAYSCALE)
# 画像ファイルの表示
cv2.imshow('o-i',image)
# キーイベントの待機処理
cv2.waitKey(0)
カラーで読み込み、グレースケールに変換して表示
import cv2
# 画像ファイルを読み込む
image = cv2.imread(r'C:\Users\admin\Desktop\gazou\picture2.png')
cv2.imshow('o-i',image)
# 画像を変換
image2 = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imshow('wa-i', image2)
# キーイベントの待機処理
cv2.waitKey(0)
o-iがカラーで、wa-iがグレイスケールになりました。
何かキーを押したら閉じる
cv2.destroyWindow('o-i')
cv2.destroyWindow('wa-i')
👇これで全部いっぺんに閉じることもできる。
cv2.destroyWindow()
エラー回避
import cv2
try:
image = cv2.imread(r'C:\Users\admin\Desktop\gazou\picture2.png')
cv2.imshow('o-i',image)
image2 = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imshow('wa-i', image2)
cv2.waitKey(0)
cv2.destroyWindow('o-i')
cv2.destroyWindow('wa-i')
except cv2.error as e:
print(e)
print('ファイルがみつかりません')
何かを押すと、両方とも消える。
ない画像を指定すると、エラーを出さずに👇が表示されるようになる。
RBGを分離させる
blue, green, red = cv2.split(image)
import cv2
try:
image = cv2.imread(r'C:\Users\admin\Desktop\gazou\picture2.png')
blue, green, red = cv2.split(image)
cv2.imshow('o-i/blue',blue)
cv2.imshow('o-i/green', green)
cv2.imshow('o-i/red', red)
cv2.waitKey(0)
except cv2.error as e:
print(e)
print('ファイルがみつかりません')
ぼかしの種類
blur
cv2.blur( 入力画像 , ksize )
ksize(平滑化カーネル):平均値を求める領域サイズ
gaus
cv2.GaussianBlur(入力画像, ksize=(5, 5), sigmaX=1.5)
ksize(平滑化カーネル):平均値を求める領域サイズ
sigmaX:ガウシアンカーネルのX方向の標準偏差
bilateral
cv2.bilateralFilter(入力画像, d , sigmeColor , sigmeSpace)
d:各ピクセル近傍値領域の直径
sigmeColor :色空間のフィルターシグマ
sigmeSpace:座標空缶におけるフィルターシグマ
import cv2
import numpy as np
try:
image = cv2.imread(r'C:\Users\admin\Desktop\gazou\picture2.png')
blur = cv2.blur(image,(10, 1))
cv2.imshow('o-i/blur', blur)
gaus = cv2.GaussianBlur(image, ksize=(5, 5), sigmaX=1.5)
cv2.imshow('o-i/gaus', gaus)
bila = cv2.bilateralFilter(image, 9,75,75)
cv2.imshow('o-i/bila', bila)
cv2.waitKey(0)
cv2.destroyWindow()
except cv2.error as e:
print(e)
print('ファイルがみつかりません')
顔認証
anacondaの中に顔認証セットがあるので、どこにあるのか検索する。
pathをクリックします
これを使います。コピーして、
貼り付ける
OKを押す
はいったみたい。これで使えるようになりました。
色々書いていますが、全くわからないので飛ばします。
main.pyに戻ります。
import cv2
try:
cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
face = cv2.imread(r'C:\Users\admin\Desktop\gazou\picture2.png')
image3 = cv2.cvtColor(face, cv2.COLOR_BGR2GRAY)
faces = cascade.detectMultiScale(image3, scaleFactor=1.1)
print(faces)
except cv2.error as e:
print(e)
print('ファイルがみつかりません')
➤実行すると、顔の座標がでます。
では表示してみましょう。
import cv2
try:
cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
face = cv2.imread(r'C:\Users\admin\Desktop\gazou\picture2.png')
image3 = cv2.cvtColor(face, cv2.COLOR_BGR2GRAY)
faces = cascade.detectMultiScale(image3, scaleFactor=3.0)
for(x, y, w, h) in faces:
cv2.rectangle(face,(x, y), (x + w, y + h), (200,100,255))
cv2.imshow('kao', face)
cv2.waitKey(0)
cv2.destroyWindow()
except cv2.error as e:
print(e)
print('ファイルがみつかりません')
じゃーん。顔認証されました。
faces = cascade.detectMultiScale(image3, scaleFactor=3.0)
scaleFactor=3.0の数値が上がると精度があがります。ここを1.1にしてみると
若干制度が下がって、顔っぽいところも認識されています。
for(x, y, w, h) in faces:
cv2.rectangle(face,(x, y), (x + w, y + h), (200,100,255))👈これは色です。
import cv2
try:
cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
face = cv2.imread(r'C:\Users\admin\Desktop\gazou\picture2.png')
image3 = cv2.cvtColor(face, cv2.COLOR_BGR2GRAY)
faces = cascade.detectMultiScale(image3, scaleFactor=3.0)
for(x, y, w, h) in faces:
cv2.rectangle(face,(x, y), (x + w, y + h), (255,255,255))
cv2.imshow('kao', face)
cv2.waitKey(0)
cv2.destroyWindow()
except cv2.error as e:
print(e)
print('ファイルがみつかりません')
(255,255,255)白にして➤実行すると、
白でマークされました!
他の写真でも試してみます。
faces = cascade.detectMultiScale(image3, scaleFactor=3.0)
マークされないときもあります。
faces = cascade.detectMultiScale(image3, scaleFactor=2.1)
faces = cascade.detectMultiScale(image3, scaleFactor=1.8)
よし全部認証された。微調整は必要な模様。今回選んだのは正面だから、そういうの色々あるみたいです。
写真によって違う模様。
今日はここまでー!