# heng8598/aoi_terminal_inspection architecture

> Architecture diagram of the GitHub repository heng8598/aoi_terminal_inspection, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/heng8598/aoi_terminal_inspection
- Repository: https://github.com/heng8598/aoi_terminal_inspection

## Overview

This is a PySide6/OpenCV terminal-inspection application: operators configure camera, inspection regions and thresholds, then start manual, continuous or hardware-triggered checks. Frames are processed across Ground, Live and Neutral terminals for pin presence, width and angle; the UI presents inspection images, OK/NG results, counters and history. The state machine and signal bus coordinate camera and trigger flow, while UART and Modbus TCP provide optional hardware paths. Relationships are limited to README statements and the provided excerpts/SOURCE INDEX; unsampled feature links are omitted where their caller is not shown.

Main entry points: [`ui_screen/main_ui.py`](https://github.com/heng8598/aoi_terminal_inspection/blob/main/ui_screen/main_ui.py) (Application window), [`pipeline/prosess_inspection.py`](https://github.com/heng8598/aoi_terminal_inspection/blob/main/pipeline/prosess_inspection.py) (Inspection pipeline), [`ui_screen/menu_bar.py`](https://github.com/heng8598/aoi_terminal_inspection/blob/main/ui_screen/menu_bar.py) (Settings menu), [`camera/signal_bus.py`](https://github.com/heng8598/aoi_terminal_inspection/blob/main/camera/signal_bus.py) (Signal bus)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_operation["Operator workflow"]
  node_main["Application window<br/>[main_ui.py]"]
  node_inspection_ui["Inspection display"]
  node_results["Results and counters"]
  node_history["NG history"]
  node_menu["Settings menu<br/>[menu_bar.py]"]
end

subgraph group_vision["Vision inspection"]
  node_camera["Camera capture<br/>[camera_thread.py]"]
  node_inspection["Inspection pipeline"]
  node_roi["Terminal ROIs<br/>[base_inspection.py]"]
  node_analyzer["Image analyzer"]
  node_pin["Pin detection"]
  node_measurement["Width and angle"]
  node_drawing["Result overlays"]
end

subgraph group_coordination["Runtime coordination"]
  node_state["Inspection state machine<br/>[state_machine.py]"]
  node_signals["Signal bus<br/>[signal_bus.py]"]
  node_controller["Inspection controller"]
end

subgraph group_hardware["Hardware communication"]
  node_uart_thread["UART worker<br/>[uart_thread.py]"]
  node_uart_manager["UART connection"]
  node_stm32["STM32 board"]
  node_modbus_thread["Modbus worker<br/>[modbus_thread.py]"]
  node_modbus["Modbus connection"]
  node_relay["Relay board"]
end

subgraph group_settings["Configuration and settings"]
  node_config[("Persistent settings<br/>[config.py]")]
  node_camera_settings["Camera settings"]
  node_roi_settings["ROI settings"]
  node_detection_settings["Detection parameters"]
  node_calibration["Calibration<br/>[calibration.py]"]
  node_modbus_settings["Modbus settings<br/>[modbus.py]"]
end

node_operator(("Operator"))

node_operator -->|"uses"| node_main
node_main -->|"starts capture"| node_camera
node_camera -->|"emits frames"| node_signals
node_signals -->|"signals events"| node_state
node_state -->|"dispatches inspection"| node_controller
node_controller -->|"invokes"| node_inspection
node_inspection -->|"uses regions"| node_roi
node_inspection -->|"analyzes image"| node_analyzer
node_inspection -->|"detects pins"| node_pin
node_inspection -->|"measures terminals"| node_measurement
node_inspection -->|"draws results"| node_drawing
node_inspection -.->|"publishes result"| node_signals
node_main -->|"updates display"| node_inspection_ui
node_main -->|"updates results"| node_results
node_main -->|"records NG"| node_history
node_operator -->|"configures"| node_menu
node_menu -->|"opens"| node_camera_settings
node_menu -->|"opens"| node_roi_settings
node_menu -->|"opens"| node_detection_settings
node_menu -->|"opens"| node_calibration
node_menu -->|"opens"| node_modbus_settings
node_camera_settings -.->|"saves settings"| node_config
node_roi_settings -->|"saves regions"| node_config
node_detection_settings -->|"saves parameters"| node_config
node_calibration -->|"saves calibration"| node_config
node_modbus_settings -->|"saves settings"| node_config
node_main -.->|"runs worker"| node_uart_thread
node_uart_thread -->|"reads UART"| node_uart_manager
node_stm32 -.->|"triggers over UART"| node_uart_manager
node_main -->|"runs worker"| node_modbus_thread
node_modbus_thread -->|"uses connection"| node_modbus
node_relay -.->|"triggers over TCP"| node_modbus
node_uart_thread -->|"emits trigger"| node_signals
node_modbus_thread -->|"emits trigger"| node_signals

click node_main "https://github.com/heng8598/aoi_terminal_inspection/blob/main/ui_screen/main_ui.py"
click node_inspection_ui "https://github.com/heng8598/aoi_terminal_inspection/blob/main/ui_screen/inspection_view_panel.py"
click node_results "https://github.com/heng8598/aoi_terminal_inspection/blob/main/ui_screen/final_result_valve.py"
click node_history "https://github.com/heng8598/aoi_terminal_inspection/blob/main/ui_screen/ng_history_panel.py"
click node_menu "https://github.com/heng8598/aoi_terminal_inspection/blob/main/ui_screen/menu_bar.py"
click node_camera "https://github.com/heng8598/aoi_terminal_inspection/blob/main/camera/camera_thread.py"
click node_inspection "https://github.com/heng8598/aoi_terminal_inspection/blob/main/pipeline/prosess_inspection.py"
click node_roi "https://github.com/heng8598/aoi_terminal_inspection/blob/main/pipeline/base_inspection.py"
click node_analyzer "https://github.com/heng8598/aoi_terminal_inspection/blob/main/pipeline/terminal_analyzers.py"
click node_pin "https://github.com/heng8598/aoi_terminal_inspection/blob/main/pipeline/terminal_pin_analyzers.py"
click node_measurement "https://github.com/heng8598/aoi_terminal_inspection/blob/main/pipeline/terminal_measurement.py"
click node_drawing "https://github.com/heng8598/aoi_terminal_inspection/blob/main/pipeline/terminal_draw_tool.py"
click node_state "https://github.com/heng8598/aoi_terminal_inspection/blob/main/state_machine/state_machine.py"
click node_signals "https://github.com/heng8598/aoi_terminal_inspection/blob/main/camera/signal_bus.py"
click node_controller "https://github.com/heng8598/aoi_terminal_inspection/blob/main/inspection_controller/inspection_contorller.py"
click node_uart_thread "https://github.com/heng8598/aoi_terminal_inspection/blob/main/uart/uart_thread.py"
click node_uart_manager "https://github.com/heng8598/aoi_terminal_inspection/blob/main/connecting/uart_connecting_manager.py"
click node_modbus_thread "https://github.com/heng8598/aoi_terminal_inspection/blob/main/plc/modbus_thread.py"
click node_modbus "https://github.com/heng8598/aoi_terminal_inspection/blob/main/connecting/modbus_connecting_manager.py"
click node_config "https://github.com/heng8598/aoi_terminal_inspection/blob/main/utils/config.py"
click node_camera_settings "https://github.com/heng8598/aoi_terminal_inspection/blob/main/dialog/camera_setting_dialog.py"
click node_roi_settings "https://github.com/heng8598/aoi_terminal_inspection/blob/main/dialog/roi_setting_dialog.py"
click node_detection_settings "https://github.com/heng8598/aoi_terminal_inspection/blob/main/dialog/detection_parameter.py"
click node_calibration "https://github.com/heng8598/aoi_terminal_inspection/blob/main/dialog/calibration.py"
click node_modbus_settings "https://github.com/heng8598/aoi_terminal_inspection/blob/main/plc/modbus.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_inspection_ui,node_results,node_history,node_menu toneBlue
class node_camera,node_inspection,node_roi,node_analyzer,node_pin,node_measurement,node_drawing toneAmber
class node_state,node_signals,node_controller toneMint
class node_uart_thread,node_uart_manager,node_stm32,node_modbus_thread,node_modbus,node_relay toneRose
class node_config,node_camera_settings,node_roi_settings,node_detection_settings,node_calibration,node_modbus_settings,node_operator toneIndigo
```

## Components

### Operator workflow

- [Application window](https://github.com/heng8598/aoi_terminal_inspection/blob/main/ui_screen/main_ui.py): `ui_screen/main_ui.py`
- [Inspection display](https://github.com/heng8598/aoi_terminal_inspection/blob/main/ui_screen/inspection_view_panel.py): `ui_screen/inspection_view_panel.py`
- [Results and counters](https://github.com/heng8598/aoi_terminal_inspection/blob/main/ui_screen/final_result_valve.py): `ui_screen/final_result_valve.py`
- [NG history](https://github.com/heng8598/aoi_terminal_inspection/blob/main/ui_screen/ng_history_panel.py): `ui_screen/ng_history_panel.py`
- [Settings menu](https://github.com/heng8598/aoi_terminal_inspection/blob/main/ui_screen/menu_bar.py): `ui_screen/menu_bar.py`

### Vision inspection

- [Camera capture](https://github.com/heng8598/aoi_terminal_inspection/blob/main/camera/camera_thread.py): `camera/camera_thread.py`
- [Inspection pipeline](https://github.com/heng8598/aoi_terminal_inspection/blob/main/pipeline/prosess_inspection.py): `pipeline/prosess_inspection.py`
- [Terminal ROIs](https://github.com/heng8598/aoi_terminal_inspection/blob/main/pipeline/base_inspection.py): `pipeline/base_inspection.py`
- [Image analyzer](https://github.com/heng8598/aoi_terminal_inspection/blob/main/pipeline/terminal_analyzers.py): `pipeline/terminal_analyzers.py`
- [Pin detection](https://github.com/heng8598/aoi_terminal_inspection/blob/main/pipeline/terminal_pin_analyzers.py): `pipeline/terminal_pin_analyzers.py`
- [Width and angle](https://github.com/heng8598/aoi_terminal_inspection/blob/main/pipeline/terminal_measurement.py): `pipeline/terminal_measurement.py`
- [Result overlays](https://github.com/heng8598/aoi_terminal_inspection/blob/main/pipeline/terminal_draw_tool.py): `pipeline/terminal_draw_tool.py`

### Runtime coordination

- [Inspection state machine](https://github.com/heng8598/aoi_terminal_inspection/blob/main/state_machine/state_machine.py): `state_machine/state_machine.py`
- [Signal bus](https://github.com/heng8598/aoi_terminal_inspection/blob/main/camera/signal_bus.py): `camera/signal_bus.py`
- [Inspection controller](https://github.com/heng8598/aoi_terminal_inspection/blob/main/inspection_controller/inspection_contorller.py): `inspection_controller/inspection_contorller.py`

### Hardware communication

- [UART worker](https://github.com/heng8598/aoi_terminal_inspection/blob/main/uart/uart_thread.py): `uart/uart_thread.py`
- [UART connection](https://github.com/heng8598/aoi_terminal_inspection/blob/main/connecting/uart_connecting_manager.py): `connecting/uart_connecting_manager.py`
- **STM32 board**
- [Modbus worker](https://github.com/heng8598/aoi_terminal_inspection/blob/main/plc/modbus_thread.py): `plc/modbus_thread.py`
- [Modbus connection](https://github.com/heng8598/aoi_terminal_inspection/blob/main/connecting/modbus_connecting_manager.py): `connecting/modbus_connecting_manager.py`
- **Relay board**

### Configuration and settings

- [Persistent settings](https://github.com/heng8598/aoi_terminal_inspection/blob/main/utils/config.py): `utils/config.py`
- [Camera settings](https://github.com/heng8598/aoi_terminal_inspection/blob/main/dialog/camera_setting_dialog.py): `dialog/camera_setting_dialog.py`
- [ROI settings](https://github.com/heng8598/aoi_terminal_inspection/blob/main/dialog/roi_setting_dialog.py): `dialog/roi_setting_dialog.py`
- [Detection parameters](https://github.com/heng8598/aoi_terminal_inspection/blob/main/dialog/detection_parameter.py): `dialog/detection_parameter.py`
- [Calibration](https://github.com/heng8598/aoi_terminal_inspection/blob/main/dialog/calibration.py): `dialog/calibration.py`
- [Modbus settings](https://github.com/heng8598/aoi_terminal_inspection/blob/main/plc/modbus.py): `plc/modbus.py`

### Other components

- **Operator**

## Connections

- Operator → Application window: uses (evidence: `README.md`)
- Application window → Camera capture: starts capture (evidence: `ui_screen/main_ui.py`)
- Camera capture → Signal bus: emits frames (evidence: `camera/camera_thread.py`)
- Signal bus → Inspection state machine: signals events (evidence: `state_machine/state_machine.py`)
- Inspection state machine → Inspection controller: dispatches inspection (evidence: `state_machine/state_machine.py`)
- Inspection controller → Inspection pipeline: invokes (evidence: `inspection_controller/inspection_contorller.py`)
- Inspection pipeline → Terminal ROIs: uses regions (evidence: `pipeline/prosess_inspection.py`)
- Inspection pipeline → Image analyzer: analyzes image (evidence: `pipeline/prosess_inspection.py`)
- Inspection pipeline → Pin detection: detects pins (evidence: `pipeline/prosess_inspection.py`)
- Inspection pipeline → Width and angle: measures terminals (evidence: `pipeline/prosess_inspection.py`)
- Inspection pipeline → Result overlays: draws results (evidence: `pipeline/prosess_inspection.py`)
- Inspection pipeline → Signal bus: publishes result
- Application window → Inspection display: updates display (evidence: `ui_screen/main_ui.py`)
- Application window → Results and counters: updates results (evidence: `ui_screen/main_ui.py`)
- Application window → NG history: records NG (evidence: `ui_screen/main_ui.py`)
- Operator → Settings menu: configures (evidence: `README.md`)
- Settings menu → Camera settings: opens (evidence: `ui_screen/menu_bar.py`)
- Settings menu → ROI settings: opens (evidence: `ui_screen/menu_bar.py`)
- Settings menu → Detection parameters: opens (evidence: `ui_screen/menu_bar.py`)
- Settings menu → Calibration: opens (evidence: `ui_screen/menu_bar.py`)
- Settings menu → Modbus settings: opens (evidence: `ui_screen/menu_bar.py`)
- Camera settings → Persistent settings: saves settings (evidence: `dialog/camera_setting_dialog.py`)
- ROI settings → Persistent settings: saves regions (evidence: `dialog/roi_setting_dialog.py`)
- Detection parameters → Persistent settings: saves parameters (evidence: `dialog/detection_parameter.py`)
- Calibration → Persistent settings: saves calibration (evidence: `dialog/calibration.py`)
- Modbus settings → Persistent settings: saves settings (evidence: `plc/modbus.py`)
- Application window → UART worker: runs worker (evidence: `ui_screen/main_ui.py`)
- UART worker → UART connection: reads UART (evidence: `uart/uart_thread.py`)
- STM32 board → UART connection: triggers over UART (evidence: `README.md`)
- Application window → Modbus worker: runs worker (evidence: `ui_screen/main_ui.py`)
- Modbus worker → Modbus connection: uses connection (evidence: `plc/modbus_thread.py`)
- Relay board → Modbus connection: triggers over TCP (evidence: `README.md`)
- UART worker → Signal bus: emits trigger (evidence: `uart/uart_thread.py`)
- Modbus worker → Signal bus: emits trigger (evidence: `plc/modbus_thread.py`)
