Webcamin bir objeyi takip etmesi nasil saglanabilinir?

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

Digimensch

Hayir cözemedim yukardaki söylenenleri denedim olmuyor.
salih18200 adli arkadas birseyden bahsetmis ama onuda anlayamadim, aciklik getirmesini istedim oda cevap yazmadi birdaha...

Seckin ALAN

hocam şöyle bir algoritma geliştirsen
objenin x ve y haraketlerini alababiliyorsun sanırım
objenin x ve y sini belirle eğer obje y düzleminde haraket ettiyse usbye bilgiyi gönder tabi burada sağa sola işini ayarlayabilmek için bir orijin belirlemek gerekiyor.
Orijinin Kameradan gelen görüntünün x ve y düzleminde ortası olsun, obje bu koordinata  koy.

bundan sonra işlem söyle ilerler obje x düzleminde haraket ettiyse objenin bulunduğu yeni  konumdan eski konumunu çıkart aradaki fark x düzleminde +10 px ise kamera sağa -10 ise kamera sola dönecek  tabi bunun yanında y düzleminin farkına bakmalısın buradaki fark illa 5 px vs olur onu dikkate almamalısın.
Sanırım anlattım rakamlar örnek salihte bunu anlatmak istemiş

Biz cisim takibini nasıl yapıyoruz gözümüz ile. İlk baş resmin ortasına sabitliyoruz sonra sağa sola yukarı aşağı takip ediyoruz
Kar taneleri ne güzel anlatıyor, birbirlerine zarar vermeden de yol almanın mümkün olduğunu.. Mevlana

xxlxxl

delphide yapadım yapılmış örnekler var hiç birinin sourcersini paylaşmamışlar delphiile alaklı bir örnek bulamadım uğraşmam içinörnek bulamadım

Digimensch

#48
Alıntı yapılan: Seçkin ALAN - 10 Kasım 2011, 23:54:11
hocam şöyle bir algoritma geliştirsen
objenin x ve y haraketlerini alababiliyorsun sanırım
objenin x ve y sini belirle eğer obje y düzleminde haraket ettiyse usbye bilgiyi gönder tabi burada sağa sola işini ayarlayabilmek için bir orijin belirlemek gerekiyor.
Orijinin Kameradan gelen görüntünün x ve y düzleminde ortası olsun, obje bu koordinata  koy.

bundan sonra işlem söyle ilerler obje x düzleminde haraket ettiyse objenin bulunduğu yeni  konumdan eski konumunu çıkart aradaki fark x düzleminde +10 px ise kamera sağa -10 ise kamera sola dönecek  tabi bunun yanında y düzleminin farkına bakmalısın buradaki fark illa 5 px vs olur onu dikkate almamalısın.
Sanırım anlattım rakamlar örnek salihte bunu anlatmak istemiş

Biz cisim takibini nasıl yapıyoruz gözümüz ile. İlk baş resmin ortasına sabitliyoruz sonra sağa sola yukarı aşağı takip ediyoruz

Sanirim anladim x koordinati icin örnek veriyorum
Yani söyle:
Objenin x koordinati=x diyelim


if(objenin aktuelkoordinati-objenin bir önceki koordinati==10)
motor 1 adim saga

if(objenin aktuelkoordinati-objenin bir önceki koordinati==-10)

motor 1 adim sola
ayni islemler y koordinatlari icinde yapilacak.

Ozaman ben Objenin son koordinatindan bir önceki koordinatinida devamli bilmem gerekecek.
Yani aktuelkoordinattan , bir önceki koordinati cikarabilmem icin, bir önceki koordinati nasil alacagim?

Yada bu farki aktuellkordinattan bir önceki kkordinata göre degilde
Picturebox1 in x koordinatina göremi yapsam!!?
Yani objenin x koordinati ile , picturebox1ìn x koordinati arasindaki farki alsam bu fark 10 ise sag dön, -10 olunca sola dön seklindemi yapsam?

RcALTIN

300x300 lük picturebox üzerinde, ekranın sağ alt köşesindeki nesneyi algıladığında 260,260 gibi bir koordinat elde edebiliyormusun?

evetse, o halde nesneyi ekranın tam ortasına getirmenin, yani 300x300 lük pbox için 150,150 koordinatında(bizim orijinimiz aynı zamanda) sabit tutmanın peşindeyiz.

