ehsanhon commited on
Commit
6d40a58
·
verified ·
1 Parent(s): afbab93

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +3 -292
app.py CHANGED
@@ -1,299 +1,10 @@
1
- from flask import Flask, request, send_file
2
- # from flask_ngrok import run_with_ngrok
3
- from io import BytesIO
4
- import mimetypes
5
- # import cv2
6
- # import numpy as np
7
- # import mediapipe as mp
8
- # import math
9
- from pyngrok import ngrok, conf
10
 
11
- # Point pyngrok to the existing ngrok binary and avoid /.config
12
- config = conf.PyngrokConfig(
13
- ngrok_path="/usr/local/bin/ngrok",
14
- config_path="/tmp/pyngrok/ngrok.yml"
15
- )
16
- public_url = ngrok.connect(7860, pyngrok_config=config)
17
- print(" * ngrok tunnel:", public_url)
18
-
19
- # def calculate_angle(point1, point2, point3):
20
- # """
21
- # Calculates the angle at point2 formed by the lines connecting it to point1 and point3.
22
-
23
- # Args:
24
- # point1 (tuple): Coordinates (x, y) of the first point.
25
- # point2 (tuple): Coordinates (x, y) of the vertex (the point where the angle is).
26
- # point3 (tuple): Coordinates (x, y) of the third point.
27
-
28
- # Returns:
29
- # float: The angle in degrees.
30
- # """
31
- # x1, y1 = point1
32
- # x2, y2 = point2
33
- # x3, y3 = point3
34
-
35
- # # Calculate vectors
36
- # vector1 = (x1 - x2, y1 - y2)
37
- # vector2 = (x3 - x2, y3 - y2)
38
-
39
- # # Calculate dot product
40
- # dot_product = vector1[0] * vector2[0] + vector1[1] * vector2[1]
41
-
42
- # # Calculate magnitudes (lengths) of the vectors
43
- # magnitude1 = math.sqrt(vector1[0]**2 + vector1[1]**2)
44
- # magnitude2 = math.sqrt(vector2[0]**2 + vector2[1]**2)
45
-
46
- # # Calculate cosine of the angle
47
- # if magnitude1 == 0 or magnitude2 == 0:
48
- # return 0.0 # Handle cases where points are the same
49
- # cos_theta = dot_product / (magnitude1 * magnitude2)
50
-
51
- # # Ensure cos_theta is within the valid range [-1, 1] due to potential floating-point errors
52
- # cos_theta = max(-1.0, min(1.0, cos_theta))
53
-
54
- # # Calculate the angle in radians and convert to degrees
55
- # angle_radians = math.acos(cos_theta)
56
- # angle_degrees = math.degrees(angle_radians)
57
-
58
- # return angle_degrees
59
-
60
- # # Function to extract the coordinates of a landmark
61
- # def get_landmark_coordinates(landmarks, landmark_id):
62
- # try:
63
- # x = landmarks.landmark[landmark_id].x
64
- # y = landmarks.landmark[landmark_id].y
65
- # x=x/1
66
- # y=y/1
67
- # return np.array([x, y])
68
- # except:
69
- # return np.array([0, 0]) # Return [0, 0] if landmark is not detected
70
-
71
- # mp_pose = mp.solutions.pose
72
- # pose = mp_pose.Pose(min_detection_confidence=0.5, min_tracking_confidence=0.5)
73
- # mp_drawing = mp.solutions.drawing_utils
74
-
75
- # def calculate_angles_landmarks(landmarks):
76
- # # Left side angles
77
- # left_shoulder = get_landmark_coordinates(landmarks, mp_pose.PoseLandmark.LEFT_SHOULDER)
78
- # left_elbow = get_landmark_coordinates(landmarks, mp_pose.PoseLandmark.LEFT_ELBOW)
79
- # left_wrist = get_landmark_coordinates(landmarks, mp_pose.PoseLandmark.LEFT_WRIST)
80
- # #
81
- # right_shoulder = get_landmark_coordinates(landmarks, mp_pose.PoseLandmark.RIGHT_SHOULDER)
82
- # right_elbow = get_landmark_coordinates(landmarks, mp_pose.PoseLandmark.RIGHT_ELBOW)
83
- # right_wrist = get_landmark_coordinates(landmarks, mp_pose.PoseLandmark.RIGHT_WRIST)
84
- # #
85
- # left_hip = get_landmark_coordinates(landmarks, mp_pose.PoseLandmark.LEFT_HIP)
86
- # left_knee = get_landmark_coordinates(landmarks, mp_pose.PoseLandmark.LEFT_KNEE)
87
- # #
88
- # right_hip = get_landmark_coordinates(landmarks, mp_pose.PoseLandmark.RIGHT_HIP)
89
- # right_knee = get_landmark_coordinates(landmarks, mp_pose.PoseLandmark.RIGHT_KNEE)
90
- # #
91
- # left_ankle = get_landmark_coordinates(landmarks,mp_pose.PoseLandmark.LEFT_ANKLE)
92
- # right_ankle = get_landmark_coordinates(landmarks,mp_pose.PoseLandmark.RIGHT_ANKLE)
93
- # #
94
-
95
- # if np.any(left_shoulder) and np.any(left_elbow) and np.any(left_wrist):
96
- # left_elbow_angle = calculate_angle(left_shoulder, left_elbow, left_wrist)
97
- # else: left_elbow_angle = 0
98
-
99
- # if np.any(left_shoulder) and np.any(left_hip) and np.any(left_knee):
100
- # left_hip_angle = calculate_angle(left_shoulder, left_hip, left_knee)
101
- # else: left_hip_angle = 0
102
-
103
- # if np.any(right_shoulder) and np.any(right_elbow) and np.any(right_wrist):
104
- # right_elbow_angle = calculate_angle(right_shoulder, right_elbow, right_wrist)
105
- # else: right_elbow_angle = 0
106
-
107
- # if np.any(right_shoulder) and np.any(right_hip) and np.any(right_knee):
108
- # right_hip_angle = calculate_angle(right_shoulder, right_hip, right_knee)
109
- # else: right_hip_angle = 0
110
-
111
- # if np.any(right_knee) and np.any(right_ankle) and np.any(right_hip):
112
- # right_knee_angle = calculate_angle(right_knee, right_ankle, right_hip)
113
- # else: right_knee_angle = 0
114
-
115
- # if np.any(left_knee) and np.any(left_ankle) and np.any(left_hip):
116
- # left_knee_angle = calculate_angle(left_knee, left_ankle, left_hip)
117
- # else: left_knee_angle = 0
118
-
119
-
120
- # # Additional angles (e.g., shoulders, knees, etc.)
121
- # head0 = 0
122
- # num = 0
123
- # head = get_landmark_coordinates(landmarks, mp_pose.PoseLandmark.NOSE)
124
- # if not np.array_equal(head, head0): num += 1
125
- # head0 = head
126
-
127
- # head += get_landmark_coordinates(landmarks, mp_pose.PoseLandmark.RIGHT_EYE)
128
- # if (head[0]==head0[0]) & (head[1]==head0[1]): num += 1
129
- # head0 = head
130
-
131
- # head += get_landmark_coordinates(landmarks, mp_pose.PoseLandmark.LEFT_EYE)
132
- # if (head[0]==head0[0]) & (head[1]==head0[1]): num += 1
133
- # head0 = head
134
-
135
- # head += get_landmark_coordinates(landmarks, mp_pose.PoseLandmark.RIGHT_EAR)
136
- # if (head[0]==head0[0]) & (head[1]==head0[1]): num += 1
137
- # head0 = head
138
-
139
- # head += get_landmark_coordinates(landmarks, mp_pose.PoseLandmark.LEFT_EAR)
140
- # if (head[0]==head0[0]) & (head[1]==head0[1]): num += 1
141
- # head0 = head
142
-
143
- # head /= num
144
-
145
- # if np.any(head) and np.any(left_shoulder) and np.any(left_elbow):
146
- # left_arm_angle = calculate_angle(head, left_shoulder, left_elbow)
147
- # else:
148
- # left_arm_angle = 0
149
-
150
- # if np.any(head) and np.any(right_shoulder) and np.any(right_elbow):
151
- # right_arm_angle = calculate_angle(head, right_shoulder, right_elbow)
152
- # else:
153
- # right_arm_angle = 0
154
-
155
- # if np.any(head) and np.any(left_shoulder) and np.any(left_hip):
156
- # left_back_angle = calculate_angle(head, left_shoulder, left_hip)
157
- # else:
158
- # left_back_angle = 0
159
-
160
- # if np.any(head) and np.any(right_shoulder) and np.any(right_hip):
161
- # right_back_angle = calculate_angle(head, right_shoulder, right_hip)
162
- # else:
163
- # right_back_angle = 0
164
- # ###############
165
- # angles = {
166
- # "left_elbow_angle": left_elbow_angle,
167
- # "left_hip_angle": left_hip_angle,
168
- # "right_elbow_angle": right_elbow_angle,
169
- # "right_hip_angle": right_hip_angle,
170
- # "left_arm_angle": left_arm_angle,
171
- # "right_arm_angle": right_arm_angle,
172
- # "left_back_angle": left_back_angle,
173
- # "right_back_angle": right_back_angle,
174
- # "left_knee_angle": left_knee_angle,
175
- # "right_knee_angle": right_knee_angle
176
- # }
177
-
178
- # locations={
179
- # "left_shoulder":left_shoulder,
180
- # "left_elbow":left_elbow,
181
- # "left_wrist":left_wrist,
182
- # "right_shoulder":right_shoulder,
183
- # "right_elbow":right_elbow,
184
- # "right_wrist":right_wrist,
185
-
186
- # "head":head,
187
-
188
- # "left_hip":left_hip,
189
- # "left_knee":left_knee,
190
- # "left_ankle":left_ankle,
191
-
192
- # "right_hip":right_hip,
193
- # "right_knee":right_knee,
194
- # "right_ankle":right_ankle
195
- # }
196
- # return angles,locations
197
-
198
- # # Function to calculate the angles for both left and right sides and overlay on image
199
- # def calculate_and_display_angles(image_path, return_angles=False):
200
- # mp_pose = mp.solutions.pose
201
- # pose = mp_pose.Pose(min_detection_confidence=0.5, min_tracking_confidence=0.5)
202
-
203
- # image = cv2.imread(image_path)
204
- # image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
205
-
206
- # # Get pose landmarks
207
- # results = pose.process(image_rgb)
208
-
209
- # if results.pose_landmarks:
210
- # # landmarks = results.pose_landmarks
211
- # ########
212
- # ang , locs = calculate_angles_landmarks(results.pose_landmarks)
213
-
214
- # #if only angles needed
215
- # if return_angles:
216
- # return ang
217
-
218
- # # Draw the pose landmarks on the image
219
- # mp_drawing = mp.solutions.drawing_utils
220
- # mp_drawing.draw_landmarks(image, results.pose_landmarks, mp_pose.POSE_CONNECTIONS)
221
-
222
- # # Display the angle values at corresponding locations
223
- # def overlay_angle(angle, location, color=(0, 255, 0)):
224
- # # Coordinates are normalized, scale them to the image size
225
- # x = int(location[0] * image.shape[1])
226
- # y = int(location[1] * image.shape[0])
227
- # cv2.putText(image, f'{angle:.2f}', (x, y), cv2.FONT_HERSHEY_SIMPLEX, 0.3, color, 1)
228
-
229
- # # Overlay angles on the image
230
- # if np.any(ang['left_elbow_angle']!=0):
231
- # overlay_angle(ang['left_elbow_angle'], locs['left_elbow'], (0, 255, 0)) # Left elbow angle
232
- # if np.any(ang['right_elbow_angle']!=0):
233
- # overlay_angle(ang['right_elbow_angle'], locs['right_elbow'], (0, 255, 0)) # Right elbow angle
234
- # if np.any(ang['left_hip_angle']!=0):
235
- # overlay_angle(ang['left_hip_angle'], locs['left_hip'], (0, 255, 0)) # Left hip angle
236
- # if np.any(ang['right_hip_angle']!=0):
237
- # overlay_angle(ang['right_hip_angle'], locs['right_hip'], (0, 255, 0)) # Right hip angle
238
- # if np.any(ang['left_arm_angle']!=0):
239
- # overlay_angle(ang['left_arm_angle'], (locs['left_shoulder']
240
- # + locs['left_elbow'])/2, (0, 255, 0)) # Left arm angle
241
- # if np.any(ang['right_arm_angle']!=0):
242
- # overlay_angle(ang['right_arm_angle'], (locs['right_shoulder']
243
- # + locs['right_elbow'])/2, (0, 255, 0))
244
- # if np.any(ang['left_back_angle']!=0):
245
- # overlay_angle(ang['left_back_angle'], locs['left_shoulder'], (0, 255, 0)) # Left back angle
246
- # if np.any(ang['right_back_angle']!=0):
247
- # overlay_angle(ang['right_back_angle'], locs['right_shoulder'], (0, 255, 0)) # Right back angle
248
-
249
- # if np.any(ang['left_knee_angle']!=0):
250
- # overlay_angle(ang['left_knee_angle'], locs['left_knee'], (0, 255, 0)) # Left knee angle
251
-
252
- # if np.any(ang['right_knee_angle']!=0):
253
- # overlay_angle(ang['right_knee_angle'], locs['right_knee'], (0, 255, 0)) # Right knee angle
254
-
255
- # # Return the image with the overlayed angles
256
- # return image
257
- # else:
258
- # return None
259
- # ###
260
-
261
-
262
-
263
-
264
- ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif'}
265
- def allowed_file(filename):
266
- return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
267
  app = Flask(__name__)
