Kodlama Referansı

AugeLab'da sağlanan örnek özel blok scripti:

Example_Block code
## Bootstrap phase
from studio.custom_block import *
# Importing of community modules 
import cv2
import numpy as np

## Class Definition 
class Example_Block(Block):
	op_code = 'Example_Block' # DO NOT CHANGE !!!, must be same as class name

	def init(self):
		self.width = 200
		self.height = 120
		self.tooltip = 'Increment image values by one.'

		self.input_sockets = [SocketTypes.ImageAny('in1')]
		self.output_sockets = [SocketTypes.ImageAny('out1')]

		self.param['text1'] = TextInput(text= '5')

	def run(self):
		in1 = self.input['in1'].data
		self.output['out1'].data = in1 + 1


add_block(Example_Block.op_code, Example_Block)

Bootstrap Aşaması

Zorunlu İçe Aktarmalar

Örnek script her zaman belirli modüllerin içe aktarılmasıyla başlar. studio.custom_block import *, blokunuzda kullanmanız için gerekli süper sınıfları, widget'ları ve yöntemleri içe aktarır. Bu satır, tüm sınıf tanımlamaları için zorunludur.

Topluluk Modüllerinin İçe Aktarılması

Burada, en çok kullanılan iki kütüphane zaten sizin için içe aktarılmak üzere ayarlanmıştır. Özel bloklarınızda OpenCV ve numpy kütüphanelerini kullanabilirsiniz.

Özel kütüphaneleri de İçe Aktar Paket Penceresi ile yükleyerek içe aktarabilir ve özel statik değişkenleri ayarlayabilirsiniz.

AugeLab Studio'da sağlanan tüm bloklar çapraz platform uyumludur. Ancak, topluluk modüllerinin kullanılması bu uyumu tehlikeye atabilir.

Sınıf Tanımı

Sınıfınızın adı, Blok Adı metin düzeninde sağladığınız başlığa bağlı olarak belirlenir. Bu bölümde istediğiniz gibi nitelikler veya yöntemler tanımlayabilirsiniz.

Sınıf Nitelikleri-Yöntemleri

`Block.op_code: str`

op_code, özel bloğunuz için benzersiz bir tanımlayıcı dizesini tanımlar. Özel bloğunuzu yüklemek için, kendinize özel bir blok adı seçmelisiniz.

`Block.tooltip: str`

tooltip, kullanıcıların özel bloklar üzerinde fare ile gezindiğinde ipucu gösterilmesini sağlar.

`Block.input_sockets: list[SocketType]`

input_sockets niteliği soket türlerini depolar. Her soket türü, Giriş Soketi veya Çıkış Soketi bölümünde sizin için otomatik olarak oluşturulur.

SocketType, iki argüman alır:

...
SomeSocketClass(SocketTypes.BaseSocketClass):
    def __init__(self, name: str = '', multiple: bool = False):
        ''' 
            name: Soket grafiklerinin yanında gösterilen metin
            multiple: Bir tür listesini belirtmek için yatay bir çizgi çizer.
        '''
        ...

SocketType listesi aşağıda görülebilir:

  • [ImageAny]: ImageRGB | ImageGray

  • [ImageRGB]: npt.NDArray[np.uint8] # [N, N, 3]

  • [ImageGray]: npt.NDArray[np.uint8] # [N, N]

  • [Integer]: int

  • [Float]: int

  • [Number]: float | int

  • [Boolean]: bool

  • [String]: str

  • [Generic]: object

  • [Shape]: list[list[int, int], ...]

  • [Pixel]: tuple[int] | tuple[int, int, int]

  • [Point]: tuple[int, int]

`Block.output_sockets: list[SocketType]`

Bu bölümde de Giriş soketleri üzerindeki aynı kurallar geçerlidir.

`Block.param: dict[str, Component]`

Bu özellik, blok bileşenlerinizi ve etkileşimli widget'ları benzersiz adlarıyla tutar. Kullanabileceğiniz birkaç bileşen vardır:

`Block.input: dict[str, object]`

input özelliği, özel bloğunuza veri aktarımı için dinamik bir dict'dir. Soket adları aracılığıyla giriş soketlerinizden veri alabilirsiniz.

