Webcamin bir objeyi takip etmesi nasil saglanabilinir?

Başlatan Digimensch, 11 Mart 2011, 14:20:17

iyildirim

Objenin ve pictureBox merkezlerinin X ve Y eksenin de ayrı ayrı farklarını alın.
Sonucun pozitif veya negatif olması önemli değil. Bunu servonuzun karakterine ve webcamin zoom miktarına göre belirlenecek bir katsayı ile çarpın. Eğer ekran koordinatları ve servo yönü ters ise katsayınızı negatif yapın. 
Sonucu servo açısı, veya PWM darbe süresi gibi düşünebilirsiniz.  Servonun o anki açısına bunu ekleyin.
Gerekirse PID gibi yöntemlerle ince ayar çekmek de mümkün..


Digimensch

#32


Sekilde görüdügü gibi pictureBox ve Objenin Merkez Koordinatlarini alabiliyorum.Ve bu Koordinatlari ortak bir kat sayiaya böylüyorum Servo motorlara gönderecegim Degerler haline getiroyrum.
Ama bir türlü Objenin merkezini Servo motorlara takip ettiremiyorum.
Cünkü Objenin merkezinin 5 ihtimal konumda olma olasiligi var.
Sol Üst kösede - Sag üst kösede - Sol Alt kösede - Sag Alt kösede - Merkezde(yani Picturebox'un tam ortasinda)
Buna göre söyle Kod yazdim ama bir türlü olmuyor.
x, y= PictureBoxun merkez koordinatlari
objectX, ObjectY= Objenin merkez Koordinatlari
                        
if (x < objectX | y < objectY)
                        {
                         x += 1;
                         y += 1;
                        }
                        if (x > objectX | y < objectY)
                        {
                            x -= 1;
                            y += 1;
                        }
                        if (x < objectX | y > objectY)
                        {
                           x -= 1;
                            y += 1;
                        }
                        if (x > objectX | y > objectY)
                        {

                           y -= 1;
                            x -= 1;

                        }
                        if (objectX == x | objectY == y)
                        {

                            y = objectY;
                            x = objectX;

                        }

                        motorControl(0, (byte)y); // Yukari-Asagi
                        motorControl(1, (byte)x); // Sag-Sol


Acaba nasil bir yöntem uygulamaliyim?
Not:ServoMotor1 ve Servomotor2'ye 1 ile 16 arasi degerlerin byte olarak gönderiyorum servolarin hareketleri icin.

Digimensch

Yardimci olabilecek arkadas yokmu?
Yada söyle sorayim?
Ben WebCam ile algiladigim bu objeye webcami odaklayip , objeye göre webcami nasil hareket ettireyim?

SERRO EFE

objenin merkezini takip etmek yerine objeyi ekranın ortasına yerleştirmeye çalışsan ,obje sürekli ekranın ortasında görünür

kralsam

#35
Hocam daha önce bu tarz uygulama yapmadım ama şöyle birşey düşündüm. Belki faydası olabilir.
Ekranda konum olarak zaten nesneleri işaretleyebiliyorsun sanırım. Dolayısıyla ekranı kartezyen kordinat gibi fark alarak değerlendirsen ve nesnenin düştüğü bölgeye göre konum bilgilerini göndersen sanırım sorunu halledebilirsin.

mesela yukarıdaki örnek resimde 11-7 = 4 birim sağa, 12-7= 5 birim aşağı gibi.

Nesne (x,y) = (3,5) olsaydı mesela 3-7 = -4 yani 4 birim sol, 5-7 = -2 yani 2 birim yukarı gibi..

Hocam birde paylaştığın kodu yeni inceledim. if sorgularını |(veya, hatta tam olarak veya sayılmaz.) yerine && ( ve ) ile yaparsan sorun çözülür diye tahmin ediyorum. Ama point point ilerleyeceğinden biraz yavaş bir çözüm olmuş olur.

İnşallah fikir verebilmişimdir. Sonuçları paylaşırsanız bizim içinde faydalı olacaktır. Kolay gelsin.

Digimensch

Alıntı yapılan: kralsam - 04 Kasım 2011, 15:17:27
Hocam daha önce bu tarz uygulama yapmadım ama şöyle birşey düşündüm. Belki faydası olabilir.
Ekranda konum olarak zaten nesneleri işaretleyebiliyorsun sanırım. Dolayısıyla ekranı kartezyen kordinat gibi fark alarak değerlendirsen ve nesnenin düştüğü bölgeye göre konum bilgilerini göndersen sanırım sorunu halledebilirsin.

mesela yukarıdaki örnek resimde 11-7 = 4 birim sağa, 12-7= 5 birim aşağı gibi.

Nesne (x,y) = (3,5) olsaydı mesela 3-7 = -4 yani 4 birim sol, 5-7 = -2 yani 2 birim yukarı gibi..

Hocam birde paylaştığın kodu yeni inceledim. if sorgularını |(veya, hatta tam olarak veya sayılmaz.) yerine && ( ve ) ile yaparsan sorun çözülür diye tahmin ediyorum. Ama point point ilerleyeceğinden biraz yavaş bir çözüm olmuş olur.

İnşallah fikir verebilmişimdir. Sonuçları paylaşırsanız bizim içinde faydalı olacaktır. Kolay gelsin.

Deniyecegim ...

Alıntı yapılan: SERRO EFE - 04 Kasım 2011, 14:29:20
objenin merkezini takip etmek yerine objeyi ekranın ortasına yerleştirmeye çalışsan ,obje sürekli ekranın ortasında görünür
Bu nasil olacak?

salih18200

Objeyi direk x,y gibi sabit bir noktaya odaklamaya çalışırsan bence kamera sürekli salınıma girer o noktaya odaklayamaz, kameranın okadar hassas hareket edeceğini sanmıyorum bu yüzden objenin orta noktasını kameranın orta noktasının belli aralıklarına getirmeye çalışsan daha iyi olur.

Demek istediğim obje merkezi (10,60) olsun picturebox'ın ortasıda (300,300) olsun, sen objenin merkezini direk (300,300) gelecek şekilde if şartları yazmktan ziyade. Objenin merkezini (300+-50,300+-50) gibi bir alana (kenarları 100pixel merkezde bir kare gibi düşün) getirmeye çalışsan daha sağlıklı olur.

Digimensch

#38
Alıntı yapılan: salih18200 - 05 Kasım 2011, 00:06:24
Objeyi direk x,y gibi sabit bir noktaya odaklamaya çalışırsan bence kamera sürekli salınıma girer o noktaya odaklayamaz, kameranın okadar hassas hareket edeceğini sanmıyorum bu yüzden objenin orta noktasını kameranın orta noktasının belli aralıklarına getirmeye çalışsan daha iyi olur.

Demek istediğim obje merkezi (10,60) olsun picturebox'ın ortasıda (300,300) olsun, sen objenin merkezini direk (300,300) gelecek şekilde if şartları yazmktan ziyade. Objenin merkezini (300+-50,300+-50) gibi bir alana (kenarları 100pixel merkezde bir kare gibi düşün) getirmeye çalışsan daha sağlıklı olur.
Biraz daha aciklama yapabilirmisin ?

xxlxxl

sayın arkadaşım güzel bir proje fakat webcamdaki objeyi nasıl yakalıyorsun bunun bir örneğini verirmisinben uydu anten ve pan tilt kontrol programı yazdım belki bu birleştirsek ola bilir fakat bilmediğim şu web camdaki objeyi nasaıl tespit ediyosun delphiile ilgili yardımcı ola bilirmisin

Digimensch

Alıntı yapılan: xxlxxl - 07 Kasım 2011, 18:12:25
sayın arkadaşım güzel bir proje fakat webcamdaki objeyi nasıl yakalıyorsun bunun bir örneğini verirmisinben uydu anten ve pan tilt kontrol programı yazdım belki bu birleştirsek ola bilir fakat bilmediğim şu web camdaki objeyi nasaıl tespit ediyosun delphiile ilgili yardımcı ola bilirmisin

Öncelikle bu isi C# ile yazdim.
Ikincisi hazir bir Kütüphane kullandim , delphide bunun adi hazir bir Compenent oluyor sanirim.
Kullandigim kütüphane adi Aforge , Delphi icin varmi bilmiyorum.
-Bu Aforge kütüphanesi ile görüntüyü alip Picturebox1'de gösteriyorum.
-PictureBox1 deki görüntüyü yine Aforgenin Methodlari ile Filtreliyorum(Sadece Mavi veya sadece Kirmizi Rengi alglatiyorum)
-Filtreleme ile algiladigimiz Rengin etrafini BlobCounter sinifi kullanarak Rectangle olusturup cevreliyorum.

xxlxxl

paylaşım yaparmısın bende delphide yapmak istiyorum yardımcı olurmusun teşekür ederim..

Digimensch

Tabiki buyur.
https://rapidshare.com/files/2857524543/Aforge_Color_Tracking.rar
dedigim gibi C# ile yazdim.Kameradan gelen görüntüyü mavi veya kirmizi sekilde secersen o renkdeki objeleri algilayip cevresini dikdörtgen ile kapladigini görürüsün...!

xxlxxl

teşekür ederim delphide uğraştım hep c ve bunun gibi dilleri pic programlama ve devre yapımlarında kullanıyorum fakat c dili neden görsel değil delphiye uyarlama şansım varmı acaba

Seckin ALAN

Kar taneleri ne güzel anlatıyor, birbirlerine zarar vermeden de yol almanın mümkün olduğunu.. Mevlana