Merhaba arkadaşlar etabsten otmatik ekran görüntüsü alan bir uygulama geliştirmek istiyorum otomasyon şeklinde şuana kadar ekran görüntüsünü alan iş görebilecek bir uygulama geliştirdim ama uygulamaya şuan bir güncelleme getirmek istiyorum. Burada tıkandım ve sizin yardımınıza ihtiyacım var.
Amacım temel olarak buradaki pembe kısmın agılayıp sarı kalemle belirtilen yere tıklayan ve o algıladığı kısmı sürükleyerek seçen bir sistem. Bu işlemin amacı o pembe kısmın etrafından birazcık boşluk bırakarak yaklaştırmasını istiyorum. OpenCV ve YOLO ile karşılaştım ama nasuk yapacağımı bilmiyorum yardım ederseniz sevinirim.
Konuya başlık yönünden mi bakmak gerekir yoksa yazılım yönünden mi emin olamadım.
Ekrandaki görüntüyü algılama yönünden bakarsak;
Ekran yakalamak dışında farklı istekleriniz var.
Pembe kısmı algılamak için, bir kaç yöntem var ama sizin Etaps içerisindeki bir butona tıklanmasını istemeniz ve ve daha sonra da çizimi seçmek için mouse ile iki koordinat arasındaki sürükleme ihtiyacınız için ikinci bir eylem gerekiyor.
Birinci aşamada, görüntü işleme ikinci aşamada pyautogui benzeri bir modül ile tıklama eylemlerini gerçekleştirmek gerekiyor.
Sorun şurada, burada bir çok kişinin inşaat mühendisi olmadığı ve çelik konstrüksiyon yada statik hesaplarla uğraşmadığında ETAPS kullanmama ihtimali yüksek.
Bu nedenle tam olarak ne yaptığınızı bilemiyoruz. Autocad’deki zoom extend gibi bir komuta karşılık geliyor gibi yaptığınız ama emin değilim çünkü Etaps kullanmadım hiç.
Eğer böyle bir eylem ise python kodu denemeden önce, kullandığınız yazılımın macro ve otomasyon için api kütüphaneleri var mı bilmekte fayda vardı.
Yani, eğer gördüğüm kadarıyla VBA ile otomasyon ihtimali varsa şu an ilerlemeye çalıştığınız yol zor yol.
Tam olarak, ekrandaki butonun eylemini karşılayan bir VBA makrosu varsa ve selection için koordinat yerine mevcut çizimi zoom yapacak bir alt yordam varsa bir kaç satırlık Visual Basic For Applicantions (VBA) kodu yazarak yapmak daha kolay olabilir.
Şöyle bir internet araştırmasında;
C:\Program Files\Computers and Structures\ETABS 19\CSA API ETABS v1.chm
Gibi size göre değişebilecek bir konumda bu konuda apileri bulabileceğiniz bir yardım dosyası olabilir ve bunu araştırırsanız belki faydası olur.
İlginçtir ki çok dökümantasyon ve kaynak yok ETAPS konusunda.
Yani örnek bulmakta zorlanabilirsiniz ama VBA kullanmayı biliyorsanız çabuk çözeceğinizi tahmin ediyorum.
İkinci ve zor yola gelirsek;
Bu konuda örnek bir kod yazabiliriz evet;
Mantık olarak görüntü çerçevelenir ve bir tolerans dahilinde görüntünün dışında çerçevelemek mümkün.
Bunu yaptığınızda dört koordinatınız olacaktır.
Sürükle bırak seçme için sol üst köşe koordinatları ile sağ alt köşe koordinatlarını pyautogui gibi bir modüle parametre olarka verisek seçecektir diye tahmin ediyorum.
Teorisi bu ama pratiğini kodlayarak aksaklıkları görmek gerekebilir.
Eğer böyle bir kodunuz varsa başlangıç noktamızın bu olması için kodu da paylaşmanız gerekebilir.
Yoksa sıfırdan yeni bir yöntemle kodlamamız gerekecektir.
Evet opencv kullanarak görütnü tespiti yapabilirsiniz yolo gerektirecek kadar hassas mı bilemiyorum. Elinizde butonun resmi olacağından pyimagesearch ile de butonu bulma ihtimaliniz yüksek. Bir renk parametresi ile yada kenar yakalama yaklaşımıyla çiziminizin kenarlarını bulmak mümkün.
Örnek kodlar denenebilir.
Ama öncelik sizin baz alacağımız örnek kodunuz ve ETAPS ın macro yada benzeri bir kodlama arayüzü olup olmadığı.
Yani python kullanmanız da gerekmiyor olabilir.
Autodesk yazılmlarına aşinayım, VBA, ObjectArx, Autolisp gibi seçeneklerle kendi içinde otomasyon sağlayabiliyor ama ETAPS bu gibi seçenekler sunuyor mu ne seviyede yapıyor sizin araştırmanızda fayda var.
Biraz daha bilgi verirseniz daha sağlıklı kod örnekleri üzerinde konuşabiliriz.
inRange
Pembeyi bulmak icin, bir nevi thresholding.
erosion + dilation
Ayni kerneli kullanirsaniz buna “opening” deniyor. Erosion, deniz seviyesini yukseltmek suretiyle kucuk adalari haritadan eliyor. Dilation bunun tam tersini yapip kalan adalari geri buyutuyor. Sonucta geriye sadece kernelden buyuk adalar kaliyor, hafifce yontulmus olarak.
Blob / bounding rectangle bulma
Basitce boundingRect ile yapilabilir.
Ben bu yapmaya çalıştığım uygulamayı hali hazırda olan bir inşaat mühendisi grubu için yapıyorum kullanan grup zaten inşaat mühendisi olucak ama belirtmemiştim size.
Evet bende yanlış anlamadıysam aynı amaç sürükle bırak yaptığımız yere maksimum yaklaşabileceği kadar yaklaşıyor direk.
Bir araştırmamda fayda var vba kullanmayı bilmiyorum ama eğer varsa makrosu ihtiyacım olduğu kadarıyla projeye entegre etmeye çalışırım
Bende baktım ama dediğiniz gibi maalesef kaynak yok denecek kadar az.
Benimde teoride yapmak istediğim şey bu ama çerçeleve kısmında takıldım
Kendi kendime uğraşarak böyle bir şey yapabildim. Basit olarak mantığı etabs de tuşların koordinatlarını tespit ettim sonra pyautogui kullanarak bu tuşlara tıklattım sonra bir döngüye aldığım zaman basitçe istenilen şeyi yapabildim birde pyqt5 ile basit bir pencere yaptım. Çok profesyonel bir şey değil ama benden istedikleri şeye basitçe ulaşıyorum.
Pencerenin kodlarıda lazım olur mu bilemedim ama ben her halikarda ekleyeceğim kullanırsınız belki.
Yolo bilmiyorum kullanmaıdm ama internette araştırmama göre baya kapsamlı ve detaylı resimler için o kadar detaylı bir duruma ihtiyacım olduğunu sanmıyorum.
Eğer sizi doğru anladıysam araştırmamda çıkan temel sorun burada çıkıyor ben bir resimden değil hali hazırda etabs çalışırken algılamasını istiyorum.
Yukarıda paylaştığım kodlardan sonra amacımı tekrardan yazarsam belki daha anlaşılır olur.
Şuan zaten ekran görüntüsü alabilen çok kapsamlı olmayan ama iş gören bir uygulama geliştirdim. Yapmak istediğim şey şu etabsden bu uygulama ekran görüntüsü almadan önce o sarı işaretlediğim yere tıklayıp görüntünün bir ucundan diğer ucuna sürükle bırak eylemi yapmasını istiyorum. Sebebi de şu görüntü uzakta kaldığı için çizime yaklaşması gerekiyor bildiğim en ideal çizimi kaybetmeden yaklaştırmanın yolu da bu.
Bende ihtiyacım olan tipte bir macro veya benzeri tipte bir şey var mı onu araştıracağım.
Umarım şimdi verdiğim bilgiler yeterli olmuştur zaman ayırdığınız için teşekkür ederim biraz geç cevap verdim kusura bakmayın perşembe günleri ofiste olabiliyorum sadece.
Pyautoqui kullandığınızı biliyoruz. Artık zoom yapmak için iki koordinat arasında bir nevi sürükle bırak yaptıracağız. Yani button pressed event’i ile ikinci koordina kadar bekleyik button release event’i bekleyeceğiz.
Peki bu koordinatları nasıl alacağız? Bunun için görseli işlemek ve çerçevelemek gerekecek.
Görüntü işlemek için en basitinden opencv kullanmanız gerekebilir. Open cv ile nesnenin/ çevresini yakalar ve bu koordinatları ne kadar dışından sürükle bırak yapmak isterseniz o kadar dışından koordinat verisi üretebilirsiniz.
Pyautogui ve opencv ile etabs üzerinde tıklatacağınız düğmenin resmini alıp, ekran görüntüsü alıp karşılaştırma yaptırarak bulmanız , koordinat vermekten daha doğru olacaktır. Koordinat verdiğinizde pencerenin konumu değiştiğinde doğru yere tıklayamaz. Ekran görüntüsü almak kolay fakat siz sadece pembe kısmın mı görüntüsünü almak istiyorsunuz ? Ben de inşaat mühendisiyim . Kullanacak arkadaşlara ne için kullanacaklarını sorarsanız daha hedefe doğru yardımcı olabilirim. Ayrıca resme tıklatma kafanıza yattıysa buradan kod paylaşabilirim.
Evet. Open cv ile görüntü yakalamak ve koordinatlarını tespit etmek mümkün. Zaten burada amaç farklı koordinatlardaki nesnelerin koordinatlarını almak.
Gibi örneklerle istediğiniz renkteki alanı tespit edebilirsiniz. Söylediğim gibi fırsat bulursam size bu konuda örnek kodlar da yazarım.
Anlamak istediğim tek şey programda hangi kütüphaneleri kullandığınız, hangilerini kullanabilir durumda olduğunuz ve aslında bir tasarımprogramında sürükle bırak ile bir alana zoom yapmak istediğinizi öğrenmekti.
Bu gayet yapılabilir bir iş. Siz deneyin takıldığınız yerlere bakarız.
Yapmak istediğiniz şey ETABS ın içinde sanırım . Tam anlamadım ama sadece seçtirtip zoom yapmak istiyorsanız. Yani dışardan görüntü alıp kullanmayacaksanız .
Bu daha mantıklı. Bunu yolu önermiştim. Ama sanırım dokümantasyon ve bir kaç farklı faktörden dolayı ilk tercih olmadı.
Hatta bu bence de en kolay yol. ETAPS kullanıyor olsaydım yada kuracak olsaydım bu işi içinde kolayca çözebilecek tümleşik bir makro programlayıcısı olacağını ve komutların gönderilebileceğini düşünüyorum.
Her türlü yapılır, lakin gönderilecek komutun referans dokümanlarını da bulmak gerekiyor.
Tekrar edeyim. Yerleşik bir metod varsa harici metod gereksiz bence de lakin zor değil. Yapılacak şey programın ekran görüntüsünü işleyip ki bu işlemek zaten hazır kütüphaneler tarafından hızlıca hallediliyor. işlediğiniz görüntüde bir kontrast ayarı ile beyaz alanları siyah diğer renkleri de beyaz yaparak kolayca bir alan tespiti mantığına dayanıyor. Yani kütüphaneler o kadar gelişkin ki 3-5 satır kodla bunu yapabiliyorsunuz.
Diğer kısmı mouse’u koordinatlarda hareket ettimek ki bu da pyautoqui ile çok basit.
Bende ilk başta çeşitli kütüphanelerle dediğiniz gibi yapmaya çalıştım hatta comtypes kütüphanesi ile direk müdahale edilebiliyor etabse diye baktım ama ne dökümantasyon ne de başka bir şey bulamaıdm ondan dolayı pyautogui ile yapmaya başladım.
Dediğiniz gibi opencv ile yapmaya çalışacağım hazır metodlar konusunda dökümantasyon bulamadım.