【问题标题】:Python Face_Recognition with base64 encoded image带有 base64 编码图像的 Python Face_Recognition
【发布时间】:2021-06-11 21:59:21
【问题描述】:

我正在使用face_recognition 包进行人脸识别

输入图像文件是base64编码的,

我正在尝试解码数据和

face_recognition.face_encodings(decodedBase64Data)

我有面部编码数据列表来比较。

问题是我需要将 base64 数据转换为可以使用 face_encodings 编码的图像。

我试过了

decodedData = base64.b64decode(data)
encodeFace = np.frombuffer(decodedData, np.uint8)

并将encodedFace传递给

face_recognition.face_encodings(decodedBase64Data)

我收到错误Unsupported image type, must be 8bit gray or RGB image.

如何将base64转成face_encodings兼容的图片?

编辑:

附上代码供参考

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)

【问题讨论】:

    标签: python base64 face-recognition


    【解决方案1】:

    请分享代码以便更好地理解问题,或者您可以使用以下代码作为参考

    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```
    

    【讨论】:

    • 感谢回复,已附上代码
    • 使用下面的函数读取图片face_recognition.load_image_file()
    猜你喜欢
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 2018-11-22
    • 2014-01-06
    • 1970-01-01
    相关资源
    最近更新 更多