Picproje Elektronik Sitesi

BİLGİSAYAR => Donanım ve Yazılım => Konuyu başlatan: robikod - 11 Nisan 2022, 11:05:47

Başlık: Kamera verilerini işleme
Gönderen: robikod - 11 Nisan 2022, 11:05:47
Merhabalar şu şekilde bir sistem kurmak istiyorum bu konuda bana tavsiye verebilecek varsa çok sevinirim.

Kameradan bir video kaydı alacağım ve bu kayıttaki videoya efekt yapacağım. Aynı zamanda bu sistemin arkasında yüz tanıma özelliği de işliyor olacak.Aklıma bu veriyi video streaming ile server bilgisayara aktarıp orada işlemek geldi fakat bu son tercih edeceğimm konu olacak.
Kameraya bağlı bir esp32 modül ile bu işlem yapılabilir mi ? Ya da bir server bilgisayardan bağımsız şekilde, aldığım video verisinde işlemci üzerinde görüntü işleme efekt gibi işlemler yapabilir miyim ?

Bu konuda bana nasıl bir yol izlememi önerirsiniz ?
Başlık: Ynt: Kamera verilerini işleme
Gönderen: muhendisbey - 11 Nisan 2022, 12:03:17
Gerçek manada yüz tanıma için ESP yetersiz kalır. ESP kendi başına görüntü alma ve gönderme konusunda dahi fps değerleri iyi değil. Düşük çözünürlük kullansan bu sefer de yüzün kime ait olduğu değil sadece yüz var tanımlaması yapılabilir. Gerçek anlamda bir yüz tanıması için raspberry pi bile yavaş kalabilir, ama bir yere kadar da imkansız değil. Kullanıcı sayısı, ne kadar güvenlikli bir algoritma kullanıldığı burada belirleyici olacaktır.
Başlık: Ynt: Kamera verilerini işleme
Gönderen: power20 - 11 Nisan 2022, 12:16:44
Cep telefonundaki yüz tanıma özelliği başarılı gibi. Sanırım kemik yapısına bakılıyor. Yüz ifadesi, saç şekli vb önemli olmuyor. Bu mantıkla iş kolaylaşabilir.
Başlık: Ynt: Kamera verilerini işleme
Gönderen: robikod - 11 Nisan 2022, 13:08:09
Peki videodan kaydı alıp nasıl işlemeliyim ? Bunu illa bir bilgisayar mı yapmalı ? Python ile görüntü işlememi koşturmalıyım ?
Başlık: Ynt: Kamera verilerini işleme
Gönderen: kimlenbu - 11 Nisan 2022, 15:31:50
OpenCV benzeri bir kütüphane kullanabileceğiniz ve yeterli işlem gücüne sahip bir application processor kullanmanız gerekiyor. MCU ile çok zorlanırsınız, kaynaklar çok kısıtlı, harici ram kullansanız bu sefer kullanılan kütüphaneleri ekleyince bile kod alanına sığdırmak için iyice budamanız gerekecek.

Linux koşturan bir kart üzerinde hem kameradan rahatça veri alırsınız, hem depolama sıkıntınız olmaz, hem ram sıkıntınız olmaz. Nvidia jetson tarzı bir platform pahalı gelmezse tam aradığınız geliştirme ortamı.
Başlık: Ynt: Kamera verilerini işleme
Gönderen: robikod - 11 Nisan 2022, 15:47:47
Alıntı yapılan: kimlenbu - 11 Nisan 2022, 15:31:50OpenCV benzeri bir kütüphane kullanabileceğiniz ve yeterli işlem gücüne sahip bir application processor kullanmanız gerekiyor. MCU ile çok zorlanırsınız, kaynaklar çok kısıtlı, harici ram kullansanız bu sefer kullanılan kütüphaneleri ekleyince bile kod alanına sığdırmak için iyice budamanız gerekecek.

Linux koşturan bir kart üzerinde hem kameradan rahatça veri alırsınız, hem depolama sıkıntınız olmaz, hem ram sıkıntınız olmaz. Nvidia jetson tarzı bir platform pahalı gelmezse tam aradığınız geliştirme ortamı.

