Python+dilb は単純に顔検出を実装します (コード付き)

dilb と face_recognition のサードパーティ パッケージのインストールが失敗した場合は、Python に移行して、dilb と face_recognition のサードパーティ パッケージのインストールの失敗を解決してください - プログラマーが求めた

目次

1. 環境構築

2. 事前知識

読み取った画像 1 枚

2 階調変換

解決策cv2.error: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\color.cpp:182: エラー: (-215: アサーション失敗) !_src関数「cv::cvtColor」の .empty()

3 サイズを変更する

4 長方形を描く

5 顔検出


1. 環境構築

pycharm では、cv2 をインストールする場合、opencv-python ライブラリをインストールする必要がありますが、このライブラリは組み込まれていないため、pip する必要があります。opencv と書かないように注意してください。また、別の依存関係ライブラリも単独でインストールされます。

pip install opencv-python

注: インポートする場合、 opencv-pythonや opencvではなく、cv2 が使用されます。

import cv2

 

2. 事前知識

dlib は顔の特徴キー ポイントの検出をサポートしており、公式では、ダウンロードして使用できる 68 次元および 5 次元の顔キー ストア検出の事前トレーニング モデルを提供しています。

関連データとモデルファイルのダウンロードアドレス: /files のインデックス

読み取った画像 1 枚

画像を加工したい場合は画像を読み込む必要があり、画像を読み取ることができない場合は画像を表示する必要があります。

コード全体は次のとおりです。 

# 导入cv模块
import cv2 as cv

# 读取图片
img = cv.imread('face4.jpg')
# 显示图片
cv.imshow('read_img', img)
# 为了防止自动退出(pycharm可能会发生),所以可以在代码后面加入:等待
cv.waitKey(0)
# 释放内存
cv.destroyAllWindows()

効果は次のとおりです。 

2 階調変換

画像の前処理において、画像のグレースケール変換は、画像を強調する重要な手段です。グレースケール変換は、画像のコントラスト、鮮明な画像、および明白な特徴を拡張できます。グレースケール変換は、主に点操作を使用してピクセルのグレースケールを修正します。のグレー値は、画像のグレー値を決定します。対応する出力ポイント。これは画像変換に基づく操作です。

デジタル画像では、ピクセルは表現の基本単位であり、各ピクセルの明るさはグレー値でマークされます。明るさ情報のみを含み、色情報を含まない画像は、グレースケール画像と呼ばれます。モノクロ画像の場合, それぞれのピクセルのグレー値は [0,255] 区間の整数で表されます。つまり、画像は 256 のグレー レベルに分割されます。カラー画像の場合、各ピクセルは R、 G、および B。各ピクセルの R、G、B がそれぞれまったく同じである場合、つまり R=G=B=D の場合、画像はグレースケール画像です。ここで、D は各ピクセルのグレースケール値と呼ばれます。 。

コード全体は次のとおりです。 

# 导入cv模块
import cv2 as cv

# 读取图片
img = cv.imread('face1.jpg')
# 灰度转换
gray_img = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
# 显示灰度图片
cv.imshow('gray', gray_img)
# 保存灰度图片
cv.imwrite('gray_face11.jpg', gray_img)
# 显示图片
cv.imshow('read_img', img)
# 等待
cv.waitKey(0)
# 释放内存
cv.destroyAllWindows()

解決策cv2.error: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\color.cpp:182: エラー: (-215: アサーション失敗) !_src関数「cv::cvtColor」の .empty()

エラー:

コードがエラーを報告していることがわかり、コードはチェックされましたが、問題はありませんでした。何が起こっているのでしょうか? 

理由: これは、パスに中国語を含めることができないというopencv の致命的な弱点である、パスに中国語が含まれていることが原因である可能性があります。

解決策:

(1) パスに中国語を含まない新しいフォルダーを作成し、コードを再度実行しますが、依然としてエラーが報告されます。

(2)パスに中国語が含まれないように修正しましたが、依然として表示できません。

これは比較的まれで、画像形式が比較的人気がないか、間違っているため表示できない可能性があります。--"写真を変更してください

成功すると、次のような効果が得られます。 

 

3 サイズを変更する

コード全体は次のとおりです。 

# 导入cv模块
import cv2 as cv

# 读取图片
img = cv.imread('face4.jpg')
# 修改尺寸
resize_img = cv.resize(img, dsize=(200, 200))
# 显示原图
cv.imshow('img', img)
# 显示修改后的
cv.imshow('resize_img', resize_img)
# 打印原图尺寸大小
print('未修改:', img.shape)
# 打印修改后的大小
print('修改后:', resize_img.shape)
# 等待
while True:
    if ord('q') == cv.waitKey(0):
        break
# 释放内存
cv.destroyAllWindows()

効果は次のとおりです。 

 

4 長方形を描く

コード全体は次のとおりです。 

# 导入cv模块
import cv2 as cv

# 读取图片
img = cv.imread('face4.jpg')
# 坐标
x, y, w, h = 100, 100, 100, 100
# 绘制矩形
cv.rectangle(img, (x, y, x + w, y + h), color=(0, 0, 255), thickness=1)
# 绘制圆形
cv.circle(img, center=(x + w, y + h), radius=100, color=(255, 0, 0), thickness=5)
# 显示
cv.imshow('re_img', img)
while True:
    if ord('q') == cv.waitKey(0):
        break
# 释放内存
cv.destroyAllWindows()

効果は次のとおりです。 

 

5 顔検出

(1) まず、使用する haarcascade_frontalface_alt2.xml を見つけます (場所は Python 環境/仮想環境の lib/site-packages/ の cv2/data/ の下にあります)。

ここで私のパスはD:/my/python-pycharm/python-envs/venv-deep/Lib/site-packages/cv2/data/haarcascade_frontalface_alt2.xmlです。

コード全体は次のとおりです。 

# 导入cv模块
import cv2 as cv

# 检测函数
def face_detect_demo():
    gary = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    face_detect = cv.CascadeClassifier('D:/my/python-pycharm/python-envs/venv-deep/Lib/site-packages/cv2/data/haarcascade_frontalface_alt2.xml')
    face = face_detect.detectMultiScale(gary, 1.01, 5, 0, (100, 100), (300, 300))
    for x, y, w, h in face:
        cv.rectangle(img, (x, y), (x + w, y + h), color=(0, 0, 255), thickness=2)
    cv.imshow('result', img)


# 读取图像
img = cv.imread('face4.jpg')
# 检测函数
face_detect_demo()
# 等待
while True:
    if ord('q') == cv.waitKey(0):
        break
# 释放内存
cv.destroyAllWindows()

効果は次のとおりです。 

 

おすすめ

転載: blog.csdn.net/qq_45956730/article/details/128995766