Haar特徴ベースのCascade型分類器を使った顔と目の検出を行う。
事前準備
事前に学習を済ませた学習機のxmlファイルを下記URLからダウンロードしてください。
ダウンロードする方法は、ブラウザChromeの場合まずgithubの画面をRaw画面に切り替えて、XMLのままの表示になります。それからブラウザを右クリックで、別名で保存にしてください。
またネットからLenna.pngを探して、ダウンロードしてください。
Colabに新しいノートブックを作り、上記ファイルをColabにアップしてください。
コード
import cv2 import matplotlib.pyplot as plt # matplotlib(描画用) print(cv2.__version__) face_cascade_path = "haarcascade_frontalface_default.xml" eye_cascade_path = "haarcascade_eye.xml" face_cascade = cv2.CascadeClassifier(face_cascade_path) eye_cascade = cv2.CascadeClassifier(eye_cascade_path) img = cv2.imread('Lenna.png') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray) for x, y, w, h in faces: cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2) face = img[y: y + h, x: x + w] face_gray = gray[y: y + h, x: x + w] eyes = eye_cascade.detectMultiScale(face_gray) for (ex, ey, ew, eh) in eyes: cv2.rectangle(face, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2) # 結果表示 plt.imshow(img)
結果表示
はまりところ
済ませた学習機のxmlファイルの読み込ませるところは、” *** Unknown error code -49 *** “を発生しました。
もベタランと自負して、初歩的なエラーがあまりないと思うだが、このエラーに数時間も費やした。
- “Unknown error code -49″の対策を探す。
- パスがうまく設定できてないではないか。
- opencv 3からopencv 4になったから、それを疑い。
- 他人の成功例を探して実践する。
stackoverflow.comなどからの対策しても無駄でした。パスを相対パス、絶対パスに変えでも無駄、opencv 3からopencv 4に変化も見つからない、他人の成功例も再現できない、。。。
途方に暮れて、次のページで回答を見つかった。
https://answers.opencv.org/question/191490/opencv-error-unknown-error-code-49-persistencecpp-error/
英語:
- have a look at those cascade files (e.g. with a text editor). do they really contain valid xml ?
- (download errors do happen, there might just be a html errormsg in there, not valid xml)
- also, when using weird python ide’s like pycharm, do yourself a favour, and use an absolute file path for anything, that needs to be loaded from disk.
日本語:
- それらのカスケードファイルを見てください(テキストエディターなどを使用)。 彼らは本当に有効なxmlを含んでいますか?
- (ダウンロードエラーが発生します、そこにはhtmlエラーメッセージがあり、有効なxmlではない可能性があります)
- また、pycharmのような奇妙なpython ideを使用する場合は、ディスクからロードする必要のあるすべてのファイルに絶対パスを使用してください。
ダウンロードしたファイルをVSCodeで開いてみたら、htmlファイルでした!
正しいダウンロードする方法は、ブラウザChromeの場合まずgithubの画面をRaw画面に切り替えて、XMLのままの表示になります。それからブラウザを右クリックで、別名で保存にしてください。