cv2.CascadeClassifier使用

这是opencv自带的人脸识别。

需要加载已经训练好的分类器,是.xml文件(其实图像识别不一定非要用deep learning,只不过用神经网络更好效果更好)

下载方法:https://blog.csdn.net/lusics/article/details/88149195

只需要将分类器和代码放到一起就可以

代码中,根据实际位置更改load路径。


import cv2
 
# 加载opencv自带的人脸分类器
faceCascade = cv2.CascadeClassifier("haarcascade_frontalface_alt2.xml")
faceCascade.load(r'C:\workspace\python\opencvTongueDetect\haarcascades\haarcascade_frontalface_alt2.xml')

cap = cv2.VideoCapture(0)
flag = 0
timeF = 10
while True:
    flag+=1
    ret, frame = cap.read()
    img = frame.copy()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    rect = faceCascade.detectMultiScale(
        gray,
        scaleFactor=1.15,
        minNeighbors=3,
        minSize=(3,3),
        flags = cv2.IMREAD_GRAYSCALE
    )
    #cv2.rectangle(frame, (20, 40), (30, 50), (0, 255, 0), 2)
    for (x, y, w, h) in rect:
        cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
        #识别到物体后进行裁剪保存
        #jiequ = img[x:(x+w), y:(y+h)]
        #cv2.imwrite('E://tools//python//eclipse//work//pythonTest//demo//0202//img//save//'+str(flag) + '.jpg',jiequ) #save as jpg
 
    #读取到保存图片
#     if(flag%timeF==0):
#         cv2.imwrite('E://tools//python//eclipse//work//pythonTest//demo//0202//img//save//'+str(flag) + '.jpg',frame) #save as jpg
 
 
    cv2.imshow('frame', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

其实我们可以自己训练分类器。

参照:舌头位置识别

1-收集特征图像

2-生成样本vec文件

3-训练分类器

使用提供的例程无法定位舌头,推断需要根据重新训练。


import cv2
 
# 加载训练好的分类器
faceCascade = cv2.CascadeClassifier("cascade.xml")
faceCascade.load(r'C:\workspace\python\opencvTongueDetect\xml\cascade.xml')
cap = cv2.VideoCapture(0)
flag = 0
timeF = 10
while True:
    flag+=1
    ret, frame = cap.read()
    img = frame.copy()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    rect = faceCascade.detectMultiScale(
        gray,
        scaleFactor=1.15,
        minNeighbors=3,
        minSize=(3,3),
        flags = cv2.IMREAD_GRAYSCALE
    )
    #cv2.rectangle(frame, (20, 40), (30, 50), (0, 255, 0), 2)
    for (x, y, w, h) in rect:
        cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
        #识别到物体后进行裁剪保存
        #jiequ = img[x:(x+w), y:(y+h)]
        #cv2.imwrite('E://tools//python//eclipse//work//pythonTest//demo//0202//img//save//'+str(flag) + '.jpg',jiequ) #save as jpg
 
    #读取到保存图片
#     if(flag%timeF==0):
#         cv2.imwrite('E://tools//python//eclipse//work//pythonTest//demo//0202//img//save//'+str(flag) + '.jpg',frame) #save as jpg
 
 
    cv2.imshow('frame', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

猜你喜欢

转载自blog.csdn.net/lusics/article/details/88149404