Files
momentry_core/scripts/test_face_db_fix.py
Warren 8f05a7c188 feat: update Python processors and add utility scripts
- Update ASR, face, OCR, pose processors
- Add release pre-flight check script
- Add synonym generation, chunk processing scripts
- Add face recognition, stamp search utilities
2026-04-30 15:07:49 +08:00

177 lines
4.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
"""
測試數據庫修復後的視頻人臉分析
"""
import sys
import os
import json
import psycopg2
from datetime import datetime
# 添加項目根目錄到路徑
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
# 數據庫連接配置
DB_CONFIG = {
"host": "localhost",
"port": 5432,
"database": "momentry",
"user": "accusys",
"password": "accusys",
}
def test_database_connection():
"""測試數據庫連接"""
try:
conn = psycopg2.connect(**DB_CONFIG)
cursor = conn.cursor()
# 檢查表是否存在
cursor.execute("""
SELECT EXISTS (
SELECT FROM information_schema.tables
WHERE table_name = 'face_detections'
)
""")
table_exists = cursor.fetchone()[0]
if not table_exists:
print("❌ face_detections 表不存在")
return False
# 檢查列結構
cursor.execute("""
SELECT column_name, data_type, is_nullable
FROM information_schema.columns
WHERE table_name = 'face_detections'
ORDER BY ordinal_position
""")
columns = cursor.fetchall()
print("✅ face_detections 表結構:")
for col in columns:
print(
f" - {col[0]}: {col[1]} ({'NULL' if col[2] == 'YES' else 'NOT NULL'})"
)
# 檢查是否有 frame_number 列
column_names = [col[0] for col in columns]
if "frame_number" not in column_names:
print("❌ 缺少 frame_number 列")
return False
if "timestamp_secs" not in column_names:
print("❌ 缺少 timestamp_secs 列")
return False
cursor.close()
conn.close()
return True
except Exception as e:
print(f"❌ 數據庫連接錯誤: {e}")
return False
def test_insert_detection():
"""測試插入人臉檢測記錄"""
try:
conn = psycopg2.connect(**DB_CONFIG)
cursor = conn.cursor()
# 創建測試數據
test_detection = {
"video_uuid": "test_uuid_123",
"frame_idx": 100,
"timestamp": 5.0,
"x": 100,
"y": 150,
"width": 50,
"height": 60,
"confidence": 0.95,
"embedding": [0.1] * 512, # 512維嵌入向量
"attributes": {"age": 30, "gender": "male"},
"detected_at": datetime.now(),
}
# 插入測試記錄
cursor.execute(
"""
INSERT INTO face_detections (
video_uuid, frame_number, timestamp_secs,
x, y, width, height, confidence,
embedding, attributes, created_at
) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
RETURNING id
""",
(
test_detection["video_uuid"],
test_detection["frame_idx"],
test_detection["timestamp"],
test_detection["x"],
test_detection["y"],
test_detection["width"],
test_detection["height"],
test_detection["confidence"],
json.dumps(test_detection["embedding"]),
json.dumps(test_detection["attributes"]),
test_detection["detected_at"],
),
)
record_id = cursor.fetchone()[0]
conn.commit()
print(f"✅ 成功插入測試記錄ID: {record_id}")
# 驗證記錄
cursor.execute(
"SELECT COUNT(*) FROM face_detections WHERE id = %s", (record_id,)
)
count = cursor.fetchone()[0]
if count == 1:
print("✅ 記錄驗證成功")
else:
print("❌ 記錄驗證失敗")
# 清理測試數據
cursor.execute("DELETE FROM face_detections WHERE id = %s", (record_id,))
conn.commit()
cursor.close()
conn.close()
return True
except Exception as e:
print(f"❌ 插入測試記錄失敗: {e}")
return False
def main():
print("=" * 60)
print("測試數據庫修復")
print("=" * 60)
# 測試數據庫連接
print("\n1. 測試數據庫連接...")
if not test_database_connection():
print("❌ 數據庫連接測試失敗")
return
# 測試插入功能
print("\n2. 測試插入人臉檢測記錄...")
if not test_insert_detection():
print("❌ 插入測試失敗")
return
print("\n" + "=" * 60)
print("✅ 所有測試通過!數據庫修復成功")
print("=" * 60)
if __name__ == "__main__":
main()