OpenCV ile nesne algılama hakkında

Hocam bende Aynısını söylemiştim zaten :smiley:
Tıklatmayı nasıl yaptıracağız hocam ?
Verdiğiniz kodlar koordinat bulma var sadece

Eminim söylemişsindir. Ama ben anlayamamışımdır.

İletişimi düzelttik sorun değil.

Anladığıma göre çözüm önermeye çalışabilirim.

python - How to Click a Button with PyWinAuto - Stack Overflow

Windows’ta Programları Otomatikleştirmek için pywinauto kullanın (ichi.pro)

Buradan sonra ya masa üstü koordinatı olarak yada uygulama handle ı yakalayarak yapman gerekecek.

Ben olsam Pywinauto kütüphanesini okumaya başlardım.

bunun için pyautogui kullanmak çok daha mantıklı ve kolay gibi geldi.

1 Beğeni

Hocam 1.uygulama mouse kontrol icin 2. uygulama da windows uygulama ekranını yakalamk için sanırsam.

Kullandığım botda zaten pyautogui kullanıyorum. Yukarıda kodlar var. Yine onu kullanırım muhtemelen.

Sanırım her şeyi en başından başlayarak anlatmam gerekecek.

Aslında bot oluşturmakla ilgili kitaplar falan var ama ben onların yaklaşımıyla değil kendi bakış açımla yazmaya çalışacağım.

Hayatta iki tür insan vardır, biri hemen sonucu alıp işine gücüne devam edenler, diğeri ise sonuca giderken arkasında ne olup bittiğini anlamak için zaman ayıran insanlar.

İlk tür insanlara kızmam, saygı duyarım. Hadi işimi gör bende kodumu alıp gideyim demeleri normal. İnsanların aceleleri var. Ama maalesef ben o insan türüne hitap edemiyorum.

Bunun arka planında neler dönüyor diye düşünecekler varsa karaladıklarımı okumaya devam edebilirler.

Öncelikle bir işi yapmanın birden çok yolu vardır. Yol tektir diyemeyeceğim. Bu nedenler birden çok yoldan bir kaçına bakmak gerekir. Tercihler ilerlenecek yolu belirler.

Genelde bu aralar şuraya buraya tıklayan makrolar vs tarzında talepler çok görmeye başladım. Sanırım online oyunlarda sıkılanlar buna çözümler arıyor.

Bu durumda ilk basamak. Bu sıkıntıyı aşan bir bot programlayan kesin biri vardır. Onların hazır kodu yada programı doğrudan kullanılabilir.

Ama bu işin arka planı nedir nasıl yaklaşabiliriz dersek iş bu durumda farklı yürüyecektir.

Neden gaz ve toz bulutu dedim?

Basit.

İlk kural, işletim sistemini tanı kuralı.

İşletim sistemini tanımadan bilgisayara asla tam olarak hakim olamazsınız.

Üzerinde koşturduğunuz tüm programlar döner dolarış, işletim sisteminin istediği şekilde çalışır.

Ve işletim sistemlerinin kurallarına uyarlar.

Bunları anlamadan, yapmak yada yaptırmak istediğinizi yapmaya çalışırsanız, ya anlamadığınız hazır kodları yada hazır kütüphaneleri kullanırsınız.

Bu durumda, kodu değiştirdiğinizde beklediğiniz sonuçlara ulaşamayabilirsiniz.

Bu sefer kendiniz o kütüphaneyi öğrenmeye çalışırken yada bu şekilde çözemiyorum deyip vazgeçme noktasında bulabilirsiniz.

Konunun başına yani ilk soruya bağlayacağım.

Ama öncesinde şurada anlaşalım.

Windows işletim sistemi konuştuğumuzu varsayalım.

Anlatacaklarım antroid ve linux türevlerini kapsamayacaktır fakan onlarda da benzer yaklaşımlar vardır.

Windows klasiğidir çoklu çalıştırma desteği sunan, bir işletim sistemidir denir.

Yani birden fazla programı aynı anda çalıştırırsınız.

Bu bir not defteri, bir oyun, bir video bir web sayfası yada başka bir program olabilir.

Konumuz bir bot tasarımı,

Ve bir şeylere tıklamak bir şeyleri sürüklemek, bir şeyleri öne getirmek yada arka plana itmek isteyebilirsiniz.

Peki nasıl yaparız?

Daha doğrusu önce windows bunu nasıl yapar?

