From 4f1f253c6ca99457613dbb6de6dfda442caa56f5 Mon Sep 17 00:00:00 2001
From: slashtechno <77907286+slashtechno@users.noreply.github.com>
Date: Sun, 22 Oct 2023 16:20:57 -0500
Subject: [PATCH] Fix representations_<model>.pkl not being created

---
 .gitignore                   |  4 +--
 .vscode/launch.json          |  3 +-
 deepface-test.ipynb          | 56 +++++++++++++++++++++++++++++++++++-
 poetry.lock                  |  2 +-
 pyproject.toml               |  3 +-
 wyzely_detect/utils/utils.py |  6 +++-
 6 files changed, 67 insertions(+), 7 deletions(-)

diff --git a/.gitignore b/.gitignore
index 5550c01..edf27a0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,9 +2,9 @@
 config/
 using_yolov8.ipynb
 yolov8n.pt
-.venv/
+*venv/
 __pycache__/
 faces/*
 !faces/.gitkeep
 dist/
-draft-commit-message.txt
\ No newline at end of file
+test.txt
diff --git a/.vscode/launch.json b/.vscode/launch.json
index 409d752..c613560 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -10,7 +10,8 @@
             "type": "python",
             "request": "launch",
             "module": "wyzely_detect",
-            "justMyCode": true
+            // "justMyCode": true
+            "justMyCode": false
         }
     ]
 }
\ No newline at end of file
diff --git a/deepface-test.ipynb b/deepface-test.ipynb
index da7eeb5..c7f0bea 100644
--- a/deepface-test.ipynb
+++ b/deepface-test.ipynb
@@ -49,7 +49,7 @@
     "    # We could use Path to get the parent directory of the image to use as the identity\n",
     "    print(f'Most likely identity: {Path(pd_dataframe.iloc[0][\"identity\"]).parent.name}')\n",
     "    # Get the most likely identity's confidence\n",
-    "    print(f'Confidence: {pd_dataframe.iloc[0][\"model_name=\"ArcFace\", detector_backend=\"opencv\")\"]}')\n",
+    "    print(f'Confidence: {pd_dataframe.iloc[0][\"ArcFace_cosine\"]}')\n",
     "\n",
     "# uuid_path.unlink()"
    ]
@@ -69,6 +69,60 @@
    "source": [
     "DeepFace.stream(db_path=\"faces\", model_name=\"ArcFace\", detector_backend=\"opencv\")"
    ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Stream normal frame by frame"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from deepface import DeepFace\n",
+    "import cv2\n",
+    "from pathlib import Path\n",
+    "import uuid\n",
+    "import pandas as pd\n",
+    "\n",
+    "def main():\n",
+    "    cap = cv2.VideoCapture(0)\n",
+    "    while True:\n",
+    "        ret, frame = cap.read()\n",
+    "        dfs = DeepFace.find(frame, db_path = \"faces\", enforce_detection=False, silent=False, model_name=\"ArcFace\", detector_backend=\"opencv\")\n",
+    "        for i, pd_dataframe in enumerate(dfs):\n",
+    "            print(f'On dataframe {i}')\n",
+    "            print(pd_dataframe)\n",
+    "            print(f'Most likely identity: {Path(pd_dataframe.iloc[0][\"identity\"]).parent.name}')\n",
+    "            print(f'Confidence: {pd_dataframe.iloc[0][\"ArcFace_cosine\"]}')\n",
+    "        cv2.imshow(\"frame\", frame)\n",
+    "        if cv2.waitKey(1) & 0xFF == ord(\"q\"):\n",
+    "            break\n",
+    "    cap.release()\n",
+    "    cv2.destroyAllWindows()\n",
+    "    \n",
+    "\n",
+    "\n",
+    "main()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Other functions\n"
+   ]
   }
  ],
  "metadata": {
diff --git a/poetry.lock b/poetry.lock
index 9669f82..0551b44 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -3627,4 +3627,4 @@ files = [
 [metadata]
 lock-version = "2.0"
 python-versions = ">=3.10, <3.12"
-content-hash = "952e41ab099f9d1c7055465d5a3c228df677c422d20dea8ff8d558d2e4d8f2be"
+content-hash = "6712094a7e402c4587037939b7a33ad4c2463a545c222374bc471925c33242d9"
diff --git a/pyproject.toml b/pyproject.toml
index 9a95876..98790db 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
 [tool.poetry]
 name = "wyzely-detect"
-version = "0.1.0"
+version = "0.1.9"
 description = "Recognize faces/objects in a video stream (from a webcam or a security camera) and send notifications to your devices"
 authors = ["slashtechno <77907286+slashtechno@users.noreply.github.com>"]
 license = "MIT"
@@ -29,6 +29,7 @@ tensorflow-io-gcs-filesystem = "0.31.0"
 
 
 deepface = "^0.0.79"
+tensorflow = "^2.14.0"
 
 [tool.poetry.group.dev.dependencies]
 black = "^23.9.1"
diff --git a/wyzely_detect/utils/utils.py b/wyzely_detect/utils/utils.py
index 22d369e..6329324 100644
--- a/wyzely_detect/utils/utils.py
+++ b/wyzely_detect/utils/utils.py
@@ -115,8 +115,12 @@ def recognize_face(
         face_dataframes = DeepFace.find(
             run_frame,
             db_path=str(path_to_directory),
-            enforce_detection=True,
+            # enforce_detection=True,
+            # Seems this works?
+            enforce_detection=False,
             silent=True,
+            # Could use VGG-Face, but whilst fixing another issue, ArcFace seemed to be slightly faster
+            # I read somewhere that opencv is the fastest (but not as accurate). Could be changed later, but opencv seems to work well
             model_name="ArcFace", detector_backend="opencv"
             )
     except ValueError as e: