From 0f73ce81ee11af8a4bdd0294116f0273ecaabbf5 Mon Sep 17 00:00:00 2001 From: rikifrank Date: Tue, 7 Nov 2023 20:39:08 +0200 Subject: [PATCH] addFaceInfo --- .../asset/response-dto/asset-response.dto.ts | 8 ++-- server/src/domain/person/person.dto.ts | 39 +++++++++++++++++++ 2 files changed, 43 insertions(+), 4 deletions(-) diff --git a/server/src/domain/asset/response-dto/asset-response.dto.ts b/server/src/domain/asset/response-dto/asset-response.dto.ts index bacd4bfe68313..768126e6a846b 100644 --- a/server/src/domain/asset/response-dto/asset-response.dto.ts +++ b/server/src/domain/asset/response-dto/asset-response.dto.ts @@ -1,6 +1,6 @@ import { AssetEntity, AssetType } from '@app/infra/entities'; import { ApiProperty } from '@nestjs/swagger'; -import { PersonResponseDto, mapFace } from '../../person/person.dto'; +import { ExpandedPersonResponseDto, PersonResponseDto, mapExpandedPerson, mapFace } from '../../person/person.dto'; import { TagResponseDto, mapTag } from '../../tag'; import { UserResponseDto, mapUser } from '../../user/response-dto/user-response.dto'; import { ExifResponseDto, mapExif } from './exif-response.dto'; @@ -97,15 +97,15 @@ export function mapAsset(entity: AssetEntity, options: AssetMapOptions = {}): As livePhotoVideoId: entity.livePhotoVideoId, tags: entity.tags?.map(mapTag), people: entity.faces - ?.map(mapFace) - .filter((person): person is PersonResponseDto => person !== null && !person.isHidden) + ?.map(mapExpandedPerson) + .filter((person): person is ExpandedPersonResponseDto => person !== null && !person.isHidden) .reduce((people, person) => { const existingPerson = people.find((p) => p.id === person.id); if (!existingPerson) { people.push(person); } return people; - }, [] as PersonResponseDto[]), + }, [] as ExpandedPersonResponseDto[]), checksum: entity.checksum.toString('base64'), stackParentId: entity.stackParentId, stack: withStack ? entity.stack?.map((a) => mapAsset(a, { stripMetadata })) ?? undefined : undefined, diff --git a/server/src/domain/person/person.dto.ts b/server/src/domain/person/person.dto.ts index b7acde73a17ba..d939848f0743e 100644 --- a/server/src/domain/person/person.dto.ts +++ b/server/src/domain/person/person.dto.ts @@ -73,6 +73,15 @@ export class PersonResponseDto { isHidden!: boolean; } +export class ExpandedPersonResponseDto extends PersonResponseDto{ + x1!: number; + x2!: number; + y1!: number; + y2!: number; + imageWidth!: number; + imageHeight!: number; +} + export class PersonStatisticsResponseDto { @ApiProperty({ type: 'integer' }) assets!: number; @@ -105,3 +114,33 @@ export function mapFace(face: AssetFaceEntity): PersonResponseDto | null { return null; } + +export function mapExpandedPerson(face: AssetFaceEntity): ExpandedPersonResponseDto | null { + const { + boundingBoxX1: x1, + boundingBoxX2: x2, + boundingBoxY1: y1, + boundingBoxY2: y2, + imageWidth, + imageHeight, + } = face; + + if (face.person) { + const personDTO = mapPerson(face.person); + return { + id: personDTO.id, + name: personDTO.name, + birthDate: personDTO.birthDate, + thumbnailPath: personDTO.thumbnailPath, + isHidden: personDTO.isHidden, + x1, + x2, + y1, + y2, + imageWidth, + imageHeight, + } + } + + return null; +}