ChessPrism/cline_docs/techContext.md
2025-01-13 12:42:20 -06:00

88 lines
2.1 KiB
Markdown

# Technical Context
## Development Environment
- macOS Application
- Swift & SwiftUI
- Xcode 14+
- Target: macOS 12.3+
## Core Technologies
1. Vision Framework
- VNDetectRectanglesRequest for board detection
- VNCoreMLRequest for piece classification
- VNImageRequestHandler for image processing
2. Core ML Model
- Name: ChessPieceClassifier.mlmodel
- Input: RGB/RGBA images
- Output: Classification label
- Categories (exact names):
```swift
white_pawn, white_knight, white_bishop, white_rook, white_queen, white_king,
black_pawn, black_knight, black_bishop, black_rook, black_queen, black_king
```
3. ScreenCaptureKit
- Window capture at 30 FPS
- Configurable cursor visibility
- Chess.com window detection
## Image Processing
1. Preprocessing Pipeline
- Contrast enhancement (1.3x)
- Edge sharpening
- Noise reduction
- Color normalization
2. Square Extraction
- Aspect ratio validation
- Size normalization
- Center crop
## Model Integration
1. Loading
```swift
let config = MLModelConfiguration()
config.computeUnits = .all
let model = try MLModel(contentsOf: modelURL)
let vnModel = try VNCoreMLModel(for: model)
```
2. Classification
```swift
let request = VNCoreMLRequest(model: vnModel)
request.imageCropAndScaleOption = .centerCrop
```
3. Result Handling
- Confidence threshold: 0.75
- Empty square fallback
- Direct category mapping
## Dependencies
- Foundation
- Vision
- CoreML
- CoreImage
- ScreenCaptureKit
- SwiftUI
## Error Handling
- Invalid dimensions
- Model loading failures
- Recognition errors
- Low confidence results
## File Organization
```
ChessPrism/
├── Models/
│ ├── SquareClassification.swift # Model output mapping
│ └── ChessPosition.swift # Board state
├── Recognition/
│ ├── PieceRecognizer.swift # ML integration
│ ├── FenGenerator.swift # Position encoding
│ └── MoveDetector.swift # Move analysis
└── Core/
├── BoardDetector.swift # Square extraction
└── ScreenCapture.swift # Window capture