Peki mesela işlemleri uzak bir bilgisayarda yapmak istesem, kameraya bağlı bir esp32 modül ile görüntü verisini bu bilgisayara aktarıp opencv koştursam uygun olur mu ?
Başlık: Ynt: Kamera verilerini işleme
Gönderen: MC_Skywalker - 11 Nisan 2022, 15:53:18
Bu iş için OpenCV + Tensorflow/Pytorch ve RasPi 4 veya Nvidia Jenson Nano ailesinden bir ürün kulanmanız gerekli. Bilgisayar ile yapmak için en az CUDA: 10.2.460  destekli GPU barındıran ekran kartı işinizi görür.

Tanınacak yüzler için DNN (Deep Nural Network) eğitimek bayağı bir hesaplama gücü istiyor. Kişisel tavsiyem Nvidia Jetson Nano 4Gb kartını kullanmanız. Hem USB üzerinde webcam (logitec C270 gibi) baylabilir hem V2.0 RasPi cam modülü bağlaya bilirsiniz. Jetson Nano 2Gb olan versionu piyasada yok.

Alıntı yapılan: robikod - 11 Nisan 2022, 15:47:47Peki mesela işlemleri uzak bir bilgisayarda yapmak istesem, kameraya bağlı bir esp32 modül ile görüntü verisini bu bilgisayara aktarıp opencv koştursam uygun olur mu ?

RTMP ile stream edip daha son başk bir makinede videoyu işleyebilirsiniz. Ağ gecikmesini göz önüne almalısınız.
Başlık: Ynt: Kamera verilerini işleme
Gönderen: robikod - 11 Nisan 2022, 16:28:14
Alıntı yapılan: MC_Skywalker - 11 Nisan 2022, 15:53:18Bu iş için OpenCV + Tensorflow/Pytorch ve RasPi 4 veya Nvidia Jenson Nano ailesinden bir ürün kulanmanız gerekli. Bilgisayar ile yapmak için en az CUDA: 10.2.460  destekli GPU barındıran ekran kartı işinizi görür.

Tanınacak yüzler için DNN (Deep Nural Network) eğitimek bayağı bir hesaplama gücü istiyor. Kişisel tavsiyem Nvidia Jetson Nano 4Gb kartını kullanmanız. Hem USB üzerinde webcam (logitec C270 gibi) baylabilir hem V2.0 RasPi cam modülü bağlaya bilirsiniz. Jetson Nano 2Gb olan versionu piyasada yok.

RTMP ile stream edip daha son başk bir makinede videoyu işleyebilirsiniz. Ağ gecikmesini göz önüne almalısınız.

Teşekkür ederim bilgiler için, peki görüntü işleme aşamasını daha sonraya bıraksam görüntü aldığım videoyu başka bir noktaya göndermek için esp32 kullanabilir miyim ? Maliyeti düşük olduğu için şimdilik esp32 düşündüm.
Başlık: Ynt: Kamera verilerini işleme
Gönderen: MC_Skywalker - 11 Nisan 2022, 16:37:59
saniyede 1920 x 1080 x 30 = 62208000 bit veriyi gecikmesiz iletmezi gerekli FD istiyorsanız HD için 1280 x 720 x 30 = 27648000 bit veriyi gecikmesiz iletmelisiniz.

Tensorflow lite desteği ESP32-EYE kartına gelmiş https://www.espressif.com/en/products/devkits/esp-eye/overview
Tensorflow'un web sitesinden detay öğrenebilirsiniz https://www.tensorflow.org/lite/microcontrollers
Başlık: Ynt: Kamera verilerini işleme
Gönderen: robikod - 12 Nisan 2022, 16:20:41
Alıntı yapılan: MC_Skywalker - 11 Nisan 2022, 16:37:59saniyede 1920 x 1080 x 30 = 62208000 bit veriyi gecikmesiz iletmezi gerekli FD istiyorsanız HD için 1280 x 720 x 30 = 27648000 bit veriyi gecikmesiz iletmelisiniz.

Tensorflow lite desteği ESP32-EYE kartına gelmiş https://www.espressif.com/en/products/devkits/esp-eye/overview
Tensorflow'un web sitesinden detay öğrenebilirsiniz https://www.tensorflow.org/lite/microcontrollers

