OpenCVベースの顔検出ソフトウェア(Pythonソースコード+UIインターフェース+グラフィックによる詳細説明を含む)

ソフトウェア機能のデモンストレーション

画像の説明を追加してください

要約:人脸检测目標は、画像内のすべての顔の対応する位置を見つけることです。アルゴリズムの出力は、画像内の顔の外接長方形の座標であり、傾斜角度などの姿勢などの情報も含まれる場合があります。この記事では、その実装の技術原理を詳細に紹介し、同時に完全なPython実装コードを示し、PyQTUI インターフェイスを実現し、写真、ビデオ、カメラの顔検出機能を表示します。この記事では、関心のあるパートナーが参照および研究できるように、完全な Python コードとチュートリアルを提供します。完全なコード リソース ファイルを入手する方法については、記事の最後を参照してください。

クリックすると記事の最後「完全な関連ドキュメントとソース コード」にジャンプし、入手できます。

---

1 はじめに

顔検出 (顔検出) は、画像を与えて画像内のすべての顔の位置を見つけることです。通常は長方形のフレームで囲まれており、入力は画像 img で、出力は顔を含むいくつかの長方形のフレーム位置です。顔検出と顔認識の主な違いは、顔検出は写真内の顔の位置を検出するだけでよいのに対し、顔認識は顔の位置を検出した後に、顔の位置を検出する必要があることです。データベース内の顔の位置と比較し、顔データを照合して、検出された顔がどの人物のものであるかを特定します。本稿ではOpenCVをベースとした顔検出とインターフェース表示を実装しており、今後さらに顔認識に関する機能開発をアップデートしていきます。

以下はブロガーが設計したシンプルなソフトウェアインターフェースで、写真、ビデオ、カメラの顔検出機能を実現し、写真やビデオの検出結果を保存する機能も提供します。興味のある友達は自分で試してみてください。

觉得不错的小伙伴,感谢点赞、关注加收藏!如果大家有任何建议或意见,欢迎在评论区留言交流!

ソフトウェアの初期インターフェイスを次の図に示します。
ここに画像の説明を挿入

2. ソフトウェア効果デモンストレーション

まずはアニメーションで顔検出の実際の効果を見てみましょう. このソフトウェアの主な機能は写真、ビデオ、カメラ画像から顔の位置を検出することです. 認識結果はインターフェースと画像で視覚的に表示されます.実証効果は以下の通りです。

2.1 画像の顔検出

このソフトウェアは、自分で画像ファイルを選択することで顔検出を行うことができ、画像選択ボタンアイコンをクリックして画像を選択すると、顔の数や位置情報などの顔検出結果が直接表示され、確認することができます。ドロップダウン ボックスから個々の顔を検出結果を選択し、保存ボタンをクリックして検出結果の画像を保存できます。この機能のインターフェース表示を次の図に示します。

画像の説明を追加してください

2.2 ビデオの顔検出

このソフトウェアは、顔検出するビデオを選択し、ビデオ ボタンをクリックして検出するビデオを選択します。ソフトウェアはフレームごとに顔を検出し、検出結果を下の表に記録します。保存ボタンをクリックすると、ビデオ検出の結果を保存します。この機能のインターフェース表示を次の図に示します。
ここに画像の説明を挿入

2.3 カメラの顔検出

実際の使用シナリオでは、デバイスのカメラを使用してリアルタイム画像を取得することが多く、同時に画像内の顔を検出する必要があるため、この記事ではカメラの顔検出機能も実装します。カメラボタンをクリックしてカメラをオンにすると、ソフトウェアはリアルタイムの画像を表示し、画像内の顔の位置の検出を開始します。この機能のインターフェースは次の図に示されています。
ここに画像の説明を挿入

3. 顔検出の原理の紹介

3.1 基本原則

顔検出のアルゴリズムには、知識ベースと統計ベースの 2 つの主なタイプがあります。
知識ベース手法では、主に人間の顔を臓器の特徴の組み合わせとして捉える事前知識を利用し、目、眉、口、鼻などの臓器の特徴とそれらの幾何学的位置関係に基づいて人間の顔を検出します。一般的に使用される方法: テンプレート マッチング、顔の特徴、形状とエッジ
、テクスチャの特徴、色の特徴。
統計に基づく手法では、顔を全体のパターン、つまり二次元の画素行列とみなして、統計的な観点から多数の顔画像サンプルから顔パターン空間を構築し、それに基づいて顔の有無を判定します。類似性の尺度に。一般的に使用される手法: 主成分分析と固有面、ニューラル ネットワーク手法、サポート ベクター マシン、隠れマルコフ モデル、Adaboost アルゴリズム。