Windows bir program çalıştırdığınızda ona bir processID ( işlem numarası) atar ve bir listede tutar, ve bu process in bir geri çağrılarılabilir fonksiyonunun da adresini kaydettirmenizi ister. (aslında bir kaç callback fonksiyon vardır ama örnek bir olsun.)

Bu listedeki id leri kullanarak sıra ile işlemci zamanı tahsis ederek programları yürütür, durdurur, sonra diğerine de aynısını liste boyunca devam eder.

Bu liste üzerindeki hızlı göngü paralel çalışma/ çoklu çalışma yanılgısını yaratır.

Bu process lerin bazılarının pencereleri olabilir, hatta birden fazla penceresi olabilir ve hatta hiç penceresi olmadan da çalışan process ler olabilir.

Her bir process in idsi olduğu gibi her bir pencereninde windows handle adında bir id numarası olur.

Siz, tıklamak sürüklemek, çift tıklamak gibi bir eylem gerçekleştirdiğinizde, mouse imlecinizin altında aktif hangi pencere varsa, o pencerenin idsine ait callback fonksiyon çağırılır ve ona tıklama mesajı gönderilir.

Eğer id ile ayrılmamış olsa idi, bir tıkladığınızda tüm pencereler tıklamaya cevap vermek zorunda kalırdı, oysaki sadece ilgili pencere bu mesajı işler diğer pencereler bu mesaj ile ilgilenmez.

Bunu neden anlattım.

Bir bot yazdığınızda, eğer doğru programı tespit etmedi iseniz, doğru pencereye ulaşamadıysanız, doğru pencerenin button idsine ulaşmadı iseniz, gönderdiğiniz tıklama mesajı anlamlı olmayacak ve istediğiniz gibi çalışmayacaktır.

Aynısını, online web browser üzerinde de söyleyebiliriz, sekme, frame ve butan kimliklerine ulaşmada ilgili tıklama mesajlarını ulaştıramazsınız.

Bu anlattığım ileri seviye bir teknik olup, window enumeration olarak adlandırılan, pencere listelerine ulaşmayı ve doğru pencereye komutlar yada mause yada buton mesajları hatta klavye mesajları da göndermeyi sağlayan bir yoldur.

Sonuç adı üstünde bot, programa özel çalışır. Programı inceleyip, hangi pencereleri, alt pencereleri açtığını tespit edip doğrudan bunlara mesaj yollayabilirsiniz.

Python Examples of win32gui.EnumWindows (programcreek.com)

Kodları denemedim, genelde c ve c++ ile kodlamayı tercih ederim ama buradan da deneyerek pencereleri nasıl listeleyeceğinizi görebilirsiniz.

Mesela bir programı kapatmak isteyebilirsiniz.

automation - How to close two windows of the same application using python? - Stack Overflow

Kullanacağınız programın pencere ve alt pencerelerini inceler, ne zaman hangi hallerde tıklayacağınızı yada ne zaman ön plana getirip ne zaman arka plana iteceğinizi tespit edersiniz.

Ardından ilgili buton yada pencereye mouse mesajını doğrudan gönderirsiniz.

Bu kadar karmaşaya girmem ben sadece mouse tıklasın istiyorum derseniz.

Dikkat etmeniz gereken ikinci bir husus ortaya çıkacak.

Ekran çözünürlüğünüz önemli.

Çünkü mousa bir koordinata git ve tıkla diyeceksiniz.

Ama o koordinat o çözünürlük değerlerine göre geçerlidir.

Eğer çözünürlük farklı ve pencere de farklı bir yerde duruyorsa tıkladığınızda altında buton olmayacak sonuçta butona tıklanmadığı için de iş doğru yapılmamış olacak.

Burada yine işletim sisteminin önemi devreye giriyor.

İki tip koordinat var. Aslında daha çok da şu an girmeyeyeim.

Bir çalıştırdığınız pencerenin koordinatları içerisinde geçerli, diğer ise tüm masa üstü koordinatlarına göre imlecinizi konumlayacak olan.

Bu ikisinin farkını ikisi arasında nasıl geçiş yapacağınızı iyi bilmelisiniz.

Bunun için aslında windows basit bir yol sunar.

Açılan pencerenizin köşe koordinatı ile masa üstü koordinatınızın köşe koordinatını deplase ederek iki şekilde de kullanmanızı sağlar.

Ama bunu tam kavramadan bir butona tıklamaya çalıştığınızda buton yerine çalıştırdığınız pencereyi sıfır koordinatı sayan bir noktadan ötelenerek yanlış yere tıklayabilirsiniz.

