Embryo-One's picture
Upload 49 files
ed9f15f verified
/**
* Model Inference - Run predictions on models
*/
import { getModel } from '../state.js';
import { LABEL_MAPPINGS } from '../config.js';
import { preprocessImage } from '../processing/imagePreprocessing.js';
import { postprocessClassification, postprocessGrading } from '../processing/postprocessing.js';
/**
* Run classification model (embryo yes/no)
*/
export async function runClassification(imageData) {
const inputTensor = await preprocessImage(imageData, 224);
const feeds = { pixel_values: inputTensor };
const results = await getModel('classifier').run(feeds);
return postprocessClassification(results, LABEL_MAPPINGS.classifier);
}
/**
* Run quality check model (poor/good)
*/
export async function runQualityCheck(imageData) {
const inputTensor = await preprocessImage(imageData, 224);
const feeds = { pixel_values: inputTensor };
const results = await getModel('poorGood').run(feeds);
return postprocessClassification(results, LABEL_MAPPINGS.poorGood);
}
/**
* Run grading model (Gardner scale)
*/
export async function runGrading(imageData) {
const inputTensor = await preprocessImage(imageData, 224);
const feeds = { pixel_values: inputTensor };
const results = await getModel('grader').run(feeds);
return postprocessGrading(results);
}
/**
* Evaluate embryo quality and grade
*/
export async function evaluateEmbryo(imageData) {
try {
// Step 1: Check quality (poor/good)
const qualityResult = await runQualityCheck(imageData);
if (qualityResult.label === 'poor') {
return {
quality: 'poor',
poorGoodConfidence: qualityResult.confidence,
grade: null,
predictions: {}
};
}
// Step 2: Get grade
const gradeResult = await runGrading(imageData);
return {
quality: 'good',
poorGoodConfidence: qualityResult.confidence,
grade: gradeResult.label,
confidence: gradeResult.confidence,
predictions: gradeResult.allPredictions
};
} catch (error) {
console.error('Error evaluating embryo:', error);
throw new Error(`Failed to evaluate embryo: ${error.message}`);
}
}