bowling-analysis-system
Version:
A comprehensive system for analyzing bowling techniques using video processing and metrics calculation
76 lines (63 loc) • 2.06 kB
JavaScript
/**
* @module bowling_analysis/metrics/BiasProcessor
*/
const { defaultLogger } = require('../../utils/logger');
const { getTotalFrames, filterRelevantMetrics } = require('../utils/MetricsUtils');
// Using the modern BiasCalculator instead of the deprecated BiasAnalyzer
const BiasCalculator = require('../processors/BiasCalculator');
const { getConfig } = require('../utils/BiasConfigManager');
const { validateEvents } = require('../utils/EventValidator');
const logger = defaultLogger.child('BiasProcessor');
class BiasProcessor {
constructor(options = {}) {
this.options = {
...getConfig(),
...options
};
this.logger = logger;
}
/**
* Process metrics with bias analysis
*/
async process(metrics, referenceData) {
const totalFrames = getTotalFrames(metrics);
this.logger.debug('Processing metrics', { totalFrames });
if (!metrics || !referenceData) {
throw new Error('Missing required data for bias processing');
}
// Use the modern BiasCalculator instead of the deprecated BiasAnalyzer
const biasCalculator = new BiasCalculator({
debug: this.options.debug,
logger: this.logger.child('BiasCalculator')
});
// Generate bias data using the modern implementation
const biasData = await biasCalculator.calculateBias(metrics);
if (!biasData) {
throw new Error('Failed to generate bias data');
}
// Validate events
const events = this._extractEvents(biasData);
const validatedEvents = await validateEvents(events);
return {
...biasData,
events: validatedEvents
};
}
/**
* Extract events from bias data
* @private
*/
_extractEvents(biasData) {
const events = {};
for (const [eventType, eventData] of Object.entries(biasData.events)) {
if (eventData && eventData.confidence >= this.options.eventConfidenceThreshold) {
events[eventType] = {
...eventData,
validated: true
};
}
}
return events;
}
}
module.exports = BiasProcessor;