Spaces:
Build error
Build error
Commit ·
39dc633
1
Parent(s): 829be18
Initial commit for hand detection space
Browse files- test.py → app.py +106 -106
- requirement.text → requirements.txt +215 -215
test.py → app.py
RENAMED
|
@@ -1,106 +1,106 @@
|
|
| 1 |
-
import cv2
|
| 2 |
-
import mediapipe as mp
|
| 3 |
-
import numpy as np
|
| 4 |
-
import gradio as gr
|
| 5 |
-
import tempfile
|
| 6 |
-
|
| 7 |
-
# Load model
|
| 8 |
-
MODEL_PATH = "hand_landmarker.task"
|
| 9 |
-
|
| 10 |
-
BaseOptions = mp.tasks.BaseOptions
|
| 11 |
-
HandLandmarker = mp.tasks.vision.HandLandmarker
|
| 12 |
-
HandLandmarkerOptions = mp.tasks.vision.HandLandmarkerOptions
|
| 13 |
-
VisionRunningMode = mp.tasks.vision.RunningMode
|
| 14 |
-
mp_image = mp.Image
|
| 15 |
-
mp_format = mp.ImageFormat
|
| 16 |
-
|
| 17 |
-
# Finger connections and colors
|
| 18 |
-
HAND_CONNECTIONS = [
|
| 19 |
-
(0, 1), (1, 2), (2, 3), (3, 4),
|
| 20 |
-
(0, 5), (5, 6), (6, 7), (7, 8),
|
| 21 |
-
(0, 9), (9,10), (10,11), (11,12),
|
| 22 |
-
(0,13), (13,14), (14,15), (15,16),
|
| 23 |
-
(0,17), (17,18), (18,19), (19,20)
|
| 24 |
-
]
|
| 25 |
-
|
| 26 |
-
FINGER_COLORS = {
|
| 27 |
-
'thumb': (245, 245, 245),
|
| 28 |
-
'index': (128, 0, 128),
|
| 29 |
-
'middle': (0, 255, 0),
|
| 30 |
-
'ring': (0, 165, 255),
|
| 31 |
-
'pinky': (255, 0, 0),
|
| 32 |
-
'palm': (100, 100, 100)
|
| 33 |
-
}
|
| 34 |
-
|
| 35 |
-
def get_finger_color(start_idx):
|
| 36 |
-
if start_idx in range(0, 5):
|
| 37 |
-
return FINGER_COLORS['thumb']
|
| 38 |
-
elif start_idx in range(5, 9):
|
| 39 |
-
return FINGER_COLORS['index']
|
| 40 |
-
elif start_idx in range(9, 13):
|
| 41 |
-
return FINGER_COLORS['middle']
|
| 42 |
-
elif start_idx in range(13, 17):
|
| 43 |
-
return FINGER_COLORS['ring']
|
| 44 |
-
elif start_idx in range(17, 21):
|
| 45 |
-
return FINGER_COLORS['pinky']
|
| 46 |
-
else:
|
| 47 |
-
return FINGER_COLORS['palm']
|
| 48 |
-
|
| 49 |
-
def process_video(video_path):
|
| 50 |
-
cap = cv2.VideoCapture(video_path)
|
| 51 |
-
|
| 52 |
-
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
|
| 53 |
-
tmp_out = tempfile.NamedTemporaryFile(suffix=".mp4", delete=False)
|
| 54 |
-
out_path = tmp_out.name
|
| 55 |
-
|
| 56 |
-
fps = cap.get(cv2.CAP_PROP_FPS)
|
| 57 |
-
w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
|
| 58 |
-
h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
|
| 59 |
-
out = cv2.VideoWriter(out_path, fourcc, fps, (w, h))
|
| 60 |
-
|
| 61 |
-
options = HandLandmarkerOptions(
|
| 62 |
-
base_options=BaseOptions(model_asset_path=MODEL_PATH),
|
| 63 |
-
running_mode=VisionRunningMode.IMAGE,
|
| 64 |
-
num_hands=2,
|
| 65 |
-
min_hand_detection_confidence=0.5,
|
| 66 |
-
min_hand_presence_confidence=0.5,
|
| 67 |
-
min_tracking_confidence=0.5
|
| 68 |
-
)
|
| 69 |
-
|
| 70 |
-
with HandLandmarker.create_from_options(options) as landmarker:
|
| 71 |
-
while cap.isOpened():
|
| 72 |
-
ret, frame = cap.read()
|
| 73 |
-
if not ret:
|
| 74 |
-
break
|
| 75 |
-
|
| 76 |
-
rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
|
| 77 |
-
mp_img = mp_image(image_format=mp_format.SRGB, data=rgb_frame)
|
| 78 |
-
results = landmarker.detect(mp_img)
|
| 79 |
-
|
| 80 |
-
if results.hand_landmarks:
|
| 81 |
-
for hand_landmarks in results.hand_landmarks:
|
| 82 |
-
points = [(int(lm.x * w), int(lm.y * h)) for lm in hand_landmarks]
|
| 83 |
-
|
| 84 |
-
for start, end in HAND_CONNECTIONS:
|
| 85 |
-
color = get_finger_color(start)
|
| 86 |
-
cv2.line(frame, points[start], points[end], color, 2)
|
| 87 |
-
|
| 88 |
-
for i, (x, y) in enumerate(points):
|
| 89 |
-
cv2.circle(frame, (x, y), 4, (0, 255, 255), -1)
|
| 90 |
-
|
| 91 |
-
out.write(frame)
|
| 92 |
-
|
| 93 |
-
cap.release()
|
| 94 |
-
out.release()
|
| 95 |
-
return out_path
|
| 96 |
-
|
| 97 |
-
# Gradio interface
|
| 98 |
-
demo = gr.Interface(
|
| 99 |
-
fn=process_video,
|
| 100 |
-
inputs=gr.Video(label="Upload Video or Use Webcam"),
|
| 101 |
-
outputs=gr.Video(label="Hand Landmark Annotated Video"),
|
| 102 |
-
title="Hand Detection ",
|
| 103 |
-
description="Upload a video or use webcam to detect hands."
|
| 104 |
-
)
|
| 105 |
-
|
| 106 |
-
demo.launch()
|
|
|
|
| 1 |
+
import cv2
|
| 2 |
+
import mediapipe as mp
|
| 3 |
+
import numpy as np
|
| 4 |
+
import gradio as gr
|
| 5 |
+
import tempfile
|
| 6 |
+
|
| 7 |
+
# Load model
|
| 8 |
+
MODEL_PATH = "hand_landmarker.task"
|
| 9 |
+
|
| 10 |
+
BaseOptions = mp.tasks.BaseOptions
|
| 11 |
+
HandLandmarker = mp.tasks.vision.HandLandmarker
|
| 12 |
+
HandLandmarkerOptions = mp.tasks.vision.HandLandmarkerOptions
|
| 13 |
+
VisionRunningMode = mp.tasks.vision.RunningMode
|
| 14 |
+
mp_image = mp.Image
|
| 15 |
+
mp_format = mp.ImageFormat
|
| 16 |
+
|
| 17 |
+
# Finger connections and colors
|
| 18 |
+
HAND_CONNECTIONS = [
|
| 19 |
+
(0, 1), (1, 2), (2, 3), (3, 4),
|
| 20 |
+
(0, 5), (5, 6), (6, 7), (7, 8),
|
| 21 |
+
(0, 9), (9,10), (10,11), (11,12),
|
| 22 |
+
(0,13), (13,14), (14,15), (15,16),
|
| 23 |
+
(0,17), (17,18), (18,19), (19,20)
|
| 24 |
+
]
|
| 25 |
+
|
| 26 |
+
FINGER_COLORS = {
|
| 27 |
+
'thumb': (245, 245, 245),
|
| 28 |
+
'index': (128, 0, 128),
|
| 29 |
+
'middle': (0, 255, 0),
|
| 30 |
+
'ring': (0, 165, 255),
|
| 31 |
+
'pinky': (255, 0, 0),
|
| 32 |
+
'palm': (100, 100, 100)
|
| 33 |
+
}
|
| 34 |
+
|
| 35 |
+
def get_finger_color(start_idx):
|
| 36 |
+
if start_idx in range(0, 5):
|
| 37 |
+
return FINGER_COLORS['thumb']
|
| 38 |
+
elif start_idx in range(5, 9):
|
| 39 |
+
return FINGER_COLORS['index']
|
| 40 |
+
elif start_idx in range(9, 13):
|
| 41 |
+
return FINGER_COLORS['middle']
|
| 42 |
+
elif start_idx in range(13, 17):
|
| 43 |
+
return FINGER_COLORS['ring']
|
| 44 |
+
elif start_idx in range(17, 21):
|
| 45 |
+
return FINGER_COLORS['pinky']
|
| 46 |
+
else:
|
| 47 |
+
return FINGER_COLORS['palm']
|
| 48 |
+
|
| 49 |
+
def process_video(video_path):
|
| 50 |
+
cap = cv2.VideoCapture(video_path)
|
| 51 |
+
|
| 52 |
+
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
|
| 53 |
+
tmp_out = tempfile.NamedTemporaryFile(suffix=".mp4", delete=False)
|
| 54 |
+
out_path = tmp_out.name
|
| 55 |
+
|
| 56 |
+
fps = cap.get(cv2.CAP_PROP_FPS)
|
| 57 |
+
w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
|
| 58 |
+
h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
|
| 59 |
+
out = cv2.VideoWriter(out_path, fourcc, fps, (w, h))
|
| 60 |
+
|
| 61 |
+
options = HandLandmarkerOptions(
|
| 62 |
+
base_options=BaseOptions(model_asset_path=MODEL_PATH),
|
| 63 |
+
running_mode=VisionRunningMode.IMAGE,
|
| 64 |
+
num_hands=2,
|
| 65 |
+
min_hand_detection_confidence=0.5,
|
| 66 |
+
min_hand_presence_confidence=0.5,
|
| 67 |
+
min_tracking_confidence=0.5
|
| 68 |
+
)
|
| 69 |
+
|
| 70 |
+
with HandLandmarker.create_from_options(options) as landmarker:
|
| 71 |
+
while cap.isOpened():
|
| 72 |
+
ret, frame = cap.read()
|
| 73 |
+
if not ret:
|
| 74 |
+
break
|
| 75 |
+
|
| 76 |
+
rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
|
| 77 |
+
mp_img = mp_image(image_format=mp_format.SRGB, data=rgb_frame)
|
| 78 |
+
results = landmarker.detect(mp_img)
|
| 79 |
+
|
| 80 |
+
if results.hand_landmarks:
|
| 81 |
+
for hand_landmarks in results.hand_landmarks:
|
| 82 |
+
points = [(int(lm.x * w), int(lm.y * h)) for lm in hand_landmarks]
|
| 83 |
+
|
| 84 |
+
for start, end in HAND_CONNECTIONS:
|
| 85 |
+
color = get_finger_color(start)
|
| 86 |
+
cv2.line(frame, points[start], points[end], color, 2)
|
| 87 |
+
|
| 88 |
+
for i, (x, y) in enumerate(points):
|
| 89 |
+
cv2.circle(frame, (x, y), 4, (0, 255, 255), -1)
|
| 90 |
+
|
| 91 |
+
out.write(frame)
|
| 92 |
+
|
| 93 |
+
cap.release()
|
| 94 |
+
out.release()
|
| 95 |
+
return out_path
|
| 96 |
+
|
| 97 |
+
# Gradio interface
|
| 98 |
+
demo = gr.Interface(
|
| 99 |
+
fn=process_video,
|
| 100 |
+
inputs=gr.Video(label="Upload Video or Use Webcam"),
|
| 101 |
+
outputs=gr.Video(label="Hand Landmark Annotated Video"),
|
| 102 |
+
title="Hand Detection ",
|
| 103 |
+
description="Upload a video or use webcam to detect hands."
|
| 104 |
+
)
|
| 105 |
+
|
| 106 |
+
demo.launch()
|
requirement.text → requirements.txt
RENAMED
|
@@ -1,216 +1,216 @@
|
|
| 1 |
-
absl-py==2.2.2
|
| 2 |
-
aiofiles==24.1.0
|
| 3 |
-
aiohappyeyeballs==2.4.6
|
| 4 |
-
annotated-types==0.7.0
|
| 5 |
-
antlr4-python3-runtime==4.9.3
|
| 6 |
-
anyio==4.9.0
|
| 7 |
-
appdirs==1.4.4
|
| 8 |
-
asgiref==3.8.1
|
| 9 |
-
asttokens==3.0.0
|
| 10 |
-
astunparse==1.6.3
|
| 11 |
-
attrs==25.1.0
|
| 12 |
-
backcall==0.2.0
|
| 13 |
-
backoff==2.2.1
|
| 14 |
-
bcrypt==4.2.1
|
| 15 |
-
blinker==1.9.0
|
| 16 |
-
cachetools==5.5.2
|
| 17 |
-
certifi==2025.1.31
|
| 18 |
-
cffi==1.17.1
|
| 19 |
-
charset-normalizer==3.4.1
|
| 20 |
-
click==8.1.8
|
| 21 |
-
colorama==0.4.6
|
| 22 |
-
comtypes==1.4.10
|
| 23 |
-
contourpy==1.3.1
|
| 24 |
-
cycler==0.12.1
|
| 25 |
-
decorator==5.2.1
|
| 26 |
-
distro==1.9.0
|
| 27 |
-
Django==5.1.7
|
| 28 |
-
docopt==0.6.2
|
| 29 |
-
docstring_parser==0.16
|
| 30 |
-
durationpy==0.9
|
| 31 |
-
et_xmlfile==2.0.0
|
| 32 |
-
executing==2.2.0
|
| 33 |
-
fastapi==0.115.12
|
| 34 |
-
fastjsonschema==2.21.1
|
| 35 |
-
ffmpy==0.5.0
|
| 36 |
-
filelock==3.17.0
|
| 37 |
-
filetype==1.2.0
|
| 38 |
-
flatbuffers==25.2.10
|
| 39 |
-
fonttools==4.57.0
|
| 40 |
-
frozenlist==1.5.0
|
| 41 |
-
fsspec==2025.2.0
|
| 42 |
-
gast==0.6.0
|
| 43 |
-
google-api-core==2.24.2
|
| 44 |
-
google-auth==2.38.0
|
| 45 |
-
google-auth-oauthlib==1.2.1
|
| 46 |
-
google-cloud-aiplatform==1.85.0
|
| 47 |
-
google-cloud-bigquery==3.30.0
|
| 48 |
-
google-cloud-core==2.4.3
|
| 49 |
-
google-cloud-resource-manager==1.14.2
|
| 50 |
-
google-cloud-storage==2.19.0
|
| 51 |
-
google-crc32c==1.7.0
|
| 52 |
-
google-pasta==0.2.0
|
| 53 |
-
google-resumable-media==2.7.2
|
| 54 |
-
googleapis-common-protos==1.69.2
|
| 55 |
-
gradio==5.24.0
|
| 56 |
-
gradio_client==1.8.0
|
| 57 |
-
groovy==0.1.2
|
| 58 |
-
grpc-google-iam-v1==0.14.2
|
| 59 |
-
grpcio==1.71.0
|
| 60 |
-
grpcio-status==1.71.0
|
| 61 |
-
h11==0.14.0
|
| 62 |
-
h5py==3.13.0
|
| 63 |
-
httpcore==1.0.7
|
| 64 |
-
httptools==0.6.4
|
| 65 |
-
httpx==0.28.1
|
| 66 |
-
huggingface-hub==0.30.2
|
| 67 |
-
idna==3.10
|
| 68 |
-
importlib_resources==6.5.2
|
| 69 |
-
jax==0.5.3
|
| 70 |
-
jaxlib==0.5.3
|
| 71 |
-
Jinja2==3.1.5
|
| 72 |
-
jiter==0.8.2
|
| 73 |
-
jmespath==1.0.1
|
| 74 |
-
joblib==1.4.2
|
| 75 |
-
json5==0.10.0
|
| 76 |
-
json_repair==0.39.1
|
| 77 |
-
jsonpath-python==1.0.6
|
| 78 |
-
jsonpickle==4.0.2
|
| 79 |
-
jsonref==1.1.0
|
| 80 |
-
junitparser==3.2.0
|
| 81 |
-
jupyterlab_pygments==0.3.0
|
| 82 |
-
keras==2.15.0
|
| 83 |
-
kiwisolver==1.4.8
|
| 84 |
-
langdetect==1.0.9
|
| 85 |
-
libclang==18.1.1
|
| 86 |
-
lxml==5.3.1
|
| 87 |
-
Markdown==3.7
|
| 88 |
-
markdown-it-py==3.0.0
|
| 89 |
-
MarkupSafe==3.0.2
|
| 90 |
-
marshmallow==3.26.1
|
| 91 |
-
matplotlib==3.10.1
|
| 92 |
-
matplotlib-inline==0.1.7
|
| 93 |
-
mdurl==0.1.2
|
| 94 |
-
mediapipe==0.10.21
|
| 95 |
-
mistune==3.1.3
|
| 96 |
-
ml_dtypes==0.5.1
|
| 97 |
-
mmh3==5.1.0
|
| 98 |
-
monotonic==1.6
|
| 99 |
-
mpmath==1.3.0
|
| 100 |
-
multidict==6.1.0
|
| 101 |
-
mypy-extensions==1.0.0
|
| 102 |
-
namex==0.0.8
|
| 103 |
-
nest-asyncio==1.6.0
|
| 104 |
-
networkx==3.4.2
|
| 105 |
-
numpy==1.26.4
|
| 106 |
-
oauthlib==3.2.2
|
| 107 |
-
olefile==0.47
|
| 108 |
-
omegaconf==2.3.0
|
| 109 |
-
opencv-contrib-python==4.11.0.86
|
| 110 |
-
opencv-python==4.11.0.86
|
| 111 |
-
openpyxl==3.1.5
|
| 112 |
-
opentelemetry-proto==1.31.0
|
| 113 |
-
opentelemetry-util-http==0.52b0
|
| 114 |
-
opt_einsum==3.4.0
|
| 115 |
-
optree==0.15.0
|
| 116 |
-
orjson==3.10.15
|
| 117 |
-
overrides==7.7.0
|
| 118 |
-
packaging==24.2
|
| 119 |
-
pandas==2.2.3
|
| 120 |
-
pandocfilters==1.5.1
|
| 121 |
-
parso==0.8.4
|
| 122 |
-
pickleshare==0.7.5
|
| 123 |
-
pillow==10.4.0
|
| 124 |
-
platformdirs==4.3.7
|
| 125 |
-
prompt_toolkit==3.0.50
|
| 126 |
-
propcache==0.3.0
|
| 127 |
-
proto-plus==1.26.1
|
| 128 |
-
protobuf==4.25.6
|
| 129 |
-
psutil==7.0.0
|
| 130 |
-
pure_eval==0.2.3
|
| 131 |
-
pyasn1==0.6.1
|
| 132 |
-
pyasn1_modules==0.4.1
|
| 133 |
-
pycparser==2.22
|
| 134 |
-
pydantic==2.10.6
|
| 135 |
-
pydantic_core==2.27.2
|
| 136 |
-
pydub==0.25.1
|
| 137 |
-
pyee==12.0.0
|
| 138 |
-
Pygments==2.19.1
|
| 139 |
-
PyJWT==2.10.1
|
| 140 |
-
pypandoc==1.15
|
| 141 |
-
pyparsing==3.2.1
|
| 142 |
-
pypdf==5.4.0
|
| 143 |
-
pypdfium2==4.30.1
|
| 144 |
-
PyPika==0.48.9
|
| 145 |
-
pypiwin32==223
|
| 146 |
-
pyproject_hooks==1.2.0
|
| 147 |
-
pyreadline3==3.5.4
|
| 148 |
-
python-dateutil==2.9.0.post0
|
| 149 |
-
python-dotenv==1.0.1
|
| 150 |
-
python-iso639==2025.2.18
|
| 151 |
-
python-json-logger==2.0.7
|
| 152 |
-
python-magic==0.4.27
|
| 153 |
-
python-multipart==0.0.20
|
| 154 |
-
pyttsx3==2.98
|
| 155 |
-
pytz==2025.1
|
| 156 |
-
pywin32==310
|
| 157 |
-
PyYAML==6.0.2
|
| 158 |
-
pyzmq==26.4.0
|
| 159 |
-
RapidFuzz==3.12.2
|
| 160 |
-
referencing==0.36.2
|
| 161 |
-
regex==2024.11.6
|
| 162 |
-
requests==2.32.3
|
| 163 |
-
requests-oauthlib==2.0.0
|
| 164 |
-
rich==14.0.0
|
| 165 |
-
rpds-py==0.23.1
|
| 166 |
-
rsa==4.9
|
| 167 |
-
ruff==0.11.4
|
| 168 |
-
safehttpx==0.1.6
|
| 169 |
-
safetensors==0.5.3
|
| 170 |
-
scipy==1.15.2
|
| 171 |
-
semantic-version==2.10.0
|
| 172 |
-
sentencepiece==0.2.0
|
| 173 |
-
sentry-sdk==2.23.1
|
| 174 |
-
shapely==2.0.7
|
| 175 |
-
shellingham==1.5.4
|
| 176 |
-
six==1.17.0
|
| 177 |
-
sniffio==1.3.1
|
| 178 |
-
sounddevice==0.5.1
|
| 179 |
-
soupsieve==2.6
|
| 180 |
-
sqlparse==0.5.3
|
| 181 |
-
stack-data==0.6.3
|
| 182 |
-
starlette==0.46.1
|
| 183 |
-
sympy==1.13.1
|
| 184 |
-
tenacity==8.3.0
|
| 185 |
-
tensorboard==2.15.2
|
| 186 |
-
tensorboard-data-server==0.7.2
|
| 187 |
-
tensorboardX==1.5
|
| 188 |
-
tensorflow-estimator==2.15.0
|
| 189 |
-
tensorflow-io-gcs-filesystem==0.31.0
|
| 190 |
-
termcolor==2.5.0
|
| 191 |
-
threadpoolctl==3.6.0
|
| 192 |
-
tinycss2==1.4.0
|
| 193 |
-
tomli==2.2.1
|
| 194 |
-
tomli_w==1.2.0
|
| 195 |
-
tomlkit==0.13.2
|
| 196 |
-
torch==2.6.0
|
| 197 |
-
tornado==6.4.2
|
| 198 |
-
tqdm==4.67.1
|
| 199 |
-
traitlets==5.14.3
|
| 200 |
-
typer==0.15.2
|
| 201 |
-
typing-inspection==0.4.0
|
| 202 |
-
typing_extensions==4.12.2
|
| 203 |
-
tzdata==2025.1
|
| 204 |
-
urllib3==2.3.0
|
| 205 |
-
uv==0.6.3
|
| 206 |
-
uvicorn==0.34.0
|
| 207 |
-
wcwidth==0.2.13
|
| 208 |
-
webencodings==0.5.1
|
| 209 |
-
websocket-client==1.8.0
|
| 210 |
-
websockets==15.0
|
| 211 |
-
Werkzeug==3.1.3
|
| 212 |
-
wrapt==1.14.1
|
| 213 |
-
xlrd==2.0.1
|
| 214 |
-
XlsxWriter==3.2.2
|
| 215 |
-
yarl==1.18.3
|
| 216 |
zipp==3.21.0
|
|
|
|
| 1 |
+
absl-py==2.2.2
|
| 2 |
+
aiofiles==24.1.0
|
| 3 |
+
aiohappyeyeballs==2.4.6
|
| 4 |
+
annotated-types==0.7.0
|
| 5 |
+
antlr4-python3-runtime==4.9.3
|
| 6 |
+
anyio==4.9.0
|
| 7 |
+
appdirs==1.4.4
|
| 8 |
+
asgiref==3.8.1
|
| 9 |
+
asttokens==3.0.0
|
| 10 |
+
astunparse==1.6.3
|
| 11 |
+
attrs==25.1.0
|
| 12 |
+
backcall==0.2.0
|
| 13 |
+
backoff==2.2.1
|
| 14 |
+
bcrypt==4.2.1
|
| 15 |
+
blinker==1.9.0
|
| 16 |
+
cachetools==5.5.2
|
| 17 |
+
certifi==2025.1.31
|
| 18 |
+
cffi==1.17.1
|
| 19 |
+
charset-normalizer==3.4.1
|
| 20 |
+
click==8.1.8
|
| 21 |
+
colorama==0.4.6
|
| 22 |
+
comtypes==1.4.10
|
| 23 |
+
contourpy==1.3.1
|
| 24 |
+
cycler==0.12.1
|
| 25 |
+
decorator==5.2.1
|
| 26 |
+
distro==1.9.0
|
| 27 |
+
Django==5.1.7
|
| 28 |
+
docopt==0.6.2
|
| 29 |
+
docstring_parser==0.16
|
| 30 |
+
durationpy==0.9
|
| 31 |
+
et_xmlfile==2.0.0
|
| 32 |
+
executing==2.2.0
|
| 33 |
+
fastapi==0.115.12
|
| 34 |
+
fastjsonschema==2.21.1
|
| 35 |
+
ffmpy==0.5.0
|
| 36 |
+
filelock==3.17.0
|
| 37 |
+
filetype==1.2.0
|
| 38 |
+
flatbuffers==25.2.10
|
| 39 |
+
fonttools==4.57.0
|
| 40 |
+
frozenlist==1.5.0
|
| 41 |
+
fsspec==2025.2.0
|
| 42 |
+
gast==0.6.0
|
| 43 |
+
google-api-core==2.24.2
|
| 44 |
+
google-auth==2.38.0
|
| 45 |
+
google-auth-oauthlib==1.2.1
|
| 46 |
+
google-cloud-aiplatform==1.85.0
|
| 47 |
+
google-cloud-bigquery==3.30.0
|
| 48 |
+
google-cloud-core==2.4.3
|
| 49 |
+
google-cloud-resource-manager==1.14.2
|
| 50 |
+
google-cloud-storage==2.19.0
|
| 51 |
+
google-crc32c==1.7.0
|
| 52 |
+
google-pasta==0.2.0
|
| 53 |
+
google-resumable-media==2.7.2
|
| 54 |
+
googleapis-common-protos==1.69.2
|
| 55 |
+
gradio==5.24.0
|
| 56 |
+
gradio_client==1.8.0
|
| 57 |
+
groovy==0.1.2
|
| 58 |
+
grpc-google-iam-v1==0.14.2
|
| 59 |
+
grpcio==1.71.0
|
| 60 |
+
grpcio-status==1.71.0
|
| 61 |
+
h11==0.14.0
|
| 62 |
+
h5py==3.13.0
|
| 63 |
+
httpcore==1.0.7
|
| 64 |
+
httptools==0.6.4
|
| 65 |
+
httpx==0.28.1
|
| 66 |
+
huggingface-hub==0.30.2
|
| 67 |
+
idna==3.10
|
| 68 |
+
importlib_resources==6.5.2
|
| 69 |
+
jax==0.5.3
|
| 70 |
+
jaxlib==0.5.3
|
| 71 |
+
Jinja2==3.1.5
|
| 72 |
+
jiter==0.8.2
|
| 73 |
+
jmespath==1.0.1
|
| 74 |
+
joblib==1.4.2
|
| 75 |
+
json5==0.10.0
|
| 76 |
+
json_repair==0.39.1
|
| 77 |
+
jsonpath-python==1.0.6
|
| 78 |
+
jsonpickle==4.0.2
|
| 79 |
+
jsonref==1.1.0
|
| 80 |
+
junitparser==3.2.0
|
| 81 |
+
jupyterlab_pygments==0.3.0
|
| 82 |
+
keras==2.15.0
|
| 83 |
+
kiwisolver==1.4.8
|
| 84 |
+
langdetect==1.0.9
|
| 85 |
+
libclang==18.1.1
|
| 86 |
+
lxml==5.3.1
|
| 87 |
+
Markdown==3.7
|
| 88 |
+
markdown-it-py==3.0.0
|
| 89 |
+
MarkupSafe==3.0.2
|
| 90 |
+
marshmallow==3.26.1
|
| 91 |
+
matplotlib==3.10.1
|
| 92 |
+
matplotlib-inline==0.1.7
|
| 93 |
+
mdurl==0.1.2
|
| 94 |
+
mediapipe==0.10.21
|
| 95 |
+
mistune==3.1.3
|
| 96 |
+
ml_dtypes==0.5.1
|
| 97 |
+
mmh3==5.1.0
|
| 98 |
+
monotonic==1.6
|
| 99 |
+
mpmath==1.3.0
|
| 100 |
+
multidict==6.1.0
|
| 101 |
+
mypy-extensions==1.0.0
|
| 102 |
+
namex==0.0.8
|
| 103 |
+
nest-asyncio==1.6.0
|
| 104 |
+
networkx==3.4.2
|
| 105 |
+
numpy==1.26.4
|
| 106 |
+
oauthlib==3.2.2
|
| 107 |
+
olefile==0.47
|
| 108 |
+
omegaconf==2.3.0
|
| 109 |
+
opencv-contrib-python==4.11.0.86
|
| 110 |
+
opencv-python==4.11.0.86
|
| 111 |
+
openpyxl==3.1.5
|
| 112 |
+
opentelemetry-proto==1.31.0
|
| 113 |
+
opentelemetry-util-http==0.52b0
|
| 114 |
+
opt_einsum==3.4.0
|
| 115 |
+
optree==0.15.0
|
| 116 |
+
orjson==3.10.15
|
| 117 |
+
overrides==7.7.0
|
| 118 |
+
packaging==24.2
|
| 119 |
+
pandas==2.2.3
|
| 120 |
+
pandocfilters==1.5.1
|
| 121 |
+
parso==0.8.4
|
| 122 |
+
pickleshare==0.7.5
|
| 123 |
+
pillow==10.4.0
|
| 124 |
+
platformdirs==4.3.7
|
| 125 |
+
prompt_toolkit==3.0.50
|
| 126 |
+
propcache==0.3.0
|
| 127 |
+
proto-plus==1.26.1
|
| 128 |
+
protobuf==4.25.6
|
| 129 |
+
psutil==7.0.0
|
| 130 |
+
pure_eval==0.2.3
|
| 131 |
+
pyasn1==0.6.1
|
| 132 |
+
pyasn1_modules==0.4.1
|
| 133 |
+
pycparser==2.22
|
| 134 |
+
pydantic==2.10.6
|
| 135 |
+
pydantic_core==2.27.2
|
| 136 |
+
pydub==0.25.1
|
| 137 |
+
pyee==12.0.0
|
| 138 |
+
Pygments==2.19.1
|
| 139 |
+
PyJWT==2.10.1
|
| 140 |
+
pypandoc==1.15
|
| 141 |
+
pyparsing==3.2.1
|
| 142 |
+
pypdf==5.4.0
|
| 143 |
+
pypdfium2==4.30.1
|
| 144 |
+
PyPika==0.48.9
|
| 145 |
+
pypiwin32==223
|
| 146 |
+
pyproject_hooks==1.2.0
|
| 147 |
+
pyreadline3==3.5.4
|
| 148 |
+
python-dateutil==2.9.0.post0
|
| 149 |
+
python-dotenv==1.0.1
|
| 150 |
+
python-iso639==2025.2.18
|
| 151 |
+
python-json-logger==2.0.7
|
| 152 |
+
python-magic==0.4.27
|
| 153 |
+
python-multipart==0.0.20
|
| 154 |
+
pyttsx3==2.98
|
| 155 |
+
pytz==2025.1
|
| 156 |
+
pywin32==310
|
| 157 |
+
PyYAML==6.0.2
|
| 158 |
+
pyzmq==26.4.0
|
| 159 |
+
RapidFuzz==3.12.2
|
| 160 |
+
referencing==0.36.2
|
| 161 |
+
regex==2024.11.6
|
| 162 |
+
requests==2.32.3
|
| 163 |
+
requests-oauthlib==2.0.0
|
| 164 |
+
rich==14.0.0
|
| 165 |
+
rpds-py==0.23.1
|
| 166 |
+
rsa==4.9
|
| 167 |
+
ruff==0.11.4
|
| 168 |
+
safehttpx==0.1.6
|
| 169 |
+
safetensors==0.5.3
|
| 170 |
+
scipy==1.15.2
|
| 171 |
+
semantic-version==2.10.0
|
| 172 |
+
sentencepiece==0.2.0
|
| 173 |
+
sentry-sdk==2.23.1
|
| 174 |
+
shapely==2.0.7
|
| 175 |
+
shellingham==1.5.4
|
| 176 |
+
six==1.17.0
|
| 177 |
+
sniffio==1.3.1
|
| 178 |
+
sounddevice==0.5.1
|
| 179 |
+
soupsieve==2.6
|
| 180 |
+
sqlparse==0.5.3
|
| 181 |
+
stack-data==0.6.3
|
| 182 |
+
starlette==0.46.1
|
| 183 |
+
sympy==1.13.1
|
| 184 |
+
tenacity==8.3.0
|
| 185 |
+
tensorboard==2.15.2
|
| 186 |
+
tensorboard-data-server==0.7.2
|
| 187 |
+
tensorboardX==1.5
|
| 188 |
+
tensorflow-estimator==2.15.0
|
| 189 |
+
tensorflow-io-gcs-filesystem==0.31.0
|
| 190 |
+
termcolor==2.5.0
|
| 191 |
+
threadpoolctl==3.6.0
|
| 192 |
+
tinycss2==1.4.0
|
| 193 |
+
tomli==2.2.1
|
| 194 |
+
tomli_w==1.2.0
|
| 195 |
+
tomlkit==0.13.2
|
| 196 |
+
torch==2.6.0
|
| 197 |
+
tornado==6.4.2
|
| 198 |
+
tqdm==4.67.1
|
| 199 |
+
traitlets==5.14.3
|
| 200 |
+
typer==0.15.2
|
| 201 |
+
typing-inspection==0.4.0
|
| 202 |
+
typing_extensions==4.12.2
|
| 203 |
+
tzdata==2025.1
|
| 204 |
+
urllib3==2.3.0
|
| 205 |
+
uv==0.6.3
|
| 206 |
+
uvicorn==0.34.0
|
| 207 |
+
wcwidth==0.2.13
|
| 208 |
+
webencodings==0.5.1
|
| 209 |
+
websocket-client==1.8.0
|
| 210 |
+
websockets==15.0
|
| 211 |
+
Werkzeug==3.1.3
|
| 212 |
+
wrapt==1.14.1
|
| 213 |
+
xlrd==2.0.1
|
| 214 |
+
XlsxWriter==3.2.2
|
| 215 |
+
yarl==1.18.3
|
| 216 |
zipp==3.21.0
|