193 lines
5.7 KiB
Bash
Executable File
193 lines
5.7 KiB
Bash
Executable File
#!/bin/bash
|
|
# PunimTag Demo Helper Script
|
|
# Makes running demo commands easier
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
echo -e "${BLUE}🎬 PunimTag Demo Helper${NC}"
|
|
echo "=================================="
|
|
|
|
# Check if virtual environment exists
|
|
if [ ! -d "venv" ]; then
|
|
echo -e "${RED}❌ Virtual environment not found!${NC}"
|
|
echo "Run: python3 -m venv venv && source venv/bin/activate && python3 setup.py"
|
|
exit 1
|
|
fi
|
|
|
|
# Activate virtual environment
|
|
source venv/bin/activate
|
|
|
|
# Check if demo photos exist
|
|
photo_count=$(find demo_photos/ -name "*.jpg" -o -name "*.png" -o -name "*.jpeg" 2>/dev/null | wc -l)
|
|
if [ "$photo_count" -eq 0 ]; then
|
|
echo -e "${YELLOW}⚠️ No demo photos found!${NC}"
|
|
echo "Please add photos to demo_photos/ folders first."
|
|
echo "See: demo_photos/DEMO_INSTRUCTIONS.md"
|
|
echo ""
|
|
echo "Demo folder structure:"
|
|
ls -la demo_photos/
|
|
exit 1
|
|
fi
|
|
|
|
echo -e "${GREEN}✅ Found $photo_count demo photos${NC}"
|
|
|
|
# Function to run demo commands with explanations
|
|
demo_command() {
|
|
echo ""
|
|
echo -e "${YELLOW}📋 $1${NC}"
|
|
echo "Command: $2"
|
|
echo "Press Enter to run..."
|
|
read
|
|
echo -e "${BLUE}Running: $2${NC}"
|
|
eval $2
|
|
echo ""
|
|
}
|
|
|
|
# Demo workflow
|
|
echo ""
|
|
echo "🎯 Enhanced Demo Workflow:"
|
|
echo "1. Clean demo database"
|
|
echo "2. Scan photos"
|
|
echo "3. Process for faces"
|
|
echo "4. Show statistics"
|
|
echo "5. Identify faces with visual display (ENHANCED!)"
|
|
echo "6. Auto-match faces across photos (NEW!)"
|
|
echo "7. Search for people"
|
|
echo "8. Show verbose modes"
|
|
echo ""
|
|
|
|
# Clean demo database
|
|
demo_command "Clean previous demo data" "rm -f demo.db"
|
|
|
|
# Scan photos
|
|
demo_command "Scan photos with verbose output" "python3 photo_tagger.py scan demo_photos --recursive --db demo.db -v"
|
|
|
|
# Process faces
|
|
demo_command "Process photos to find faces" "python3 photo_tagger.py process --db demo.db -v"
|
|
|
|
# Show stats
|
|
demo_command "Show database statistics" "python3 photo_tagger.py stats --db demo.db"
|
|
|
|
# Enhanced visual identification
|
|
echo -e "${YELLOW}📋 Enhanced face identification with visual display${NC}"
|
|
echo "Command: python3 photo_tagger.py identify --show-faces --batch 3 --db demo.db"
|
|
echo "Press Enter to run (you'll see individual face crops!)..."
|
|
read
|
|
echo -e "${BLUE}Running: python3 photo_tagger.py identify --show-faces --batch 3 --db demo.db${NC}"
|
|
python3 photo_tagger.py identify --show-faces --batch 3 --db demo.db
|
|
|
|
# Smart auto-matching
|
|
echo ""
|
|
echo -e "${YELLOW}📋 Smart auto-matching across photos${NC}"
|
|
echo "Command: python3 photo_tagger.py auto-match --show-faces --db demo.db"
|
|
echo "Press Enter to run (you'll see side-by-side face comparisons!)..."
|
|
read
|
|
echo -e "${BLUE}Running: python3 photo_tagger.py auto-match --show-faces --db demo.db${NC}"
|
|
python3 photo_tagger.py auto-match --show-faces --db demo.db
|
|
|
|
# Search for people
|
|
echo ""
|
|
echo -e "${YELLOW}📋 Search for identified people${NC}"
|
|
echo "Available people in database:"
|
|
python3 -c "
|
|
import sqlite3
|
|
conn = sqlite3.connect('demo.db')
|
|
cursor = conn.cursor()
|
|
cursor.execute('SELECT DISTINCT name FROM people')
|
|
people = cursor.fetchall()
|
|
for person in people:
|
|
print(f' - {person[0]}')
|
|
conn.close()
|
|
"
|
|
|
|
if [ $? -eq 0 ]; then
|
|
echo ""
|
|
echo "Enter a person's name to search for:"
|
|
read person_name
|
|
if [ ! -z "$person_name" ]; then
|
|
echo -e "${BLUE}Running: python3 photo_tagger.py search \"$person_name\" --db demo.db${NC}"
|
|
python3 photo_tagger.py search "$person_name" --db demo.db
|
|
fi
|
|
fi
|
|
|
|
# Verbose modes demo
|
|
echo ""
|
|
echo -e "${YELLOW}📋 Verbose modes demonstration${NC}"
|
|
echo "Let's see different verbosity levels..."
|
|
|
|
# Reset a photo for verbose demo
|
|
python3 -c "
|
|
import sqlite3
|
|
conn = sqlite3.connect('demo.db')
|
|
conn.execute('UPDATE photos SET processed = 0 WHERE id = 1')
|
|
conn.commit()
|
|
conn.close()
|
|
"
|
|
|
|
demo_command "Quiet mode (default)" "python3 photo_tagger.py process --limit 1 --db demo.db"
|
|
|
|
# Reset photo
|
|
python3 -c "
|
|
import sqlite3
|
|
conn = sqlite3.connect('demo.db')
|
|
conn.execute('UPDATE photos SET processed = 0 WHERE id = 1')
|
|
conn.commit()
|
|
conn.close()
|
|
"
|
|
|
|
demo_command "Verbose mode (-v)" "python3 photo_tagger.py process --limit 1 --db demo.db -v"
|
|
|
|
# Reset photo
|
|
python3 -c "
|
|
import sqlite3
|
|
conn = sqlite3.connect('demo.db')
|
|
conn.execute('UPDATE photos SET processed = 0 WHERE id = 1')
|
|
conn.commit()
|
|
conn.close()
|
|
"
|
|
|
|
demo_command "Very verbose mode (-vv)" "python3 photo_tagger.py process --limit 1 --db demo.db -vv"
|
|
|
|
# Reset photo
|
|
python3 -c "
|
|
import sqlite3
|
|
conn = sqlite3.connect('demo.db')
|
|
conn.execute('UPDATE photos SET processed = 0 WHERE id = 1')
|
|
conn.commit()
|
|
conn.close()
|
|
"
|
|
|
|
demo_command "Maximum verbose (-vvv)" "python3 photo_tagger.py process --limit 1 --db demo.db -vvv"
|
|
|
|
# Final stats
|
|
demo_command "Final statistics" "python3 photo_tagger.py stats --db demo.db"
|
|
|
|
echo ""
|
|
echo -e "${GREEN}🎉 Demo complete!${NC}"
|
|
echo ""
|
|
echo "📋 Summary of what we demonstrated:"
|
|
echo " ✅ Photo scanning and indexing"
|
|
echo " ✅ Automatic face detection"
|
|
echo " ✅ Interactive face identification"
|
|
echo " ✅ Person-based photo search"
|
|
echo " ✅ Verbose output modes (-v, -vv, -vvv)"
|
|
echo " ✅ Database statistics and reporting"
|
|
echo ""
|
|
echo "🔧 Enhanced features demonstrated:"
|
|
echo " ✅ Visual face identification with --show-faces"
|
|
echo " ✅ Smart cross-photo auto-matching"
|
|
echo " ✅ Confidence-based match suggestions"
|
|
echo " ✅ Side-by-side face comparisons"
|
|
echo " ✅ Non-blocking image display"
|
|
echo ""
|
|
echo "🔧 Additional features to explore:"
|
|
echo " - Custom tagging: python3 photo_tagger.py tag"
|
|
echo " - Different models: --model cnn (more accurate)"
|
|
echo " - Tolerance adjustment: --tolerance 0.3 (stricter) or 0.7 (lenient)"
|
|
echo " - Twins detection: --include-twins"
|
|
echo " - Auto mode: --auto (high-confidence auto-identification)" |