Yani bu kart ile yüz tanıma yapabilir miyim ?
Başlık: Ynt: Kamera verilerini işleme
Gönderen: MC_Skywalker - 12 Nisan 2022, 20:10:15
Alıntı yapılan: robikod - 12 Nisan 2022, 16:20:41Yani bu kart ile yüz tanıma yapabilir miyim ?

Kişi veya yüz algılama yapabilirsiniz. Yüz tanıma işi çok yüksek işlem gücü gerektirir sinir ağının eğitilmesi için.

Şöyle söyleyeyim şu örneği https://www.tensorflow.org/tutorials/keras/classification RTX3070 Max Q ile eğittiğimde laptop fanları jet motoru gibi çalışıyor ve GPU sıcaklığ 79 dereceye çıkıyor.

Eğitimi dışarda güçlü bir makinada yapıpı düşük güçlü rpi gibi bir doanımda tanımayı yapabilirsiniz.
Başlık: Ynt: Kamera verilerini işleme
Gönderen: kasif - 14 Nisan 2022, 09:32:59
ESP32-cam de yüz tanıma özelliği var, ama ne kadar sağlıklı ve güvenilir emin değilim. Aktif edince fps baya düşüyor nerdeyse 1 oluyor.

Yani var ama  :du:
Başlık: Ynt: Kamera verilerini işleme
Gönderen: robikod - 14 Nisan 2022, 14:39:49
Projemi maliyet açısında biraz değiştirdim, malum ekonomik problemler  ;)
Şu şekilde yapmayı düşünüyorum, bir kamera ile görüntü alıp bunu bir ekranda kullanıcıya göstermek. Bu görüntüyü bir web sitesi üzerinden kullanıcının indirmesini sağlamak.
Bunu minimum maliyetle nasıl yapabilirm ? Ne kullanabilrim bunun için ?
ESP cam'e baktım çözünürlüğü 2MP biraz daha yüksek bir çözüm arıyorum.
Başlık: Ynt: Kamera verilerini işleme
Gönderen: hasankara - 14 Nisan 2022, 16:03:43
esp32-s3-eye diye bir kit var araştırılabilir. Donanımsal olarak kamera ve lcd modülleri destekliyor. n8r8 de 8mbyte spi ram bulunuyor sanırım bir takım kütüphaneyi koşturmak için yeterli olabilir. https://www.youtube.com/watch?v=0ZkG02dX3ts&ab_channel=JoyWang
Başlık: Ynt: Kamera verilerini işleme
Gönderen: MC_Skywalker - 14 Nisan 2022, 17:19:21
Alıntı yapılan: robikod - 14 Nisan 2022, 14:39:49ESP cam'e baktım çözünürlüğü 2MP biraz daha yüksek bir çözüm arıyorum.

ESP cam üzerindeki OV2640_DS çipi UXGA (1632x1232). Siz 1920 x 1080 ~= 2MP den yüksek çözünürlük isitiyorsunuz internetinizinde Fiber olması gerekli.

Raspberriy Pi zero ve V1.3 MP lik kamerası işinizi görür.

Görütüye bakacak bilgisayra Python 3 https://www.python.org/downloads/release/python-386/ adresinden kurduktan sonra

pip kulanıp aşağıdaki modülleri kurun
Alıntı Yapopencv
numpy
imutils
pillow
imageio
imageio-mpeg
face_recognition
dlib

daha sonra
haarcascade-frontalface-default.xml dosyasını indirin videonuzun olduğu klasöre kopyalayın. aşağıdaki kodları py dosyası olarak kaydedip çalıştırın ve video içindeki yüzlerin bulunup işaretlenmesini bekleyin.

# Kütüphanelerimizi yükleyelim
import cv2 as cv
import imageio
# imageio kütüphanesini videoyu okumak ve video yazdırmak için kullanacağız
# Eğer imageio ve imageio-ffmpeg kütüphanesini yüklemediyseniz aşağıdaki terminal kodları ile yükleyebilirsiniz:
# pip install imageio
# pip install imageio-mpeg


