Webcamin bir objeyi takip etmesi nasil saglanabilinir?

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

Klein

Alıntı Yap
C#'i yeni yeni kavramaya calisiyoruz tutmusunuz OpenCV den bahsediyorsunuz
Doğrudur!
Birisi bir soru sorduğunda eski mesajlarına bakmıyorum. Kişinin  yeterliliğini sorgulamıyorum. Kardeşim madem bu kadar bilgin var niye böyle bir projeye hevesleniyorsun demiyorum. Kim ne sorarsa sorsun, acemi-usta ayrımı yapmadan en doğru cevabı vermeye çalışıyorum. Bazen bu yüzden sazan durumuna düştüğüm de oluyor.

Görüntü işleme gibi oldukça ileri seviye bir uygulamayı hedefleyen birinin , daha önce bununla ilgili yeterli araştırmayı yapmış olduğunu ve kendisini bu iş için yeterli gördüğünü varsayarak cevap yazıyorum.
Görüntü işlemeyi hedefleyen birinin OpenCV kütüphanesini kullanabilecek yeterlilikte olduğunu varsaymak sanırım hata. Bu konuda özür diliyorum.

Alıntı YapBakin kimse kimseyi Cevap yaz diye zorlamiyor.Istemeyen Cevap vermez !!!

Zaten istemeyen cevapvermiyor. Birisi bir soruya cevap veriyorsa , soru soranın yapmadığı veya yapamadığı araştırmayı kendisi yapıp , sağdan soldan link, doküman vs... buluyorsa zaten bunu istediği için yapıyordur.

Alıntı YapNeden her konuda butür Cevaplar veriliyor , neden insanlarimiz "aman sende"  türü Cevaplar yaziyor anlamiyorum !!!
"Aman sende" türü bir cevap şöyle olabilirdi.
"Kardeşim bu iş çok zor bi iş , uğraşma böyle işlerle."
Ya da "Standart webcam'de bile var git webcam al onun yazılımı işini görür."
Ama gecenin bir yarısı OpenCV ile ilgili onlarca dokümanı tarayıp , içerdikleri kodlara göz atıp en basit uygulanabilir kodu bulup linkini yazmışım.
Sizce bu "aman sende" türü bir cevap mı?

Alıntı Yap"Bir sorun için aynı öneriyi iki kez tekrarlamayı sevmiyorum" türü cevaplar veriyorsunuz.
Evet aynı öneriyi iki kez tekrarlamayı sevmiyorum. Çünkü:
Bir öneride bulunuyorsunuz , bir sebeple pas geçiliyor. Sebebin ne olduğu önemli değil. Ve aynı öneriyi ikinci kez tekrar ettiğinizde , "benim önerim en güzeli , lütfen benim önerimi değerlendirin" , " Bir şey söyledim ama siz ciddiye almadınız ,noolur beni ciddiye alın" der gibi bir duruma düşüyorsunuz. Ya da ben böyle bir duruma düşeceğimi zannediyorum. Bu yüzden de önerim pas geçilmişse , bir sebebi vardır diye üzerinde durmuyorum.  Dikkat edin , bir mesaja iki kez cevap vermeyi sevmiyorum demedim. Aynı öneriyi iki kez tekrar etmeyi sevmiyorum dedim.
Ama sizin mesajınıda bunu yapmadım. Çünkü mesajınızı ciddiye almıştım. Ne duruma düşeceğimin önemi yok ,ben bir kez daha tekrar edeyim ki bunun üzerinde bir daha düşünsün dedim. 

Kolay gelsin!   

Digimensch

Lütfen siz bana artik Cevap vermeyin.Benim yazdigim bir Topigi gördügünüzde icerigine dahi bakmayin.Sizin bilginiz sizin olsun.
Ilk cevabiniz Böbürlenme kokuyor !!!

Digimensch

#17
Arkadaslar Projemi su hale getrimis bulunmaktayim.
WebCami iki Servomotor ile USB üzerinden ve kendi yazdigim yazilimla Kontrol edebiliyorum.
PC üzerinde su an iki yazmis oldugum yazilim kullaniyorum.Ama ilerde ikisini birlstirip teke indirecegim.
1.yazilim WebCam görüntüsünü alan
2.yazilim Servo Motorlari USB üzerinden kontrol eden

Neyse amacim simdi Color Tracking olayini , WebCam görüntüsünü aldigim yazilim üzerinde gerceklestirip Trackin olayina göre Servo Motorlarin hareketlerini yönlendirmek.
Acaba bu isi uygulamis Turkce örnek kaynak varmi yada elinde örnek olan varmi?

FullMetal

Selam,

CMUCam ile ilgili birkaç türkçe kaynağa rastladım, google dan bulabilirsin. Projenin amacı nedir? Tam olarak ne yapmak istiyorsun?