Laf kalabalığını özetleyim.

Birinci yöntem, programın bileşenlerine dokunarak id ler üzerinden yönetmek

İkinci yöntem, imleç koordinatları ile tıklamayı simüle etmek.

Simüle edilen tıklama koordinatı doğru değilse çuvallarsınız.

Pencere en üstte değilse çuvallarsınız vs. vs.

İşletim sistemini tanıyın, pencere buton enümerasyonlarını öğrenin.

Gelelim.

Yukarıdaki ilk mesaja dair hususa.

Uzun iletişim sonunda bir altılı resim gurubu içinde doğru resme tıklamak için bir bottan bahsediyoruz.

Masa üstü ekran resmi alırım.

Masa üstü ekran resmi üzerinde tanımladığım resim koordinatlarını eşleştiririm.

Bu koordinatlardan tıklayacağım resimi bulurum.

x+Resim eni/2, y+resim boyu/2 gibi tam göbeğinden bir resim koordinatı belirlerim.

Arkasından bu koordinatın resimin pixel koordinatı olduğunu hatırlar masa üstü mouse koordinatına çeviririm.

Sonra bu koordinata bir tıklama mesajı gönderirim.

İşlem basamakları bu kadar.

Ama gerçe oyunu görse idim. ID lerini tespit eder, buton id sine doğrudan tıklama mesajı gönderir koordinatlarla da uğraşmazdım.

Biri işletim sistemi mantığı, diğeri ise bir nevi mouse makrosu tanımlamak.

Burada ayırt edici tek husus var.

OpenCV ile resim içinde belirli bir resmi yada deseni mi aramak mı gerek, yada özellikli resmimizdeki ayırt edici bir renk pixelini tespit edip.

O pixel varsa doğru resim budur deyip geçmek mi?

Bence opencv ile tüm resim sürekl yüz yada plaka tanır gibi resim kontrolü yapmaktansa, doğru resim içinde ayırt edici pixelleri tespit edip onu karşılaştırara koordinat ve doğru resmi de bulabiliriz.

Tabi illaki resim içinde resim aramak da bir çözüm.

Ama bana hep KISS presibi öğretildi. Keep it Simple and Stupid…

Şimdi yol ayrımı.

Kırmızı hap mı mavi hap mı?

Mavi hapı alın mutlu mesut kodunuzla devam edin…

Yada kırmızı hapı alıp işletim sisteminin olay yakalama (event handlig), pencere kulpları (window handle), process id ( işlem kimlikleri) gibi konulara boğulun…

Sonrasında zaten mause tıklaması göndermek dışında, metin kutularını bulup içlerini otomatik doldurmaya başladığınızı bile göreceksiniz.

Bu kadar laf salatası ve tek satır kod yok.

Üzgünüm.

Balık tutmayı anlatmak benim işim balık verecek hiç zamanım yok, yine uykumdan eksiltip bu saatte yazıyorum.

4 Beğeni

Anladığım kadarıyla oyun oynarken belirli saat aralıklarında senin bot kullanıp kullanmadığını kontrol etmek için ekranda belirli fotoğraflar beliriyor ve doğru fotoğrafı seçmeni istiyor. Eğer cevap vermezsen oyun duruyor sen de kontrol ekranı çıkınca fotoğrafları işleyen ve doğru olanı seçen bu sayede oyun oynamaya devam etmesini istiyorsun.
Eğer doğru anlamışsam öncelikle fotoğraflar arasında doğru olanı bulmamız gerekecek. Fotoğraf örneklerini bize atarsan bunun çözümü üzerine kafa yorabiliriz.
Ve sanırsam bunu yapmışsın ve bizden istediğin yalnızca ekrana tıklatmak. Bunu basit şekilde pyAutogui modülü ile click methodunu kullanarak yapabilirsin.
Ekranda fotoğrafları yakalamak ve istediğin koordinata tıklamak işin kolay kısmı asıl zor olan fotoğraflar arasından doğru olanını nasıl seçeceksin.
Bana kalırsa 30 dakikada bir oyunu baştan başlatıp oyunu oynatan bot yazman daha kolay olacak. Bu sayede bot sistemine de takılmamış olursun.

2 Beğeni