268
- # run_with_ngrok(app) # This will use ngrok for the server
269
 
270
  @app.route('/')
271
  def hello():
272
- return 'Hello, World!'
273
 
274
- @app.route('/1', methods=['POST'])
275
- def upload_file():
276
- if 'image' not in request.files:
277
- return {"message": "No file part"}, 400
278
- file = request.files['image']
279
- if file.filename == '':
280
- return {"message": "No selected file"}, 400
281
-
282
- # send file with angles on image or just angles
283
- if file and allowed_file(file.filename):
284
- try:
285
- file.seek(0)
286
- mime_type, _ = mimetypes.guess_type(file.filename)
287
-
288
- return send_file(
289
- BytesIO(file.read()), mimetype=mime_type,
290
- as_attachment=False, download_name=file.filename
291
- )
292
-
293
- except Exception as e:
294
- return {"message": f"Error processing file: {str(e)}"}, 500
295
- return {"message": "File not allowed"}, 400
296
-
297
-
298
  if __name__ == '__main__':
299
- app.run()
 
1
+ from flask import Flask
 
 
 
 
 
 
 
 
2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  app = Flask(__name__)
 
4
 
5
  @app.route('/')
6
  def hello():
7
+ return "Hello, Hugging Face!"
8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  if __name__ == '__main__':
10
+ app.run(debug=True)