Skip to content

Feature identity recognition 2100793612207388938#154

Closed
harrydbarnes wants to merge 12 commits into
mainfrom
feature-identity-recognition-2100793612207388938
Closed

Feature identity recognition 2100793612207388938#154
harrydbarnes wants to merge 12 commits into
mainfrom
feature-identity-recognition-2100793612207388938

Conversation

@harrydbarnes

Copy link
Copy Markdown
Owner

No description provided.

google-labs-jules Bot and others added 7 commits January 27, 2026 13:56
This change introduces face recognition capabilities to track specific people across project photos.
- Added TensorFlow Lite dependencies and a dummy MobileFaceNet model.
- Created `FaceRecognitionHelper` to generate face embeddings.
- Updated `ProjectEntity` and database schema to store target embeddings.
- Enhanced `ProjectViewModel` to support "Track This Person" and smart re-alignment using cosine similarity.
- Updated UI to expose the new tracking feature.
- Optimized threading (Dispatchers.Default/IO) and memory management (Bitmap recycling) for heavy TFLite operations.

Co-authored-by: harrydbarnes <145344818+harrydbarnes@users.noreply.github.com>
This change introduces face recognition capabilities to track specific people across project photos.
- Added TensorFlow Lite dependencies and a dummy MobileFaceNet model.
- Created `FaceRecognitionHelper` to generate face embeddings.
- Updated `ProjectEntity` and database schema to store target embeddings.
- Enhanced `ProjectViewModel` to support "Track This Person" and smart re-alignment using cosine similarity.
- Updated UI to expose the new tracking feature.
- Optimized threading (Dispatchers.Default/IO) and memory management (Bitmap recycling, single load per photo) for heavy TFLite operations.
- Refactored `FaceDetectorHelper` to support bitmap input for efficiency.

Co-authored-by: harrydbarnes <145344818+harrydbarnes@users.noreply.github.com>
This change addresses review feedback by fixing a syntax error, preventing memory leaks, optimizing embedding storage, and improving code readability.
- Fixed syntax error in `ProjectViewModel.kt` (extra brace).
- Implemented `close()` in `FaceRecognitionHelper` and ensured `GpuDelegate` is closed to prevent memory leaks.
- Optimized embedding storage: Changed `targetEmbedding` from String to BLOB (ByteArray) in Entity and Database, using `ByteBuffer` for efficient FloatArray conversion. Updated `MIGRATION_4_5`.
- Refactored `ProjectViewModel.kt`: Split `processFacesInternal` into `processFacesWithTarget` and `processFacesSpatial` for better readability and maintainability.
- Updated `Project` domain model to use `FloatArray` for embeddings.

Co-authored-by: harrydbarnes <145344818+harrydbarnes@users.noreply.github.com>
This update addresses critical review feedback by fixing syntax errors, optimizing performance, and ensuring thread safety.
- Fixed `ProjectViewModel` syntax (removed extra brace).
- Refactored `FaceRecognitionHelper` to include a thread-safe `suspend fun close()` using `Mutex` for proper cleanup of TFLite resources.
- Optimized database storage by switching `targetEmbedding` to `BLOB` (ByteArray) using `ByteBuffer`, replacing inefficient String storage. Updated migrations and mappers.
- Parallelized face processing in `ProjectViewModel` using `coroutineScope` and `async/awaitAll` for improved performance on large datasets.
- Refactored logic into `processFacesWithTarget` and `processFacesSpatial` for better readability.
- Corrected status handling to ensure failed photo loads do not mark photos as processed.

Co-authored-by: harrydbarnes <145344818+harrydbarnes@users.noreply.github.com>
This update addresses critical review feedback by fixing syntax errors, optimizing performance, and ensuring thread safety.
- Fixed `ProjectViewModel` syntax (removed extra brace).
- Refactored `FaceRecognitionHelper` to include a thread-safe `suspend fun close()` using `Mutex` for proper cleanup of TFLite resources.
- Optimized database storage by switching `targetEmbedding` to `BLOB` (ByteArray) using `ByteBuffer`, replacing inefficient String storage. Updated migrations and mappers.
- Parallelized face processing in `ProjectViewModel` using `coroutineScope` and `async/awaitAll` with a `Semaphore(4)` to improve performance on large datasets while preventing OOM.
- Refactored logic into `processFacesWithTarget` and `processFacesSpatial` for better readability.
- Corrected status handling to ensure failed photo loads do not mark photos as processed.
- Removed `@Singleton` from `FaceRecognitionHelper` and implemented cleanup in `ProjectViewModel.onCleared()`.