Değerli yorumunuz için öncelikle teşekkürler hocam.
Öncelikle mavi hapla devam edicem hocam.
Sebebi de oyun güvenlik korumasından dolayı dışarıdan bağlantılara izin vermiyor.
Yapılabilir mi evet yapılabilir.
Ama yıllarını vermiş insanlar yapabiliyor bunu.
Baya zor ve uğraşlı bir koruması var.
O yüzden ben oyun farketmeden bir makro gibi kullanmaya devam etmek zorundayım.
Dediklerinizin aynısını bende düşünüyorum şu şekilde olacak diye kafamdan ama dil bilmediğim için bunu kodlara dökmekte zorlanıyorum.
Bu konuyu açmamın sebebi de bu.
Zorlanmam ve yardım istemem.
Google da bu kodlar çıkıyor.
Resim bulma,koordinatını belirleme,o koordinata click yapma vs.
Fakat ben bu kodları birleştirmekte sıkıntı yaşıyorum.
Googleye yazınca hepsini tek tek kodlar bulunabiliyor ama birleştirmeye gelince burada dil bilgisi devreye giriyor.
Bende de dil bilgisi amatörün daha altında olduğu için zorlanıyorum hocam. Şimdiden teşekkürler.

Değerli yorumunuz için öncelikle size de teşekkürler hocam.
Dediğiniz gibi bunu basit bir şekilde pyAutogui modülü ile yapılabiliyor.
Fakat ben kodları birleştiremiyorum.
Kodları googleden buluyorum birleştirmeye gelince beceremiyorum.
Bot kontrol ekranında 6 adet resim var.
2 adet resim birbirine benziyor fakat birinin üstünde mavi çizgi daha çok.
Bot kontrolün bizden istediği ise mavi çizgisi fazla olana tıklamak.
Ben çizgi için uğraşmıyorum bile.
İlk tıkladığında tutmasa bile 2 veya 3. tıklamasında illaki tutturur.

“Bana kalırsa 30 dakikada bir oyunu baştan başlatıp oyunu oynatan bot yazman daha kolay olacak”
Bu dediğinizi nasıl yapacağımı gerçekten bilmiyorum. Bunu yapsam tabi daha iyi ama dediğim gibi dil bilgim amatörün daha altı :slight_smile:

Naçizane fikrimi belirtmek istiyorum. Bunu söylemek bana düşmez çünkü bu işte gerçekten senior olan adamlar var bu forumda.

Neden bot yapmadan önce dili öğrenme çabası içerisine girmiyorsunuz ?
Neden koşmak ?
Neden emeklememek ?
Sitenizdeki projeleri de inceledim. Onlarda mı böyle sorunlar sonucunda çıkmış projeler ?
Onları da mı birileri tarafından yazılıp hazır kullanılan kodlar(kod) ?

Bu forumun bana öğrettiği yegane şey; şahıs olarak birine sormadan önce herkesin görüşünü almak(araştırmak) ve bu dili "tamam ya kendimi ifade edebiliyorum " diyebilene kadar öğrenmeme vesile olan insanlarla dolu. Sizce bu insanlar sizin hakkınızda ne düşünüyordur ?

(Hazır konusu açılmışken de hepsine teker teker teşekkür ediyorum :heart:)

2 Beğeni

Hocam Öncelikle kodlar benim değil.
Saygıdeğer ve paylaşımcı bir hocamız yazmış ve github da paylaşmış.
Buradan teşekkürler kendisine.
“Neden bot yapmadan önce dili öğrenme çabası içerisine girmiyorsunuz ?”
Benim bu platforma girerken de ilk duyduğum şey sevdiğin şeyi yap ki sıkılmayasın.
Bende oyunda ki botu hiç yazmadım belki ama içinde birkaç değişiklik yaparak kullanmak bile bi zevk veriyor insana.
Önce botu çalıştırıcam sonra yine öğrenmeye devam edicem.
Koşmak yada emeklememek değil niyetim.
Bu botu çalıştırmaya çalışırken bile bir sürü bilgi öğreniyorum python hakkında.
Hazır kodlarla çalışmakta belki ezbere öğrenmek gibi birşey ama bu az bile olsa birşeyler katıyor insana.
Çok az bir miktar da olsa python fonksiyonlarını öğrenmeye başlıyorsun.
Belki dediğiniz gibi yapmak daha doğru ama o zaman da bu bot çalışmaz ve insanın morali bozulur.
Bende bu yüzden önce botumu çalıştırıcam o zevki tatıcam ama yine farklı konulara da yönelerek, ders videoları izleyerek, bir şekilde pythonın tamamını öğrenip kendim bot yazıcam.
Değerli yorumunuz için de teşekkürler hocam.

2 Beğeni

Eğer temeliniz yoksa hazır kodları inceleyerek ilerlemek çok uzun zaman alıyor. Paylaşmış olduğunuz kod 200 satırdan fazla. Ek olarak içinde arayüz, otomasyon ve görsel işleme vb. kütüphanelerin kullanımını da barındırıyor. “ekranyakala.py” isimli dosyada neler olduğunu bilmiyoruz bile.

Bu şekilde ilerlemek istiyorsanız, bu sizin tercihiniz fakat yerinizde olsam bir kaç gün Python’ın temellerini kurcalar, süreci hızlandırırdım.

Ben de öğrenmeye Python ile yapılan çeşitli 2D oyunların kodunu inceleyerek başlamıştım. “Köşeli parantezler ile yapılan şeyler ne ola ki?” diye sorgularken, Python’da listelerin var olduğunu ancak 4 gün sonra kavrayabilmiştim. Demem o ki, öncesinde biraz hazırlık yaparsanız, çok daha hızlı ve iyi bir şekilde ilerleyebilirsiniz.

2 Beğeni

Hocam değerli yorumunuz için öncellikle teşekkürler.
Evet biraz daha zaman alabilir.
Ama ben bunu iş olarak değil hobi olarak yapıyorum.
Yine botum çalışsın ben diğer bilgisayarımda yine dil bilgisine çalışabilirim.
ekranYakala.py içeriği de yukarıda semtex hocamın paylaştığı win32gui modülü kodları var.

import numpy as np
import win32gui, win32ui, win32con
from threading import Thread, Lock

class ekranYakala:
    stopped = True
    lock = None
    screenshot = None
    w = 0
    h = 0
    hwnd = None
    cropped_x = 0
    cropped_y = 0
    offset_x = 0
    offset_y = 0


    def __init__(self, window_name=None):
        # create a thread lock object
        self.lock = Lock()

        # find the handle for the window we want to capture.
        # if no window name is given, capture the entire screen
        if window_name is None:
            self.hwnd = win32gui.GetDesktopWindow()
        else:
            self.hwnd = win32gui.FindWindow(None, window_name)
            if not self.hwnd:
                raise Exception('Window not found: {}'.format(window_name))

        # get the window size
        window_rect = win32gui.GetWindowRect(self.hwnd)
        self.w = window_rect[2] - window_rect[0]
        self.h = window_rect[3] - window_rect[1]

        # account for the window border and titlebar and cut them off
        # border_pixels = 8
        # titlebar_pixels = 30
        # self.w = self.w - (border_pixels * 2)
        border_pixels = 1
        titlebar_pixels = 10
        self.w = self.w - border_pixels
        self.h = self.h - titlebar_pixels - border_pixels
        self.cropped_x = border_pixels
        self.cropped_y = titlebar_pixels

        # set the cropped coordinates offset so we can translate screenshot
        # images into actual screen positions
        self.offset_x = window_rect[0] + self.cropped_x
        self.offset_y = window_rect[1] + self.cropped_y
    def get_screenshot(self):

        # get the window image data
        wDC = win32gui.GetWindowDC(self.hwnd)
        dcObj = win32ui.CreateDCFromHandle(wDC)
        cDC = dcObj.CreateCompatibleDC()
        dataBitMap = win32ui.CreateBitmap()
        dataBitMap.CreateCompatibleBitmap(dcObj, self.w, self.h)
        cDC.SelectObject(dataBitMap)
        cDC.BitBlt((0, 0), (self.w, self.h), dcObj, (self.cropped_x, self.cropped_y), win32con.SRCCOPY)

        # convert the raw data into a format opencv can read
        #dataBitMap.SaveBitmapFile(cDC, 'debug.bmp')
        signedIntsArray = dataBitMap.GetBitmapBits(True)
        img = np.fromstring(signedIntsArray, dtype='uint8')
        img.shape = (self.h, self.w, 4)

        # free resources
        dcObj.DeleteDC()
        cDC.DeleteDC()
        win32gui.ReleaseDC(self.hwnd, wDC)
        win32gui.DeleteObject(dataBitMap.GetHandle())

        # drop the alpha channel, or cv.matchTemplate() will throw an error like:
        #   error: (-215:Assertion failed) (depth == CV_8U || depth == CV_32F) && type == _templ.type() 
        #   && _img.dims() <= 2 in function 'cv::matchTemplate'
        img = img[...,:3]

        # make image C_CONTIGUOUS to avoid errors that look like:
        #   File ... in draw_rectangles
        #   TypeError: an integer is required (got type tuple)
        # see the discussion here:
        # https://github.com/opencv/opencv/issues/14866#issuecomment-580207109
        img = np.ascontiguousarray(img)

        return img

    @staticmethod
    def list_windowname():
        def winEnumHandler(hwnd, ctx):  #açık pencere isimlerini listeler
            if win32gui.IsWindowVisible(hwnd):
                print(hex(hwnd), win32gui.GetWindowText(hwnd))

        win32gui.EnumWindows(winEnumHandler, None)
    def get_screen_position(self, pos):
        return (pos[0] + self.offset_x, pos[1] + self.offset_y)

    def start(self):
        self.stopped = False
        t = Thread(target=self.run)
        t.start()
    def stop(self):
        self.stopped = True
    def run(self):
        while not self.stopped:
            screenshot = self.get_screenshot()
            self.lock.acquire()
            self.screenshot = screenshot
            self.lock.release()

