こんにちは。
僕が初めて書いた比較的まともなコードって多分物体検出なんですよね。物体検出、つまりObject Detectionとはなんぞや、の方のために以下の画像を用意しました。
The future of computer vision with the TensorFlow Object Detection API from Google. You won't have to describe any photo....
https://www.flickr.com/photos/drbeachvacation/35477618781
見たことありませんか?僕毎朝めざましテレビを個人的に見てるんですけどそこでも天気予報の際に物体検出を使っていてびっくりしました。そんなObject Detectionが今回のテーマです。
非常に難しそうに思えるかもしれませんが、単一種類の物体検出ならとても簡単です。cv2というライブラリを使いましょう。今私は単一の、と言いました。これは例えば人の顔であったり、犬の顔であったりします。もう少し深くいうと、人の顔(正面)、人の顔(横顔)などもあります。そしてこれらはカスケードファイルという形で保存されています。これは機械学習でいう所の正解ラベルのようなものです。このカスケードファイルには色々な種類があります。 例えば上のリンクを見てもらうと多種多様なカスケードファイルがあることがわかります。つまり、オリジナルのカスケードファイルを作ればオリジナルの物体検出ができるということです。カスケードの自作は可能ですがどうやら少し難しいようです。機会があれば記事にしたいと思っています。リンクを一応貼っておきます。
物体検出はやっていて楽しいので自分への課題としてFlaskを使った簡単なサービスをできないかなと思っていたりします。しかし、サーバーなどの知識があまりないのですぐにとは行きそうにないです。。。なのはともあれコードを見ましょう。の前に1つだけ注意です。opencvを使うとエラーが頻繁に起こります、実際に次のコード内でもおきています。しかし、ほとんどの原因はPATHです。なのでフルパスで渡すか、今回の場合はwebのurlで作動しなかったのでwgetコマンドを使ってダウンロードして同じディレクトリ上にファイルを置くことで解決しました。このへんは注意してください。また、Pythonの仕様かMacの仕様かはわかりませんがplt.imshowにおいて画像の色が反転してしまうのでRGBを変更するコマンドを忘れないように注意してください。
ポイントとしては物体検出で使う次の2つのパラメータについてです。
これらについてまとめると
  • scaleFactorは小さいほど検出が正確になる
  • minNeighborsは大きいほど検出が正確になる
です。x86_64が詰まってしまいました。誰か助けてください。でわ