Rewrite to Go: engine, plugin system, D2R plugin, API, loot filter
This commit is contained in:
parent
e0282a7111
commit
3b363192f2
60 changed files with 1576 additions and 3407 deletions
88
pkg/engine/vision/vision.go
Normal file
88
pkg/engine/vision/vision.go
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
// Package vision provides computer vision utilities for game screen analysis.
|
||||
//
|
||||
// Uses GoCV (OpenCV bindings for Go) for template matching, color detection,
|
||||
// and contour analysis. Designed for high-throughput real-time analysis.
|
||||
package vision
|
||||
|
||||
import (
|
||||
"image"
|
||||
"image/color"
|
||||
)
|
||||
|
||||
// Match represents a detected element on screen.
|
||||
type Match struct {
|
||||
Position image.Point
|
||||
BBox image.Rectangle
|
||||
Confidence float64
|
||||
Label string
|
||||
}
|
||||
|
||||
// Template is a pre-loaded image template for matching.
|
||||
type Template struct {
|
||||
Name string
|
||||
Image image.Image
|
||||
Width int
|
||||
Height int
|
||||
}
|
||||
|
||||
// ColorRange defines an HSV color range for detection.
|
||||
type ColorRange struct {
|
||||
LowerH, LowerS, LowerV int
|
||||
UpperH, UpperS, UpperV int
|
||||
}
|
||||
|
||||
// Pipeline processes frames through a series of vision operations.
|
||||
type Pipeline struct {
|
||||
templates map[string]*Template
|
||||
threshold float64
|
||||
}
|
||||
|
||||
// NewPipeline creates a vision pipeline with the given confidence threshold.
|
||||
func NewPipeline(threshold float64) *Pipeline {
|
||||
return &Pipeline{
|
||||
templates: make(map[string]*Template),
|
||||
threshold: threshold,
|
||||
}
|
||||
}
|
||||
|
||||
// LoadTemplate loads a template image for matching.
|
||||
func (p *Pipeline) LoadTemplate(name string, img image.Image) {
|
||||
bounds := img.Bounds()
|
||||
p.templates[name] = &Template{
|
||||
Name: name,
|
||||
Image: img,
|
||||
Width: bounds.Dx(),
|
||||
Height: bounds.Dy(),
|
||||
}
|
||||
}
|
||||
|
||||
// FindTemplate searches for a template in the frame.
|
||||
// Returns the best match above threshold, or nil.
|
||||
func (p *Pipeline) FindTemplate(frame image.Image, templateName string) *Match {
|
||||
// TODO: Implement with GoCV matchTemplate
|
||||
// This is a stub — actual implementation needs gocv.MatchTemplate
|
||||
return nil
|
||||
}
|
||||
|
||||
// FindAllTemplates finds all matches of a template above threshold.
|
||||
func (p *Pipeline) FindAllTemplates(frame image.Image, templateName string) []Match {
|
||||
// TODO: Implement with GoCV + NMS
|
||||
return nil
|
||||
}
|
||||
|
||||
// FindByColor detects regions matching an HSV color range.
|
||||
func (p *Pipeline) FindByColor(frame image.Image, colorRange ColorRange, minArea int) []Match {
|
||||
// TODO: Implement with GoCV inRange + findContours
|
||||
return nil
|
||||
}
|
||||
|
||||
// ReadBarPercentage reads a horizontal bar's fill level (health, mana, xp).
|
||||
func (p *Pipeline) ReadBarPercentage(frame image.Image, barRegion image.Rectangle, filledColor ColorRange) float64 {
|
||||
// TODO: Implement — scan columns for filled color ratio
|
||||
return 0.0
|
||||
}
|
||||
|
||||
// GetPixelColor returns the color at a specific pixel.
|
||||
func (p *Pipeline) GetPixelColor(frame image.Image, x, y int) color.Color {
|
||||
return frame.At(x, y)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue