Окно не всплывает для cv2 и caffe - PullRequest
0 голосов
/ 29 февраля 2020

Я пытаюсь загрузить видео на YouTube, наложить рамку на лицо и предсказать их возраст и пол. Однако когда я запускаю код, он просто выполняется, но всплывающее окно не появляется. Мой код ниже. Я не уверен, где проблема. Спасибо за вашу помощь, ребята

import pafy
import cv2

url = 'https://www.youtube.com/watch?v=dTL7LriRZJQ'    #URL that you want to copy
vPafy= pafy.new(url) #get URL and get best mp4 video 
play = vPafy.getbest(preftype="mp4")

#Video capture
cap = cv2.VideoCapture(play.url) 

MODEL_MEAN_VALUES = (78.4, 87.7, 114.9)
age_list = ['(0, 2)', '(4, 6)', '(8, 12)', '(15, 20)', '(25, 32)', '(38, 43)', '(48, 53)', '(60, 100)']
gender_list = ['Male', 'Female']

# defining a function to load prototxt & caffe 
def init_caffe_models():
    age_net = cv2.dnn.readNetFromCaffe('/Users/Desktop/Gender-and-Age-Detection-master/age_deploy.prototxt', '/Users/Desktop/Gender-and-Age-Detection-master/age_net.caffemodel')
    gender_net = cv2.dnn.readNetFromCaffe('/Users/Desktop/Gender-and-Age-Detection-master/gender_deploy.prototxt','/Users/Desktop/Gender-and-Age-Detection-master/gender_net.caffemodel')
    return(age_net, gender_net)

# defining a function for capturing the video
def video_detector(age_net, gender_net):
    font = cv2.FONT_HERSHEY_SIMPLE

    while True:
        ret, frame = cap.read()     #returns a boolean    
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        face_cascade = cv2.CascadeClassifier('/Users/Desktop/OpenCV-Python-Series-master/src/cascades/data/haarcascade_frontalface_default.xml')
        faces = face_cascade.detectMultiScale(gray, 1.1, 5) # input = grey image, 1.1 = scale factor


    for (x, y, w, h )in faces: #looping through faces and drawing a rectangle with cv2.rectangle 
        cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 255, 0), 2)
        face_img = image[y:y+h, x:x+w].copy()    
        blob = cv2.dnn.blobFromImage(face_img, 1, (227, 227), MODEL_MEAN_VALUES, swapRB=False)

        #Predict Gender
        gender_net.setInput(blob)
        gender_preds = gender_net.forward()
        gender = gender_list[gender_preds[0].argmax()]
        print("Gender : " + gender)

        #Predict Age
        age_net.setInput(blob)
        age_preds = age_net.forward()
        age = age_list[age_preds[0].argmax()]
        print("Age Range: " + age)

        overlay_text = "%s %s" % (gender, age)
        cv2.putText(frame, overlay_text, (x, y), font, 1, (255, 255, 255), 2, cv2.LINE_AA)
        cv2.imshow('frame', frame)  
#0xFF is a hexadecimal constant which is 11111111 in binary.
        if cv2.waitKey(20) & 0xFF == ord('q'): 
            break
    cap.release()
    cv2.destroyAllWindows()

Запуск этого действительно вытаскивает окно, хотя

import pafy
import cv2

# get api key, and dont name the file pafy/Pafy
url = 'https://www.youtube.com/watch?v=dTL7LriRZJQ'    #URL that you want to copy
vPafy= pafy.new(url,basic=True) #get URL and get best mp4 video 
play = vPafy.getbest(preftype="mp4")

cap = cv2.VideoCapture(play.url) #cap = cv2.VideoCapture(0) only for webcam
cap.set(3, 480) #set width of the frame
cap.set(4, 640) #set height of the frame 

while True:
    ret, image = cap.read()  
    cv2.imshow('frame',image)
    if cv2.waitKey(20) & 0xFF == ord('q'):
        break    

cap.release()
cv2.destroyAllWindows()

1 Ответ

0 голосов
/ 04 марта 2020

У вас есть две функции video_detector () и init_caffe_models (), которые никогда не вызывались. Ваш код просто достигает пола_символа = ["Мужской", "Женский"], а затем завершает работу, не входя в эти две функции.

...