|
|
|
|
|
|
|
|
|
|
|
|
|
|
import { getModel } from '../state.js';
|
|
|
import { LABEL_MAPPINGS } from '../config.js';
|
|
|
import { preprocessImage } from '../processing/imagePreprocessing.js';
|
|
|
import { postprocessClassification, postprocessGrading } from '../processing/postprocessing.js';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export async function evaluateEmbryo(imageData) {
|
|
|
try {
|
|
|
|
|
|
const qualityResult = await runQualityCheck(imageData);
|
|
|
|
|
|
if (qualityResult.label === 'poor') {
|
|
|
return {
|
|
|
quality: 'poor',
|
|
|
poorGoodConfidence: qualityResult.confidence,
|
|
|
grade: null,
|
|
|
predictions: {}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
|
|
|
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}`);
|
|
|
}
|
|
|
}
|
|
|
|