見出し画像

深層学習(ディープラーニング)のための失敗しない顔の切り出し方法(OpenCV)

このnoteは有料です。

このnoteで勉強できること

OpenCVを使って画像データの水増し
OpenCVを使って顔検出
OpenCVを使って目の検出
OpenCVを使って顔の切り出し方
matplotlibを使って複数画像のグリッド表示

Pythonプログラムの処理は1行ずつ詳しく説明がついています。

どんなとき使うか?

画像データの水増し:深層学習などで、学習させるための画像データが大量に集められない時に、この手法を使って特徴を失わない範囲で、画像データを様々な処理をして増やすことで、学習データの量を増やし、確保できます。

顔の切り出し:機械学習や深層学習の中で、ある人物を識別するために、その人物の顔写真を大量に集めて、学習させるデータを構築する時に、顔の部分だけが学習の対象となりますので、顔の部分だけを切り出ししたい場合は、この手法が役に立ちます。
他のご要望があれば、Twitterで受け付けます。お気軽に声をかけてください。

このnoteの対象者

機械学習、深層学習(ディープラーニング)を勉強する初心者の方

ある程度、コンピュータサイエンス、Pythonプログラミング, matplotの基礎のある方

もちろん、上記の内容がお探しの方にはどなたでも購入は可能です。

環境

Google Colab

OpenCV

matplotlib

皆さんの環境によりますが、必要があれば、下記をインストールしてください。

!pip install opencv-python
!pip install matplotlib


ここから実施手順

人物写真をダウンロードする(筆者の顔写真 All rights reserved! 笑)

!curl -O https://raw.githubusercontent.com/kawashimaken/photos/master/kawashima01.jpg

結果

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 16073  100 16073    0     0  99216      0 --:--:-- --:--:-- --:--:-- 99832

確認

ls
kawashima01.jpg  sample_data/

Haar-like特徴分類器

Haar-like特徴分類器について、こちらの(有料)noteを参考してください。

OpenCVの機械学習モジュール

OpenCVは画像を処理するだけのライブラリではなく、機械学習の機能もあります。

機械学習関連のアルゴリズなどは、cv2.mlというモジュールにまとめられています。

import cv2
dir(cv2.ml)

結果

['ANN_MLP_ANNEAL',
 'ANN_MLP_BACKPROP',
 'ANN_MLP_GAUSSIAN',
 'ANN_MLP_IDENTITY',
 'ANN_MLP_LEAKYRELU',
 'ANN_MLP_NO_INPUT_SCALE',
 'ANN_MLP_NO_OUTPUT_SCALE',
 'ANN_MLP_RELU',
 'ANN_MLP_RPROP',
 'ANN_MLP_SIGMOID_SYM',
 'ANN_MLP_UPDATE_WEIGHTS',
 'ANN_MLP_create',
 'ANN_MLP_load',
 'BOOST_DISCRETE',
 'BOOST_GENTLE',
 'BOOST_LOGIT',
 'BOOST_REAL',
 'Boost_DISCRETE',
 'Boost_GENTLE',
 'Boost_LOGIT',
 'Boost_REAL',
 'Boost_create',
 'Boost_load',
 'COL_SAMPLE',
 'DTREES_PREDICT_AUTO',
 'DTREES_PREDICT_MASK',
 'DTREES_PREDICT_MAX_VOTE',
 'DTREES_PREDICT_SUM',
 'DTrees_PREDICT_AUTO',
 'DTrees_PREDICT_MASK',
 'DTrees_PREDICT_MAX_VOTE',
 'DTrees_PREDICT_SUM',
 'DTrees_create',
 'DTrees_load',
 'EM_COV_MAT_DEFAULT',
 'EM_COV_MAT_DIAGONAL',
 'EM_COV_MAT_GENERIC',
 'EM_COV_MAT_SPHERICAL',
 'EM_DEFAULT_MAX_ITERS',
 'EM_DEFAULT_NCLUSTERS',
 'EM_START_AUTO_STEP',
 'EM_START_E_STEP',
 'EM_START_M_STEP',
 'EM_create',
 'EM_load',
 'KNEAREST_BRUTE_FORCE',
 'KNEAREST_KDTREE',
 'KNearest_BRUTE_FORCE',
 'KNearest_KDTREE',
 'KNearest_create',
 'LOGISTIC_REGRESSION_BATCH',
 'LOGISTIC_REGRESSION_MINI_BATCH',
 'LOGISTIC_REGRESSION_REG_DISABLE',
 'LOGISTIC_REGRESSION_REG_L1',
 'LOGISTIC_REGRESSION_REG_L2',
 'LogisticRegression_BATCH',
 'LogisticRegression_MINI_BATCH',
 'LogisticRegression_REG_DISABLE',
 'LogisticRegression_REG_L1',
 'LogisticRegression_REG_L2',
 'LogisticRegression_create',
 'LogisticRegression_load',
 'NormalBayesClassifier_create',
 'NormalBayesClassifier_load',
 'ParamGrid_create',
 'ROW_SAMPLE',
 'RTrees_create',
 'RTrees_load',
 'STAT_MODEL_COMPRESSED_INPUT',
 'STAT_MODEL_PREPROCESSED_INPUT',
 'STAT_MODEL_RAW_OUTPUT',
 'STAT_MODEL_UPDATE_MODEL',
 'SVMSGD_ASGD',
 'SVMSGD_HARD_MARGIN',
 'SVMSGD_SGD',
 'SVMSGD_SOFT_MARGIN',
 'SVMSGD_create',
 'SVMSGD_load',
 'SVM_C',
 'SVM_CHI2',
 'SVM_COEF',
 'SVM_CUSTOM',
 'SVM_C_SVC',
 'SVM_DEGREE',
 'SVM_EPS_SVR',
 'SVM_GAMMA',
 'SVM_INTER',
 'SVM_LINEAR',
 'SVM_NU',
 'SVM_NU_SVC',
 'SVM_NU_SVR',
 'SVM_ONE_CLASS',
 'SVM_P',
 'SVM_POLY',
 'SVM_RBF',
 'SVM_SIGMOID',
 'SVM_create',
 'SVM_getDefaultGridPtr',
 'SVM_load',
 'StatModel_COMPRESSED_INPUT',
 'StatModel_PREPROCESSED_INPUT',
 'StatModel_RAW_OUTPUT',
 'StatModel_UPDATE_MODEL',
 'TEST_ERROR',
 'TRAIN_ERROR',
 'TrainData_create',
 'TrainData_getSubMatrix',
 'TrainData_getSubVector',
 'VAR_CATEGORICAL',
 'VAR_NUMERICAL',
 'VAR_ORDERED',
 '__doc__',
 '__loader__',
 '__name__',
 '__package__',
 '__spec__']

結構いっぱいあります。

この記事は、学習済の分類器を利用しますが、機械学習については、また別の記事でご紹介します。

必要なファイルをアップロードする

分類機の用意方法①

ご自身のPCにダウンロードしている場合は、こちらからアップロードすることができます。

ここから先は

9,156字 / 4画像

¥ 200

株式会社虹賢舎 CEO 著書:https://amzn.to/39KwlE4 技術ブログ:https://kokensha.xyz 機械学習 深層学習 Python /JS IoT Raspberry Pi ロボット TOEIC950 https://gosen.world