nesne tanındıktan sonra aldığımız koordinat değerini x ve y ekseninde ayrı ayrı değerlendirerek 150 üstündeyse (+150) bir yöne, 150 altındaysa(-150) AKSİ yöne olmak üzere 2 eksende kamera hareketi sağlanmalı. hareketten kastım birer adım olmak zorunda, hassas bir step motor olabilir, ne kadar hassas o kadar mükemmel odaklanma...

gelen sonuca göre(hareketten sonra ki alınan yeni ekran görüntüsüne göre) bir sonraki hareketler aynen hesaplanmalı. ancak bunu hallettikten sonra önünüze sonsuz hareketlenme sorunu çıkacak, önlemek için bir sonraki adımda orijine yaklaşılacağı mı yoksa uzaklaşacağı mı hesaplanıp, artık hareketin kesilmesi(en yakın  pozisyonda sabit kalması) sağlanmalı.

ayrıca nesnenin ekranda kapladığı genişlik ve yükseklik değerlerinin de yarısını alıp orijini doğru bulmak için kullanmak gerekiyor, yoksa nesne ekrana sol üst köşesinden hizalanmış olur.

en basite indirgenmiş haliyle böyle yapılabilir, aforge.net içinde mutlaka vardır bunun hazır kütüphanesi, araştırmak gerek...
KİMSEYİ ENGELLEDİĞİM YOK, ÖZEL İLETİ DEVRE DIŞI !

Seckin ALAN

Tam olarak dediğin gibi ama elimde malzeme olmadığı için teorik bu.
param yatarsa bugün bir web cam alıp bir örnek yapmaya çalışırım. Elektronik malzemelerim memlekette şuan yurttayım sana nasıl olması gerektiğini yazarım artık pic ile sen haberleştirirsin.
Kar taneleri ne güzel anlatıyor, birbirlerine zarar vermeden de yol almanın mümkün olduğunu.. Mevlana

kralsam

Alıntı yapılan: Digimensch - 11 Kasım 2011, 00:39:21
Sanirim anladim x koordinati icin örnek veriyorum
Yani söyle:
Objenin x koordinati=x diyelim


if(objenin aktuelkoordinati-objenin bir önceki koordinati==10)
motor 1 adim saga

if(objenin aktuelkoordinati-objenin bir önceki koordinati==-10)

motor 1 adim sola
ayni islemler y koordinatlari icinde yapilacak.

Ozaman ben Objenin son koordinatindan bir önceki koordinatinida devamli bilmem gerekecek.
Yani aktuelkoordinattan , bir önceki koordinati cikarabilmem icin, bir önceki koordinati nasil alacagim?

Yada bu farki aktuellkordinattan bir önceki kkordinata göre değilde
Picturebox1 in x koordinatina göremi yapsam!!?
Yani objenin x koordinati ile , picturebox1ìn x koordinati arasindaki farki alsam bu fark 10 ise sag dön, -10 olunca sola dön seklindemi yapsam?

Hocam benim önceki yazımda bahsettiğim şekilde deneme yaptın mı? Ne gibi bir sonuç ortaya çıktı?

Birde zaten görüntüde Picturebox1 yani kamerada o anda görünen görüntünün merkezini alman lazım.

Seckin ALAN

Alıntı yapılan: Digimensch - 11 Kasım 2011, 00:39:21
Sanirim anladim x koordinati icin örnek veriyorum
Yani söyle:
Objenin x koordinati=x diyelim


if(objenin aktuelkoordinati-objenin bir önceki koordinati==10)
motor 1 adim saga

if(objenin aktuelkoordinati-objenin bir önceki koordinati==-10)

motor 1 adim sola
ayni islemler y koordinatlari icinde yapilacak.

Ozaman ben Objenin son koordinatindan bir önceki koordinatinida devamli bilmem gerekecek.
Yani aktuelkoordinattan , bir önceki koordinati cikarabilmem icin, bir önceki koordinati nasil alacagim?

Yada bu farki aktuellkordinattan bir önceki kkordinata göre değilde
Picturebox1 in x koordinatina göremi yapsam!!?
Yani objenin x koordinati ile , picturebox1ìn x koordinati arasindaki farki alsam bu fark 10 ise sag dön, -10 olunca sola dön seklindemi yapsam?

