python利用opencv来写人脸识别运行没问题就是写的代码人脸部分没有框出来,如何解决?

import cv2
import tkinter
import tkinter.messagebox
import numpy as np
def face():
    #加载人脸识别的级分类器
    faceCascade = cv2.CascadeClassifier('D:/python/opencv/sources/data/haarcascades/haarcascade_frontalface_alt_tree.xml')
    #调用摄像头
    cap = cv2.VideoCapture(0,cv2.CAP_DSHOW)
    tkinter.messagebox.showinfo('提示', '注意:按下s后即可拍照。')
    tkinter.messagebox.showinfo('提示', '第一张图片若脸部未被框选住,请按空格键退出后重新进入')
    num=1
    #检测摄像头是否打开
    while (cap.isOpened()):
        #获取摄像头每帧图像
        ret,frame = cap.read()
        #显示所获取的摄像头的每帧图像
        cv2.imshow("Video",frame)
        k = cv2.waitKey(1)
        #按下空格后进入
        if k==32:
            #关闭摄像头
            cap.release()
            a = tkinter.messagebox.showinfo('提示', '结束')
            break
        if k== ord('s'):
            cv2.imwrite("D:/python/opencv/shuju/"+ids+"/"+ids+str(num)+".png",frame)
            img = cv2.imread("D:/python/opencv/shuju/"+ids+"/"+ids+str(num)+".png")
            #识别人脸
            faces = faceCascade.detectMultiScale(img,1.15)
            #框出人脸
            for(x,y,w,h) in faces:
                #绘制人脸位置的方框
                cv2.rectangle(img,(x,y),(x+w,y+h),(0,0,2550),5)
                cv2.imshow("img",img)
        num += 1
        cv2.waitKey()
        if num==4:
            a = tkinter.messagebox.showinfo('提示', '已录取完毕')
            break
    for cishu in range(1,100):
        csishu = 1
        if cishu <int(num):
            cishu+1
            print(cishu)
        else:
            print("结束")
            exit()
    cv2.destroyAllWindows()
face()