From d54ea58914a14453a719e4bfe460f4adba1fbafb Mon Sep 17 00:00:00 2001 From: Diego Freitas Date: Thu, 18 Jun 2026 15:37:59 -0300 Subject: [PATCH] controle da ordem dos bicos --- .../Scripts/workers/weed_worker/config.py | 1 + .../workers/weed_worker/weed_detector.py | 28 +++++++++++++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/AgroBase/AgroBase/bin/x64/Debug/Python/Scripts/workers/weed_worker/config.py b/AgroBase/AgroBase/bin/x64/Debug/Python/Scripts/workers/weed_worker/config.py index 31dc0f441..70ea9dbef 100644 --- a/AgroBase/AgroBase/bin/x64/Debug/Python/Scripts/workers/weed_worker/config.py +++ b/AgroBase/AgroBase/bin/x64/Debug/Python/Scripts/workers/weed_worker/config.py @@ -126,6 +126,7 @@ WEED_DEFAULT_CONFIG = { # ============================================================ # Gate global: só libera bicos quando existe alvo suficiente no frame. "usar_radar_global_gate": True, + "inverter_ordem_bicos": True, # Histerese global da fração de alvo no frame completo. "min_frac_erva_global_on": 0.0020, diff --git a/AgroBase/AgroBase/bin/x64/Debug/Python/Scripts/workers/weed_worker/weed_detector.py b/AgroBase/AgroBase/bin/x64/Debug/Python/Scripts/workers/weed_worker/weed_detector.py index baecbf6c5..64d6f9962 100644 --- a/AgroBase/AgroBase/bin/x64/Debug/Python/Scripts/workers/weed_worker/weed_detector.py +++ b/AgroBase/AgroBase/bin/x64/Debug/Python/Scripts/workers/weed_worker/weed_detector.py @@ -58,6 +58,8 @@ class WeedDetector: if self.qtd_bicos <= 0: self.qtd_bicos = 7 + self.inverter_ordem_bicos = bool(self.config.get("inverter_ordem_bicos", False)) + self.detector_debug_perf = bool( self.config.get("detector_debug_perf", False) ) @@ -125,12 +127,25 @@ class WeedDetector: novo_qtd_bicos = int( self.config.get("qtd_bicos", self.qtd_bicos) or self.qtd_bicos ) + novo_inverter_ordem_bicos = bool( + self.config.get( + "inverter_ordem_bicos", + self.inverter_ordem_bicos, + ) + ) if novo_qtd_bicos <= 0: novo_qtd_bicos = 7 - if novo_qtd_bicos != self.qtd_bicos: - self.qtd_bicos = novo_qtd_bicos + mudou_mapeamento = ( + novo_qtd_bicos != self.qtd_bicos + or novo_inverter_ordem_bicos != self.inverter_ordem_bicos + ) + + self.qtd_bicos = novo_qtd_bicos + self.inverter_ordem_bicos = novo_inverter_ordem_bicos + + if mudou_mapeamento: self._inicializar_estado() self.detector_debug_perf = bool( @@ -343,6 +358,14 @@ class WeedDetector: larguras = np.diff(edges).astype(np.int32) area_por_bico = alturas * larguras + # A segmentação é calculada naturalmente da esquerda para a direita. + # Quando habilitado, inverte a associação entre região da imagem + # e numeração física dos bicos. + if self.inverter_ordem_bicos: + px_target_por_bico = px_target_por_bico[::-1].copy() + larguras = larguras[::-1].copy() + area_por_bico = area_por_bico[::-1].copy() + with np.errstate(divide="ignore", invalid="ignore"): frac_target_por_bico = np.where( area_por_bico > 0, @@ -361,6 +384,7 @@ class WeedDetector: # Semântica atual: fração de target/alvo pulverizável. "frac_erva_por_bico": frac_target_por_bico, "ema_frac_por_bico": self._ema_frac_bico.copy(), + "ordem_bicos_invertida": bool(self.inverter_ordem_bicos), "faixa": { "y_top": int(y_top), "y_bot": int(y_bot),