ombhojane commited on
Commit
abcebd2
·
verified ·
1 Parent(s): 4cea969

added more behaviours

Browse files
Files changed (1) hide show
  1. app.py +71 -1
app.py CHANGED
@@ -24,7 +24,10 @@ class DogBehaviorAnalyzer:
24
  'tail_wagging': {'threshold': 0.15, 'description': 'Your dog is displaying happiness and excitement!'},
25
  'movement': {'threshold': 0.02, 'description': 'Your dog is active and moving around.'},
26
  'stationary': {'threshold': 0.01, 'description': 'Your dog is calm and still.'},
27
- 'high_activity': {'threshold': 0.05, 'description': 'Your dog is very energetic!'}
 
 
 
28
  }
29
 
30
  self.suggestions = {
@@ -48,6 +51,24 @@ class DogBehaviorAnalyzer:
48
  "Consider redirecting energy into agility training",
49
  "A good play session with toys would be beneficial",
50
  "Make sure fresh water is available"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
  ]
52
  }
53
 
@@ -113,12 +134,17 @@ class DogBehaviorAnalyzer:
113
  """Analyze frame with improved behavior detection logic"""
114
  motion_score = self.detect_motion(frame)
115
  color_change_score = self.detect_color_changes(frame)
 
116
 
117
  detected_behaviors = []
118
 
119
  # High activity detection (running, jumping)
120
  if motion_score > self.behaviors['high_activity']['threshold']:
121
  detected_behaviors.append(('high_activity', motion_score))
 
 
 
 
122
 
123
  # Regular movement detection
124
  elif motion_score > self.behaviors['movement']['threshold']:
@@ -131,6 +157,15 @@ class DogBehaviorAnalyzer:
131
  # Tail wagging detection - based on localized color changes
132
  if color_change_score > self.behaviors['tail_wagging']['threshold']:
133
  detected_behaviors.append(('tail_wagging', color_change_score))
 
 
 
 
 
 
 
 
 
134
 
135
  # Debug information
136
  if not detected_behaviors:
@@ -138,6 +173,41 @@ class DogBehaviorAnalyzer:
138
  st.sidebar.write(f"Debug - Color Change Score: {color_change_score:.4f}")
139
 
140
  return detected_behaviors
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
141
 
142
  def get_suggestions(self, detected_behaviors, behavior_counts):
143
  """Generate suggestions based on detected behaviors and their frequency"""
 
24
  'tail_wagging': {'threshold': 0.15, 'description': 'Your dog is displaying happiness and excitement!'},
25
  'movement': {'threshold': 0.02, 'description': 'Your dog is active and moving around.'},
26
  'stationary': {'threshold': 0.01, 'description': 'Your dog is calm and still.'},
27
+ 'high_activity': {'threshold': 0.05, 'description': 'Your dog is very energetic!'},
28
+ 'barking': {'threshold': 0.10, 'description': 'Your dog is trying to communicate!'},
29
+ 'jumping': {'threshold': 0.12, 'description': 'Your dog is showing excitement through jumping!'},
30
+ 'ears_perked': {'threshold': 0.08, 'description': 'Your dog is alert and attentive!'}
31
  }
32
 
33
  self.suggestions = {
 
51
  "Consider redirecting energy into agility training",
52
  "A good play session with toys would be beneficial",
53
  "Make sure fresh water is available"
54
+ ],
55
+ 'barking': [
56
+ "Try to identify what's triggering the barking",
57
+ "Practice 'quiet' command training",
58
+ "Redirect attention with engaging toys",
59
+ "Consider working on bark control exercises"
60
+ ],
61
+ 'jumping': [
62
+ "Practice the 'four paws on the floor' training",
63
+ "Redirect jumping energy into trick training",
64
+ "Work on impulse control exercises",
65
+ "Try teaching alternative greetings like 'sit' for attention"
66
+ ],
67
+ 'ears_perked': [
68
+ "Great time for sound recognition training",
69
+ "Practice attention and focus exercises",
70
+ "Good moment for environmental awareness training",
71
+ "Consider introducing new sounds or stimuli for enrichment"
72
  ]
73
  }
74
 
 
134
  """Analyze frame with improved behavior detection logic"""
135
  motion_score = self.detect_motion(frame)
136
  color_change_score = self.detect_color_changes(frame)
137
+ audio_score = self.detect_audio(frame) if hasattr(frame, 'audio') else 0
138
 
139
  detected_behaviors = []
140
 
141
  # High activity detection (running, jumping)
142
  if motion_score > self.behaviors['high_activity']['threshold']:
143
  detected_behaviors.append(('high_activity', motion_score))
144
+
145
+ # Jumping detection (vertical motion)
146
+ if self.detect_vertical_motion(frame) > self.behaviors['jumping']['threshold']:
147
+ detected_behaviors.append(('jumping', motion_score * 1.2))
148
 
149
  # Regular movement detection
150
  elif motion_score > self.behaviors['movement']['threshold']:
 
157
  # Tail wagging detection - based on localized color changes
158
  if color_change_score > self.behaviors['tail_wagging']['threshold']:
159
  detected_behaviors.append(('tail_wagging', color_change_score))
160
+
161
+ # Ears perked detection - based on ear region analysis
162
+ ears_score = self.detect_ear_position(frame)
163
+ if ears_score > self.behaviors['ears_perked']['threshold']:
164
+ detected_behaviors.append(('ears_perked', ears_score))
165
+
166
+ # Barking detection - based on audio analysis
167
+ if audio_score > self.behaviors['barking']['threshold']:
168
+ detected_behaviors.append(('barking', audio_score))
169
 
170
  # Debug information
171
  if not detected_behaviors:
 
173
  st.sidebar.write(f"Debug - Color Change Score: {color_change_score:.4f}")
174
 
175
  return detected_behaviors
176
+
177
+ def detect_vertical_motion(self, frame):
178
+ """Detect vertical motion for jumping behavior"""
179
+ # Simple implementation - can be enhanced with more sophisticated motion tracking
180
+ if self.prev_frame is None:
181
+ return 0.0
182
+
183
+ frame = cv2.resize(frame, (300, 300))
184
+ gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
185
+
186
+ # Calculate optical flow
187
+ flow = cv2.calcOpticalFlowFarneback(self.prev_frame, gray, None, 0.5, 3, 15, 3, 5, 1.2, 0)
188
+
189
+ # Extract vertical motion component
190
+ vertical_motion = np.abs(flow[..., 1]).mean()
191
+ return vertical_motion
192
+
193
+ def detect_ear_position(self, frame):
194
+ """Detect ear position for ears_perked behavior"""
195
+ # Placeholder implementation - can be enhanced with actual ear detection model
196
+ # For now, using simple edge detection in upper region of frame
197
+ frame = cv2.resize(frame, (300, 300))
198
+ gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
199
+
200
+ # Focus on upper region where ears typically are
201
+ upper_region = gray[0:100, :]
202
+ edges = cv2.Canny(upper_region, 100, 200)
203
+
204
+ return np.sum(edges > 0) / edges.size
205
+
206
+ def detect_audio(self, frame):
207
+ """Detect audio for barking behavior"""
208
+ # Placeholder - actual implementation would need audio processing
209
+ # Return 0 as this is just a placeholder
210
+ return 0.0
211
 
212
  def get_suggestions(self, detected_behaviors, behavior_counts):
213
  """Generate suggestions based on detected behaviors and their frequency"""