我正在做一个face recognition
项目,在这个项目中,我正在识别运动中的人的脸,这意味着这个人一直在移动,我必须检测和识别人脸。
为了做到这一点,我使用caffemodel
进行人脸检测,并使用改进的knn方法进行人脸识别。它工作得很好,但在大多数情况下,它给出了错误的识别。因为人是移动的,所以很难得到好的人脸图像。下面是几个捕获的人脸的例子:
摄像头被放置在离人稍远的地方,这是因为它不是很清晰和正面的脸。人脸图像大小为100x120。我必须使用这些图像来进行人脸识别。我想知道是否有人可以指导我在识别之前可以使用的一些预处理方法,以便提高准确性。请帮帮忙。谢谢
发布于 2020-08-26 15:16:20
如果您有不同的降级(模糊、极端姿势、照明等)knn方法很糟糕。如果你有数据,我建议你使用经过降级和姿势(Megaface)训练的小型神经网络。它会有更好的识别精度。当然,对于实时应用,您应该使用较小的网络。除了我的建议之外,还有几种用于人脸识别的预处理方法。第一个是面部对齐,它扭曲面部以获得相同的对齐,以获得更好的准确性。为了进行比对,有一些地标预测模型可以找到68个地标点(例如鼻子、眼睛、嘴巴)。在脸上。然而,在极端姿势中(右上角)对齐是不够的。
发布于 2020-08-26 15:26:54
因为你是dong人脸识别,所以只需要人脸的细节,而不是周围的环境。周围的物体会因为误报而降低准确性。您可以按照以下步骤来提升画质:
步骤1:仅使用haarcascade检测人脸
face_cascade = cv2.CascadeClassifier(‘haarcascade_frontalface_default.xml’)
faces_detected = face_cascade.detectMultiScale(img, scaleFactor=1.1, minNeighbors=5)
(x, y, w, h) = faces_detected[0]
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 1);
cv2.imshow(img)
步骤2:裁剪图像
p = 20 #padding
img_cropped = img[y-p+1:y+h+p, x-p+1:x+w+p]
步骤3:重塑为原始大小
im_reshape = cv2.resize(img_cropped , (img.shape[0], img.shape[1]), interpolation=cv2.INTER_LINEAR)
步骤3:对图像进行归一化以固定亮度
norm_img = np.zeros((img.shape[0], img.shape[1]))
norm_img = cv2.normalize(img, norm_img, 0, 255, cv2.NORM_MINMAX)
第3步:norm_img
到caffemodel
这种方法可以显著提高精度。
发布于 2020-08-28 01:01:17
你能做的最好的预处理方法是去除闪电效应。
假设您有以下图像:
你怎么才能找到那张脸?或者那张脸在哪?
在目前的情况下,即使用人眼也不可能在图像中找到人脸。
如果我们应用GaussianBlur
至少我们可以看到人脸在图像中的位置。
import cv2
img = cv2.imread('input.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
smooth = cv2.GaussianBlur(gray, (125,125), 0)
division = cv2.divide(gray, smooth, scale=255)
cv2.imwrite('output.jpg',division)
现在,我们如何定位这张脸?
上面是一张具有挑战性的图片,你可以在其中测试你的方法。由于上述图像不能被Haar和face-recognition检测到。如果你的方法找到了它,你就可以确定你的方法。
例如:
下面的图像可以通过类似Haar的特征找到。因此,您的方法必须检测下图。否则,您应该更改您的方法。
使用Haar的
img = cv2.imread('face_shaded_division.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
face_cascade = cv2.CascadeClassifier('/opencv/data/haarcascades/haarcascade_frontalface_default.xml')
faces = face_cascade.detectMultiScale(img, 1.3, 5)
for (x,y,w,h) in faces:
img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
roi_gray = gray[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w]
cv2.imwrite('output.png', img)
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
可能的问题你为什么不提到人脸对齐?
最具挑战性的事实是人脸识别中的闪电效应。如果你的方法解决了这个问题,你所能做的就是用更多的样本训练你的网络,或者你可以使用预先训练好的网络。
https://stackoverflow.com/questions/63592160
复制相似问题