Co-authored-by: harrydbarnes <145344818+harrydbarnes@users.noreply.github.com>
This update addresses critical review feedback by fixing syntax errors, optimizing performance, and ensuring thread safety.
- Fixed `ProjectViewModel` syntax (removed extra brace).
- Refactored `FaceRecognitionHelper` to include a thread-safe `suspend fun close()` using `Mutex` for proper cleanup of TFLite resources.
- Optimized database storage by switching `targetEmbedding` to `BLOB` (ByteArray) using `ByteBuffer`, replacing inefficient String storage. Updated migrations and mappers.
- Parallelized face processing in `ProjectViewModel` using `coroutineScope` and `async/awaitAll` with a `Semaphore(4)` to improve performance on large datasets while preventing OOM.
- Refactored logic into `processFacesWithTarget` and `processFacesSpatial` for better readability.
- Corrected status handling to ensure failed photo loads do not mark photos as processed.
- Removed `@Singleton` from `FaceRecognitionHelper` and implemented cleanup in `ProjectViewModel.onCleared()`.
- Replaced `semaphore.withPermit` with `acquire`/`release` to support suspending calls.
- Fixed `processFacesSpatial` loop compilation error.

Co-authored-by: harrydbarnes <145344818+harrydbarnes@users.noreply.github.com>
This update addresses critical review feedback by fixing syntax errors, optimizing performance, and ensuring thread safety.
- Fixed `ProjectViewModel` syntax (removed extra brace).
- Refactored `FaceRecognitionHelper` to include a thread-safe `suspend fun close()` using `Mutex` for proper cleanup of TFLite resources.
- Optimized database storage by switching `targetEmbedding` to `BLOB` (ByteArray) using `ByteBuffer`, replacing inefficient String storage. Updated migrations and mappers.
- Parallelized face processing in `ProjectViewModel` using `coroutineScope` and `async/awaitAll` with a `Semaphore(4)` to improve performance on large datasets while preventing OOM.
- Refactored logic into `processFacesWithTarget` and `processFacesSpatial` for better readability.
- Corrected status handling to ensure failed photo loads do not mark photos as processed.
- Removed `@Singleton` from `FaceRecognitionHelper` and implemented cleanup in `ProjectViewModel.onCleared()`.
- Replaced `semaphore.withPermit` with `acquire`/`release` to support suspending calls.
- Fixed `processFacesSpatial` loop compilation error.
- Fixed initialization race condition in `FaceRecognitionHelper`.
- Used `runBlocking` in `onCleared` to ensure TFLite cleanup.
- Ensured loading state is reset when project data is missing.

Co-authored-by: harrydbarnes <145344818+harrydbarnes@users.noreply.github.com>
@gemini-code-assist

Copy link
Copy Markdown
Contributor

Summary of Changes

Hello @harrydbarnes, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request introduces face recognition capabilities to the app using TensorFlow Lite. It includes adding necessary dependencies, implementing a helper class for face embedding extraction, updating project entities to store target embeddings, and enhancing the face alignment process to track a selected person across frames. This enables a 'smart' face alignment feature that focuses on a specific individual.

Highlights

  • TensorFlow Lite Integration: Added TensorFlow Lite dependencies and a dummy model for face recognition.
  • Face Recognition Helper: Implemented a FaceRecognitionHelper class for extracting face embeddings using TensorFlow Lite.
  • Project Entity Update: Modified ProjectEntity and Project models to include a targetEmbedding for face recognition.
  • Smart Face Alignment: Enhanced face alignment logic to support tracking a selected person across frames using face embeddings.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a significant new feature: identity recognition for tracking a specific person across photos. The implementation is robust, leveraging TensorFlow Lite for face embeddings and coroutines for efficient, parallel processing. The changes are well-structured, with clear separation of concerns in the new FaceRecognitionHelper and updates to the ViewModel, database, and UI. My review focuses on minor refinements to enhance code clarity, improve user experience by preventing potential UI flicker, and adhere to best practices like using string resources and named constants. Overall, this is an excellent contribution.

Comment thread app/src/main/java/com/facelapse/app/domain/FaceRecognitionHelper.kt Outdated
Comment thread app/src/main/java/com/facelapse/app/ui/project/ProjectDetailScreen.kt Outdated
Comment thread app/src/main/java/com/facelapse/app/ui/project/ProjectViewModel.kt Outdated
Comment thread app/src/main/java/com/facelapse/app/ui/project/ProjectViewModel.kt Outdated
Comment thread app/src/main/java/com/facelapse/app/ui/project/ProjectViewModel.kt Outdated
harrydbarnes and others added 5 commits January 27, 2026 19:55
…l.kt

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
…l.kt

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
…l.kt

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
…reen.kt

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
…er.kt

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant