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

7

我是一名使用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]]

所以,这段代码运行良好,有时会像我预期的那样识别人脸。但是也存在许多弱点:如果我扭曲头部,准确度对我来说太低了。我发现Kalman滤波器可以提高我的面部识别率,但我不知道如何在现有代码中使用它。我找到了一些使用Kalman滤波器的帖子,但是目前情况下如何使用还不够清晰。其中一些帖子如下: 是否有cv2.KalmanFilter实现的例子? OpenCV Kalman Filter python 所以,我的principle_components是一个值矩阵,希望可以用于初始化我的Kalman滤波器,但我不确定如何以及在之后如何使用此滤波器。想法?

这一行代码似乎让我感到疑惑 Kalman's filter to improve my face recognition,Kalman滤波器可用于平滑数据中的小方差,它无法帮助提高准确性。 它不是图像滤波器,而是将一些随机点作为输入,并尝试从中制作出平滑曲线。 https://www.google.co.in/search?espv=2&biw=1280&bih=597&tbm=isch&sa=1&q=kalman +filter&oq=kalman+filter&gs_l=img.3..0j0i67k1j0l8.2219.2219.0.2922.1.1.0.0.0.0.114.114.0j1.1.0 .... 0 ... 1c.1.64.img..0.1.113.6nct0qh9jKs#imgrc=LydPDl-i9rPIOM: - ZdaR
@ZdaR,正如我所写的那样,我从图像中获取了数字矩阵,因此我希望能够获得一些“更好”的值。 - smart
我在这里找到了一个使用卡尔曼滤波器的最佳答案。https://stackoverflow.com/a/53017661/7060530 - Sayed Mohsin Reza
1个回答

5

Opencv Python Documentation关于Kalman filter的文档很糟糕。这里有一个实现的好例子: https://raw.githubusercontent.com/tobybreckon/python-examples-cv/master/kalman_tracking_live.py

有一点让很多人困惑的是,Kalman filter没有初始化函数,这太烂了。因此,滤波器是一个“增量”。我的意思是,您总是需要使用初始值进行标准化。测量值应该校正为measure=measure-initial,预测值应该是prediction=prediction+initial。

希望这能给您提供一些帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接