İyi çalışmalar.

eseneren

Selam,
webcam 1 usb, servo controller farklı bır usb ıle mı calısıyor .?
Seçim yapmak için durum hakkında bilgi sahibi olmak zorunda değilsin, sonucuna hazır olmak için durum hakkında kaygılanırsın.  http://bit.ly/gixfTk

Digimensch

#20
@FullMetal
Örnegin bir Cismi izleyen Robot Araba.
Ama Camaradan görüntü üzerinde  bir Objeyi nasil algilayabilirim? Örnegin kirmizi Rengi?
Konunun basinda verdigim Film örnegindeki gibi..
Neyse sanirim burda Cevabima yanit bulamiyocagim !!
En iyisi C# programlamanin agirlikli olarak yer aldigi Forumlarda soruma cevap aramak.


Alıntı yapılan: eseneren - 15 Mart 2011, 13:25:27
Selam,
webcam 1 usb, servo controller farklı bır usb ıle mı calısıyor .?

Evet malesf öyle.
Web Cam ayri ve PIC18F4550 ayri USB üzerinden Sisteme tanitiliyor.
Yanliz Filmde pek görünmüyor ama PIC bir Deneme karti üzerinde su an.

Digimensch

#21
Calismamin son hali...


- 2 Servo Motor
- 1 WebCam
- PIC deneme Karti
- PIC 18F4550

Calismam kisaca söyle:
USB HID ile PIC Kard üzerindeki USB Destekli PIC 18F4550 'ye komutlar göndermek ve bu Komutlara göre kendisine bagli Servi Motorlari
hareket ettirmek.

Artik Color veya Objeckt Tracking olayina baslayacagim insallah sonuc alirim...

eseneren

Hocam eline saglık cok guzel yapmıssın, bende aynısını yapmak ısterdım.
Programın da led yak sondur var sanırım onlar kamera ustundekı ledlerı yakıp sondurmek ıcın.

Fıkır vermek amaclı; yerınde olsam ley yak sondur butonu yanına otomatık dıye buton koyup aktıflendıgınde 1 sn aralıklarla kamera fotoya gore ısık bellı sevıyenın
altına dustunde ledı yakar bellı degerın ustunde ıkende sonuk yapardım.

Web cam ıle goruntuyu nasıl aktardın bılmıyorum ama onu resım olarak algılatabılır isen resımdekı toplam renk degerını hesaplayacak alt programı yazıp yollayabılırım faydası olacak ıse.

Elıne saglık... Saygılar
Seçim yapmak için durum hakkında bilgi sahibi olmak zorunda değilsin, sonucuna hazır olmak için durum hakkında kaygılanırsın.  http://bit.ly/gixfTk

Digimensch

Görüntüyü bir picturebox aliyorum.Hatta filtrelemed yapabiliyorum.
sorunum simdi filtreleme yaptigimda örnegin sadece kirmizi rengi algilamak istiyorum.
Örnegin kirmizi rengi picturebox icinde algilayacak ve o kirmizi rengin etrafina bir kare cizmek, bu kirmizi rengin o anda picturebox üzerindeki koordinatlarini almak istiyorum...
Bunu c# ile nasil yapabilirim bir fikir verirseniz sevinirim.

Digimensch

#24
en sonuda yukardaki Projemin yazilim kismina Color Tracking olayinida ekledim.
Su an ekrandaki bir rengi algilayip o rengi dikdörtgen ile cevreleyebiliyorum.


Simdi sorunum su:
WebCam yine kendimin kontrol ettigi Servo Motorlar üzerinde.Dikkat ederseniz Programdada iki tane TrackBar var bu trackbarlarla servo motorlari saga-sola ve yukari-asagiya oacak sekilde hareket ettiriyorum.
Istedigim olay su:
Ben webCam önündeki renkli objeyi hareket ettirdigimde WebCam da o objeyi takip etsin.
Bunun icin Program üzerinde bulunan pictureBox1 in tam orta nokta koordinatlarini
int x=pictureBox1.Width/2;
int y=pictureBox1.Height/2; seklinde aliyorum.
Yine Ekran icindeki Renkli objeninde tam orta nokta koordinatlarinida
int objectX = objectRect.X + objectRect.Width / 2;
int objectY = objectRect.Y + objectRect.Height / 2; seklinde aliyorum.Simdi PictureBox1 in orta noktasi elimde , objenin orta noktasida elimde.
Nasil bir yöntem izleyimki , renkli objenin orta noktasini , picturebox1'in orta noktasina getireyim.
Bunu yaptigimda webcam picturebox1'in orta noktasina , renkli objenin orta noktasini getiecek böylece renkli obje devamli ekranin orta noktasinda cekilecegi icin webcam kendini renkli objeye cevirmis olacak.
Bu isi nasil yapabilirim nasil bir mantik veya yöntem uygulayabilirim.
Yardimci olacak olan arkadaslara simdiden tesekkürler.

