{
 "cells": [
  {
   "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"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Take pictures"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Take a picture using opencv with <uuid>.jpg\n",
    "# Then delete it after\n",
    "cap = cv2.VideoCapture(0)\n",
    "ret, frame = cap.read()\n",
    "cap.release()\n",
    "# uuid_str = str(uuid.uuid4())\n",
    "# uuid_path = Path(uuid_str + \".jpg\")\n",
    "# cv2.imwrite(str(uuid_path), frame)\n",
    "# dfs = DeepFace.find(img_path=str(uuid_path), db_path = \"faces\")\n",
    "# Don't throw an error if no face is detected (enforce_detection=False)\n",
    "dfs = DeepFace.find(frame, db_path = \"faces\", enforce_detection=True, silent=False, model_name=\"ArcFace\", detector_backend=\"opencv\")\n",
    "# Get the identity of the person\n",
    "for i, pd_dataframe in enumerate(dfs):\n",
    "    # Sort the dataframe by confidence\n",
    "    # inplace=True means that the dataframe is modified so we don't need to assign it to a new variable\n",
    "    # pd_dataframe.sort_values(by=['model_name=\"ArcFace\", detector_backend=\"opencv\")'], inplace=True, ascending=False)\n",
    "    print(f'On dataframe {i}')\n",
    "    print(pd_dataframe)\n",
    "    # Get the most likely identity\n",
    "    # print(f'Most likely identity: {pd_dataframe.iloc[0][\"identity\"]}')\n",
    "    # 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][\"ArcFace_cosine\"]}')\n",
    "\n",
    "# uuid_path.unlink()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Stream"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "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": {
  "kernelspec": {
   "display_name": ".venv",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}