objenin x ve y değişkenlerini alıyorsun ya onlar için bir değişken ata
int eskix,eskiy;
timer koy 1snlik
timer 1 snyede bir eski x ve y değerlerini güncellesin sende güncel x ve y den eskileri çıkart
Kar taneleri ne güzel anlatıyor, birbirlerine zarar vermeden de yol almanın mümkün olduğunu.. Mevlana

Digimensch

Sonunda hallettim arkadaslar...
Biraz daha üzerinde calisilmali ama su an icin is bitti sayilir.
Webcam istedigim rengli objeyi algiliyor , ve objenin koordinatlarini takip edip kendisine bagli servo motorlar tarafindan o objenin koordinatlarina dogru dönderiliyor.
Iste son hali yardimci olan arkadaslara tesekkürler

kralsam

Tebrik ederim hocam :) Hangi yolu izlediğinizi bizimle paylaşabilirseniz bizede faydası olacaktır.
Teşekkürler.

crackerboy

#55
Bir zamanlar bahsettiğiniz konuda bir çalışmam olmuştu. Benim çözümüm ekranı 5 parçaya bölmekti. Ekranı 4 eşit diktörtgene/kareye bölüp tam merkezde bir odak bölgesi yani 5.bir kare seçiyordum.

Dört eşit parçaya bölmek pratikte takip edilecek nesne dört parçadan hangisi içine giriyorsa arkadaşların bahsettiği gibi basit X-Y düzlemindeki mesafe farkı algoritmaları ile halledilebiliyor. Ancak nesneye odaklanmanın yeterli olduğu, artık kameranın sabit kalması gerektiği gibi bir bilgi salih kardeşimizin de dediği gibi bir çözümle mümkün oluyor. Burada 5. kare yani odak merkezi alanına ait sınır bilgisi işin içine giriyor. Odak bölgesi için seçilen alan ister kare/diktörtgen ister dairesel bir alan olabilir size kalmış. Maksat takip edilen nesnenin kamera tarafından alınan görüntüde ortaya çekilmesi için çözüm üretmektir.


Bahsettiğim merkezdeki 5. karenin alanı ne kadar büyük seçilirse asıl görüntüye ait alana yani kamera kadrajına giren alanın tamamına o kadar yaklaşacaktır. Buradaki 5.karenin bir sonraki aşamada sizin için önemli sayılabilecek bir özelliği var: 2 Boyutta düzlemsel olarak takip edilen nesneye eğer kamera yaklaşmakta ise yani örneğin bir robot takip ettiği nesneye doğru yol almakta ve nesneye yaklaşmakta ise nesnenin boyu/kapladığı alan kameradan alınan görüntü üzerinde göreceli olarak büyüyecektir. İşte tam bu noktada nesneyi takip etmekte ve yaklaşmakta olan nesneye ne kadar yaklaşıldığını anlamak veye daha fazla yaklaşılmaması, yeterince yaklaşıldığının bilinebilmesi için 5. karedeki ilgili nesnenin kapladığı alan başlangıçta referans olarak kalibrasyon amacıyla girilerek size 3i boyuttaki nesneye doğru yaklaşma işleminin yeterli olduğu hakkında bilgi vermek amacıyla kullanılabilir.






Bir de nesneyi ortalamak için nesnenin uzakta veya yakında olması arasında ekranda ortalamak motora göndereceğiniz adım miktarından etkilenecektir.
Yani nesne yakındayken 10 derecelik adımlarla motor ortalama işlemi için çalışırken herşey normalken nesne uzakşlaşınca 10 derecelik adımlar büyük gelerek işler zorlaşacaktır.

... devam etmek isterdim...

Bahsettiğim şeyler işin biraz ayrıntısı oldu sanırım. Ama faydası olacağını umuyorum.
Matlab/OpenCV türü programlara ait forumlarda daha zengin içerik bulacağınız kanaatindeyim. ;)
♥ ♥ ♥ Varlıkla yokluk arasındaki ince bir çizgide ♥ ♥ ♥

e.mutef

Matlab ya da Labview ile yapabilirsin. Çalışma mantığı ise sürekli aldığın görüntüleri birbirinden çıkarıyorsun geriye takip ettiğin nesne kalıyor.