From 66f507efa900297b65d147311850233cbf93a284 Mon Sep 17 00:00:00 2001 From: Sarah G Date: Fri, 9 Jun 2023 10:15:04 +0200 Subject: [PATCH 01/14] Update model to new pytorch version and use 12 classes --- backend/Dockerfile | 5 ++--- backend/requirements.txt | 5 +++-- backend/src/model.py | 15 ++++++++++++--- frontend/src/utils/firearms-utils.js | 20 ++++++++++++++++---- 4 files changed, 33 insertions(+), 12 deletions(-) diff --git a/backend/Dockerfile b/backend/Dockerfile index 2057e94c..bfc0e905 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -17,13 +17,12 @@ RUN apt update && apt install -y \ COPY requirements.txt ./ ENV PIP_CERT=$CACERT_LOCATION RUN pip install --upgrade pip \ - && pip --default-timeout=300 install --no-cache-dir -f \ - https://download.pytorch.org/whl/cpu/torch_stable.html -r requirements.txt \ + && pip --default-timeout=300 install --no-cache-dir -r requirements.txt \ && rm -r /root/.cache # launch website ARG VERSION -ARG MODEL="EffB4_2022-03-02_08" +ARG MODEL="EffB4_2023-02-28_16" ENV SSL_CERT_FILE=$CACERT_LOCATION RUN curl -o model.pth https://storage.gra.cloud.ovh.net/v1/AUTH_df731a99a3264215b973b3dee70a57af/basegun-public/models/${MODEL}/${MODEL}.pth COPY src/ src/ diff --git a/backend/requirements.txt b/backend/requirements.txt index ba804f3f..38e4f9a5 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -1,7 +1,8 @@ +--extra-index-url https://download.pytorch.org/whl/cpu fastapi==0.68.0 uvicorn==0.14.0 -torch==1.10.2 -torchvision==0.11.3 +torch==1.11.0+cpu +torchvision==0.12.0+cpu python-multipart>=0.0.5 gelf-formatter==0.2.1 pyyaml>=5.4.1 diff --git a/backend/src/model.py b/backend/src/model.py index 6db66c61..51b8e756 100644 --- a/backend/src/model.py +++ b/backend/src/model.py @@ -7,9 +7,18 @@ from torchvision import transforms -CLASSES = ['autre_epaule', 'autre_pistolet', 'epaule_a_levier_sous_garde', - 'epaule_a_percussion_silex', 'epaule_a_pompe', 'epaule_a_un_coup', 'epaule_a_verrou', - 'pistolet_a_percussion_silex', 'pistolet_semi_auto_moderne', 'revolver'] +CLASSES = ['autre_pistolet', + 'epaule_a_pompe', + 'epaule_a_levier_sous_garde', + 'epaule_a_un_coup_par_canon', + 'epaule_a_verrou', + 'epaule_mecanisme_ancien', + 'epaule_semi_auto_style_chasse', + 'epaule_semi_auto_style_militaire_milieu_20e', + 'pistolet_mecanisme_ancien', + 'pistolet_semi_auto_moderne', + 'revolver', + 'semi_auto_style_militaire_autre'] MODEL_TORCH = Model.efficientnet_b4 INPUT_SIZE = 380 diff --git a/frontend/src/utils/firearms-utils.js b/frontend/src/utils/firearms-utils.js index 40655b0e..85d4be4e 100644 --- a/frontend/src/utils/firearms-utils.js +++ b/frontend/src/utils/firearms-utils.js @@ -34,13 +34,13 @@ export const results = { stepsNumber: 4, }, pistolet_semi_auto_moderne: { - displayLabel: 'pistolet semi-automatique moderne', + displayLabel: 'pistolet semi-automatique', category: 'B', mention: 'Soumise à autorisation', isDummyTypology: true, stepsNumber: 4, }, - pistolet_a_percussion_silex: { + pistolet_a_mecanisme_ancien: { displayLabel: 'pistolet à mécanisme ancien', category: 'D', mention: "Libre d'acquisition et de détention", @@ -52,7 +52,7 @@ export const results = { mention: "A - Interdite
B - Soumise à autorisation
D - Libre d'acquisition et de détention", isDummyTypology: false, }, - epaule_a_percussion_silex: { + epaule_a_mecanisme_ancien: { displayLabel: "arme d'épaule à mécanisme ancien", category: 'D', mention: "Libre d'acquisition et de détention", @@ -83,13 +83,25 @@ export const results = { mention: 'B - Soumise à autorisation
C - Soumise à déclaration', isDummyTypology: false, }, - autre_epaule: { + semi_auto_style_militaire_autre: { displayLabel: "arme d'épaule non manuelle", category: 'A, B ou C', mention: 'A - Interdite
B - Soumise à autorisation
C - Soumise à déclaration', isDummyTypology: true, stepsNumber: 4, }, + epaule_semi_auto_style_chasse: { + displayLabel: "arme d'épaule non manuelle", + category: 'B ou C', + mention: 'B - Soumise à autorisation
C - Soumise à déclaration', + isDummyTypology: false, + }, + epaule_semi_auto_style_militaire_milieu_20e: { + displayLabel: "arme d'épaule non manuelle", + category: 'A, B ou C', + mention: 'A - Interdite
B - Soumise à autorisation
C - Soumise à déclaration', + isDummyTypology: false, + }, } export const guideFacticeSelectOption = { From 114dd4a53b0cf0f4d4a965328e3580c0c82abad1 Mon Sep 17 00:00:00 2001 From: Sarah G Date: Fri, 9 Jun 2023 10:15:04 +0200 Subject: [PATCH 02/14] Update model to new pytorch version and use 12 classes --- backend/Dockerfile | 5 ++--- backend/requirements.txt | 5 +++-- backend/src/model.py | 15 ++++++++++++--- frontend/src/utils/firearms-utils.js | 20 ++++++++++++++++---- 4 files changed, 33 insertions(+), 12 deletions(-) diff --git a/backend/Dockerfile b/backend/Dockerfile index 2057e94c..bfc0e905 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -17,13 +17,12 @@ RUN apt update && apt install -y \ COPY requirements.txt ./ ENV PIP_CERT=$CACERT_LOCATION RUN pip install --upgrade pip \ - && pip --default-timeout=300 install --no-cache-dir -f \ - https://download.pytorch.org/whl/cpu/torch_stable.html -r requirements.txt \ + && pip --default-timeout=300 install --no-cache-dir -r requirements.txt \ && rm -r /root/.cache # launch website ARG VERSION -ARG MODEL="EffB4_2022-03-02_08" +ARG MODEL="EffB4_2023-02-28_16" ENV SSL_CERT_FILE=$CACERT_LOCATION RUN curl -o model.pth https://storage.gra.cloud.ovh.net/v1/AUTH_df731a99a3264215b973b3dee70a57af/basegun-public/models/${MODEL}/${MODEL}.pth COPY src/ src/ diff --git a/backend/requirements.txt b/backend/requirements.txt index ba804f3f..38e4f9a5 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -1,7 +1,8 @@ +--extra-index-url https://download.pytorch.org/whl/cpu fastapi==0.68.0 uvicorn==0.14.0 -torch==1.10.2 -torchvision==0.11.3 +torch==1.11.0+cpu +torchvision==0.12.0+cpu python-multipart>=0.0.5 gelf-formatter==0.2.1 pyyaml>=5.4.1 diff --git a/backend/src/model.py b/backend/src/model.py index 6db66c61..51b8e756 100644 --- a/backend/src/model.py +++ b/backend/src/model.py @@ -7,9 +7,18 @@ from torchvision import transforms -CLASSES = ['autre_epaule', 'autre_pistolet', 'epaule_a_levier_sous_garde', - 'epaule_a_percussion_silex', 'epaule_a_pompe', 'epaule_a_un_coup', 'epaule_a_verrou', - 'pistolet_a_percussion_silex', 'pistolet_semi_auto_moderne', 'revolver'] +CLASSES = ['autre_pistolet', + 'epaule_a_pompe', + 'epaule_a_levier_sous_garde', + 'epaule_a_un_coup_par_canon', + 'epaule_a_verrou', + 'epaule_mecanisme_ancien', + 'epaule_semi_auto_style_chasse', + 'epaule_semi_auto_style_militaire_milieu_20e', + 'pistolet_mecanisme_ancien', + 'pistolet_semi_auto_moderne', + 'revolver', + 'semi_auto_style_militaire_autre'] MODEL_TORCH = Model.efficientnet_b4 INPUT_SIZE = 380 diff --git a/frontend/src/utils/firearms-utils.js b/frontend/src/utils/firearms-utils.js index 40655b0e..85d4be4e 100644 --- a/frontend/src/utils/firearms-utils.js +++ b/frontend/src/utils/firearms-utils.js @@ -34,13 +34,13 @@ export const results = { stepsNumber: 4, }, pistolet_semi_auto_moderne: { - displayLabel: 'pistolet semi-automatique moderne', + displayLabel: 'pistolet semi-automatique', category: 'B', mention: 'Soumise à autorisation', isDummyTypology: true, stepsNumber: 4, }, - pistolet_a_percussion_silex: { + pistolet_a_mecanisme_ancien: { displayLabel: 'pistolet à mécanisme ancien', category: 'D', mention: "Libre d'acquisition et de détention", @@ -52,7 +52,7 @@ export const results = { mention: "A - Interdite
B - Soumise à autorisation
D - Libre d'acquisition et de détention", isDummyTypology: false, }, - epaule_a_percussion_silex: { + epaule_a_mecanisme_ancien: { displayLabel: "arme d'épaule à mécanisme ancien", category: 'D', mention: "Libre d'acquisition et de détention", @@ -83,13 +83,25 @@ export const results = { mention: 'B - Soumise à autorisation
C - Soumise à déclaration', isDummyTypology: false, }, - autre_epaule: { + semi_auto_style_militaire_autre: { displayLabel: "arme d'épaule non manuelle", category: 'A, B ou C', mention: 'A - Interdite
B - Soumise à autorisation
C - Soumise à déclaration', isDummyTypology: true, stepsNumber: 4, }, + epaule_semi_auto_style_chasse: { + displayLabel: "arme d'épaule non manuelle", + category: 'B ou C', + mention: 'B - Soumise à autorisation
C - Soumise à déclaration', + isDummyTypology: false, + }, + epaule_semi_auto_style_militaire_milieu_20e: { + displayLabel: "arme d'épaule non manuelle", + category: 'A, B ou C', + mention: 'A - Interdite
B - Soumise à autorisation
C - Soumise à déclaration', + isDummyTypology: false, + }, } export const guideFacticeSelectOption = { From 5825861617ce6fd1e8c4036709f4db913d25c348 Mon Sep 17 00:00:00 2001 From: Sarah C Date: Fri, 9 Jun 2023 14:19:26 +0200 Subject: [PATCH 03/14] Edit typo names to fit for 12 classes --- frontend/src/utils/firearms-utils.js | 90 ++++++++++++++-------------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/frontend/src/utils/firearms-utils.js b/frontend/src/utils/firearms-utils.js index 85d4be4e..ae0c0334 100644 --- a/frontend/src/utils/firearms-utils.js +++ b/frontend/src/utils/firearms-utils.js @@ -26,50 +26,30 @@ import autreEpauleCartridges from '@/assets/guide-factice/images/autre_epaule/au import autreEpauleBalls from '@/assets/guide-factice/images/autre_epaule/autre-epaule-balls.jpg' export const results = { - revolver: { - displayLabel: 'revolver', - category: 'B ou D', - mention: "B - Soumise à autorisation
D - Libre d'acquisition et de détention", - isDummyTypology: true, - stepsNumber: 4, - }, - pistolet_semi_auto_moderne: { - displayLabel: 'pistolet semi-automatique', - category: 'B', - mention: 'Soumise à autorisation', - isDummyTypology: true, - stepsNumber: 4, - }, - pistolet_a_mecanisme_ancien: { - displayLabel: 'pistolet à mécanisme ancien', - category: 'D', - mention: "Libre d'acquisition et de détention", - isDummyTypology: false, - }, autre_pistolet: { displayLabel: 'pistolet divers', category: 'A, B ou D', mention: "A - Interdite
B - Soumise à autorisation
D - Libre d'acquisition et de détention", isDummyTypology: false, }, - epaule_a_mecanisme_ancien: { - displayLabel: "arme d'épaule à mécanisme ancien", - category: 'D', - mention: "Libre d'acquisition et de détention", + epaule_a_levier_sous_garde: { + displayLabel: "arme d'épaule à levier de sous-garde", + category: 'B ou C', + mention: 'B - Soumise à autorisation
C - Soumise à déclaration', + isDummyTypology: false, + }, + epaule_a_pompe: { + displayLabel: "arme d'épaule à pompe", + category: 'B ou C', + mention: 'B - Soumise à autorisation
C - Soumise à déclaration', isDummyTypology: false, }, epaule_a_un_coup: { - displayLabel: "arme d'épaule à un coup par canon", + displayLabel: "arme d'épaule à un coup ou un coup par canon", category: 'C', mention: 'Soumise à déclaration', isDummyTypology: false, }, - epaule_a_levier_sous_garde: { - displayLabel: "arme d'épaule à levier de sous-garde", - category: 'B ou C', - mention: 'B - Soumise à autorisation
C - Soumise à déclaration', - isDummyTypology: false, - }, epaule_a_verrou: { displayLabel: "arme d'épaule à verrou", category: 'B ou C', @@ -77,30 +57,50 @@ export const results = { isDummyTypology: false, stepsNumber: 4, }, - epaule_a_pompe: { - displayLabel: "arme d'épaule à pompe", + epaule_mecanisme_ancien: { + displayLabel: "arme d'épaule à mécanisme ancien", + category: 'D', + mention: "Libre d'acquisition et de détention", + isDummyTypology: false, + }, + epaule_semi_auto_style_chasse: { + displayLabel: "arme d'épaule semi-automatique", category: 'B ou C', mention: 'B - Soumise à autorisation
C - Soumise à déclaration', isDummyTypology: false, }, - semi_auto_style_militaire_autre: { - displayLabel: "arme d'épaule non manuelle", + epaule_semi_auto_style_militaire_milieu_20e: { + displayLabel: "arme d'épaule semi-automatique ou automatique", category: 'A, B ou C', mention: 'A - Interdite
B - Soumise à autorisation
C - Soumise à déclaration', + isDummyTypology: false, + }, + pistolet_semi_auto_moderne: { + displayLabel: 'pistolet semi-automatique', + category: 'B', + mention: 'Soumise à autorisation', isDummyTypology: true, stepsNumber: 4, }, - epaule_semi_auto_style_chasse: { - displayLabel: "arme d'épaule non manuelle", - category: 'B ou C', - mention: 'B - Soumise à autorisation
C - Soumise à déclaration', + pistolet_mecanisme_ancien: { + displayLabel: 'pistolet à mécanisme ancien', + category: 'D', + mention: "Libre d'acquisition et de détention", isDummyTypology: false, }, - epaule_semi_auto_style_militaire_milieu_20e: { - displayLabel: "arme d'épaule non manuelle", + revolver: { + displayLabel: 'revolver', + category: 'B ou D', + mention: "B - Soumise à autorisation
D - Libre d'acquisition et de détention", + isDummyTypology: true, + stepsNumber: 4, + }, + semi_auto_style_militaire_autre: { + displayLabel: "arme semi-automatique ou automatique", category: 'A, B ou C', mention: 'A - Interdite
B - Soumise à autorisation
C - Soumise à déclaration', - isDummyTypology: false, + isDummyTypology: true, + stepsNumber: 4, }, } @@ -122,8 +122,8 @@ export const guideFacticeSelectOption = { video: pistoletSemiAutoModerne2Video, }, }, - autre_epaule_text_option: 'Sélectionner ce que vous voyez sur l’arme', - autre_epaule: { + semi_auto_style_militaire_autre_text_option: 'Sélectionner ce que vous voyez sur l’arme', + semi_auto_style_militaire_autre: { bouton_dessus: { label: 'bouton au-dessus chargeur', value: 'bouton_dessus', @@ -198,7 +198,7 @@ export const guideFacticeSelectAmmo = { img_ammo: pistoletSemiAutoModerneBalls, }, }, - autre_epaule: { + semi_auto_style_militaire_autre: { cartouches: { label: 'cartouches', value: 'cartouches', From 98f35ea01198429bfd02cbec65f21ea2323437a4 Mon Sep 17 00:00:00 2001 From: Sarah G Date: Fri, 9 Jun 2023 16:30:42 +0200 Subject: [PATCH 04/14] Fix tests for new model --- backend/tests/test_api.py | 4 ++-- backend/tests/test_model.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/tests/test_api.py b/backend/tests/test_api.py index 4ba5c4b5..580a1118 100644 --- a/backend/tests/test_api.py +++ b/backend/tests/test_api.py @@ -48,7 +48,7 @@ def test_upload_and_logs(self): # checks that the json result is as expected self.assertEqual(res["label"], "revolver") - self.assertAlmostEqual(res["confidence"], 99.53, places=1) + self.assertAlmostEqual(res["confidence"], 99.67, places=1) self.assertTrue(res["confidence_level"], "high") self.assertTrue("ovh" in res["path"]) # checks that written file is exactly the same as input file @@ -72,7 +72,7 @@ def test_upload_and_logs(self): self.assertTrue("-" in log["_bg_user_id"]) self.assertEqual(log["_bg_geolocation"], geoloc) self.assertEqual(log["_bg_label"], "revolver") - self.assertAlmostEqual(log["_bg_confidence"], 99.53, places=1) + self.assertAlmostEqual(log["_bg_confidence"], 99.67, places=1) self.assertTrue(log["_bg_upload_time"]>=0) def test_feedback_and_logs(self): diff --git a/backend/tests/test_model.py b/backend/tests/test_model.py index 9cbd5d0f..149bae48 100644 --- a/backend/tests/test_model.py +++ b/backend/tests/test_model.py @@ -51,4 +51,4 @@ def test_predict_image(self): with open(path, 'rb') as f: res = predict_image(self.model, f.read()) self.assertEqual(res[0], "revolver") - self.assertAlmostEqual(res[1], 99.53, places=1) + self.assertAlmostEqual(res[1], 99.67, places=1) From 58c3cfbf0af1f8777d3e40cb2138b1b2c3009946 Mon Sep 17 00:00:00 2001 From: Sarah G Date: Fri, 9 Jun 2023 17:27:57 +0200 Subject: [PATCH 05/14] Change preprod machine for performance test --- .github/workflows/preprod.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/preprod.yml b/.github/workflows/preprod.yml index 7c54377c..edae5137 100644 --- a/.github/workflows/preprod.yml +++ b/.github/workflows/preprod.yml @@ -48,7 +48,7 @@ jobs: image_version: "develop" branch: ${{ github.ref_name }} volume_size: 10 - flavor: "s1-2" + flavor: "b2-7" workspace: "preprod" secrets: API_OVH_TOKEN: ${{ secrets.API_OVH_TOKEN }} From cfecff7a590c9a59b96aa5ff9b7b0bd00b5aa61c Mon Sep 17 00:00:00 2001 From: Sarah C Date: Wed, 21 Jun 2023 09:16:03 +0200 Subject: [PATCH 06/14] Update name typo epaule_a_un_coup_par_canon --- frontend/src/utils/firearms-utils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/utils/firearms-utils.js b/frontend/src/utils/firearms-utils.js index 0844f8c4..3501480d 100644 --- a/frontend/src/utils/firearms-utils.js +++ b/frontend/src/utils/firearms-utils.js @@ -44,7 +44,7 @@ export const results = { mention: 'B - Soumise à autorisation
C - Soumise à déclaration', isDummyTypology: false, }, - epaule_a_un_coup: { + epaule_a_un_coup_par_canon: { displayLabel: "arme d'épaule à un coup ou un coup par canon", category: 'C', mention: 'Soumise à déclaration', From ae1873a3e684c0684d57b85a4429eb30a9962fce Mon Sep 17 00:00:00 2001 From: Sarah C Date: Wed, 21 Jun 2023 09:17:22 +0200 Subject: [PATCH 07/14] Update model to B6 --- backend/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/Dockerfile b/backend/Dockerfile index bfc0e905..387d095f 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -22,7 +22,7 @@ RUN pip install --upgrade pip \ # launch website ARG VERSION -ARG MODEL="EffB4_2023-02-28_16" +ARG MODEL="EffB6_2023-03-03_15" ENV SSL_CERT_FILE=$CACERT_LOCATION RUN curl -o model.pth https://storage.gra.cloud.ovh.net/v1/AUTH_df731a99a3264215b973b3dee70a57af/basegun-public/models/${MODEL}/${MODEL}.pth COPY src/ src/ @@ -39,4 +39,4 @@ COPY tests/ tests/ CMD ["uvicorn", "src.main:app", "--reload", "--host", "0.0.0.0", "--port", "5000"] FROM base as prod -CMD ["uvicorn", "src.main:app", "--host", "0.0.0.0", "--port", "5000"] \ No newline at end of file +CMD ["uvicorn", "src.main:app", "--host", "0.0.0.0", "--port", "5000"] From 63d52099c718cce111bfd1dfa71f8c2d693b7dda Mon Sep 17 00:00:00 2001 From: Sarah C Date: Wed, 21 Jun 2023 09:18:38 +0200 Subject: [PATCH 08/14] Update model to B6 --- backend/src/model.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/src/model.py b/backend/src/model.py index 51b8e756..96a83e12 100644 --- a/backend/src/model.py +++ b/backend/src/model.py @@ -20,8 +20,8 @@ 'revolver', 'semi_auto_style_militaire_autre'] -MODEL_TORCH = Model.efficientnet_b4 -INPUT_SIZE = 380 +MODEL_TORCH = Model.efficientnet_b6 +INPUT_SIZE = 528 device = torch.device('cpu') From 24bc388f5ec708685f17ad87211f178847a8b958 Mon Sep 17 00:00:00 2001 From: Sarah C Date: Wed, 21 Jun 2023 11:52:11 +0200 Subject: [PATCH 09/14] Update Dockerfile --- backend/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/Dockerfile b/backend/Dockerfile index 387d095f..1cef39f8 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -22,7 +22,7 @@ RUN pip install --upgrade pip \ # launch website ARG VERSION -ARG MODEL="EffB6_2023-03-03_15" +ARG MODEL="EffB7_2023-03-06_08" ENV SSL_CERT_FILE=$CACERT_LOCATION RUN curl -o model.pth https://storage.gra.cloud.ovh.net/v1/AUTH_df731a99a3264215b973b3dee70a57af/basegun-public/models/${MODEL}/${MODEL}.pth COPY src/ src/ From f9a5d0a62efd7dc8f15fe58fa342af5eb38f6cdf Mon Sep 17 00:00:00 2001 From: Sarah C Date: Wed, 21 Jun 2023 11:52:37 +0200 Subject: [PATCH 10/14] Update model to B7 --- backend/src/model.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/src/model.py b/backend/src/model.py index 96a83e12..d1e10769 100644 --- a/backend/src/model.py +++ b/backend/src/model.py @@ -20,8 +20,8 @@ 'revolver', 'semi_auto_style_militaire_autre'] -MODEL_TORCH = Model.efficientnet_b6 -INPUT_SIZE = 528 +MODEL_TORCH = Model.efficientnet_b7 +INPUT_SIZE = 600 device = torch.device('cpu') From 167d1d7ebc208502d9152843eddc6f138d1e2ebc Mon Sep 17 00:00:00 2001 From: Sarah C Date: Wed, 21 Jun 2023 14:23:14 +0200 Subject: [PATCH 11/14] Exchange labels epaule_a_pompe and epaule_a_levier_sous_garde --- backend/src/model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/model.py b/backend/src/model.py index d1e10769..496159a1 100644 --- a/backend/src/model.py +++ b/backend/src/model.py @@ -8,8 +8,8 @@ CLASSES = ['autre_pistolet', - 'epaule_a_pompe', 'epaule_a_levier_sous_garde', + 'epaule_a_pompe', 'epaule_a_un_coup_par_canon', 'epaule_a_verrou', 'epaule_mecanisme_ancien', From b9eea60d712a2a5c7bfd002092a6feb65d43ac94 Mon Sep 17 00:00:00 2001 From: Nadeige COUTHON Date: Wed, 9 Aug 2023 11:36:09 +0200 Subject: [PATCH 12/14] fix tests backend --- backend/tests/test_api.py | 4 ++-- backend/tests/test_model.py | 2 +- frontend/src/views/About.vue | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/backend/tests/test_api.py b/backend/tests/test_api.py index 580a1118..d84ec6b1 100644 --- a/backend/tests/test_api.py +++ b/backend/tests/test_api.py @@ -48,7 +48,7 @@ def test_upload_and_logs(self): # checks that the json result is as expected self.assertEqual(res["label"], "revolver") - self.assertAlmostEqual(res["confidence"], 99.67, places=1) + self.assertAlmostEqual(res["confidence"], 98.43, places=1) self.assertTrue(res["confidence_level"], "high") self.assertTrue("ovh" in res["path"]) # checks that written file is exactly the same as input file @@ -72,7 +72,7 @@ def test_upload_and_logs(self): self.assertTrue("-" in log["_bg_user_id"]) self.assertEqual(log["_bg_geolocation"], geoloc) self.assertEqual(log["_bg_label"], "revolver") - self.assertAlmostEqual(log["_bg_confidence"], 99.67, places=1) + self.assertAlmostEqual(log["_bg_confidence"], 98.43, places=1) self.assertTrue(log["_bg_upload_time"]>=0) def test_feedback_and_logs(self): diff --git a/backend/tests/test_model.py b/backend/tests/test_model.py index 149bae48..2d601cbd 100644 --- a/backend/tests/test_model.py +++ b/backend/tests/test_model.py @@ -51,4 +51,4 @@ def test_predict_image(self): with open(path, 'rb') as f: res = predict_image(self.model, f.read()) self.assertEqual(res[0], "revolver") - self.assertAlmostEqual(res[1], 99.67, places=1) + self.assertAlmostEqual(res[1], 98.43, places=1) diff --git a/frontend/src/views/About.vue b/frontend/src/views/About.vue index 68268919..3ba10fda 100644 --- a/frontend/src/views/About.vue +++ b/frontend/src/views/About.vue @@ -54,7 +54,7 @@ const imgs = ref([

A ce jour, Basegun permet de prendre en photo une arme à feu et d'obtenir un - résultat parmi 10 typologies possibles. Ce résultat donne une indication sur la ou les catégories légales + résultat parmi 12 typologies possibles. Ce résultat donne une indication sur la ou les catégories légales à laquelle l'arme appartient.

From 3d7db8c499d04c9f0aa63e855bfbcccaaf05ec37 Mon Sep 17 00:00:00 2001 From: Sarah G Date: Thu, 17 Aug 2023 09:57:07 +0200 Subject: [PATCH 13/14] Fix bug new osx cannot find package torch+cpu --- backend/Dockerfile | 14 ++++++++------ .../{requirements.txt => requirements/common.txt} | 3 --- backend/requirements/dev.txt | 3 +++ backend/requirements/prod.txt | 3 +++ 4 files changed, 14 insertions(+), 9 deletions(-) rename backend/{requirements.txt => requirements/common.txt} (62%) create mode 100644 backend/requirements/dev.txt create mode 100644 backend/requirements/prod.txt diff --git a/backend/Dockerfile b/backend/Dockerfile index 1cef39f8..d5d43aaf 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -13,14 +13,13 @@ RUN apt update && apt install -y \ gcc \ && rm -rf /var/lib/apt/lists/* -# install python libraries -COPY requirements.txt ./ +# install python libraries (except torch) +COPY requirements/ requirements/ ENV PIP_CERT=$CACERT_LOCATION -RUN pip install --upgrade pip \ - && pip --default-timeout=300 install --no-cache-dir -r requirements.txt \ +RUN pip --default-timeout=300 install --upgrade pip \ + && pip --default-timeout=300 install --no-cache-dir -r requirements/common.txt \ && rm -r /root/.cache -# launch website ARG VERSION ARG MODEL="EffB7_2023-03-06_08" ENV SSL_CERT_FILE=$CACERT_LOCATION @@ -30,13 +29,16 @@ RUN mkdir -p src/weights \ && mv model.pth src/weights/model.pth \ && echo '{"app": "'${VERSION}'", "model": "'${MODEL}'"}' > versions.json +# launch website FROM base as dev +RUN pip --default-timeout=300 install --no-cache-dir -r requirements/dev.txt CMD ["uvicorn", "src.main:app", "--reload", "--host", "0.0.0.0", "--port", "5000"] FROM base as test -RUN pip install requests && rm -r /root/.cache +RUN pip install -r requirements/dev.txt && pip install requests && rm -r /root/.cache COPY tests/ tests/ CMD ["uvicorn", "src.main:app", "--reload", "--host", "0.0.0.0", "--port", "5000"] FROM base as prod +RUN pip install --no-cache-dir -r requirements/prod.txt CMD ["uvicorn", "src.main:app", "--host", "0.0.0.0", "--port", "5000"] diff --git a/backend/requirements.txt b/backend/requirements/common.txt similarity index 62% rename from backend/requirements.txt rename to backend/requirements/common.txt index 38e4f9a5..35ee4a5e 100644 --- a/backend/requirements.txt +++ b/backend/requirements/common.txt @@ -1,8 +1,5 @@ ---extra-index-url https://download.pytorch.org/whl/cpu fastapi==0.68.0 uvicorn==0.14.0 -torch==1.11.0+cpu -torchvision==0.12.0+cpu python-multipart>=0.0.5 gelf-formatter==0.2.1 pyyaml>=5.4.1 diff --git a/backend/requirements/dev.txt b/backend/requirements/dev.txt new file mode 100644 index 00000000..3ab327fc --- /dev/null +++ b/backend/requirements/dev.txt @@ -0,0 +1,3 @@ +--extra-index-url https://download.pytorch.org/whl/cpu +torch==1.13.0 +torchvision==0.14.0 \ No newline at end of file diff --git a/backend/requirements/prod.txt b/backend/requirements/prod.txt new file mode 100644 index 00000000..8f4ca7ca --- /dev/null +++ b/backend/requirements/prod.txt @@ -0,0 +1,3 @@ +--extra-index-url https://download.pytorch.org/whl/cpu +torch==1.13.0+cpu +torchvision==0.14.0+cpu \ No newline at end of file From 6bc40cc9c80180af886136e7cfc049d005806f04 Mon Sep 17 00:00:00 2001 From: Nadeige COUTHON Date: Thu, 17 Aug 2023 10:31:05 +0200 Subject: [PATCH 14/14] fix: :white_check_mark: Fix e2e tests - add new image to disable dummy button --- frontend/cypress/e2e/get-basegun-result.cy.js | 4 ++-- frontend/cypress/images/autre-pistolet.jpg | Bin 24777 -> 61489 bytes ...pistolet-ancien-a-percussion-monocoup.jpg} | Bin 3 files changed, 2 insertions(+), 2 deletions(-) rename frontend/cypress/images/{pistolet-ancien-a-percussion-monocoup-.jpg => pistolet-ancien-a-percussion-monocoup.jpg} (100%) diff --git a/frontend/cypress/e2e/get-basegun-result.cy.js b/frontend/cypress/e2e/get-basegun-result.cy.js index e85b0585..de7f16e3 100644 --- a/frontend/cypress/e2e/get-basegun-result.cy.js +++ b/frontend/cypress/e2e/get-basegun-result.cy.js @@ -32,12 +32,12 @@ describe('Get Basegun result', () => { cy.visit('/instructions') cy.getByDataTestid('select-file').as('fileInput') cy.intercept('POST','/api/upload').as('upload') - cy.get('@fileInput').selectFile('./cypress/images/autre-pistolet.jpg', { force: true }) + cy.get('@fileInput').selectFile('./cypress/images/pistolet-ancien-a-percussion-monocoup.jpg', { force: true }) cy.wait('@upload').then(({ response }) => { expect(response.statusCode).to.eq(200) }) cy.url().should('contain','/resultat') - cy.getByDataTestid('legal-category').contains('Catégorie A, B ou D') + cy.getByDataTestid('legal-category').contains('D') cy.getByDataTestid('dummy-button') .should('be.disabled') .contains('Pas de guide de vérification') diff --git a/frontend/cypress/images/autre-pistolet.jpg b/frontend/cypress/images/autre-pistolet.jpg index e5bb32b0bc9f17d27742ff433c79661dbb4ab902..cbc0aa5450ddc3f4fb45ccbd6f1fecdd58ea8a28 100644 GIT binary patch literal 61489 zcmbTdcT^MM*De}*??ob^NFpFj5^AUc=}PZK1w!w=_ai1nC$c zq9W1-DVN`O&iT$=XWc*Uy)$dp>`dOgv!6YCX7=9C&h66eCV*B$MO_7ehldBSyjuac zTL83jfTJA%ps5Mq0{{S|0DL@p0KuJvceeswIRXg(O9lYA@Ad!yVG02N|8CECw^^hR z{fRhD;sxfTOp*o>*D|`kH=6U;l}_O`2Y_qq_eFLr?suUqnj+xLB}T^PDdMA9%C_0 zVNH)GwhoSJL0-1{L0SgLAZH}phDTnGid-f@D!|pl)z-&~Gr-lw&08u!mg~P}m%5Yx zbNDfroQ#)^os^!E%Ksd3_eqxPf9m4z?=R#pBINF6{}>8~!ygO79>ZXQcOwM71KoVA z0tDT>!T)mtC0lQ#m!pS|qq`gDe3h7G{xQd?jT7$@v^n@u~oX;a*DeF&9ry!O+bK8NI*nHc<0!7p?BW{2yo8X23Injvj$?d%;KoxFW~{rm$0gQ8<%<6gxlB&MdNXJo#~%FcOTR9sS8R$fur z(Ad=6(%RPkv9Et%aAu# zG1W>5r%UPHFtJ&gmri!G3z|Iyp&jAX+U{jtRspa3m$efL0^IhIXuDfLrag+oP;9&A z&%Xh7wl6U`L|7%AOtgw?b@wn^SkqL{SD$V^soJ&h&HN{tyO1_pyvVf-IQx7gdLEWR zh_4u#(%pGpM=~o1{+rw{^|tOcUPsc~8`;Zw%Qut{fJA3l8B?? zY&YAJLx?WqJqdxVLz_w78W#n(oi4X9nPNDe&ev*xSDy6us_|Rt_%yON>HiE-u(t`h zG4N$*2!>7X0~BUIKlIPVsKMKCo}jMQLLgD*OpfsoiKEy?K`PqWsfr_7pS zEX;7n;?4Z`XID=715{6^=3|Rpo_UlDi1d2N_cM)(d*{zK! zx#rKp0;-#4ZbK!3E9#p(JPJkiOWnN;a$|`3Gi{XG=l<*GQ=dRLrrqp~1{4v&A@@ha zrhhX0RGsVwx|EQx7c=lFz}3%y5}S}0o<`mSW3aC-##CMB<(9*xG!}+ya*vzf3EOHt zAo~N3660)$TB->nG!2w?u6^+>lRwbdGo^@L3OcAS^M0Uer%I_&f-1rs1yy&zAB7$gh-dD#6Gz%U`3`2RkuBB_72PwfHQ$r@<1@DP`Gunm z36vn|)ra$+I)X*sySO~2#oy6;KaEP;=w%w(tV`56L70Qn@|)Qqx+Y#+907@3r*)+B zd>vC0W`u&4Hn08Xo>oF+76JPJXRX4riYm+K`JQ2(DZNM9)ge>gRT2M|O z0>pJpA~!rwlYm}P&X;JV5YnFa&{VP&@l_ig?OnOpt?p#5$DdO{;7LfGRDQt=@*Zmn%0A{>#!jU21&6om6 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%0D6D= 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 Nk;`@&=M+-||Jfr8b#nj! literal 24777 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 CbAp2a diff --git a/frontend/cypress/images/pistolet-ancien-a-percussion-monocoup-.jpg b/frontend/cypress/images/pistolet-ancien-a-percussion-monocoup.jpg similarity index 100% rename from frontend/cypress/images/pistolet-ancien-a-percussion-monocoup-.jpg rename to frontend/cypress/images/pistolet-ancien-a-percussion-monocoup.jpg