[英]Python Face_Recognition with base64 encoded image
I'm using face_recognition package for face recognition我正在使用face_recognition package 进行人脸识别
Input image file is base64 encoded,输入图像文件是 base64 编码的,
I'm trying to decode the data and我正在尝试解码数据并
face_recognition.face_encodings(decodedBase64Data)
And i have face encoded data list to compare.我有面部编码数据列表进行比较。
The problem is i need to convert the base64 data to image that i can encode using face_encodings.问题是我需要将 base64 数据转换为我可以使用 face_encodings 进行编码的图像。
I tried with我试过
decodedData = base64.b64decode(data)
encodeFace = np.frombuffer(decodedData, np.uint8)
And pass the encodedFace to并将 encodedFace 传递给
face_recognition.face_encodings(decodedBase64Data)
I get error Unsupported image type, must be 8bit gray or RGB image.
我得到错误
Unsupported image type, must be 8bit gray or RGB image.
How to convert base64 into image compatible to face_encodings?如何将 base64 转换成与 face_encodings 兼容的图像?
Edit:编辑:
Code attached for reference附上代码供参考
import base64
import numpy as np
import json
import face_recognition as fr
with open('Face_Encoding_Data.json') as f:
EncodeJsonData = json.load(f)
personName = list(EncodeJsonData.keys())
encodedImgList = list(EncodeJsonData.values())
"""
EncodeJsonData = {"name1" : [encoded data 1], "name2" : [encoded data 2]}
128 byte
"""
base64Data = """ base64 encoded image with face """
encodeFace = np.frombuffer(base64.b64decode(base64Data), np.uint8)
matches = fr.compare_faces(encodedImgList, encodeFace, tolerance=0.5)
faceDist = fr.face_distance(encodedImgList, encodeFace)
matchIndex = np.argmin(faceDist)
name = "unknown"
if matches[matchIndex]:
name = personName[matchIndex]
print(name)
Please share the code for better understanding of problem or you can use below code as a refrence请分享代码以更好地理解问题,或者您可以使用以下代码作为参考
import cv2
import os
import numpy as np
from PIL import Image
import time
cap = cv2.VideoCapture(1)
count=1
path='dataset2'
img=[]
imagepath = [os.path.join(path,f)for f in os.listdir(path)]
c=len(imagepath)
#for i in imagepath: i access the each images from my folder of images
while count<=c:
image = face_recognition.load_image_file("dataset2/vrushang."+str(count)+".jpg")
#now i will make list of the encoding parts to compare it runtime detected face
img.append(face_recognition.face_encodings(image)[0])
time.sleep(1)
count=count+1
face_locations = []
face_encodings = []
face_names = []
process_this_frame = True
img2 = []
img2 = img[0]
print"this is img2"
print img
while True:
ret, frame = cap.read()
small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25)
if process_this_frame:
face_locations = face_recognition.face_locations(small_frame)
face_encodings = face_recognition.face_encodings(small_frame, face_locations)
face_names = []
for face_encoding in face_encodings:
match = face_recognition.compare_faces(img, face_encoding)
print match
if match[0]==True:
name = "vrushang"
elif match[1]==True:
name = "hitu"
elif match[3]==True:
name = "sardar patel"
elif match[2]==True:
name = "yaksh"
else:
name = "unknown"
face_names.append(name)
process_this_frame = not process_this_frame
for (top, right, bottom, left), name in zip(face_locations, face_names):
top *= 4
right *= 4
bottom *= 4
left *= 4
cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)
cv2.rectangle(frame, (left, bottom - 35), (right, bottom), (0, 0, 255), cv2.FILLED)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(frame, name, (left + 6, bottom - 6), font, 1.0, (255, 255, 255), 1)
cv2.imshow('Video', frame)
if cv2.waitKey(1)==27:
break```
have you solved this problem?你解决了这个问题吗? can you give me the program code?
你能给我程序代码吗?
import urllib.request as ur
import face_recognition as fr
image = 'Input image file is base64 encoded'
decoded= ur.urlopen(image)
image_loaded = fr.load_image_file(decoded)
=> for test: => 测试:
face_locations = fr.face_locations(image_loaded)
print("I found {} face(s) in this photograph.".format(len(face_locations)))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.