- Update ASR, face, OCR, pose processors - Add release pre-flight check script - Add synonym generation, chunk processing scripts - Add face recognition, stamp search utilities
133 lines
4.4 KiB
Bash
Executable File
133 lines
4.4 KiB
Bash
Executable File
#!/bin/bash
|
|
# Full Cycle Demo: Registration -> Suggestion -> Review -> Execution -> Visualization
|
|
|
|
API_URL="http://localhost:3003"
|
|
API_KEY="muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69"
|
|
UUID="384b0ff44aaaa1f1"
|
|
|
|
print_header() {
|
|
echo ""
|
|
echo "============================================================"
|
|
echo " 🎬 $1"
|
|
echo "============================================================"
|
|
}
|
|
|
|
print_step() {
|
|
echo "👉 $1"
|
|
}
|
|
|
|
print_json() {
|
|
echo "$1" | python3 -m json.tool 2>/dev/null || echo "$1"
|
|
}
|
|
|
|
# --- Setup: Ensure clean state for demo ---
|
|
print_header "PHASE 0: PREPARATION"
|
|
print_step "Resetting Person_25 to simulate a duplicate entry..."
|
|
|
|
# Ensure Person_25 exists as a separate entity for the demo
|
|
psql -h localhost -U accusys -d momentry <<SQL
|
|
INSERT INTO dev.person_identities (person_id, video_uuid, appearance_count, name, speaker_id)
|
|
VALUES ('Person_25', '$UUID', 217, NULL, 'SPEAKER_1')
|
|
ON CONFLICT (person_id) DO UPDATE SET name = EXCLUDED.name, speaker_id = EXCLUDED.speaker_id;
|
|
|
|
INSERT INTO dev.person_appearances (person_id, video_uuid, start_time, end_time, duration, confidence)
|
|
VALUES ('Person_25', '$UUID', 100.0, 150.0, 50.0, 0.9)
|
|
ON CONFLICT DO NOTHING;
|
|
SQL
|
|
|
|
# --- PHASE 1: Registration ---
|
|
print_header "PHASE 1: REGISTRATION"
|
|
print_step "Registering Person_17 as Audrey Hepburn..."
|
|
|
|
RES_REGISTER=$(curl -s -X POST "$API_URL/api/v1/identities/from-person" \
|
|
-H "X-API-Key: $API_KEY" -H "Content-Type: application/json" \
|
|
-d "{
|
|
\"video_uuid\": \"$UUID\",
|
|
\"person_id\": \"Person_17\",
|
|
\"identity_name\": \"Audrey Hepburn\",
|
|
\"metadata\": { \"role\": \"Reggie Lampert\" }
|
|
}")
|
|
|
|
echo " ✅ API Response:"
|
|
print_json "$RES_REGISTER"
|
|
|
|
# --- PHASE 2: Visualization (Before) ---
|
|
print_header "PHASE 2: VISUALIZATION (BEFORE)"
|
|
print_step "Current State of 'Audrey Hepburn' Candidates"
|
|
|
|
# Query and format the list of persons
|
|
curl -s "$API_URL/api/v1/person/list?video_uuid=$UUID&limit=20" \
|
|
-H "X-API-Key: $API_KEY" | python3 -c "
|
|
import sys, json
|
|
data = json.load(sys.stdin)
|
|
print(f\" Found {data['total']} persons.\")
|
|
print(f\" {'ID':<15} | {'Name':<20} | {'Speaker':<15} | {'Frames'}\")
|
|
print(f\" {'-'*15}-|-{'-'*20}-|-{'-'*15}-|-{'-'*10}\")
|
|
for p in data['persons']:
|
|
pid = p['person_id']
|
|
name = p.get('name') or '<Unknown>'
|
|
speaker = p.get('speaker_id') or 'None'
|
|
frames = p['appearance_count']
|
|
if pid in ['Person_17', 'Person_25']:
|
|
print(f\" {pid:<15} | {name:<20} | {speaker:<15} | {frames}\")
|
|
"
|
|
|
|
# --- PHASE 3: Suggestion ---
|
|
print_header "PHASE 3: SUGGESTION (AI REVIEW)"
|
|
print_step "Asking AI to analyze duplicates..."
|
|
|
|
RES_SUGGEST=$(curl -s -X POST "$API_URL/api/v1/person/suggest" \
|
|
-H "X-API-Key: $API_KEY" -H "Content-Type: application/json" \
|
|
-d "{\"video_uuid\": \"$UUID\"}")
|
|
|
|
echo " 🤖 AI Analysis:"
|
|
python3 -c "
|
|
import json
|
|
data = json.loads('''$RES_SUGGEST''')
|
|
merges = data.get('merge_suggestions', [])
|
|
for m in merges:
|
|
print(f\" - Suggestion: Merge {m['merge_with']} -> {m['person_id']}\")
|
|
print(f\" Reason: {m['reasons'][0]}\")
|
|
print(f\" Action: {m['action']}\")
|
|
if not merges:
|
|
print(\" No merge suggestions found (Data might be clean or algorithm needs data).\")
|
|
"
|
|
|
|
# --- PHASE 4: Execution ---
|
|
print_header "PHASE 4: EXECUTION"
|
|
print_step "Executing Merge: Person_25 -> Person_17..."
|
|
|
|
RES_MERGE=$(curl -s -X POST "$API_URL/api/v1/person/merge" \
|
|
-H "X-API-Key: $API_KEY" -H "Content-Type: application/json" \
|
|
-d "{
|
|
\"video_uuid\": \"$UUID\",
|
|
\"target_person_id\": \"Person_17\",
|
|
\"source_person_ids\": [\"Person_25\"]
|
|
}")
|
|
|
|
echo " ✅ Merge Result:"
|
|
print_json "$RES_MERGE"
|
|
|
|
# --- PHASE 5: Visualization (After) ---
|
|
print_header "PHASE 5: VISUALIZATION (AFTER)"
|
|
print_step "Final State Verification"
|
|
|
|
curl -s "$API_URL/api/v1/person/list?video_uuid=$UUID&limit=20" \
|
|
-H "X-API-Key: $API_KEY" | python3 -c "
|
|
import sys, json
|
|
data = json.load(sys.stdin)
|
|
print(f\" {'ID':<15} | {'Name':<20} | {'Speaker':<15} | {'Frames'}\")
|
|
print(f\" {'-'*15}-|-{'-'*20}-|-{'-'*15}-|-{'-'*10}\")
|
|
for p in data['persons']:
|
|
pid = p['person_id']
|
|
name = p.get('name') or '<Unknown>'
|
|
speaker = p.get('speaker_id') or 'None'
|
|
frames = p['appearance_count']
|
|
if pid == 'Person_17':
|
|
print(f\" {pid:<15} | {name:<20} | {speaker:<15} | {frames} (✅ MERGED)\")
|
|
elif pid == 'Person_25':
|
|
print(f\" {pid:<15} | {name:<20} | {speaker:<15} | {frames} (❌ DELETED)\")
|
|
"
|
|
|
|
print_header "✅ DEMO COMPLETE"
|