Python İle Ekrandaki Belirli Bir Renkteki Objeyi İşaretlemek

Demek istediğim şey şu, python dilinde veya eğer python ile bağlantısını yapabilirsek başka bir dilde ekranımda var olan görüntülerin belirli bir rengini bulacak ve o renkteki görüntünün çevresini dikdörtgen ile işaretleyecek. Bunu yapmanın bir yolu var mı?
Şu resimdeki gibi:

Örneğin ekranımda mor renkli bir nesne var. Program bu mor renkli nesnenin çevresine bir dikdörtgen çizecek ve o dikdörtgen ekranımda kalacak. Ekran görüntüsü şeklinde değil. Mor renkli cisim gittiğinde ise dikdörtgen de kaybolacak. Bunu yapmanın bir yolu var mı?

bu söylediğiniz işlem threshold, belirli bir RGB renk aralığındaki renkleri etiketleyip, çeşitli amaçlar için(optik akış, çerçeveleme, maskeleme vs.) için kullanma işidir. OpenCv(cv2) paketine bakabilirsiniz. Youtube’da bunun örneklerini bulabilirsin. Basit maskeleme örnekleri yaparsan mantığı anlarsın. Zaten bütün iş çerçeveleri ve maskeleri koşulla ayıklamadan ibaret. Zor değil.

1 Beğeni

x Ekrandaki Görüntüyü Algılama - aib tarafından #3

Bununla ilgili kodlar bulamadım. Örnekleri yanıtları inceledim anlayamadım. ChatGPT ile konuştum sinir hastası oldum kesinlikle tavsiye etmem. Python ile bunu yapamadığını söyledi en sonunda. C ile yapmasını istedim yapamadı. C++ ile de yapamadı. Bunun gerçekten hiç bir yolu yok mu? Tek istediğim ekranda yeni pencere açmaması. Ya yeni pencere açıyor ya da ekran görüntüsü alıp kaydediyor.

Chat GPT’den, rakı masasında kurulan programlama forumlarında takılan script kiddie gibi bahsetmişsin. Öncelikle bunu ayıplamak isterim.

GPT bir dil modelidir. Sen ona soru sorarsın, senin sorduğun sorunun içindeki anahtar kelimelerin sırasına göre, TİFF ile benzer konudaki bütün metinleri bulur, hepsini senin sorunun anahtar kelimelerinin sırasına göre sıralar, sonra onlarda kodları ayırt eder, hata kontrolü ile deneye deneye, metinlerin altında bulunan ilgili kodlardan bir kod yanıtı oluşturur ve senin cümleyi sorma biçiminin gramer özelliklerini analiz ederek, n-gram sıralamaları ile amacına uygun bir metinle de bu kod cevabını oluşturur.

İstediğin cevabı bulmak için, tek bir seferde sorarak bu cevabı almak için, onun beslendiği metinlerin senin konunda, senin ilgilendiğin problemin mantığına göre çözülmüş hazır kodları olması lazım, ki bu çok nadiren olan bir şeydir.

Bunun yerine ChatGPT’ye programının ilgili kısımlarını parça parça sor. Mesela şöyle:

Bir videoda ya da kamerada(ki bunları basitçe opencv ile okuyabilirsin) akan çerçevelerin(zaten çerçevelerle işlem yaparsın. yani belirli zamanda belirli hz ile akan çerçevelerden) içindeki piksellerin belirli bir RGB rengi aralığında(yani [r_pikseli, b_pikseli, g_pikseli] ile [r_pikseli, b_pikseli, g_pikseli] arasındaki pikselleri nasıl ayırırım ya da maskelerim, diye sor.

Sonra bunun cevabını aldıktan sonra bu renk aralığındaki maskelediklerimi nasıl etiketlerim diye sor.

Yavaş yavaş oluşturursun.

C ve C++ ile de yapabilir, soruyu düzgün sorman lazım. OpenCV zaten C, C++ ile oluşturuldu.

OpenCV ile bunu youtube ta yapan bir sürü örnek var dostum. Zor değil bulman.

sırf bu “düzgün soru sorma” konusu için yeni yeni siteler açıldı. adını hatırlayamadım ama insanlar “ben şunları sorarak şöyle bir şey yaptım” gibi şeyler paylaşıyorlardı sitede. Düzgün soru sormak önemli kısacası…

1 Beğeni

Tekrar deneyeceğim teşekkürler öneriniz için. Ancak her şekilde dakikalarca farklı şekillerde sormayı denedim. Yine de tekrar yapacağım.

Size derdimi şöyle anlatmak isterim.


Birinci görüntüde C++ ile ekrana pencere açmadan dikdörtgen çizebileceğimi anlatıyor. Hemen sonraki mesajda tam tersini.

C++ dilinde OpenGL kütüphanesini kullanarak pencere açmadan nasıl dikdörtgen çizebilirim sorusu iş görebilir.
Onu yapamazsın derse aşağılık yalancı diyip ChatGPT’yi üzebilirsin

Dediğinizi denedim yapamayız dedi. Hakaret etmedim robotların da kalbi vardır.

:)) Olay iyice trajikomik bir yere gidiyor.
Dostum, senin işini OpenGL görmez. OpenGL, 2 ya da çok boyutlu grafik geliştirmek içindir. Görüntü işlemek için değil(kısmen yapılabilir ama bu amaçla geliştirilmedi.). OpenCV ile RGB renklerini, yani [[0-255], [0-255], [0-255]] arasındaki renkleri almak zor bir iş değil yahu. Bir resmin(yani bir resmin bir videodaki çerçeve olduğunu düşünürsen) belirli renk aralığını threshold yapıp maskelemek, sonra o maskelediğin koordinatlara kareyi ya da ilgili geometrik formu çizmek. İlgilendiğin işlem bu yani, bunun dışında hareket eden cisimleri etiketlemek için optik akış, kontur ve kenar belirleme yöntemi gibi yöntemlerle daha hızlı ve basit de yapılır bu attığın fotoğraftaki etiketleme yöntemi.
ret, frame olarak okursun. frameler çerçevedir yani ilgili filtreleri(kenar tespiti, renk tespiti vs.) uygulayacağın video/kamera kaydı vs.nin anlık çerçeveleri/resimleri yani.

