controle da ordem dos bicos

This commit is contained in:
Diego Freitas 2026-06-18 15:37:59 -03:00
parent 809c0412e3
commit d54ea58914
2 changed files with 27 additions and 2 deletions

View File

@ -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,

View File

@ -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),