diff --git a/README.md b/README.md index dc6c5d0..0c365bb 100644 --- a/README.md +++ b/README.md @@ -128,7 +128,7 @@ python3 photo_tagger.py auto-match --auto --show-faces **🎯 New GUI-Based Identification Features:** - 🖼️ **Visual Face Display** - See individual face crops in the GUI -- 📝 **Separate Name Fields** - Dedicated "Last name" and "First name" input fields with dropdowns +- 📝 **Separate Name Fields** - Dedicated text input fields for first name, last name, middle name, and maiden name - 🎯 **Smart Name Parsing** - Supports "Last, First" format that gets properly parsed and stored - ☑️ **Compare with Similar Faces** - Compare current face with similar unidentified faces - 🎨 **Modern Interface** - Clean, intuitive GUI with buttons and input fields @@ -165,11 +165,16 @@ python3 photo_tagger.py modifyidentified This GUI lets you quickly review all identified people, rename them, and temporarily unmatch faces before committing. **Left Panel (People):** -- 👥 **People List** - Shows all identified people with face counts in "Last, First" format +- 👥 **People List** - Shows all identified people with face counts in full name format including middle names, maiden names, and birth dates - 🖱️ **Clickable Names** - Click to select a person (selected name is bold) -- ✏️ **Edit Name Icon** - Rename a person with separate first/last name fields; tooltip shows "Update name" -- 📝 **Separate Name Fields** - Edit with dedicated "Last name" and "First name" text boxes -- 💡 **Help Text** - Small labels below text boxes showing "Last" and "First" +- ✏️ **Edit Name Icon** - Comprehensive person editing with all fields; tooltip shows "Update name" +- 📝 **Complete Person Fields** - Edit with dedicated fields for: + - **First Name** and **Last Name** (required) + - **Middle Name** and **Maiden Name** (optional) + - **Date of Birth** with visual calendar picker (required) +- 💡 **Smart Validation** - Save button only enabled when all required fields are filled +- 📅 **Calendar Integration** - Click 📅 button to open visual date picker +- 🎨 **Enhanced Layout** - Organized grid layout with labels directly under each field **Right Panel (Faces):** - 🧩 **Person Faces** - Thumbnails of all faces identified as the selected person @@ -184,13 +189,17 @@ This GUI lets you quickly review all identified people, rename them, and tempora **Performance Features:** - ⚡ **Optimized Database Access** - Loads all people data once when opening, saves only when needed - 🚫 **No Database Queries During Editing** - All editing operations use pre-loaded data -- 💾 **Single Save Transaction** - Database updated only when clicking "Save changes" +- 💾 **Immediate Person Saves** - Person information saved directly to database when clicking save +- 🔄 **Real-time Validation** - Save button state updates instantly as you type +- 📅 **Visual Calendar** - Professional date picker with month/year navigation Notes: -- Changes are temporary until you click "Save changes" at the bottom. -- Undo restores only the currently viewed person's faces. -- Saving updates the database and refreshes counts. -- Names are stored cleanly as separate first_name and last_name fields without commas. +- **Person Information**: Saved immediately to database when clicking the 💾 save button in edit mode +- **Face Unmatching**: Changes are temporary until you click "Save changes" at the bottom +- **Validation**: Save button only enabled when first name, last name, and date of birth are all provided +- **Calendar**: Date picker opens to existing date when editing, defaults to 25 years ago for new entries +- **Undo**: Restores only the currently viewed person's unmatched faces +- **Data Storage**: All person fields stored separately (first_name, last_name, middle_name, maiden_name, date_of_birth) ## 🧠 Advanced Algorithm Features @@ -282,13 +291,15 @@ The tool uses SQLite database (`data/photos.db` by default) with these tables: ### Core Tables - **photos** - Photo file paths and processing status -- **people** - Known people with separate first_name and last_name fields +- **people** - Known people with separate first_name, last_name, and date_of_birth fields - **faces** - Face encodings, locations, and quality scores - **tags** - Custom tags for photos - **person_encodings** - Face encodings for each person (for matching) ### Database Schema Improvements - **Clean Name Storage** - People table uses separate `first_name` and `last_name` fields +- **Date of Birth Integration** - People table includes `date_of_birth` column for complete identification +- **Unique Constraint** - Prevents duplicate people with same name and birth date combination - **No Comma Issues** - Names are stored without commas, displayed as "Last, First" format - **Quality Scoring** - Faces table includes quality scores for better matching - **Optimized Queries** - Efficient indexing and query patterns for fast performance @@ -413,7 +424,12 @@ When you run `python3 photo_tagger.py identify --show-faces`, you'll see: - ✅ **Identification Status** - Shows if face is already identified and by whom **Right Panel:** -- 📝 **Person Name Dropdown** - Select from known people or type new names (pre-filled for re-identification) +- 📝 **Person Name Fields** - Text input fields for: + - **First name** (required) + - **Last name** (required) + - **Middle name** (optional) + - **Maiden name** (optional) +- 📅 **Date of Birth** - Required date field with calendar picker (📅 button) - ☑️ **Compare Checkbox** - Compare with similar unidentified faces (persistent across navigation) - ☑️ **Select All/Clear All Buttons** - Bulk selection controls (enabled only when Compare is active) - 📜 **Similar Faces List** - Scrollable list of similar unidentified faces with: @@ -421,10 +437,10 @@ When you run `python3 photo_tagger.py identify --show-faces`, you'll see: - 📈 **Confidence Percentages** - Color-coded match quality - 🖼️ **Face Images** - Thumbnail previews of similar faces - 🎮 **Control Buttons**: - - **✅ Identify** - Confirm the identification (saves immediately) - - **⬅️ Back** - Go back to previous face (shows image and status) - - **➡️ Next** - Move to next face - - **❌ Quit** - Exit application (all changes already saved) + - **✅ Identify** - Confirm the identification (saves immediately) - requires first name, last name, and date of birth + - **⬅️ Back** - Go back to previous face (shows image and status, repopulates fields) + - **➡️ Next** - Move to next face (clears date of birth, middle name, and maiden name fields) + - **❌ Quit** - Exit application (saves complete identifications only) ### Auto-Match GUI (Enhanced with Smart Algorithm) When you run `python3 photo_tagger.py auto-match --show-faces`, you'll see an improved interface with: @@ -438,9 +454,12 @@ When you run `python3 photo_tagger.py auto-match --show-faces`, you'll see an im **Interface Layout:** **Left Panel:** -- 👤 **Matched Person** - The already identified person +- 👤 **Matched Person** - The already identified person with complete information - 🖼️ **Person Face Image** - Individual face crop of the matched person -- 📁 **Photo Info** - Shows person name, photo filename, and face location +- 📁 **Detailed Person Info** - Shows: + - **Full Name** with middle and maiden names (if available) + - **Date of Birth** (if available) + - **Photo filename** and face location - 💾 **Save Button** - "Save changes for [Person Name]" - saves all checkbox selections **Right Panel:** @@ -462,7 +481,7 @@ The Compare feature in the Identify GUI works seamlessly with the main identific 1. **Enable Compare**: Check "Compare with similar faces" to see similar unidentified faces 2. **View Similar Faces**: Right panel shows all similar faces with confidence percentages and thumbnails 3. **Select Faces**: Use individual checkboxes or Select All/Clear All buttons to choose faces -4. **Enter Person Name**: Type or select the person's name in the dropdown +4. **Enter Person Name**: Type the person's name in the text input fields 5. **Identify Together**: Click Identify to identify the current face and all selected similar faces at once 6. **Smart Navigation**: System warns if you try to navigate away with selected faces but no name 7. **Quit Protection**: When closing, system offers to save any pending identifications @@ -491,11 +510,29 @@ The auto-match feature now works in a **person-centric** way: - **Smart Tracking**: Previously identified faces are pre-selected for easy review - **Fast Performance**: Optimized database queries and streamlined interface +### 📅 Calendar Interface Guide +When you click the 📅 calendar button, you'll see: + +**Calendar Features:** +- **Visual Grid Layout** - Traditional 7x7 calendar with clickable dates +- **Month/Year Navigation** - Use << >> < > buttons to navigate +- **Date Selection** - Click any date to select it +- **Visual Feedback** - Selected dates highlighted in bright blue, today's date in orange +- **Smart Pre-population** - Opens to existing date when editing previous identifications +- **Smooth Operation** - Opens centered without flickering + +**Calendar Navigation:** +- **<< >>** - Jump by year (limited to 1900-current year) +- **< >** - Navigate by month +- **Click Date** - Select any visible date +- **Select Button** - Confirm your date choice +- **Cancel Button** - Close without selecting + ### GUI Tips - **Window Resizing**: Resize the window - it remembers your size preference - **Keyboard Shortcuts**: Press Enter in the name field to identify - **Back Navigation**: Use Back button to return to previous faces - images and identification status are preserved -- **Re-identification**: Go back to any face and change the identification - the name field is pre-filled +- **Re-identification**: Go back to any face and change the identification - all fields are pre-filled - **Auto-Save**: All identifications are saved immediately - no need to manually save - **Compare Mode**: Enable Compare checkbox to see similar unidentified faces - setting persists across navigation - **Bulk Selection**: Use Select All/Clear All buttons to quickly select or clear all similar faces @@ -510,6 +547,8 @@ The auto-match feature now works in a **person-centric** way: - **Save Button Location**: Save button is in the left panel with the person's name for clarity - **Performance**: Similar faces load instantly thanks to pre-fetched data optimization - **Bidirectional Changes**: You can both identify and unidentify faces in the same session +- **Field Requirements**: First name, last name, and date of birth must be filled to identify (middle name and maiden name are optional) +- **Navigation Memory**: Date field clears on forward navigation, repopulates on back navigation - **Confidence Colors**: - 🟢 80%+ = Very High (Almost Certain) - 🟡 70%+ = High (Likely Match) @@ -587,6 +626,53 @@ This is now a minimal, focused tool. Key principles: ## 🆕 Recent Improvements (Latest Version) +### 🔄 Field Navigation & Preservation Fixes (NEW!) +- ✅ **Fixed Name Field Confusion** - First and last names now stay in correct fields during navigation +- ✅ **Enhanced Data Storage** - Individual field tracking prevents name swapping issues +- ✅ **Date of Birth Preservation** - Date of birth now preserved even when entered alone (without names) +- ✅ **Consistent Field Handling** - All navigation (Next/Back) uses unified field management logic +- ✅ **Smart Field Population** - Fields correctly repopulate based on original input context + +### 📅 Date of Birth Integration +- ✅ **Required Date of Birth** - All face identifications now require date of birth +- ✅ **Visual Calendar Picker** - Interactive calendar widget for easy date selection +- ✅ **Smart Pre-population** - Calendar opens to existing date when editing +- ✅ **Database Schema Update** - People table now includes date_of_birth column +- ✅ **Unique Constraint** - Prevents duplicate people with same first name, last name, middle name, maiden name, and birth date +- ✅ **Field Validation** - First name, last name, and date of birth required; middle name and maiden name optional +- ✅ **Navigation Memory** - Date field clears on forward navigation, repopulates on back navigation + +### 🎨 Enhanced Calendar Interface +- ✅ **Visual Calendar Grid** - Traditional 7x7 calendar layout with clickable dates +- ✅ **Month/Year Navigation** - Easy navigation with << >> < > buttons +- ✅ **Prominent Selection** - Selected dates highlighted in bright blue +- ✅ **Today Highlighting** - Current date shown in orange when visible +- ✅ **Smooth Positioning** - Calendar opens centered without flickering +- ✅ **Isolated Styling** - Calendar styles don't affect other dialog buttons + +### 🔄 Smart Field Management +- ✅ **Forward Navigation** - Date of birth, middle name, and maiden name fields clear when moving to next face +- ✅ **Backward Navigation** - All fields repopulate with previously entered data + +### 🆕 Enhanced Person Information (LATEST!) +- ✅ **Middle Name Field** - Optional middle name input field added to person identification +- ✅ **Maiden Name Field** - Optional maiden name input field added to person identification +- ✅ **Simplified Interface** - Removed dropdown functionality for cleaner, faster data entry +- ✅ **Optimized Field Layout** - Date of birth positioned before maiden name for better workflow +- ✅ **Enhanced Database Schema** - People table now includes middle_name and maiden_name columns +- ✅ **Unique Constraint Update** - Prevents duplicate people with same combination of all five fields +- ✅ **Streamlined Data Entry** - All name fields are now simple text inputs for faster typing + +### 🎨 Enhanced Modify Identified Interface (NEW!) +- ✅ **Complete Person Information** - Shows full names with middle names, maiden names, and birth dates +- ✅ **Comprehensive Editing** - Edit all person fields: first, last, middle, maiden names, and date of birth +- ✅ **Visual Calendar Integration** - Professional date picker with month/year navigation +- ✅ **Smart Validation** - Save button only enabled when all required fields (first name, last name, date of birth) are filled +- ✅ **Real-time Feedback** - Button state updates instantly as you type or clear fields +- ✅ **Enhanced Layout** - Organized grid layout with labels directly under each input field +- ✅ **Immediate Database Saves** - Person information saved directly to database when clicking save +- ✅ **Visual Button States** - Disabled save button clearly grayed out when validation fails + ### Name Handling & Database - ✅ **Fixed Comma Issues** - Names are now stored cleanly without commas in database - ✅ **Separate Name Fields** - First name and last name are stored in separate database columns @@ -606,7 +692,7 @@ This is now a minimal, focused tool. Key principles: --- -**Total project size**: ~3,400 lines of Python code +**Total project size**: ~3,800 lines of Python code **Dependencies**: 6 essential packages **Setup time**: ~5 minutes **Perfect for**: Batch processing personal photo collections with modern GUI interface