cv2’nin basit matris işlemi olan absdiff metodu ile zaten piksellerin farkından hareket eden pikselleri bulursun; hareket eden nesneleri buradan çıkarır kontür belirleme ile tespit edersin, bunun için de threshold metodunu kullanırsın. dilate ile nesneyi hemen hemen alanını belirler ve findContours ile de köşelerini belirlemiş olursun. mantık bu şekilde ilerler, daha sonra rectangle kullanarak kendi şeklinle görüntüyü etiketlersin.

Aklıma bu video geldi nedense…

2 Beğeni

Python ile opencv kullanarak herhangi bir görüntünün içindeki renkler tespit edilebilir ve kolayca çerçeve içine alınabilir.

Ama bu cümleden hiç bir şey almadım.

Ne demek görüntünün çevresini dikdörtgen işaretleyecek? Ne demek başka bir dilde ekranım var?

Ne ekranı?

Nereden bu görüntü?

Ekran görüntüsü olmayan ekran görüntüsü ne demek?

Mor cisim ekran görüntüs değilse monitörün üstünde dışarda mı geziyor?

Evet bunu yapmanın birden fazla yolu var?

Ama bunu soran birinin yapabileceği bir şey değil.

Bilgisayarın b’sinden anlayan adam şunu şu şekilde sormaz.

Belki istediğin ekranda bir pencere açmasıdır nereden biliyorsun?

Ekran görüntüsü almadan ekran görüntüsünü nasıl işleyecek bana açıklayabilir misin?

Bilmemen hiç önemli değil, anlamaman da. Ama programlama böyle bir şey değil. Benim aklıma bir fikir geldi, tüm işletim sistemleri , tüm prgramlama kurallarını bir kenara koyup kafama göre bir şey mi yapayım diyorsun?

Önce soruları netleştirirsen önerilerim olabilir. Bu haliyle sorun facia, ne sorduğun belli, ne istediğin belli, ne de kısıtlamaların doğru.

Ha yaşın 18 yaşın altındaysa lütfen söylediklerimi dikkate alma pas geç beni de uğraştırma kolay gelsin.

3 Beğeni

Ahahah gece gece güldürdünüz demek istediğim benim ekranımda mor renkli bir cisim var. Bu cisim ekranımda. Yani başka yerde değil. Benim istediğim ekranımda duran bu cismin çevresinin dikdörtgen şeklinde çizilmesi. Ancak bunu yaparken arka planda bir pencere açık olabilir tabii ama bunu yaparken resmi ekran görüntüsü alıp çizip sonra kaydetmesini istemiyorum. Net bir tabirle real time shape detection istiyorum. Örneğin bir film izlerken o filmde herhangi bir renkte bir şey gördüysem onun çevresini o an dikdörtgene alsın sahne geçince dikdörtgen gitsin istiyorum. Evet yanlış ifadeler kullanmışım haklısınız. Daha önce bu tarz bir kod yazmadım ancak. Bu yüzden buradan öğrenmeye çalışıyorum. Python ile database ve obje tabanlının üzerine çıkmadım şimdilik.

Haklısınız hocam ahahah.

@semtex yanıt olarak işaretlememişim.

Haklısınız ancak burada tüm noktaları aştım. Tek istediğim bu etrafını işaretleme işlemini ekranda real time olarak yapması.

Bunu yapmak için bir yol önereyim.

Öncelikle her türlü, ekranın resmini almak zorundasın, çünkü görüntü işleme yazılımları görüntüyü işlemek için görüntü kaynağındaki görüntüyü önce bünyesine alır.

Bu noktada belirli aralıklarla veya real time ekran görüntüsü alacaksın. Ama aldığın görüntüyü ekrana tekrar yansıtman gerekmez arka planda işleyerek renklerin koorinat verilerini alacaksın.

Sıra geldi ilgili rengin olduğu ilgili masaüstü uygulamasında işaretlemeye.

Burada kaç seçeneğin var.

Birinci metod, aldığın koordinattaki pencerenin handle ını alarak ilgili programın kodundaki DC içeriğini boyamak ki, bunu yapabilecek gibi görünmüyorsun. Yani birebir bir çalışan programı dışardan boyayabilirsin. Ama sen yapamazsın.

İkincisi bir pencere oluştur. Bu pencereyi transparan yap tam işaretleyeceğin yere transparan pencerende çerçeveyi çiz. Yani pencere istemesen de pencere kullanabilirsin.

Üçüncüsü, Window region konusunu araştır. Bir çerçeve şeklinde pencere oluşturabilirsin. Bu çerçeve pencereyi çizim çerçevesi olarak ilgili renk alanına yerleştir.

Kolay gelsin

Teşekkürler. Evet aklıma gelen bir diğer yöntem de custom window oluşturmak. Program içeriğini değiştirmekten kastınız dll injector ise daha önce hiç denemedim evet muhtemelen yapamam. Deneyeceğim şimdilik, sağ olun.