import cv2
import playsound
# Enable camera
cap = cv2.VideoCapture(0,cv2.CAP_DSHOW)
cap.set(3, 640)
cap.set(4, 420)
enable = False
# import cascade file for facial recognition
faceCascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
while True:
success, img = cap.read()
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Getting corners around the face
faces = faceCascade.detectMultiScale(imgGray, 1.3, 5) # 1.3 = scale factor, 5 = minimum neighbor
# drawing bounding box around face
for (x, y, w, h) in faces:
img = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 3)
if enable== False:
playsound.playsound('sample.mp3', False)
enable = True
cv2.imshow('face_detect', img)
if cv2.waitKey(10) & 0xFF == ord('q'):
break
cap.release()
İlk aldığın
[ WARN:0@2.183] global D:\a\opencv-python\opencv-python\opencv\modules\videoio\src\cap_msmf.cpp (539) `anonymous-namespace’::SourceReaderCB::~SourceReaderCB terminating async callback
Mesajı hata değil uyarı. Kapatırken sorun olduğunu bildiriyor.
cap = cv2.VideoCapture(0,cv2.CAP_DSHOW)
Satırı ile bu sorunu çözüyoruz.
Yüzü tespit ettiği an, for döngüsünün içinde tespit edilen bütün yüzler için tekrarlıyor ama biz bunu istemiyoruz, yüzü ilk tespit ettiğinde bir kere çalmasını ve arka planda çalmasını istiyoruz.
Bir sample mp3 dosyası buldum internetten. Kodun olduğu klasöre koydum.
Sonra enable değişkeni ile bir kez sesin çalması için ufak bir ekleme yaptım.
Şimdi yüzü görünce müziği çalıyor ve her hangi bir uyarı yada hata vermiyor.
Kod geliştirilebilir.
Aynı anda birden çok yüz olursa ne olur peki bu da ayrı bir soru.
Ve yüzü ikinci kez görürsek nasıl tekrar çaldırabiliriz bu da bir başka soru.
Ama. Başlıktaki sorunun cevabı olan kod yukarıda.