LiuPengNGP commited on
Commit
e4dd0ff
Β·
verified Β·
1 Parent(s): 0a291c0

Upload 10 files

Browse files
Files changed (10) hide show
  1. CODE_OF_CONDUCT.md +80 -0
  2. LICENSE +21 -0
  3. README.md +6 -4
  4. app.css +100 -0
  5. app.py +131 -0
  6. config.toml +10 -0
  7. flake8 +5 -0
  8. gitattributes +35 -0
  9. gitignore +172 -0
  10. requirements.txt +9 -0
CODE_OF_CONDUCT.md ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ In the interest of fostering an open and welcoming environment, we as
6
+ contributors and maintainers pledge to make participation in our project and
7
+ our community a harassment-free experience for everyone, regardless of age, body
8
+ size, disability, ethnicity, sex characteristics, gender identity and expression,
9
+ level of experience, education, socio-economic status, nationality, personal
10
+ appearance, race, religion, or sexual identity and orientation.
11
+
12
+ ## Our Standards
13
+
14
+ Examples of behavior that contributes to creating a positive environment
15
+ include:
16
+
17
+ * Using welcoming and inclusive language
18
+ * Being respectful of differing viewpoints and experiences
19
+ * Gracefully accepting constructive criticism
20
+ * Focusing on what is best for the community
21
+ * Showing empathy towards other community members
22
+
23
+ Examples of unacceptable behavior by participants include:
24
+
25
+ * The use of sexualized language or imagery and unwelcome sexual attention or
26
+ advances
27
+ * Trolling, insulting/derogatory comments, and personal or political attacks
28
+ * Public or private harassment
29
+ * Publishing others' private information, such as a physical or electronic
30
+ address, without explicit permission
31
+ * Other conduct which could reasonably be considered inappropriate in a
32
+ professional setting
33
+
34
+ ## Our Responsibilities
35
+
36
+ Project maintainers are responsible for clarifying the standards of acceptable
37
+ behavior and are expected to take appropriate and fair corrective action in
38
+ response to any instances of unacceptable behavior.
39
+
40
+ Project maintainers have the right and responsibility to remove, edit, or
41
+ reject comments, commits, code, wiki edits, issues, and other contributions
42
+ that are not aligned to this Code of Conduct, or to ban temporarily or
43
+ permanently any contributor for other behaviors that they deem inappropriate,
44
+ threatening, offensive, or harmful.
45
+
46
+ ## Scope
47
+
48
+ This Code of Conduct applies within all project spaces, and it also applies when
49
+ an individual is representing the project or its community in public spaces.
50
+ Examples of representing a project or community include using an official
51
+ project e-mail address, posting via an official social media account, or acting
52
+ as an appointed representative at an online or offline event. Representation of
53
+ a project may be further defined and clarified by project maintainers.
54
+
55
+ This Code of Conduct also applies outside the project spaces when there is a
56
+ reasonable belief that an individual's behavior may have a negative impact on
57
+ the project or its community.
58
+
59
+ ## Enforcement
60
+
61
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
62
+ reported by contacting the project team at <ryumina_ev@mail.ru>. All
63
+ complaints will be reviewed and investigated and will result in a response that
64
+ is deemed necessary and appropriate to the circumstances. The project team is
65
+ obligated to maintain confidentiality with regard to the reporter of an incident.
66
+ Further details of specific enforcement policies may be posted separately.
67
+
68
+ Project maintainers who do not follow or enforce the Code of Conduct in good
69
+ faith may face temporary or permanent repercussions as determined by other
70
+ members of the project's leadership.
71
+
72
+ ## Attribution
73
+
74
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
75
+ available at <https://www.contributor-covenant.org/version/1/4/code-of-conduct.html>
76
+
77
+ [homepage]: https://www.contributor-covenant.org
78
+
79
+ For answers to common questions about this code of conduct, see
80
+ <https://www.contributor-covenant.org/faq>
LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Elena Ryumina
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
README.md CHANGED
@@ -1,12 +1,14 @@
1
  ---
2
- title: Exercise
3
- emoji: 🌍
4
  colorFrom: blue
5
- colorTo: gray
6
  sdk: gradio
7
- sdk_version: 4.41.0
8
  app_file: app.py
9
  pinned: false
 
 
10
  ---
11
 
12
  Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: Facial Expression Recognition
3
+ emoji: πŸ˜€πŸ˜²πŸ˜πŸ˜₯πŸ₯΄πŸ˜±πŸ˜‘
4
  colorFrom: blue
5
+ colorTo: pink
6
  sdk: gradio
