thanhnv2323 commited on
Commit
dbe148f
1 Parent(s): e11a2b4

feat: update new file

Browse files
Files changed (6) hide show
  1. .gitattributes +1 -0
  2. .gitignore +163 -0
  3. app.py +59 -0
  4. best_300.pt +0 -0
  5. predict.py +31 -0
  6. requirements.txt +6 -0
.gitattributes CHANGED
@@ -32,3 +32,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
32
  *.zip filter=lfs diff=lfs merge=lfs -text
33
  *.zst filter=lfs diff=lfs merge=lfs -text
34
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
32
  *.zip filter=lfs diff=lfs merge=lfs -text
33
  *.zst filter=lfs diff=lfs merge=lfs -text
34
  *tfevents* filter=lfs diff=lfs merge=lfs -text
35
+ best_300.pt filter=lfs diff=lfs merge=lfs -text
.gitignore ADDED
@@ -0,0 +1,163 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ # Usually these files are written by a python script from a template
31
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py,cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+ cover/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ .pybuilder/
76
+ target/
77
+
78
+ # Jupyter Notebook
79
+ .ipynb_checkpoints
80
+
81
+ # IPython
82
+ profile_default/
83
+ ipython_config.py
84
+
85
+ # pyenv
86
+ # For a library or package, you might want to ignore these files since the code is
87
+ # intended to run in multiple environments; otherwise, check them in:
88
+ # .python-version
89
+
90
+ # pipenv
91
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
+ # install all needed dependencies.
95
+ #Pipfile.lock
96
+
97
+ # poetry
98
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
99
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
100
+ # commonly ignored for libraries.
101
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
102
+ #poetry.lock
103
+
104
+ # pdm
105
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
106
+ #pdm.lock
107
+ # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
108
+ # in version control.
109
+ # https://pdm.fming.dev/#use-with-ide
110
+ .pdm.toml
111
+
112
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
113
+ __pypackages__/
114
+
115
+ # Celery stuff
116
+ celerybeat-schedule
117
+ celerybeat.pid
118
+
119
+ # SageMath parsed files
120
+ *.sage.py
121
+
122
+ # Environments
123
+ .env
124
+ .venv
125
+ env/
126
+ venv/
127
+ ENV/
128
+ env.bak/
129
+ venv.bak/
130
+
131
+ # Spyder project settings
132
+ .spyderproject
133
+ .spyproject
134
+
135
+ # Rope project settings
136
+ .ropeproject
137
+
138
+ # mkdocs documentation
139
+ /site
140
+
141
+ # mypy
142
+ .mypy_cache/
143
+ .dmypy.json
144
+ dmypy.json
145
+
146
+ # Pyre type checker
147
+ .pyre/
148
+
149
+ # pytype static type analyzer
150
+ .pytype/
151
+
152
+ # Cython debug symbols
153
+ cython_debug/
154
+
155
+ # PyCharm
156
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
157
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
158
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
159
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
160
+ .idea/
161
+
162
+ pCard3
163
+ playing_card
app.py ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import io
3
+ from PIL import Image
4
+ from flask import Flask, request
5
+ from ultralytics import YOLO
6
+
7
+ app = Flask(__name__)
8
+ model = YOLO('best_300.pt')
9
+
10
+
11
+ @app.route("/", methods=["POST", "GET"])
12
+ def hello():
13
+ return {
14
+ "hello": "2"
15
+ }
16
+
17
+
18
+ @app.route("/detect", methods=["POST"])
19
+ def predict():
20
+ if not request.method == "POST":
21
+ return
22
+
23
+ if request.files.get("image"):
24
+ image_file = request.files["image"]
25
+ image_bytes = image_file.read()
26
+
27
+ conf = float(request.form.get("conf") or 0.45)
28
+ if conf > 1 or conf < 0:
29
+ conf = 0.5
30
+ img = Image.open(io.BytesIO(image_bytes))
31
+ results = model.predict(source=img, conf=conf)
32
+ _boxes = []
33
+ for result in results:
34
+ r = result.numpy()
35
+ names = r.names
36
+ boxes = r.boxes
37
+ for box in boxes:
38
+ b = box.xywh[0].tolist() # get box coordinates in (top, left, bottom, right) format
39
+ c = int(box.cls[0])
40
+ cf = float(box.conf[0])
41
+ n = names[c]
42
+ _boxes.append({
43
+ "label": c,
44
+ 'name': n,
45
+ 'probability': cf,
46
+ 'bounding': b
47
+
48
+ })
49
+ results_json = {
50
+ "boxes": _boxes,
51
+ "total": len(_boxes)
52
+ }
53
+ return results_json
54
+
55
+
56
+ # ngrok_tunnel = ngrok.connect(8000)
57
+ # print('Public URL:', ngrok_tunnel.public_url)
58
+ # nest_asyncio.apply()
59
+ app.run(host="0.0.0.0", port=8000)
best_300.pt ADDED
File without changes
predict.py ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+
3
+ from ultralytics import YOLO
4
+
5
+ # Load a model
6
+ model = YOLO('best_300.pt') # load an official model
7
+ # model = YOLO('path/to/best_300.pt') # load a custom model
8
+
9
+ # Predict with the model
10
+ # results = model.predict(source='pCard3', save=True, save_txt=True,project="playing_card",name="predict")
11
+ _boxes = []
12
+ results = model.predict(source='pCard3/1.jpg', save=True, save_txt=True, project="playing_card", name="predict")
13
+ # results = model('https://cdn.britannica.com/23/194523-050-E6C02DBE/selection-American-playing-cards-jack-queen-ace.jpg')
14
+ for result in results:
15
+ r = result.numpy()
16
+ names = r.names
17
+ boxes = r.boxes
18
+ for box in boxes:
19
+ b = box.xywh[0].tolist() # get box coordinates in (top, left, bottom, right) format
20
+ c = int(box.cls[0])
21
+ cf = float(box.conf[0])
22
+ n = names[c]
23
+ _boxes.append({
24
+ "label": c,
25
+ 'name': n,
26
+ 'probability': cf,
27
+ 'bounding': b
28
+
29
+ })
30
+ j = json.dumps(_boxes)
31
+ print(_boxes)
requirements.txt ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ urllib3==1.26.15
2
+ ultralytics
3
+ flask
4
+ Pillow
5
+ image
6
+ gradio