File size: 3,153 Bytes
4555cad
 
 
 
 
 
 
 
 
 
65c2919
 
4555cad
 
 
 
 
65c2919
 
4555cad
 
 
 
 
65c2919
 
4555cad
 
 
 
 
65c2919
 
4555cad
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# Notification utilities for dwpose-editor

import gradio as gr

# 通知設定
NOTIFICATION_SETTINGS = {
    'show_success': True,
    'show_warnings': True,
    'show_errors': True,
    'auto_dismiss': True,
    'info_duration': 3.0,     # Info系:3秒
    'error_duration': 5.0     # Error系:5秒
}

def notify_success(message):
    """成功通知"""
    if NOTIFICATION_SETTINGS['show_success']:
        duration = NOTIFICATION_SETTINGS['info_duration']  # 2秒
        return gr.Info(message, duration=duration)
    return None

def notify_warning(message):
    """警告通知"""
    if NOTIFICATION_SETTINGS['show_warnings']:
        duration = NOTIFICATION_SETTINGS['info_duration']  # 2秒
        return gr.Warning(message, duration=duration)
    return None

def notify_error(message):
    """エラー通知"""
    if NOTIFICATION_SETTINGS['show_errors']:
        duration = NOTIFICATION_SETTINGS['error_duration']  # 5秒
        return gr.Error(message, duration=duration)
    return None

def notify_progress(message, progress=None):
    """進捗通知"""
    if progress is not None:
        # 進捗バーつき通知(Gradio 4.0以降)
        try:
            return gr.Progress(progress, desc=message)
        except:
            # フォールバック
            return gr.Info(f"{message} ({int(progress*100)}%)")
    else:
        return gr.Info(message)

def configure_notifications(settings):
    """通知設定の更新"""
    global NOTIFICATION_SETTINGS
    NOTIFICATION_SETTINGS.update(settings)
    return NOTIFICATION_SETTINGS

# よく使用される通知メッセージ
class NotificationMessages:
    # 成功メッセージ
    MODEL_LOADED = "DWPoseモデル読み込み完了"
    POSE_DETECTED = "ポーズ検出完了"
    IMAGE_UPLOADED = "画像アップロード完了"
    CANVAS_UPDATED = "キャンバス更新完了"
    
    # 警告メッセージ
    NO_PERSON_DETECTED = "人物が検出されませんでした。別の画像をお試しください"
    MODEL_LOADING = "モデル読み込み中です。しばらくお待ちください"
    
    # エラーメッセージ
    MODEL_LOAD_FAILED = "モデルの読み込みに失敗しました"
    POSE_DETECTION_FAILED = "ポーズ検出に失敗しました"
    IMAGE_PROCESSING_FAILED = "画像処理に失敗しました"
    NETWORK_ERROR = "ネットワークエラーが発生しました"

# 進捗付きポーズ検出
def detect_pose_with_progress(detector, image):
    """進捗表示付きポーズ検出"""
    try:
        notify_progress("画像を処理中...", 0.1)
        
        # 画像前処理
        notify_progress("画像前処理中...", 0.2)
        
        # 人物検出
        notify_progress("人物を検出中...", 0.4)
        
        # ポーズ推定
        notify_progress("ポーズを解析中...", 0.7)
        
        # 結果取得
        result = detector.detect(image)
        
        notify_progress("完了", 1.0)
        return result
        
    except Exception as e:
        notify_error(f"処理中にエラーが発生しました: {str(e)}")
        return None, str(e)