これはお勉強の雑なメモです。頭のいい人助けて。
「PythonによるAI・機械学習・深層学習アプリの作り方」より、顔認識・モザイクの処理のやつをやる。この本はすごい。
下のこれをやって画像にモザイクをかけた。
import matplotlib.pyplot as plt
import cv2
def mosaic(img, rect, size):
# モザイクをかける領域を取得
(x1, y1, x2, y2) = rect
w = x2 - x1
h = y2 - y1
i_rect = img[y1:y2, x1:x2]
# 一度縮小して拡大する
i_small = cv2.resize(i_rect, ( size, size))
i_mos = cv2.resize(i_small, (w, h), interpolation=cv2.INTER_AREA)
# 画像にモザイク画像を重ねる
img2 = img.copy()
img2[y1:y2, x1:x2] = i_mos
return img2
# カスケードファイルを指定して分類機を作成 --- (*1)
cascade_file = "haarcascade_frontalface_alt.xml"
cascade = cv2.CascadeClassifier(cascade_file)
# 画像の読み込んでグレイスケールに変換 --- (*2)
img = cv2.imread("nm.jpg")
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 顔検出を実行 --- (*3)
face_list = cascade.detectMultiScale(img_gray, minSize=(150,150))
if len(face_list) == 0: quit()
# 認識した部分の画像にモザイクをかける --- (*4)
for (x,y,w,h) in face_list:
img = mosaic(img, (x, y, x+w, y+h), 10)
#画像を出力
cv2.imwrite("nm.png", img)
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.show()
今日覚えたこと
顔認識処理の仕組み
・カスケード分類機
なんか強分類機が集まった?やつ強分類機は雑魚分類機?が集まったやつらしい。
そんで強分類機は判定が甘々なやつから並べられているみたい。そっちの方がいちいち厳密な判定しないから早いとか。
・Δ(デルタ)
微分調べてたら出てきてなにそれ怖・・・ってなった。あのxとyがクロスしてる図でxがΔ分動きましたよ(x+XΔ)みたいなことを示すために使ってた。俺の隣の席の人も毎日俺と負の方向にΔしてる気がする。
・Σ(シグマ)
ロックマンのボス。下にこっから計算しますよ(k=1とか。1に限らない)上にここまで計算しますよ。(n。kと同じだけど混同しないように別のアルファベット描くとよいらしい)右にこいつを計算しますよ(ak。ここのkは下に書くkと同じ)と書く。公式色々あるみたいだから使う時が来たら調べよう。やだ・・・。
・lim(極限)
極限。実数aに近づく関数の引数xが限りなく近づくならばそれは極限らしい。へぇ・・・。
・ε(イプシロン)
・ε・<極小
調べたけどよくわからなかったこと
SVM(サポートベクトルマシン)
平面上に散在する二つのグループの間に線を引くやつ。その線はある点から最も離れているところに引かれるとか。回帰分析となにが違うの。あとパーセプトロンとかいうこれよりも精度の低い、けれども今日の礎になったものがあるらしい。AND演算子みたいななにかだったけ。絶対大事なので復習する。
・δ偏微分
よくわからなかった
・カーネル法
ケンタッキーを作った人。本当に理解できてないけれども非線形に直線になるような空間を用意してあげて線形として処理できるようにするテクニック。クリスピーを皮で包んでツイスターにする感じかな?
前に描いたはすみんでも試したけどモザイクはかからなかった。できたら面白いので次はそれができるようなカスケード分類機を作りたいと思います。強化学習でできるっぽいのはいいんだけど、どうやって特徴量とか特定するんだろう。ある程度こっちであらかじめ用意できないかな?