この記事では主に OpenCV の Haar 分類器を使用して顔を検出します。Haar 分類器は、実際には Boosting アルゴリズムのアプリケーションです。Haar 分類器は、Boosting アルゴリズムで AdaBoost アルゴリズムを使用します。AdaBoost アルゴリズムによってトレーニングされた強力な分類器をカスケード接続するだけで、基礎となる特徴抽出で高効率を使用します。長方形の特徴と積分マップメソッド。

Haar 分類アルゴリズムの要点は次のとおりです。
① Haar に似た特徴を検出に使用します。
②積分画像(Integral Image)を利用してHaar-like特徴量の評価を高速化します。
③ AdaBoost アルゴリズムを使用して、顔と顔以外を区別する強力な分類器を学習します。
④ スクリーニング カスケードを使用して強分類器をカスケード接続し、精度を向上させます。

3.2 Haar カスケード検出器を使用して写真の顔検出を実行する

# coding:utf-8
import cv2

# 绘图展示
def cv_show(name,img):
	cv2.imshow(name, img)
	cv2.waitKey(0)
	cv2.destroyAllWindows()

# 读取图片
img = cv2.imread('images/test1.jpg')
# cv_show('img',img)

# 转为灰度图
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# cv_show('gray', img_gray)

# 构造harr检测器
face_detector = cv2.CascadeClassifier('models/haarcascade_frontalface_default.xml')

# 对图像中的人脸进行检测
detections = face_detector.detectMultiScale(img_gray,scaleFactor=1.3)

# 解析并画出人脸方框
for x,y,w,h in detections:
	cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)

ここに画像の説明を挿入

detectMultiScale(image[,scaleFactor[,minNeighbors[,flags[,minSize[,maxSize]]]]])
パラメーターの説明:
image: 検出される画像、通常は検出を高速化する
ためのグレースケール画像scaleFactor: 縮小率を設定します。画像を徐々に縮小して検出していくため、パラメータの設定を大きくするほど計算速度は速くなりますが、ある程度の大きさの顔を見逃してしまう場合があります。デフォルトは 1.1 です。実際、このパラメータは画像のピクセル値に応じて設定でき、ピクセル削減の速度は通常 1 ~ 1.5 の間で速くなります。
minNeighbors: 顔フレームには少なくとも n 個の候補値が必要であることを決定します。品質が高いほど良いです (デフォルトは 3)。minSize と
maxSize は、取得したターゲット領域のサイズを制限するために使用されます。つまり、minSize=(40,40) などの顔枠の最大サイズと最小サイズは、顔枠の最小サイズが 40*40 未満であってはいけないことを意味します。

実際の状況とニーズに応じて、上記のパラメータを調整して、最良の検出効果を達成できます。

上記の原則に基づいて、表示と学習を容易にするため。ブロガーは最終的に、写真、ビデオ、カメラ内の顔を検出できる完全な UI インターフェイスを開発し、ソフトウェア全体を詳細にテストしました。完全な UI インターフェイス、テスト写真とビデオ、コード ファイルはすべてパッケージ化されてアップロードされており、興味のある友人はダウンロード リンクを通じて入手できます。
ここに画像の説明を挿入

【入手方法】

この記事に含まれるすべての完全なプログラム ファイル (Python ソース コード、UI ファイルなどを含む) (下の図を参照)、それらの入手方法については記事の最後を参照してください。
ここに画像の説明を挿入

注: コードは Pycharm+Python3.8 を使用して開発されており、実行インターフェイスのメイン プログラムは、MainProgram.pyテスト画像スクリプトを実行できimg_test.py、テスト カメラ スクリプトを実行できcameraTest.py、テスト ビデオ スクリプトを実行できますvideoTest.pyプログラムがスムーズに実行されるようにするには、requirements.txt に従って Python 依存関係パッケージのバージョンを構成してください。

下の名刺「Axu Algorithm and Machine Learning」をフォローし、「Face Detection」と返信するとダウンロード方法が表示されます


結論

上記は、ブロガーが開発した顔検出ソフトウェアの全内容ですが、ブロガーの能力の限界により、漏れがあることは避けられませんので、お友達の批判や修正をいただければ幸いです。
この記事に関してご提案やコメントがございましたら、コメント欄にメッセージを残してください。

良い気分になった友達、いいね、注目、コレクションをありがとう!今後も魅力的なコンテンツが更新されていく予定です...

おすすめ

転載: blog.csdn.net/qq_42589613/article/details/130706051