...
class Example_Block(Block):
    ...
    def init(self):
        ...
        self.input_sockets = [SocketTypes.ImageAny('Image'),
                              SocketTypes.Number('Constant')]
        ...
        
    def run(self):
        image = self.input['Image'].data
        constant = self.input['Image']
        ...

`Block.output: dict[str, object]`

output özelliği, özel bloğunuzdan veri dışarı aktarmak için dinamik bir dict'dir. Çıkış soketlerinize veri yerleştirirken benzersiz soket adlarını kullanabilirsiniz.

...
class Example_Block(Block):
    ...
    def init(self):
        ...
        self.output_sockets = [SocketTypes.ImageAny('Result'),
                              SocketTypes.Number('Detections')]
        ...
        
    def run(self):
        ...
        self.output['Result'].data = img_detections_drawn
        self.output['Detections'].data = n_detections
        

`Block.register_resource(name: str = '', path: str = '') -> str`

Yolları kaydeder ve bunları otomatik olarak senaryo dosyasına kaydeder.

Genellikle, düz yollar kullanmak, senaryo dosyalarını farklı bilgisayarlar arasında taşırken sorun yaratabilir. Ancak, otomatik kaynak yönetimi kullanarak genel veya göreli yolları kullanabilirsiniz. Kaynağı senaryo dosyasından daha düşük bir yolda depolamak, scriptinizin doğru yolu almasına olanak tanır.

Argümanlar:

name: str : Bir yolu ayırt etmek için sağlanan benzersiz ad.

path: str: Kaydedilecek yol.

Döndürür:

path: str: Kaydedilmiş yol.

Sağlanan yolu almak için get_resource yöntemini kullanın.

`Block.get_resource(name: str = '') -> str`

Özel blok içindeki kaynak yöneticisine sağladığınız kaynağı almanıza olanak tanır.

Argümanlar:

name: str : Bir yolu ayırt etmek için sağlanan benzersiz ad.

Döndürür:

path: str: Kaydedilen yol.

Bir yolu kaydetmek için register_resource yöntemini kullanın.

`Block.init(self)`

Bu bölüm, özel bir blok sürüklenip bırakıldığında, kopyalanıp yapıştırıldığında veya yeni bir senaryoda yüklendiğinde her seferinde gerçekleştirilir. Bu bölümde genellikle şunları yapmak önerilir:

  • Özel blok için kaynaklar yüklemek

  • Kullanılacak bileşenleri tanımlamak (metin girişleri, düğmeler vb.)

  • Çalışma zamanında değişen iç blok durumları.

`Block.run(self)`

Run yöntemi, AugeLab Studio'da bir senaryonun her adımında yürütülür. Özel bloklarınızın iç durumlarını, özel modülleri, sabitleri vb. kullanabilirsiniz.

Girişleri, süper Block sınıfının sağladığı dinamik özellikleri kullanarak alabilir ve çıktılar gönderebilir, bileşenlerinizin yapılandırmalarını değiştirebilir ve doğru yürütme mantığını seçmek için bileşen durumunu okuyabilirsiniz.

`QAFileDialog`

QAFileDialog, kullanıcılara dosya yolu seçme diyaloğu sunan statik bir sınıftır:

`QAFileDialog.getOpenFileName(**kwargs)`

Argümanlar

caption: str = '': Dosya diyalog başlığının başlığı

directory: str = '': Diyalogun başlangıç dizini

filter: str = '': Filtrelenecek dosya adları, örneğin -> 'Görüntü Dosyaları (*.png *.jpg *.bmp)'

Döndürür

path:str: Kullanıcı tarafından seçilen yol.

`QAFileDialog.getExistingDirectory`

Argümanlar

caption: str = '': Dosya diyalog başlığının başlığı

directory: str = '': Diyalogun başlangıç dizini

Döndürür

path:str: Kullanıcı tarafından seçilen yol.

`add_block(My_Block.op_code, My_Block)`

Bu bölüm, Tasarımcı Penceresi tarafından otomatik olarak oluşturulur ve değiştirilmemelidir. Değiştirilmesi gerekiyorsa, blok adının sınıf adı ile ve op_code ile aynı olduğundan emin olun.

Last updated