7
+ sdk_version: 4.24.0
8
  app_file: app.py
9
  pinned: false
10
+ license: mit
11
+ short_description: A tool to detect facial expressions
12
  ---
13
 
14
  Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
app.css ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ div.app-flex-container {
2
+ display: flex;
3
+ align-items: left;
4
+ }
5
+
6
+ div.app-flex-container > a {
7
+ margin-left: 6px;
8
+ }
9
+
10
+ div.dl1 div.upload-container {
11
+ height: 350px;
12
+ max-height: 350px;
13
+ }
14
+
15
+ div.dl2 {
16
+ max-height: 200px;
17
+ }
18
+
19
+ div.dl2 img {
20
+ max-height: 200px;
21
+ }
22
+
23
+ div.dl5 {
24
+ max-height: 200px;
25
+ }
26
+
27
+ div.dl5 img {
28
+ max-height: 200px;
29
+ }
30
+
31
+ div.video1 div.video-container {
32
+ height: 500px;
33
+ }
34
+
35
+ div.video2 {
36
+ height: 200px;
37
+ }
38
+
39
+ div.video3 {
40
+ height: 200px;
41
+ }
42
+
43
+ div.video4 {
44
+ height: 200px;
45
+ }
46
+
47
+ div.stat {
48
+ height: 286px;
49
+ }
50
+
51
+ div.settings-wrapper {
52
+ display: none;
53
+ }
54
+
55
+ .submit {
56
+ display: inline-block;
57
+ padding: 10px 20px;
58
+ font-size: 16px;
59
+ font-weight: bold;
60
+ text-align: center;
61
+ text-decoration: none;
62
+ cursor: pointer;
63
+ border: var(--button-border-width) solid var(--button-primary-border-color);
64
+ background: var(--button-primary-background-fill);
65
+ color: var(--button-primary-text-color);
66
+ border-radius: 8px;
67
+ transition: all 0.3s ease;
68
+ }
69
+
70
+ .submit[disabled] {
71
+ cursor: not-allowed;
72
+ opacity: 0.6;
73
+ }
74
+
75
+ .submit:hover:not([disabled]) {
76
+ border-color: var(--button-primary-border-color-hover);
77
+ background: var(--button-primary-background-fill-hover);
78
+ color: var(--button-primary-text-color-hover);
79
+ }
80
+
81
+ .clear {
82
+ display: inline-block;
83
+ padding: 10px 20px;
84
+ font-size: 16px;
85
+ font-weight: bold;
86
+ text-align: center;
87
+ text-decoration: none;
88
+ cursor: pointer;
89
+ border-radius: 8px;
90
+ transition: all 0.3s ease;
91
+ }
92
+
93
+ .clear[disabled] {
94
+ cursor: not-allowed;
95
+ opacity: 0.6;
96
+ }
97
+
98
+ .submit:active:not([disabled]), .clear:active:not([disabled]) {
99
+ transform: scale(0.98);
100
+ }
app.py ADDED
@@ -0,0 +1,131 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ File: app.py
3
+ Author: Elena Ryumina and Dmitry Ryumin
4
+ Description: Description: Main application file for Facial_Expression_Recognition.
5
+ The file defines the Gradio interface, sets up the main blocks,
6
+ and includes event handlers for various components.
7
+ License: MIT License
8
+ """
9
+
10
+ import gradio as gr
11
+
12
+ # Importing necessary components for the Gradio app
13
+ from app.description import DESCRIPTION_STATIC, DESCRIPTION_DYNAMIC
14
+ from app.authors import AUTHORS
15
+ from app.app_utils import preprocess_image_and_predict, preprocess_video_and_predict
16
+
17
+
18
+ def clear_static_info():
19
+ return (
20
+ gr.Image(value=None, type="pil"),
21
+ gr.Image(value=None, scale=1, elem_classes="dl5"),
22
+ gr.Image(value=None, scale=1, elem_classes="dl2"),
23
+ gr.Label(value=None, num_top_classes=3, scale=1, elem_classes="dl3"),
24
+ )
25
+
26
+ def clear_dynamic_info():
27
+ return (
28
+ gr.Video(value=None),
29
+ gr.Video(value=None),
30
+ gr.Video(value=None),
31
+ gr.Video(value=None),
32
+ gr.Plot(value=None),
33
+ )
34
+
35
+ with gr.Blocks(css="app.css") as demo:
36
+ with gr.Tab("Dynamic App"):
37
+ gr.Markdown(value=DESCRIPTION_DYNAMIC)
38
+ with gr.Row():
39
+ with gr.Column(scale=2):
40
+ input_video = gr.Video(elem_classes="video1")
41
+ with gr.Row():
42
+ clear_btn_dynamic = gr.Button(
43
+ value="Clear", interactive=True, scale=1
44
+ )
45
+ submit_dynamic = gr.Button(
46
+ value="Submit", interactive=True, scale=1, elem_classes="submit"
47
+ )
48
+ with gr.Column(scale=2, elem_classes="dl4"):
49
+ with gr.Row():
50
+ output_video = gr.Video(label="Original video", scale=1, elem_classes="video2")
51
+ output_face = gr.Video(label="Pre-processed video", scale=1, elem_classes="video3")
52
+ output_heatmaps = gr.Video(label="Heatmaps", scale=1, elem_classes="video4")
53
+ output_statistics = gr.Plot(label="Statistics of emotions", elem_classes="stat")
54
+ gr.Examples(
55
+ ["videos/video1.mp4",
56
+ "videos/video2.mp4",
57
+ ],
58
+ [input_video],
59
+ )
60
+
61
+ with gr.Tab("Static App"):
62
+ gr.Markdown(value=DESCRIPTION_STATIC)
63
+ with gr.Row():
64
+ with gr.Column(scale=2, elem_classes="dl1"):
65
+ input_image = gr.Image(label="Original image", type="pil")
66
+ with gr.Row():
67
+ clear_btn = gr.Button(
68
+ value="Clear", interactive=True, scale=1, elem_classes="clear"
69
+ )
70
+ submit = gr.Button(
71
+ value="Submit", interactive=True, scale=1, elem_classes="submit"
72
+ )
73
+ with gr.Column(scale=1, elem_classes="dl4"):
74
+ with gr.Row():
75
+ output_image = gr.Image(label="Face", scale=1, elem_classes="dl5")
76
+ output_heatmap = gr.Image(label="Heatmap", scale=1, elem_classes="dl2")
77
+ output_label = gr.Label(num_top_classes=3, scale=1, elem_classes="dl3")
78
+ gr.Examples(
79
+ [
80
+ "images/fig7.jpg",
81
+ "images/fig1.jpg",
82
+ "images/fig2.jpg",
83
+ "images/fig3.jpg",
84
+ "images/fig4.jpg",
85
+ "images/fig5.jpg",
86
+ "images/fig6.jpg",
87
+ ],
88
+ [input_image],
89
+ )
90
+ with gr.Tab("Authors"):
91
+ gr.Markdown(value=AUTHORS)
92
+
93
+ submit.click(
94
+ fn=preprocess_image_and_predict,
95
+ inputs=[input_image],
96
+ outputs=[output_image, output_heatmap, output_label],
97
+ queue=True,
98
+ )
99
+ clear_btn.click(
100
+ fn=clear_static_info,
101
+ inputs=[],
102
+ outputs=[input_image, output_image, output_heatmap, output_label],
103
+ queue=True,
104
+ )
105
+
106
+ submit_dynamic.click(
107
+ fn=preprocess_video_and_predict,
108
+ inputs=input_video,
109
+ outputs=[
110
+ output_video,
111
+ output_face,
112
+ output_heatmaps,
113
+ output_statistics
114
+ ],
115
+ queue=True,
116
+ )
117
+ clear_btn_dynamic.click(
118
+ fn=clear_dynamic_info,
119
+ inputs=[],
120
+ outputs=[
121
+ input_video,
122
+ output_video,
123
+ output_face,
124
+ output_heatmaps,
125
+ output_statistics
126
+ ],
127
+ queue=True,
128
+ )
129
+
130
+ if __name__ == "__main__":
131
+ demo.queue(api_open=False).launch(share=False)
config.toml ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ APP_VERSION = "0.2.0"
2
+ FRAME_DOWNSAMPLING = 5
3
+
4
+ [model_static]
5
+ url = "https://huggingface.co/ElenaRyumina/face_emotion_recognition/resolve/main/FER_static_ResNet50_AffectNet.pt"
6
+ path = "FER_static_ResNet50_AffectNet.pt"
7
+
8
+ [model_dynamic]
9
+ url = "https://huggingface.co/ElenaRyumina/face_emotion_recognition/resolve/main/FER_dinamic_LSTM_IEMOCAP.pt"
10
+ path = "FER_dinamic_LSTM_IEMOCAP.pt"
flake8 ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ ; https://www.flake8rules.com/
2
+
3
+ [flake8]
4
+ max-line-length = 120
5
+ ignore = E203, E402, E741, W503
gitattributes ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
gitignore ADDED
@@ -0,0 +1,172 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Compiled source #
2
+ ###################
3
+ *.com
4
+ *.class
5
+ *.dll
6
+ *.exe
7
+ *.o
8
+ *.so
9
+ *.pyc
10
+
11
+ # Packages #
12
+ ############
13
+ # it's better to unpack these files and commit the raw source
14
+ # git has its own built in compression methods
15
+ *.7z
16
+ *.dmg
17
+ *.gz
18
+ *.iso
19
+ *.rar
20
+ #*.tar
21
+ *.zip
22
+
23
+ # Logs and databases #
24
+ ######################
25
+ *.log
26
+ *.sqlite
27
+
28
+ # OS generated files #
29
+ ######################
30
+ .DS_Store
31
+ ehthumbs.db
32
+ Icon
33
+ Thumbs.db
34
+ .tmtags
35
+ .idea
36
+ .vscode
37
+ tags
38
+ vendor.tags
39
+ tmtagsHistory
40
+ *.sublime-project
41
+ *.sublime-workspace
42
+ .bundle
43
+
44
+ # Byte-compiled / optimized / DLL files
45
+ __pycache__/
46
+ *.py[cod]
47
+ *$py.class
48
+
49
+ # C extensions
50
+ *.so
51
+
52
+ # Distribution / packaging
53
+ .Python
54
+ build/
55
+ develop-eggs/
56
+ dist/
57
+ downloads/
58
+ eggs/
59
+ .eggs/
60
+ lib/
61
+ lib64/
62
+ parts/
63
+ sdist/
64
+ var/
65
+ wheels/
66
+ pip-wheel-metadata/
67
+ share/python-wheels/
68
+ *.egg-info/
69
+ .installed.cfg
70
+ *.egg
71
+ MANIFEST
72
+ node_modules/
73
+
74
+ # PyInstaller
75
+ # Usually these files are written by a python script from a template
76
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
77
+ *.manifest
78
+ *.spec
79
+
80
+ # Installer logs
81
+ pip-log.txt
82
+ pip-delete-this-directory.txt
83
+
84
+ # Unit test / coverage reports
85
+ htmlcov/
86
+ .tox/
87
+ .nox/
88
+ .coverage
89
+ .coverage.*
90
+ .cache
91
+ nosetests.xml
92
+ coverage.xml
93
+ *.cover
94
+ .hypothesis/
95
+ .pytest_cache/
96
+
97
+ # Translations
98
+ *.mo
99
+ *.pot
100
+
101
+ # Django stuff:
102
+ *.log
103
+ local_settings.py
104
+ db.sqlite3
105
+ db.sqlite3-journal
106
+
107
+ # Flask stuff:
108
+ instance/
109
+ .webassets-cache
110
+
111
+ # Scrapy stuff:
112
+ .scrapy
113
+
114
+ # Sphinx documentation
115
+ docs/_build/
116
+
117
+ # PyBuilder
118
+ target/
119
+
120
+ # Jupyter Notebook
121
+ .ipynb_checkpoints
122
+
123
+ # IPython
124
+ profile_default/
125
+ ipython_config.py
126
+
127
+ # pyenv
128
+ .python-version
129
+
130
+ # pipenv
131
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
132
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
133
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
134
+ # install all needed dependencies.
135
+ #Pipfile.lock
136
+
137
+ # celery beat schedule file
138
+ celerybeat-schedule
139
+
140
+ # SageMath parsed files
141
+ *.sage.py
142
+
143
+ # Environments
144
+ .env
145
+ .venv
146
+ env/
147
+ venv/
148
+ ENV/
149
+ env.bak/
150
+ venv.bak/
151
+
152
+ # Spyder project settings
153
+ .spyderproject
154
+ .spyproject
155
+
156
+ # Rope project settings
157
+ .ropeproject
158
+
159
+ # mkdocs documentation
160
+ /site
161
+
162
+ # mypy
163
+ .mypy_cache/
164
+ .dmypy.json
165
+ dmypy.json
166
+
167
+ # Pyre type checker
168
+ .pyre/
169
+
170
+ # Custom
171
+ *.pth
172
+ *.pt
requirements.txt ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ gradio==4.24.0
2
+ requests==2.31.0
3
+ torch==2.1.2
4
+ torchaudio==2.1.2
5
+ torchvision==0.16.2
6
+ mediapipe==0.10.9
7
+ pillow==10.2.0
8
+ toml==0.10.
9
+ grad-cam==1.5.0