justice_for_all

guzell calisma hocam peki kameradan goruntu almak icin herhangi bir visual studio eklentisi kullandinizmi?
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

mozkan87

Aslında sen gerekli olan bütün malzemeleri çıkartmışsın. Bu nu video olarak değilde 2 adet frame olarak ele alırsak. Sana lazım olan 1. frame deki renkli objenin koordinatları ve 2. frame deki objenin koordinatları. Bu bilgiler zaten sende mevcut. Yapman gereken PID mantığı ile 2. frame deki objeyi picturebox'ın orta noktasına almak. Ama daha ilkel olarak düşünürsek 1. frame deki objenin yeri ile 2. frame deki objenin yeri arasındaki farkı alıp objenin ne tarafa hareken ettiğini bulmak ve ona göre step motora veri göndermek.

Digimensch

#27
 Aforge kütüphanesini kullandim am VS kütüphanesi değil.
Alıntı yapılan: mozkan87 - 17 Ekim 2011, 23:27:49
Aslında sen gerekli olan bütün malzemeleri çıkartmışsın. Bu nu video olarak değilde 2 adet frame olarak ele alırsak. Sana lazım olan 1. frame deki renkli objenin koordinatları ve 2. frame deki objenin koordinatları. Bu bilgiler zaten sende mevcut. Yapman gereken PID mantığı ile 2. frame deki objeyi picturebox'ın orta noktasına almak. Ama daha ilkel olarak düşünürsek 1. frame deki objenin yeri ile 2. frame deki objenin yeri arasındaki farkı alıp objenin ne tarafa hareken ettiğini bulmak ve ona göre step motora veri göndermek.
Bende söyle düsünmüstüm.
Picturebox1'in orta noktasi ile , Renkli objenin orta noktasinin arasindaki farki alip, o fark kadar servo motorleri hareket ettirmek.
Ama sorun su bazen renkli obje yukari sagda  bazen yukari solda oluyor , bazen asagi solda olacagini düsünürsem bu renkli obejenin koordianatlari ile , picturebox1'in orta nokta kooardinatlari arasindaki farki nsil alacagimi bilemiyorum....
acaba farki söyle alabilirmiyim olurmu?

                    int farkx;
                    int farky;

///// Picturebvox1'in orta noktasi
                    int x = pictureBox1.Width / 2;
                    int y = pictureBox1.Height / 2;   
///// Renklo objenin orta noktasi               
                    int objectX = objectRect.X + objectRect.Width  / 2;
                    int objectY = objectRect.Y + objectRect.Height / 2;

                    if (objectX < x && objectY<y)
                    {
                        farkx=x += objectX - x;
                        farky=y += objectY - y;
                    }
                    else
                    {
                       farkx= x - objectX;
                       farky = y - objectY;
                    }

mozkan87

Resim iki boyutlu olduğu için zaten elinde (x,y) olmak üzere iki adet koordinat bilgisi var. Aynı şekilde iki adet de servo moturun olduğunu tahmin ediyorum. Bunlardan bir tanesi x boyutunda 2.si y boyutunda hareket etmeliler. Bu nedenle iki koşullu bir if döngüsü ile bu işlem yapılamaz gibi geliyor bana. 4 koşullu bir if döngüsü olmalı ki bütün olasılıklar çalışsın. Yani
1. döngüde obje hem yukarı hem sağa mı gitmiş?
2. döngüde obje hem yukarı hem sola mı gitmiş?
3. döngüde obje hem aşağı hem sağa mı gitmiş?
4. döngüde obje hem aşağı hem sola mı gitmiş?
bunları kontrol etmelisin. Bu şekilde eğer obje hem aşağı hem yukarı gittiyse 1. servo ya yukarı git. 2. servo ya sağa git demelisin.

Hatta belki bu kontrolü iç içe 2 if döngüsüyle yapmak daha uygun olabilir.
if(yukarı mı?){
    if(sağa mı?){
        1. servo yukarı git
        2. servo sağa git
        }
    else {
        1. servo yukarı git
        2. servo sola git
        }
    }
else{
    if(sağa mı?){
        1. servo aşağı git
        2. servo sağa git
        }
    else {
        1. servo aşağı git
        2. servo sola git
        }
    }

evreno

hocam fikir vermek açısından bi prog yazdım bi bak istersen kordinat sistemine göre x,y değerlerini picturebox un merkezine göre  sana gösteriyor o değerlere göre servoları yönlendirirsin
http://www.dosya.tc/server5/X0Rxfy/Ortala.rar.html