Merhaba bu yazımda size Python OpenCV aracılığı ile ekranda bulunan nesneyi nasıl buluruz ve işaretleriz bununla ilgili ilgili kütüphanelerin yüklenmesini ve örnek uygulamasını paylaşacağım.
Öncelikli olarak aşağıdaki kütüphanelere ihtiyacımız var;
- Numpy
- Pillow
- OpenCV
Bu kütüphaneleri eğer bulunmuyor ise aşağıdaki şekilde yükleyebilirsiniz;
1 2 3 4 5 6 7 8 9 |
Numpy : pip install numpy OpenCV : pip install opencv-python pip install opencv-contrib-python Pillow : pip install pillow |
1.Adım : Projemize kullanacağımız kütüphaneleri ekliyoruz;
1 2 3 |
import numpy as np from PIL import ImageGrab import cv2 |
2.Adım: Ekranımızı sürekli okuyacağımız ve bulunan nesneyi anlık olarak işaretleyeceğimiz için sonsuz döngümüzü oluşturuyoruz;
1 2 3 4 5 6 |
while(True): try: #Kodumuz buraya gelecek except Exception as e: print(e) #Hata olursa ekranda goster pass #Hata olursa isleme devamet |
3.Adım: Ekranımızı ve Tespit edeceğimiz nesnenin resmini okuyoruz ve ikisinide gri tonlamalı formata dönüştürüyoruz;
1 2 3 4 |
OrnekResim = cv2.imread('Kaktus.jpg') #Tespit Edeceğimiz Resim OrnekResimDonustur = cv2.cvtColor(OrnekResim,cv2.COLOR_BGR2GRAY) #Tespit Edeceğimiz Resimi Gri Formata Donustur EkranGoruntusu = np.array(ImageGrab.grab(bbox=(0,40,600,640))) #Anlik Ekran Goruntusunu Al EkranGoruntusuDonustur = cv2.cvtColor(EkranGoruntusu,cv2.COLOR_BGR2GRAY) #Ekran Goruntusunu Gri Formata Donusturuyoruz |
4.Adım: Ekranımızın içerisinde Tespit edeceğimiz resmi buluyoruz ve resimin ekrandaki koordinatlarını alıyoruz;
1 2 3 4 |
Sonuc = cv2.matchTemplate(EkranGoruntusuDonustur,OrnekResimDonustur,cv2.TM_CCOEFF_NORMED) #Ekran Grountusunun Icerisinde Resmi Ariyoruz sin_val, max_val, min_loc, max_loc = cv2.minMaxLoc(Sonuc) #Bulunan Objenin Koordinatlarini Bul Ust_Sol = max_loc #Bulunan Objenin Ust ve Sol Uzakligi Alt_Sag = (Ust_Sol[0]+50, Ust_Sol[1]+50) #Bulunan Objenin Alt ve Sag Uzakligi |
5.Adım: Bulduğumuz koordinatları ekran üzerinde işaretleyip işlemimizi sonlandırıyoruz;
1 2 3 4 5 |
cv2.rectangle(EkranGoruntusu, Ust_Sol, Alt_Sag, (0,255,0),5) #Ekranda Bulunan Nesnenin Koordinatlarini Isaretle cv2.imshow('EKRAN',EkranGoruntusu) #Ekran Goruntusunu Goster if cv2.waitKey(25) & 0xFF == ord('q'): cv2.destroyAllWindows() break |
Kodun tam halini ve kullanılan görseli aşağıda bulabilirsiniz.
Ekran Çıktığımız Aşağıdaki Gibi Olacaktır:
Kodumuzun Tamamı :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import numpy as np from PIL import ImageGrab import cv2 while(True): OrnekResim = cv2.imread('Kaktus.jpg') #Tespit Edeceğimiz Resim OrnekResimDonustur = cv2.cvtColor(OrnekResim,cv2.COLOR_BGR2GRAY) #Tespit Edeceğimiz Resimi Gri Formata Donustur EkranGoruntusu = np.array(ImageGrab.grab(bbox=(0,40,600,640))) #Anlik Ekran Goruntusunu Al EkranGoruntusuDonustur = cv2.cvtColor(EkranGoruntusu,cv2.COLOR_BGR2GRAY) #Ekran Goruntusunu Gri Formata Donusturuyoruz Sonuc = cv2.matchTemplate(EkranGoruntusuDonustur,OrnekResimDonustur,cv2.TM_CCOEFF_NORMED) #Ekran Grountusunun Icerisinde Resmi Ariyoruz sin_val, max_val, min_loc, max_loc = cv2.minMaxLoc(Sonuc) #Bulunan Objenin Koordinatlarini Bul Ust_Sol = max_loc #Bulunan Objenin Ust ve Sol Uzakligi Alt_Sag = (Ust_Sol[0]+50, Ust_Sol[1]+50) #Bulunan Objenin Alt ve Sag Uzakligi cv2.rectangle(EkranGoruntusu, Ust_Sol, Alt_Sag, (0,255,0),5) #Ekranda Bulunan Nesnenin Koordinatlarini Isaretle cv2.imshow('EKRAN',EkranGoruntusu) #Ekran Goruntusunu Goster if cv2.waitKey(25) & 0xFF == ord('q'): cv2.destroyAllWindows() break |
Kullanılan Örnek Resim:
İşlemimiz bu kadar. Bir daha ki yazımda Python, OpenCV ve Yapay Zeka ile nesne algılamayı anlatacağım.
çok yardımcı oldu teşekkür ederim
peki ekranda bulduğu kaktus şekline sol tık yaptırmak istesek nasıl bir kod ekliyebiliriz
Merhaba,
cv2 kütüphanesi aracılığı ile resim üzerinde tıklanan konumu alıp eğer tıklanan alan tespit edilen ile uyuşuyorsa işlem yapabiliriz.
Aşağıdaki örnek kod bloğunu geliştirerek resim üzerinde sizin istediğiniz koordinat aralığına tıklandığında işlem yaptırabilirsiniz.