1 Beğeni

Biraz başlangıç kodu ekleyeyim.

#import the necessary packages
import numpy as np
import pyautogui
import imutils
import cv2


img_rgb = cv2.imread("c:\\Deneme2\\main.jpeg")
template = cv2.imread("c:\\Deneme2\\find.jpg")

dimensions = img_rgb.shape
height = img_rgb.shape[0]
width =  img_rgb.shape[1]


List = []

w,h = template.shape[0], template.shape[1]

res = cv2.matchTemplate(img_rgb,template,cv2.TM_CCOEFF_NORMED)
threshold = 0.95
loc = np.where( res >= threshold)

for i in zip(*loc[::-1]):
    location = (i[0] + w, i[1] + h)
    x = i[0] + w
    y = i[1] + h
    List.append([i, location])

    cv2.rectangle(img_rgb, i, location, (0,255,0), 3)


cv2.imshow("result",img_rgb)
print(x,y)

pyautogui.moveTo(x,y, 2)
pyautogui.click(button='right')
pyautogui.click(x, y)

cv2.waitKey(10000)

Basitten zora doğru.

Bana gönderdiğin resim

main

Bunu main.jpeg olarak kullandım.

Resmin içinden varsayılan bir resmi seçtim.

find

Bunu da içinden kesip find.jpg olarak kullandım.

Dikkat et uzantıların biri jpg diğeri jpeg neden öyle yaptım bilmiyorum. Ramazanda canım istedi.

Sonra c:\ üzerinde Deneme2 klasörü içinde hepsini çalıştırdım.

Resmin üzerine gidip tıklıyor.

Tabi verilen resim çözünürlüğü düşük olduğundan küçük bir resme tıklıyor.

Tam ekran almak için.

image = pyautogui.screenshot()
image = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2BGR)
cv2.imwrite("desktop.png", image)

cv2.imshow("Deneme", image)
cv2.waitKey(0)

Gibi bir kod yapıştırarak tam ekran masa üstü görüntünü alabilirsin. Onun üzerinde keseceğin resmi aramak için kullanırsan. Büyük ihtimalle şöyle olacak.

image

Ve mouse üzerine gidecek.

Resme sağ tıklattım ama bir şey olmasını beklememek lazım.

Buradan özetle.

Tam periyotla tam ekran masa üstü resmi alıp,
seçilmesini istediğin resimleri kesip şablon olarak tutup, ana ekranda atatıp çerçeve içine aldırdım.

Bunun yerine resmi oluşturmayıp, çerçeveye de almadan sadece mouse u yürütüp tıkladığın kodu kullanabilirsin.

Resimle görünmesi sadece paterni yakaladığına dair görsel amaçlı.

Kolay gelsin.

1 Beğeni

Faydalandığım bazı kaynakların linkini de buraya bırakayım. Milletin kodunun üstüne çökmüş olmayalım.

python - How do I find an image contained within an image? - Stack Overflow

Taking screenshots with OpenCV and Python - PyImageSearch

Mouse Control Functions — PyAutoGUI documentation

Object Detection — OpenCV 2.4.13.7 documentation

En faydalandığımı da en sona ekleyeyim.

OpenCV matchTemplate finds same shapen multiple times - Python - Stack Overflow

2 Beğeni

Çok saolun hocam. Nasil teşekkür etsem azdır. :pray:

1 Beğeni

merhabalar hatanızı çözdünüz mü bende boyle bişey almaktayım import keyboard, threading, os, webbrowser, ctypes

Ortada bir kod var mı? Bir de hata mesajının ekran resmi falan?

yukarıda paylaştım @semtex