童貞の悲しみ

童貞と処女が等価であって欲しかった

Pythonとopencvでわちゃわちゃした

卒検配属が近づいてきた

希望の研究室はそれなりに人気があるところで倍率も1倍を超えている

審査では何かしらこれまでやってきたことなどをアピールする場があるらしい

大学に入って2年半テキトウに過ごしてきてしまったことを後悔した

審査まで日数は無いがせめてこれからだけでも何かしようと希望の研究室でやっていることに1つである画像処理に関係するものに触れてみることにした

そこで最初に思いついたのがラズパイで監視カメラを作ること

ドアにセンサを付けたりする方法など色々考えたが結局motionとかで撮った画像に僕以外の顔が写ってたらTwitterなりslackなりに送るものを作ることにした

しかし僕はプログラミングが出来ない

ちょっと講義でC言語に触れたことがあるぐらい

pythonなんて以ての外でちょっと調べた時には配列みたいなものの種類が沢山あって理解を諦めた

そんなわけで数日で出来ることなんて限られている

だからひとまずpythonopencvで顔認識するプログラムを書こうと考えた

前置きが長くなったがこれからpythonopencvについて調べ始めてからそのプログラムができるまでを書く

まずpythonopencvに対する僕の理解はROSとかに使われている言語と画像処理に便利なライブラリという程度

しかしまあ時間も無かったのでそこら辺についての理解は深めずに取り敢えず環境を作る実例と目的に合いそうなソースがあるところを探して写経することにする

取り敢えずpythonopencvで顔認識してる実例を探した

そのまま使えそうなソースが落ちているところを見つけたので参考にさせてもらうことにした

Python OpenCVの基礎 画像の読み込み(静止画) - Pythonの学習の過程とか

Pythonで遊んでみる -part1- (OpenCVで顔認識) | たくのこ Web

正直これだけで行けそうだったので次に環境を整える

このサイトを参考にした

UbuntuにPython版OpenCVをインストール

sudo apt-get install python-numpy

sudo apt-get install python-opencv

たぶんこれでなんとかなった

そして

実際に書いたものは下のようになった

#cording: utf-8
 
import numpy as np
import cv2
 
color = (0,0,225)
 
img = cv2.imread('a.jpg')
 
gray = cv2.cvtColor(img,cv2.cv.CV_BGR2GRAY)
 
cascade = cv2.CascadeClassifier('haarcascade_profileface.xml')
 
facerect = cascade.detectMultiScale(gray,scaleFactor=1.1,minNeighbors=1,minSize=(1,1))
 
if len(facerect) > 0:
    for rect in facerect:
        cv2.rectangle(img,tuple(rect[0:2]),tuple(rect[0:2]+rect[2:4]),color,thickness=2)
else:
    print("no face")
 
cv2.imwrite('image.jpg',img)
 
cv2.imshow('image',img)
 
cv2.waitKey(0)
cv2.destroyAllWindows()
 
殆ど写経で済んだが、分類器のxmlのファイルがどこにあるのかわからなかったので

https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_alt.xml

ここにあるものを使った

 

結果なんとか動いた気がするがどうも精度に満足できない

lennaとかわかりやすそうなのは認識できたが正面を向いてるのに認識できなかったり誤認識してたりと精度が悪く感じた

ちなみに萌え絵は全く認識できなかった

カスケード型分類器というものの仕組みを全く理解していないので考察はできない

 

自分にとって為になったんだか為になって無いんだかわからないけど取り敢えずやったことは書き終えた

ただ時間を失った虚しさだけが残ったので今後は目的をもって物事に取り組みたいと思う(プログラムを書けたら便利なんだろうなという漠然とした認識は得た)

あとusrの下を探してもopencvのフォルダが見つからなかったので心当たりのある人は教えてくれると嬉しいです