mlStorage.ts 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import { EnteFile } from 'types/file';
  2. import {
  3. Face,
  4. MlFileData,
  5. MLIndex,
  6. MLSyncContext,
  7. } from 'types/machineLearning';
  8. import localForage from './localForage';
  9. export const mlFilesStore = localForage.createInstance({
  10. driver: localForage.INDEXEDDB,
  11. name: 'ml-data',
  12. version: 1.0,
  13. storeName: 'files',
  14. });
  15. export const mlPeopleStore = localForage.createInstance({
  16. driver: localForage.INDEXEDDB,
  17. name: 'ml-data',
  18. version: 1.0,
  19. storeName: 'people',
  20. });
  21. export const mlLibraryStore = localForage.createInstance({
  22. driver: localForage.INDEXEDDB,
  23. name: 'ml-data',
  24. version: 1.0,
  25. storeName: 'library',
  26. });
  27. export const mlVersionStore = localForage.createInstance({
  28. driver: localForage.INDEXEDDB,
  29. name: 'ml-data',
  30. version: 1.0,
  31. storeName: 'versions',
  32. });
  33. export async function clearMLStorage() {
  34. await mlFilesStore.clear();
  35. await mlPeopleStore.clear();
  36. await mlLibraryStore.clear();
  37. await mlVersionStore.clear();
  38. }
  39. export async function getIndexVersion(index: MLIndex): Promise<number> {
  40. return ((await mlVersionStore.getItem(`${index}`)) as number) || 0;
  41. }
  42. export async function setIndexVersion(
  43. index: MLIndex,
  44. version: number
  45. ): Promise<number> {
  46. await mlVersionStore.setItem(`${index}`, version);
  47. return version;
  48. }
  49. export async function incrementIndexVersion(index: MLIndex): Promise<number> {
  50. let currentVersion = await getIndexVersion(index);
  51. currentVersion = currentVersion + 1;
  52. await setIndexVersion(index, currentVersion);
  53. return currentVersion;
  54. }
  55. export async function isVersionOutdated(index: MLIndex, thanIndex: MLIndex) {
  56. const indexVersion = await getIndexVersion(index);
  57. const thanIndexVersion = await getIndexVersion(thanIndex);
  58. return indexVersion < thanIndexVersion;
  59. }
  60. export function newMlData(
  61. syncContext: MLSyncContext,
  62. enteFile: EnteFile
  63. ): MlFileData {
  64. return {
  65. fileId: enteFile.id,
  66. imageSource: syncContext.config.imageSource,
  67. faceDetectionMethod: syncContext.faceDetectionService.method,
  68. faceCropMethod: syncContext.faceCropService.method,
  69. faceAlignmentMethod: syncContext.faceAlignmentService.method,
  70. faceEmbeddingMethod: syncContext.faceEmbeddingService.method,
  71. errorCount: 0,
  72. mlVersion: 0,
  73. };
  74. }
  75. export async function getAllFacesMap() {
  76. const allSyncedFacesMap = new Map<number, Array<Face>>();
  77. await mlFilesStore.iterate((mlFileData: MlFileData) => {
  78. mlFileData.faces &&
  79. allSyncedFacesMap.set(mlFileData.fileId, mlFileData.faces);
  80. });
  81. return allSyncedFacesMap;
  82. }