openCVを用いて顔検出するコードを書いたのですが、ディレクトリ(今回はarimura-faceというディレクトリ)は作られるのですが、肝心の顔を検出した画像がそのディレクトリ内に出力されません。実行時にエラーはありませんでした。
*ちなみにcasacade xmlはhaarcascade_frontalface_alt2.xmlをインストールしました。
実行したコード
import cv2 import numpy as np import glob import os cascade_file_face = "face.xml" cascade_face = cv2.CascadeClassifier(cascade_file_face) files = glob.glob("/Users/User/Desktop/pythonAtom/face-detection/arimurakasumi/*") #ただし、Userには私の名前が入ります。 #pythonAtomは私が作ったディレクトリです。 for fname in files: dir_name = "./{0}".format("arimura-face") if not os.path.exists(dir_name): os.makedirs(dir_name) filepath = dir_name + "/{0}.jpg".format(fname) img = cv2.imread(fname,cv2.IMREAD_COLOR) #↑ fnameをデフォルト(カラーモード)で読み込んでimgに渡す。 img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #↑ imgをグレイスケールに変換してimg_grayに渡す。 face_list = cascade_face.detectMultiScale(img_gray,minSize=(20,20)) #↑ GS画像に対して顔検出を適用します。→detectMultiScale(顔を探して見つけた顔のリストをface_listに返す関数。) #↑ minSize=どのぐらい小さい領域まで検索するか。 if len(face_list) > 0: #↑ GS化した画像が入ったface_listリストの要素をlenght関数で数える→0より大きい場合を考える。 for (x,y,w,h) in face_list: color = (0,0,225) pen_w = 2 cv2.rectangle(img, (x,y), (x+w,y+h), color, thickness = pen_w) cv2.imwrite(filepath,img) #↑ 変換後の画像の保存(imwrite) ”保存名、保存するもの” #↑ 今回はfnameを保存名としているので上書き保存している。(別名で保存する場合は"out.jpg"などと指定する。) cv2.destroyAllWindows() #↑ 全てのウィンドウを閉じる関数。
*コード内に説明が多く書かれており見づらいかと思いますが、ご了承ください。
私は、恐らくどこかのパス指定が間違っていると考えていますが、お手上げ状態です。以下にディレクトリとファイルの構造をお示しします。
Desktop/pythonAtom/face-detection
→このface-detection(ディレクトリ)の中に
①arimurakasumiというディレクトリ(この中に顔検出したい元画像100枚あり)
②face-detection2.pyという上記でお示ししたコードファイル
③face.xml
の3つが入っております。
今回は、このface-detection(ディレクトリ)に④arimura-faceというディレクトリを作ろうと思い、それ自体は正常に作れました。しかし、このarimura-face内に顔検出した画像が全く出力されていませんでした。
プログラミングを学び始めて半年ほど経ちますが、未だ、コードを書くお作法が身についておりません。
ぜひご教授いただければ幸いです。よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー