【Python】opencv_pythonの画像をface_recognitionに受け渡す
webカメラの画像をface_recognitionで処理したい
と、思ったときにwebカメラからの画像の取得はface_recognitonでサポートされていませんので、それが可能なopencv_pythonと連携させることを思いつきます。
そこで、opencv_pythonで読み込んだ画像を直接face_recognitonに渡す方法を調査しました。
どちらも只のnumpy配列ですが
face_recognitonの公式ドキュメントを参照すると、通常のload_image_fileの返り値は「RGB」のnumpy配列です。
一方でopencv_pythonのcv2.imread()は、同様にnumpy配列ですが、「RGB」ではなく「BGR」のnumpy配列です。
BGRからRGBに変えてあげる
なので、opencvで取得した「BGR」のnumpy配列の並びを「RGB」に変更してあげれば、そのままface_recognitionで使うことができます。以下はopencv_pythonでwebカメラから取得したフレームをface_recognitionで処理する例です。
import cv2
import argparse
import face_recognition
def main_loop(cap):
ret, frame = cap.read()
rgb_frame = frame[:, :, ::-1] #BGRをRGBすることでface_recognitionで使えるようになる。
face_loc_list = face_recognition.face_locations(rgb_frame, model="hog") #顔位置取得
#など、rgb_frameはface_recognitonで処理できるので、色々できます。
cv2.imshow('result',frame)
if __name__ == '__main__':
#Webカメラ読み込み&ループ
cap = cv2.VideoCapture(0)
while True:
main_loop(cap)
key = cv2.waitKey(200)
if key == 27:
break
cap.release()
cv2.destroyAllWindows()
「rgb_frame = frame[:, :, ::-1]」としてopencv_python形式(frame)からface_recognitionの形式に変換しています。
以上です。
ディスカッション
コメント一覧
まだ、コメントがありません