Python'da yüz algılayınca ses kaydı çalıştırma

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.

2 Beğeni

cap = cv2.VideoCapture(0,cv2.CAP_DSHOW) Bu şekilde yaptığım zaman kamera açılmıyor cap = cv2.VideoCapture(0) Bu şekilde yapıyorum kamera açılıyor fakat yüz algıladığı zaman uygulamayı kaptıp şu şekilde bir hata veriyor
MCI başlatılırken bir sorun oluştu.
[ WARN:0@2.253] global D:\a\opencv-python\opencv-python\opencv\modules\videoio\src\cap_msmf.cpp (539) `anonymous-namespace’::SourceReaderCB::~SourceReaderCB terminating async callback

Son verdiğim koddan mı bahsediyoruz?

Kod şu an çalışıyor.

Herhangi bir hata da almıyorum.

son verdiğiniz warning, yani hata değil sadece uyaru onu dikkate almayın.

Yani şu an kodda hiç bir sorun yok.

Sizin hata aldığınız kodu verin onu deneyelim.

1 Beğeni

son verdiğin kodu direk yapıştırdım şu şekilde hata veriyo openCV ile alakalı olduğunu düşünüyorum.

File “c:\Users\ardao\Desktop\Proje\demo1.py”, line 17, in
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.error: OpenCV(4.5.5) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function ‘cv::cvtColor’

Şimdi şöyle yapalım:

import cv2


# Enable camera
cap = cv2.VideoCapture(0,cv2.CAP_DSHOW)
cap.set(3, 640)
cap.set(4, 420)



# 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)
     
    

    cv2.imshow('face_detect', img)
    if cv2.waitKey(10) & 0xFF == ord('q'):
        break
        
cap.release()
cv2.destroyWindow('face_detect')

Bu kod sorunsuz çalışıyor mu?

Deneyip yazar mısın?

hayır çalışmıyor şu şekilde bir hata veriyor
File “c:\Users\ardao\Desktop\Proje\demo1.py”, line 17, in
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.error: OpenCV(4.5.5) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function ‘cv::cvtColor’

import cv2


# Enable camera
cap = cv2.VideoCapture(0,cv2.CAP_DSHOW)

# 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)
     
    

    cv2.imshow('face_detect', img)
    if cv2.waitKey(10) & 0xFF == ord('q'):
        break
        
cap.release()
cv2.destroyWindow('face_detect')

Çözünürlük değerlerini çıkardım bir de böyle deneyelim. Belki kamera çözünürlüğünle alakalıdır.

import cv2

Enable camera

cap = cv2.VideoCapture(0)

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)

    

cv2.imshow('face_detect', img)

if cv2.waitKey(10) & 0xFF == ord('q'):

    break

cap.release()

cv2.destroyWindow(‘face_detect’)
Bu şekilde yaptığım zaman çalışıyor cap alakalı olabilir cap değiştirdiğim zaman çalışıyor.

Bu şekilde çalıştırdığında warning alıyor musun?

evet
[ WARN:0@5.185] global D:\a\opencv-python\opencv-python\opencv\modules\videoio\src\cap_msmf.cpp (539) `anonymous-namespace’::SourceReaderCB::~SourceReaderCB terminating async callback

Tamam ama yine de çalışıyor. Bunun nedenine ayrıca bakmamız gerekebilir. Asıl soruna odaklanalım.

Şimdi:

import cv2
import playsound

cap = cv2.VideoCapture(0)

enable = False

faceCascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")

while True:
    success, img = cap.read()
    imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    faces = faceCascade.detectMultiScale(imgGray, 1.3, 5) 

    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()
cv2.destroyWindow('face_detect')

Şu kodu kullanalım.

Burada eğer hata alırsan hata mesajını paylaşır mısın?

Bir de mp3 dosyanın adı buradaki gibi sample.mp3 olsun.

Bir de elinde wav dosyası varas onu deneriz.

2 Beğeni

Kamera açıldı ve müzikte çalıştı yardımın için teşekürler.

1 Beğeni

Tamam mıdır? İstediğimiz oldu mu?

1 Beğeni

üzerinde biraz geliştirme yapmam gerekicek yüz algılamadığında durdurması. sesi durdurması ve yüzü tekrardan algılayınca sesi baştan başlatması gerekiyor.

Dene yapamazsan yine beraber bakarız. Kolay gelsin.

2 Beğeni