opencv人脸搜索M:N识别”,并进行识别结果的可视化

opencv实现实时识别人物,图片要提前录入到百度云中
目前的代码只可以拍照再识别,如何做到实时识别

from aip import AipFace
import cv2
import matplotlib.pyplot as plt
import math
import base64

from PIL import Image
cap = cv2.VideoCapture(0)# 检查摄像头是否成功打开
if cap.isOpened():
    print("摄像头已打开")
else:
    print("摄像头未能成功打开")# 循环读取摄像头捕捉到的图片
while(True):    # 读取摄像头捕捉到的图片
     ret, frame = cap.read()        # 显示图片
     cv2.imshow('jpg', frame)        # 按下 q 键退出循环
     if cv2.waitKey(1) & 0xFF == ord('q'):
         break# 释放摄像头资源
cap.release() # 关闭所有窗口
cv2.destroyAllWindows()# 将最后一帧保存为图片
cv2.imwrite("photo.jpg", frame)

# 定义常量
APP_ID = '34120523'
API_KEY = 'b4jbsXmYvEY4YlqDcHCgvdF9'
SECRET_KEY = 'GX6LfQmCkNRnXM4a8AMeqH0ZHglvK9Tk'
imageType = "BASE64"
groupIdList = "sina"  # 我的用户组,具体看创建什么
client = AipFace(APP_ID, API_KEY, SECRET_KEY)
filePath='photo.jpg'
f=open(filePath,"rb")
data = base64.b64encode(f.read())
#f.close()
image=str(data,'UTF-8')
options = {}
options["max_face_num"] = 3
options["match_threshold"] = 70
options["quality_control"] = "NORMAL"
options["liveness_control"] = "LOW"
options["max_user_num"] = 3
result=client.multiSearch(image, imageType, groupIdList,options)
print(result)

color1=(255,0,255)#设置好颜色
color2=(255,0,0)
thickness=4#组成矩形线条的粗细
img=cv2.imread("photo.jpg",1)
for j in result['result']['face_list']:
    left, top, width, height, ratation = (int(j['location'][x]) for x in j['location'])
    print(left, top, width, height)
    user_id = j['user_list'][0]['user_id']
    print(user_id)
    score1 = (j['user_list'][0]['score'])
    score = str(round(score1, 2))
    print(score)
    cv2.rectangle(img, (left, top), (left + width, top + width), color1, thickness)  # 矩形块块(图片,左上角坐标,右下角坐标,颜色,粗细)
    cv2.putText(img, user_id, (left, top), cv2.FONT_HERSHEY_COMPLEX, 1, color2,
                1)  # 块块上面的字体(图片,文字,位置,字体,字体大小,颜色,字体粗细)
    cv2.putText(img, score, (left, top + height), cv2.FONT_HERSHEY_COMPLEX, 1, color1, 2)

cv2.imshow("face_chose",img)
cv2.waitKey(0)
cv2.destroyAllWindows()







from aip import AipFace  
import cv2  
import matplotlib.pyplot as plt  
import math  
import base64  
  
from PIL import Image  
cap = cv2.VideoCapture(0) # 检查摄像头是否成功打开  
if cap.isOpened():  
    print("摄像头已打开")  
else:  
    print("摄像头未能成功打开")  
  
while(True):    # 读取摄像头捕捉到的图片  
     ret, frame = cap.read()        # 显示图片  
     cv2.imshow('jpg', frame)        # 按下 q 键退出循环  
     if cv2.waitKey(1) & 0xFF == ord('q'):  
         break # 释放摄像头资源  
cap.release() # 关闭所有窗口  
cv2.destroyAllWindows() # 将最后一帧保存为图片  
cv2.imwrite("photo.jpg", frame)  
  
# 定义常量  
APP_ID = '34120523'  
API_KEY = 'b4jbsXmYvEY4YlqDcHCgvdF9'  
SECRET_KEY = 'GX6LfQmCkNRnXM4a8AMeqH0ZHglvK9Tk'  
imageType = "BASE64"  
groupIdList = "sina"  # 我的用户组,具体看创建什么  
client = AipFace(APP_ID, API_KEY, SECRET_KEY)  
filePath='photo.jpg'  
f=open(filePath,"rb")  
data = base64.b64encode(f.read())  
#f.close()  
image=str(data,'UTF-8')  
options = {}  
options["max_face_num"] = 3  
options["match_threshold"] = 70  
options["quality_control"] = "NORMAL"  
options["liveness_control"] = "LOW"  
options["max_user_num"] = 10000  
  
# 进行面部检测和识别  
result = client.detect_face(image, imageType, **options)  
faces = result["faces"]  
if len(faces) > 0:  
    # 在这里可以对检测到的面部特征进行处理,比如识别出姓名、年龄等信息。  
    # 以下是一个简单的示例,仅输出检测到的面部特征数量。  
    print("检测到的面部特征数量:", len(faces))  
else:  
    print("未检测到面部特征")