设计了一个关于OpenCV的Tk窗口视频流人脸识别,并且截图保存到文件夹,但是在保存完成后窗口卡死。希望大家能帮我看看,只要截图完成后窗口可以继续视频框选识别人脸就可以,万分感谢!
def video_loop(self, panela): #常规的窗口
success, img = self.camera.read(0) # 从摄像头读取照片
if success:
faces = faceCascade.detectMultiScale(img,
scaleFactor=1.5,
minNeighbors = 5,
minSize=(32,32)
)
for (x, y, w, h) in faces:
face = img[y:y + h, x:x + w]
eyes = eyesCascade.detectMultiScale(img, 1.1, 5)
#eye
for (x2, y2, w2, h2) in eyes:
cv2.putText(img, 'eyes', (x2 - 2, y2 - 2),
cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0))
cv2.rectangle(img, (x2, y2), (x2 + w2, y2 + h2), (0, 0, 255), 2)
# face
for (x,y,w,h) in faces:
cv2.putText(img, 'face', (x - 2, y - 2),
cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0))
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 255, 0), 2)
cv2image = cv2.cvtColor(img, cv2.COLOR_BGR2RGBA) # 转换颜色从BGR到RGBA
current_image = Image.fromarray(cv2image) # 将图像转换成Image对象
imgtk = ImageTk.PhotoImage(image=current_image)
panela.imgtk = imgtk
panela.config(image=imgtk)
self.root.after(1, lambda: self.video_loop(panela))
def saveImage(self): #second页面记录
if not os.path.exists('FaceData'): # 创建文件夹
os.mkdir('FaceData')
headers = {1}
cap = cv2.VideoCapture(0,cv2.CAP_DSHOW)
ok = True
face_count = 0
while ok:
try:
ok, img = cap.read()
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
key = cv2.waitKey(100)
faces = faceCascade.detectMultiScale(gray)
result = []
for (x, y, w, h) in faces:
face_gray = gray[y:(y+h), x:(x+w)]
if face_count < 100:
cv2.imwrite('FaceData/lxr.' + str(face_count) + '.jpg', face_gray)
face_count += 1
if face_count > 100:
for (x, y, w, h) in faces:
face = img[y:y + h, x:x + w]
eyes = eyesCascade.detectMultiScale(img, 1.1, 5)
#eye
for (x2, y2, w2, h2) in eyes:
cv2.putText(img, 'eyes', (x2 - 2, y2 - 2),
cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0))
cv2.rectangle(img, (x2, y2), (x2 + w2, y2 + h2), (0, 0, 255), 2)
# face
for (x,y,w,h) in faces:
cv2.putText(img, 'face', (x - 2, y - 2),
cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0))
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 255, 0), 2)
k = cv2.waitKey(1)
if k == 27:
break
except Exception as e:
暂时能想到是在截图到100张的时候重新开启显示
不知道你这个问题是否已经解决, 如果还没有解决的话:
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^