# cv.CascadeClassifier fonksiyonu ile ön yüz cascade'imizi yüklüyoruz.
face_cascade = cv.CascadeClassifier('haarcascade-frontalface-default.xml')

# detect isminde bir fonksiyon oluşturalım. Burada frame adında bir parametre belirliyoruz. Bu fonksiyonu az sonra çağıracağız
def detect(frame):
    # Resmi gri renk şemasına dönüştürelim
    gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)

    # detectMultiScale() fonksiyonu ile verilen görüntüde CascadeClassifier fonksiyonu ile aldığımız cascade filtresini uyguluyoruz
    faces = face_cascade.detectMultiScale(gray, 1.1, 5)
    # Buradaki 1.1 değeri, resmin ne kadar küçültüleceğinin oranıdır
    # 5 değeri ise objenin minimum komşu sayısıdır


    # Birden fazla yüz olabilir. Bundan dolayı tamamını bir döngü içerisine yazacağız
    for (x, y, w, h) in faces:
        # Tespit edilen resimdeki yüzleri daha öncesinde gördüğümüz rectangle fonksiyonu ile kırmızı dikdörtgenler içerisine alıyoruz.
        cv.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 5)

        # Burada gri renk şeması üzerinde yüzün koordinatlarını belirliyoruz
        # y+h -> dikdörtgenin alt konumunu belirler
        # x+w -> dikdörtgenin sağ konumunu belirler
        gray_face = gray[y:y + h, x:x + w]

        # Burada da renkli resim üzerindeki yüzün koordinatlarını belirliyoruz
        color_face = frame[y:y + h, x:x + w]
        # Bu değerleri farklı şekillerde de kullanabilirsiniz

    # Sonrasında frame'i döndürüp fonksiyonu tamamlayalım
    return frame

# imageio kütüphanesini kullanarak girdi videomuzu okuyoruz
reader = imageio.get_reader('video.mp4')

# Burada fps ifadesini görüyoruz.
# Videolar saniyede peşpeşe 25-35 arası resimden oluşur. fps ifadesi de bunu ifade etmektedir.
fps = reader.get_meta_data()['fps']

# Burada da imageio kütüphanesinin writer fonksiyonunu kullanarak fps ile aldığımız resimleri videoya yazdırıyoruz
writer = imageio.get_writer('output.mp4', fps=fps)

# Aşağıdaki satır ile her bir fps için detect fonksiyonunu çalıştıracağız
for i, frame in enumerate(reader):
    # Yukarıda yazdığımız detect fonksiyonunu uyguluyoruz
    frame = detect(frame)

    # Buradaki append_data fonksiyonu ile her bir frame'i output videosuna ekliyoruz
    writer.append_data(frame)

    #Bir de kaçıncı frame'in işlendiğine bakalım
    print(i)

# Son olarak yazdığımız videoyu kapatalım
writer.close()



(https://postimg.cc/v1Lz1pQs)
(https://i.ibb.co/3YdM1nb/Ba-l-ks-z.png)
Başlık: Ynt: Kamera verilerini işleme
Gönderen: muhendisbey - 14 Nisan 2022, 23:09:56
Alıntı yapılan: MC_Skywalker - 14 Nisan 2022, 17:19:21ESP cam üzerindeki OV2640_DS çipi UXGA (1632x1232). Siz 1920 x 1080 ~= 2MP den yüksek çözünürlük isitiyorsunuz internetinizinde Fiber olması gerekli.

Burada internet ya da ağ hızından ziyade ESP'nin görüntü alma/tazeleme hızı sıkıntı olabilir. Anlıyorum ESP işlem gücü gereğince herhangi bir video/resim sıkıştırması uygulayamaz bu da ağda iyi bir trafik oluşturması demektir. Fakat ESP tam çözünürlükte bile olsa bu kadar büyük bir veriyi alıp-gönderebileceğini düşünmüyorum. Sorun ağdan kaynaklansa bile local ağ içerisinde bir düşüm görmemek lazım.

https://www.youtube.com/watch?v=w97zCZIOeWU
doğrudan 11:23'e atlayabilirsiniz.