Asser-M-Zaki commited on
Commit
29facbf
·
verified ·
1 Parent(s): 6450e53

Upload 3 files

Browse files
app.py ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import pandas as pd
3
+ import numpy as np
4
+ from xgboost import XGBClassifier
5
+
6
+ # =============== Your feature engineering functions ===============
7
+ def calculate_angle(x1, y1, x2, y2, x3, y3):
8
+ v1 = [x2 - x1, y2 - y1]
9
+ v2 = [x3 - x2, y3 - y2]
10
+ dot = v1[0]*v2[0] + v1[1]*v2[1]
11
+ mag1 = np.sqrt(v1[0]**2 + v1[1]**2)
12
+ mag2 = np.sqrt(v2[0]**2 + v2[1]**2)
13
+
14
+ if mag1 == 0 or mag2 == 0:
15
+ return 0.0
16
+ cos_theta = np.clip(dot / (mag1 * mag2), -1.0, 1.0)
17
+ angle = np.degrees(np.arccos(cos_theta))
18
+ return angle
19
+
20
+ def label_angle(angle):
21
+ if np.isnan(angle):
22
+ return 0
23
+ if angle < 30:
24
+ return 0
25
+ elif angle < 60:
26
+ return 1
27
+ elif angle < 90:
28
+ return 2
29
+ elif angle < 120:
30
+ return 3
31
+ elif angle < 150:
32
+ return 4
33
+ else:
34
+ return 5
35
+
36
+ def extract_features(extracted, time_diff=0.05):
37
+ extracted['distance_covered'] = 0.0
38
+ extracted['idle_time'] = 0.0
39
+
40
+ for i in range(1, len(extracted)):
41
+ dx = extracted.loc[i, 'x'] - extracted.loc[i-1, 'x']
42
+ dy = extracted.loc[i, 'y'] - extracted.loc[i-1, 'y']
43
+ distance = np.sqrt(dx**2 + dy**2)
44
+ extracted.loc[i, 'distance_covered'] = distance
45
+
46
+ if extracted.loc[i, 'x'] == extracted.loc[i-1, 'x'] and extracted.loc[i, 'y'] == extracted.loc[i-1, 'y']:
47
+ extracted.loc[i, 'idle_time'] = extracted.loc[i-1, 'idle_time'] + time_diff
48
+ else:
49
+ extracted.loc[i, 'idle_time'] = 0.0
50
+
51
+ extracted['cursor_speed'] = extracted['distance_covered'] / time_diff
52
+ extracted['acceleration'] = extracted['cursor_speed'] / time_diff
53
+
54
+ angles = []
55
+ for i in range(1, len(extracted) - 1):
56
+ angle = calculate_angle(
57
+ extracted.loc[i-1, 'x'], extracted.loc[i-1, 'y'],
58
+ extracted.loc[i, 'x'], extracted.loc[i, 'y'],
59
+ extracted.loc[i+1, 'x'], extracted.loc[i+1, 'y']
60
+ )
61
+ angles.append(angle)
62
+
63
+ extracted = extracted.iloc[1:-1].copy()
64
+ extracted['movement_angle'] =_
requirements - Copy.txt ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ xgboost==2.0.3
2
+ pandas==2.2.3
3
+ scikit-learn==1.2.2
4
+ numpy==1.26.4
5
+ gradio==4.25.0
6
+
xgb_confusion_detector.model ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4ac2aa059f96781f58beb0cc6488bf84301ecf4c1454890dc65c530e2f5afbc8
3
+ size 86835