rohitashva commited on
Commit
d5b1e39
·
verified ·
1 Parent(s): c8edb63

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +39 -25
app.py CHANGED
@@ -3,9 +3,8 @@ import cv2
3
  import joblib
4
  import mediapipe as mp
5
  import numpy as np
6
- from streamlit_webrtc import webrtc_streamer, VideoTransformerBase
7
 
8
- # Load the trained model and label encoder
9
  model = joblib.load("pose_classifier.joblib")
10
  label_encoder = joblib.load("label_encoder.joblib")
11
 
@@ -13,34 +12,49 @@ label_encoder = joblib.load("label_encoder.joblib")
13
  mp_pose = mp.solutions.pose
14
  pose = mp_pose.Pose()
15
 
16
- class PoseTransformer(VideoTransformerBase):
17
- def transform(self, frame):
18
- img = frame.to_ndarray(format="bgr24") # Convert to BGR format
19
- img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
20
 
21
- # Process frame with MediaPipe Pose
22
- results = pose.process(img_rgb)
23
 
24
- if results.pose_landmarks:
25
- landmarks = results.pose_landmarks.landmark
26
- pose_data = [j.x for j in landmarks] + [j.y for j in landmarks] + \
27
- [j.z for j in landmarks] + [j.visibility for j in landmarks]
28
 
29
- pose_data = np.array(pose_data).reshape(1, -1)
 
 
 
 
30
 
31
- # Predict pose
32
- y_pred = model.predict(pose_data)
33
- predicted_label = label_encoder.inverse_transform(y_pred)[0]
34
 
35
- # Display predicted label
36
- cv2.putText(img, f"Pose: {predicted_label}", (20, 50),
37
- cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 3)
38
 
39
- return cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
 
 
 
40
 
41
- # Streamlit UI
42
- st.title("Live Pose Classification")
43
- st.write("This application detects human poses in real-time.")
 
 
 
 
 
 
 
 
 
 
 
 
 
44
 
45
- # Start WebRTC Stream
46
- webrtc_streamer(key="pose-detection", video_transformer_factory=PoseTransformer)
 
3
  import joblib
4
  import mediapipe as mp
5
  import numpy as np
 
6
 
7
+ # Load trained model and label encoder
8
  model = joblib.load("pose_classifier.joblib")
9
  label_encoder = joblib.load("label_encoder.joblib")
10
 
 
12
  mp_pose = mp.solutions.pose
13
  pose = mp_pose.Pose()
14
 
15
+ # Streamlit UI
16
+ st.title("Live Pose Classification")
17
+ st.write("Real-time pose detection using OpenCV and MediaPipe.")
 
18
 
19
+ # OpenCV Video Capture
20
+ cap = cv2.VideoCapture(0)
21
 
22
+ # Streamlit Image Display
23
+ frame_placeholder = st.empty()
 
 
24
 
25
+ while cap.isOpened():
26
+ ret, frame = cap.read()
27
+ if not ret:
28
+ st.warning("Failed to capture video. Check your camera.")
29
+ break
30
 
31
+ # Convert frame to RGB
32
+ img_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
 
33
 
34
+ # Process frame with MediaPipe Pose
35
+ results = pose.process(img_rgb)
 
36
 
37
+ if results.pose_landmarks:
38
+ landmarks = results.pose_landmarks.landmark
39
+ pose_data = [j.x for j in landmarks] + [j.y for j in landmarks] + \
40
+ [j.z for j in landmarks] + [j.visibility for j in landmarks]
41
 
42
+ pose_data = np.array(pose_data).reshape(1, -1)
43
+
44
+ # Predict pose
45
+ y_pred = model.predict(pose_data)
46
+ predicted_label = label_encoder.inverse_transform(y_pred)[0]
47
+
48
+ # Display predicted label
49
+ cv2.putText(frame, f"Pose: {predicted_label}", (20, 50),
50
+ cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 3)
51
+
52
+ # Display frame in Streamlit
53
+ frame_placeholder.image(frame, channels="BGR")
54
+
55
+ # Break loop if user stops execution
56
+ if st.button("Stop Camera"):
57
+ break
58
 
59
+ cap.release()
60
+ cv2.destroyAllWindows()