Python opencv:如何使用卡尔曼滤波器

时间:2017-04-22 18:23:45

标签: python opencv face-recognition kalman-filter

我正在使用Python进行人脸识别。

我有以下代码:

from sklearn.externals import joblib
clf = joblib.load('model/svm.pkl')
pca = joblib.load('model/pca.pkl')
face_cascade = cv2.CascadeClassifier("classifier/haarcascade_frontalface_alt.xml")
webcam = cv2.VideoCapture(0)
ret, frame = webcam.read()
while ret:
    start = time()
    origin = frame
    gray = cv2.cvtColor(origin, cv2.COLOR_BGR2GRAY)
    cv2.equalizeHist(gray,gray)

    faces = face_cascade.detectMultiScale(
        origin,
        scaleFactor=1.1,
        minNeighbors=5,
        minSize=(30, 30),
        flags=cv2.cv.CV_HAAR_SCALE_IMAGE
    )
    for (x, y, w, h) in faces:
        cv2.rectangle(origin, (x, y), (x+w, y+h), (0, 255, 0), 2)
        face = gray[y:y+h , x:x+w]
        cv2.equalizeHist(face,face)

        face_to_predict = cv2.resize(face,(100, 100),interpolation = cv2.INTER_AREA)

        img = face_to_predict.ravel()
        principle_components = pca.transform(img)
        proba = clf.predict_proba(principle_components) # probability
        pred = clf.predict(principle_components)
        if proba[0][pred]>0.4:
            name = face_profile_names[pred[0]]

所以,这段代码工作正常,并且不时地按照我的预期识别面孔。但是这里也存在很多弱点:如果我扭曲了头脑,那么准确性对我来说太低了。 我发现卡尔曼的过滤器可以改善我的面部识别,但我没有意识到如何在我现有的代码中使用它。

我发现了一些使用卡尔曼滤波器的帖子,但目前还不清楚如何在当前情况下使用它。一些帖子在这里: Is there any example of cv2.KalmanFilter implementation?

OpenCV Kalman Filter python

所以,我的principle_components是一个值矩阵,希望它可以用于我的卡尔曼滤波器的初始化,但我不确定这个以及如何使用这个滤波器..

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

关于卡尔曼滤波器的Opencv Python文档非常糟糕。 可以在此处找到一个很好的实现示例: https://raw.githubusercontent.com/tobybreckon/python-examples-cv/master/kalman_tracking_live.py

困扰很多人的一个方面是卡尔曼滤波器没有初始化功能,这只是蹩脚的。所以过滤器是一个" delta"。我的意思是你总是需要用初始值进行标准化。该度量应该更正为度量=度量 - 初始和预测=预测+初始。

我希望这会给你一些帮助。