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("未检测到面部特征")
可以明显看出,图像中原先对比度不强的部分,如树干、江面、远景。经过增强后,都有了明显的改善,而本身对比度已经明显的区域,就没有太大的改变。
已完。。