hot reload
This commit is contained in:
94
CLAUDE.md
Normal file
94
CLAUDE.md
Normal file
@@ -0,0 +1,94 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## Project Overview
|
||||
|
||||
VisionBuilder.UI is a modular .NET 8.0 WinForms application for industrial computer vision. It processes images through configurable operation pipelines, supports AI inference (YOLO/ONNX), and integrates with HawkEye camera hardware. The solution uses Ninject for DI and follows MVVM patterns.
|
||||
|
||||
## Build Commands
|
||||
|
||||
```bash
|
||||
dotnet build VisionBuilder.UI.sln -c Debug # GPU build (YoloV8.Gpu + OnnxRuntime.Gpu)
|
||||
dotnet build VisionBuilder.UI.sln -c CPU # CPU-only build (YoloV8 + OnnxRuntime)
|
||||
dotnet build VisionBuilder.UI.sln -c Release # Production build
|
||||
```
|
||||
|
||||
The `Debug` and `Release` configurations pull GPU NuGet packages; `CPU` configuration pulls CPU-only packages. This is controlled by conditional `<PackageReference>` blocks in `Hawkeye.VisionBuilder.Workflow.csproj`.
|
||||
|
||||
## Testing
|
||||
|
||||
Test framework: **MSTest** (Microsoft.NET.Test.Sdk 17.12.0, MSTest 3.6.4)
|
||||
|
||||
```bash
|
||||
dotnet test VisionBuilder.UI.sln # Run all tests
|
||||
dotnet test VisionBuilder.UI.Tests/ # Primary unit tests only
|
||||
dotnet test --filter "FullyQualifiedName~ClassName.Method" # Single test
|
||||
```
|
||||
|
||||
Test projects: `VisionBuilder.UI.Tests`, `VisionBuilder.UI.Recipes.Scripted.Tests`, `IDSTest`
|
||||
|
||||
## Solution Architecture
|
||||
|
||||
The solution is organized into logical groups:
|
||||
|
||||
**Starters** (entry points):
|
||||
- `Hawkeye.VisionBuilder` — Main WinExe. `Program.cs` bootstraps the Ninject kernel, creates the `WorkflowList` and `OperationDiscoveryService`, then runs `MainWindow`.
|
||||
|
||||
**Core Modules**:
|
||||
- `Hawkeye.VisionBuilder.Workflow` — Image processing pipeline engine. Contains `BaseOperation`, `Context`, `WorkflowList`, `OperationDiscoveryService`, and all operation implementations. See its own `CLAUDE.md` for detailed operation/recipe documentation.
|
||||
- `VisionBuilder.UI.Common` — Shared contracts: `IPlugin`, `IVisionBuilderModule`, `IRecognitionControl`, `IImageSource`, service interfaces, MVVM ViewModels, command/event system.
|
||||
- `VisionBuilder.UI.Windows` — WinForms UI controls (PreviewWindow, ErrorPreview, Stats, SingleCameraControl).
|
||||
|
||||
**Framework** (reusable libraries under `framework/`):
|
||||
- `Inspectron.Camera`, `Inspectron.Settings`, `Inspectron.HawkEye`, `Inspectron.Fastbuffer`, `Inspectron.Ringbuffer`, `MaterialSkin.Core` — Hardware abstraction, settings management, and UI theming. Some target `netstandard2.1`.
|
||||
|
||||
**Sources** (image input providers):
|
||||
- `Sources.Emulation` — File-based emulated camera for development.
|
||||
- `Sources.Hawkeye` — Real HawkEye hardware source.
|
||||
- `Sources.IDS` — IDS industrial camera integration.
|
||||
|
||||
**Plugins** (extend functionality via `IPlugin` interface):
|
||||
- `B24SiemensPlugin`, `CandyboxPlugin`, `PralinenPLC`, `PackstrasseBarcodeReader`, etc.
|
||||
- Plugins register services into the Ninject kernel at global and per-camera scope.
|
||||
|
||||
**Recipes** (workflow serialization):
|
||||
- `Recipes.HawkeyeRecipe` — Binary `.hrcp` and XML `.xhrcp` recipe formats.
|
||||
- `Recipes.Scripted` — Script-based recipe execution.
|
||||
|
||||
## Key Architectural Patterns
|
||||
|
||||
### Operation Pipeline
|
||||
Images flow through a chain of `BaseOperation` subclasses. Each operation receives a `Context` (holding `ActiveImage`, `Memory` dictionary, `GraphicsElements`) and implements `InterpretInternal(Context)`. Operations are discovered at runtime via reflection by `OperationDiscoveryService`. Categories: `AI/`, `Simple/`, `Filters/`, `Morphology/`, `Image/`, `Basic/`.
|
||||
|
||||
### Plugin System
|
||||
Plugins implement `IPlugin` with two registration points:
|
||||
- `RegisterGlobalModules(IKernel)` — app-wide services
|
||||
- `RegisterCameraModules(IKernel, string cameraName)` — per-camera services
|
||||
|
||||
Modules implement `IVisionBuilderModule.InitializeModule()` for deferred initialization.
|
||||
|
||||
### DI Container
|
||||
Ninject `StandardKernel` is the root container. Child kernels (`Ninject.Extensions.ChildKernel`) scope per-camera services. All service resolution flows through the kernel — avoid `new` for services.
|
||||
|
||||
### Event/Command System
|
||||
`IEvent` / `IEventHandler<TEvent>` in `VisionBuilder.UI.Common/Commands/`. Key events: `SessionStartedEvent`, `SessionEndedEvent`, `ImageProcessedEvent`, `ErrorsInSequenceEvent`. `IRecognitionControl` surfaces these as `Action<T>` events.
|
||||
|
||||
## Key Dependencies
|
||||
|
||||
- **OpenCvSharp4** — Core image processing
|
||||
- **YoloV8 / YoloV8.Gpu** — AI object detection (conditional on build config)
|
||||
- **IronPython 3.4.0** — Python scripting integration
|
||||
- **Ninject** — Dependency injection
|
||||
- **CommunityToolkit.Mvvm** — MVVM support (ObservableObject, RelayCommand)
|
||||
- **Serilog** — Structured logging
|
||||
- **Scintilla.NET** — Code editor component in UI
|
||||
- **MaterialSkin.Core** — Material Design WinForms theming
|
||||
|
||||
## Conventions
|
||||
|
||||
- Target platform is **x64** Windows.
|
||||
- Culture is forced to `en-US` at startup.
|
||||
- Nullable reference types are enabled across most projects.
|
||||
- Operation attributes: `[Category("name")]` for UI grouping, `[NotForTool]` to exclude properties from serialization, `[IgnoreOperation]` to hide from discovery.
|
||||
- Recipe serialization supports both binary (`.hrcp`) and XML (`.xhrcp`) formats. Prefer XML for new work. Override `SaveXML`/`LoadXML`/`GetOperationElementName` for custom serialization.
|
||||
Reference in New Issue
Block a user