mirror of
https://github.com/immich-app/immich.git
synced 2025-05-24 02:13:51 -04:00
* modularize model classes * various fixes * expose port * change response * round coordinates * simplify preload * update server * simplify interface simplify * update tests * composable endpoint * cleanup fixes remove unnecessary interface support text input, cleanup * ew camelcase * update server server fixes fix typing * ml fixes update locustfile fixes * cleaner response * better repo response * update tests formatting and typing rename * undo compose change * linting fix type actually fix typing * stricter typing fix detection-only response no need for defaultdict * update spec file update api linting * update e2e * unnecessary dimension * remove commented code * remove duplicate code * remove unused imports * add batch dim
58 lines
1.8 KiB
TypeScript
58 lines
1.8 KiB
TypeScript
export const IMachineLearningRepository = 'IMachineLearningRepository';
|
|
|
|
export interface BoundingBox {
|
|
x1: number;
|
|
y1: number;
|
|
x2: number;
|
|
y2: number;
|
|
}
|
|
|
|
export enum ModelTask {
|
|
FACIAL_RECOGNITION = 'facial-recognition',
|
|
SEARCH = 'clip',
|
|
}
|
|
|
|
export enum ModelType {
|
|
DETECTION = 'detection',
|
|
PIPELINE = 'pipeline',
|
|
RECOGNITION = 'recognition',
|
|
TEXTUAL = 'textual',
|
|
VISUAL = 'visual',
|
|
}
|
|
|
|
export type ModelPayload = { imagePath: string } | { text: string };
|
|
|
|
type ModelOptions = { modelName: string };
|
|
|
|
export type FaceDetectionOptions = ModelOptions & { minScore: number };
|
|
|
|
type VisualResponse = { imageHeight: number; imageWidth: number };
|
|
export type ClipVisualRequest = { [ModelTask.SEARCH]: { [ModelType.VISUAL]: ModelOptions } };
|
|
export type ClipVisualResponse = { [ModelTask.SEARCH]: number[] } & VisualResponse;
|
|
|
|
export type ClipTextualRequest = { [ModelTask.SEARCH]: { [ModelType.TEXTUAL]: ModelOptions } };
|
|
export type ClipTextualResponse = { [ModelTask.SEARCH]: number[] };
|
|
|
|
export type FacialRecognitionRequest = {
|
|
[ModelTask.FACIAL_RECOGNITION]: {
|
|
[ModelType.DETECTION]: FaceDetectionOptions;
|
|
[ModelType.RECOGNITION]: ModelOptions;
|
|
};
|
|
};
|
|
|
|
export interface Face {
|
|
boundingBox: BoundingBox;
|
|
embedding: number[];
|
|
score: number;
|
|
}
|
|
|
|
export type FacialRecognitionResponse = { [ModelTask.FACIAL_RECOGNITION]: Face[] } & VisualResponse;
|
|
export type DetectedFaces = { faces: Face[] } & VisualResponse;
|
|
export type MachineLearningRequest = ClipVisualRequest | ClipTextualRequest | FacialRecognitionRequest;
|
|
|
|
export interface IMachineLearningRepository {
|
|
encodeImage(url: string, imagePath: string, config: ModelOptions): Promise<number[]>;
|
|
encodeText(url: string, text: string, config: ModelOptions): Promise<number[]>;
|
|
detectFaces(url: string, imagePath: string, config: FaceDetectionOptions): Promise<DetectedFaces>;
|
|
}
|