人脸识别无法检测到人脸是否不在肖像上

时间:2018-08-01 05:56:25

标签: python opencv face-recognition

我尝试通过以下链接使用面部识别:face recognition

然后修改这样的代码main.py:

#!/usr/bin/env python
import cgitb, cgi
cgitb.enable()
print("Content-Type: text/html;charset=utf-8")

print "Content-type:text/html\r\n\r\n"
import base64
import simplejson as json
import re
import face_recognition
import numpy as np
import io
from imageio import imread
from PIL import Image
import datetime
import os, errno
import shutil

params = cgi.FieldStorage()
now = datetime.datetime.now()
date = str(now)
date2 = date.replace(" ","")
img = params.getvalue('img')
data1 = json.loads(img)
data2 = data1['img2']['data']

numparray = data1['img1']
numparray2 = numparray.replace(" ", "+")

b=bytes(numparray2)
imgdata = base64.b64decode(b)

os.makedirs(date2)
with open(date2+"/img1.png", "wb") as f:
    f.write(imgdata)

image = face_recognition.load_image_file(date2+'/img1.png')

try:
    face_encode = face_recognition.face_encodings(image)[0]
    #print("face_encode = ".format(face_encode))
except IndexError:
    print("encode image failed")
    quit()

known_faces = []
y = 1
for images in data2:
    ir = images.replace(" ", "+")
    ib = bytes(ir)
    imagedata = base64.b64decode(ib)
    x = str(y)
    with open(date2+"/compare"+x+".png", "wb") as g:
        g.write(imagedata)
    compare = face_recognition.load_image_file(date2+"/compare"+x+".png")
    try:
        compare_encode = face_recognition.face_encodings(compare)[0]
        #print("face_encode = ".format(face_encode))
    except IndexError:
        print("encode image compare failed")
        quit()
    known_faces.append(compare_encode)
    y = y+1

results = face_recognition.face_distance(known_faces, face_encode)

datahasil = []
#hasilakhir = "{"
for i, face_distance in enumerate(results):
    h = "{:.2}".format(face_distance, i)
    #hasilakhir = hasilakhir+"compare{}"
    datahasil.append(h)

hasilakhir = ','.join(datahasil)

shutil.rmtree(date2, ignore_errors=True)

print("{\"hasilcompare\" : \"" +hasilakhir+ "\"}")

最终结果是在2张图像之间进行比较并给出分数,以防图像上的照片比较成功,但是当其中一个图像不在potrait上(面部不在potrait上)或像面角大于90度时度,在catch编码中给出错误消息。.

在将2张图像发送到main.py以检测面部图像之前,我尝试了另一种面部检测方法,但是当无法检测到面部时,我尝试旋转图像,直到代码检测到面部为止,但有时面部检测可以检测到90度角的人脸,但是在人脸识别(main.py)中仍然无法读取人脸。

code of rotate is here, rotate.py:import numpy as np
import cv2
from scipy import ndimage, misc
import os
from PIL import Image


face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

for counter in range (0, 4):
    img = cv2.imread('img/1.jpg')
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)

    if(len(faces) == 1):
        i = False
        print ("face found")
        break
    else:
        print("no face found")
        i = False
        img = Image.open("img/1.jpg")
        img.rotate(90).save("img/1.jpg")

0 个答案:

没有答案