Python "type numpy.ndarray doesn't define round method" hatası

Endersqui

Femtopat
Katılım
19 Eylül 2023
Mesajlar
71
Daha fazla  
Cinsiyet
Erkek
Ekteki kod bir yüz tanımlama programına ait ama her çalıştırışımda aynı hatayı veriyor. "Hata: type numpy.ndarray doesn't define round method"
Python:
import cv2
from deepface import DeepFace
import numpy as np

# Yuvarlama işlevi
def round_value(value):
    return round(value)

# Gerçek zamanlı yüz tanıma ve yaş cinsiyet tahmini
def realtime_face_recognition():
    # Kamera açma
    video_capture = cv2.VideoCapture(0)

    while True:
        # Kameradan kare yakalama
        ret, frame = video_capture.read()
       
        # Giriş görüntüsünün uygun bir NumPy dizisi olduğunu kontrol etme
        if isinstance(frame, np.ndarray):
            try:
                result = DeepFace.analyze(frame, actions=['age', 'gender'])

                # Yaş ve cinsiyet tahmini için kullanılan değerleri yuvarlama
                age = round_value(result['age'])
                gender = result['gender']
               
                # Sonuçları çerçeve üzerine yazdırma
                cv2.putText(frame, f"Yaş: {age}", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 255), 2, cv2.LINE_AA)
                cv2.putText(frame, f"Cinsiyet: {gender}", (50, 100), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 255), 2, cv2.LINE_AA)

            except Exception as e:
                print("Hata:", str(e))
           
            # Çerçeveyi gösterme
            cv2.imshow('Video', frame)
       
        # Giriş görüntüsü uygun formatta değilse hata mesajı yazdırma
        else:
            print("Hata: Giriş görüntüsü uygun formatta değil.")
       
        # Çıkış için 'q' tuşuna basılmasını bekleyin
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    # Kamerayı serbest bırak ve pencereyi kapat
    video_capture.release()
    cv2.destroyAllWindows()

# Ana fonksiyonu çağırma
realtime_face_recognition()
 
Son düzenleyen: Moderatör:
Yapay zeka kullanmak yasak kardeşim,adam kendisi de ChatGPT’ye atabilir.

Dostum koduna biraz baktım. NumPy arrayi üzerinde doğrudan round fonksiyonunu kullanamazsın. Ya her elemanı ayrı ayrı yuvarlayacaksın ya da vectorize fonksiyonunu çağırarak elemanları tek tek dolaştırıp yuvarlatabilirsin. Sorununu çözdüm ve biraz güncelleme yaptım. İyi sosyaller.


Python:
import cv2
from deepface import DeepFace
import numpy as np

# Vektörleştirilmiş yuvarlama işlevi
vectorized_round = np.vectorize(round)

# Gerçek zamanlı yüz tanıma ve yaş cinsiyet tahmini
def realtime_face_recognition():
    # Kamera açma
    video_capture = cv2.VideoCapture(0)

    while True:
        # Kameradan kare yakalama
        ret, frame = video_capture.read()

        # Giriş görüntüsünün uygun bir NumPy dizisi olduğunu kontrol etme
        if isinstance(frame, np.ndarray):
            try:
                result = DeepFace.analyze(frame, actions=['age', 'gender'])

                # Yaş ve cinsiyet tahmini için kullanılan değerleri yuvarlama
                age = vectorized_round(result['age'])
                gender = result['gender']

                # NumPy dizilerini uygun formatta yazdırma
                if isinstance(gender, np.ndarray):
                    gender = ', '.join(gender)

                # Sonuçları çerçeve üzerine yazdırma
                cv2.putText(frame, f"Yaş: {age}", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 255), 2, cv2.LINE_AA)
                cv2.putText(frame, f"Cinsiyet: {gender}", (50, 100), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 255), 2, cv2.LINE_AA)

            except Exception as e:
                print("Hata:", str(e))

            # Çerçeveyi gösterme
            cv2.imshow('Video', frame)

        # Giriş görüntüsü uygun formatta değilse hata mesajı yazdırma
        else:
            print("Hata: Giriş görüntüsü uygun formatta değil.")

        # Çıkış için 'q' tuşuna basılmasını bekleyin
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    # Kamerayı serbest bırak ve pencereyi kapat
    video_capture.release()
    cv2.destroyAllWindows()

# Ana fonksiyonu çağırma
realtime_face_recognition()
 
Python'ın kendi round metodu yerine -görünüşe göre NumPy bu metodu desteklemiyormuş- NumPy'ın kendi numpy.ndarray.round metodunu kullanabilirsiniz. Alternatif olarak numpy.round da varmış. Genel olarak NumPy'ın kendi metotlarını tercih etmek performans açısından avantaj sağlayacaktır sanırsam, optimize bir şekilde implemente ediliyorlar çünkü.

numpy.ndarray.round ile gerekli düzenleme şu şekilde olmalı sanırsam:

Python:
# age = round_value(result['age'])
age = result['age'].round()
 

Geri
Yukarı