症状
Pythonで顔認証をやるために、インターネットのサイトのサンプルコード通りにやったら、
SystemError: returned a result with an error set
というエラーが出る。
作業環境
Windows10
Spyder(Python3.6)
#原因
githubのhaarcascade_frontalface_default.xmlをダウンロードして、読み込むとエラーになる。そのため、公式サイトのhaarcascade_frontalface_default.xmlファイルをダウンロードして、読み込んだら、成功しました。
(ファイルサイズが全然違う。githubの方はデータを追加していて、追加したデータがエラーとなったのかと個人的に思います)
参考にしたサイト
http://sh0122.hatenadiary.jp/entry/2017/10/30/210411
・上のタブからRELEASESをクリック。
・一番上の3.3.1のSourcesをクリック
・zipファイルがダウンロードされるので、任意の場所に保存
・任意の場所に解凍
以上のように、公式のカスケードファイルを使ったら、自分もうまくいきました。現在のバージョンだと、githubにあるカスケードファイルを使うとエラーになるということです。
##カスケードファイルをどこに置けばよいかわからない人へ
自分も最初迷ったのでメモ。自分の場合USBにWinPythonをインストールした。
Spyderを使った場合、初期状態のファイルは、
F:\WPy-3661\settings\ .spyder-py3\temp.py
にある。
spyder.exeのファイルは
F:\WPy-3661\Spyder.exe
にある。
絶対パスで指定したい場合
cascade = cv2.CascadeClassifier("F:/WPy-3661/haarcascade_frontalface_default.xml")
とでもすればよいと思う。
相対パスで指定したい場合
cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
このとき、haarcascade_frontalface_default.xmlのファイルは、
F:\WPy-3661\settings\ .spyder-py3\ のディレクトリに置けばよい。