s470623-wko/wko-08.ipynb

1 line
780 KiB
Plaintext
Raw Normal View History

2023-01-16 13:18:16 +01:00
{"cells":[{"cell_type":"markdown","id":"909d3c02","metadata":{"id":"909d3c02"},"source":["![Logo 1](img/aitech-logotyp-1.jpg)\n","<div class=\"alert alert-block alert-info\">\n","<h1> Widzenie komputerowe </h1>\n","<h2> 08. <i>Rozpoznawanie twarzy</i> [laboratoria]</h2> \n","<h3>Andrzej Wójtowicz (2021)</h3>\n","</div>\n","\n","![Logo 2](img/aitech-logotyp-2.jpg)"]},{"cell_type":"markdown","id":"7a9fde6b","metadata":{"id":"7a9fde6b"},"source":["W poniższych materiałach zaprezentujemy klasyczne metody rozpoznawania twarzy. Opisywane zagadnienia można odnaleźć w *5.2.3 Principal component analysis* R. Szeliski (2022) *Computer Vision: Algorithms and Applications* oraz [dokumentacji](https://docs.opencv.org/4.5.3/da/d60/tutorial_face_main.html).\n","\n","Na początku załadujmy niezbędne biblioteki."]},{"cell_type":"code","source":["from google.colab import drive\n","drive.mount('/content/drive')\n","%cd /content/drive/My Drive/aitech-wko-pub"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"79pcSRy9c_Wf","executionInfo":{"status":"ok","timestamp":1673870478085,"user_tz":-60,"elapsed":22067,"user":{"displayName":"Cezary Gałązkiewicz","userId":"01409497901784152256"}},"outputId":"e527a916-3b2a-4040-fd9d-6be6ec6f18f9"},"id":"79pcSRy9c_Wf","execution_count":1,"outputs":[{"output_type":"stream","name":"stdout","text":["Mounted at /content/drive\n","/content/drive/My Drive/aitech-wko-pub\n"]}]},{"cell_type":"code","execution_count":2,"id":"1d86977a","metadata":{"id":"1d86977a","executionInfo":{"status":"ok","timestamp":1673870479792,"user_tz":-60,"elapsed":1735,"user":{"displayName":"Cezary Gałązkiewicz","userId":"01409497901784152256"}}},"outputs":[],"source":["import cv2 as cv\n","import numpy as np\n","import matplotlib.pyplot as plt\n","%matplotlib inline\n","import sklearn.metrics\n","import ipywidgets\n","import os\n","import random"]},{"cell_type":"markdown","id":"c5a62135","metadata":{"id":"c5a62135"},"source":["Rozpakujmy zbiór danych, na którym będziemy pracować:"]},{"cell_type":"code","execution_count":3,"id":"0e0f1723","metadata":{"id":"0e0f1723","executionInfo":{"status":"ok","timestamp":1673870497428,"user_tz":-60,"elapsed":17655,"user":{"displayName":"Cezary Gałązkiewicz","userId":"01409497901784152256"}}},"outputs":[],"source":["!cd datasets && unzip -qo yaleextb.zip"]},{"cell_type":"markdown","id":"e6a0efb1","metadata":{"id":"e6a0efb1"},"source":["Nasz zbiór zawiera po kilkadziesiąt zdjęć kilkudziesięciu osób, które zostały sfotografowane w różnych warunkach oświetlenia. Wczytane zdjęcia podzielimy na zbiór treningowy i testowy w stosunku 3/1 oraz wyświetlimy kilka przykładowych zdjęć:"]},{"cell_type":"code","execution_count":4,"id":"7b775bbf","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":323},"id":"7b775bbf","executionInfo":{"status":"ok","timestamp":1673870501160,"user_tz":-60,"elapsed":3735,"user":{"displayName":"Cezary Gałązkiewicz","userId":"01409497901784152256"}},"outputId":"bf105f0f-031c-487f-b27e-9bfe7609d53d"},"outputs":[{"output_type":"display_data","data":{"text/plain":["<Figure size 864x360 with 8 Axes>"],"image/png":"iVBORw0KGgoAAAANSUhEUgAAAjQAAAEyCAYAAADtOkqDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOy9yY9kSXbu912fwmePKTMjh8rOqmaT3Q1wAKl+3AigSEGCwM3bPUjacCGAK+3FtVbvXyAXAgQCgqQNIS0eNECAwOaKBFekBFL9yB6qq3OIyAifZ/erReTP/LuW1z0iq7PKo8AwIBAR7newa3bsnO9859i5SZqmum/37b7dt/t23+7bffsmt8K+O3Df7tt9u2/37b7dt/v2y7Z7QHPf7tt9u2/37b7dt298uwc09+2+3bf7dt/u2337xrd7QHPf7tt9u2/37b7dt298uwc09+2+3bf7dt/u2337xrd7QHPf7tt9u2/37b7dt298+8oATZIk/1mSJP+YJMm/T5LkT76q+9y3b3a7l5P7dtt2Lyv37TbtXk7+5bbkq6hDkyRJUdL/J+k/kfRzSX8j6b9I0/T//eg3u2/f2HYvJ/fttu1eVu7bbdq9nPzLbl8VQ/OvJP37NE3/OU3TuaT/UdK//orudd++ue1eTu7bbdu9rNy327R7OfkX3Epf0XWfSvrc/v+5pN/1A5Ik+WNJfyxJxWLxd5rNpgqFggqFgh+T+Z/PaIVCIfM/DdaJc5MkUZIkStM0nOOf8Xd8LN/xN9+naarVapW5n1+D//P6uVwu3+tzsVhUoVB47x78H/+dd4+8Y/279Xqt9Xqd6eO23/6zXq/f+2w2m2mxWLw/8B/ebpQT6X1Z6XQ678mKj3He71hWGOP1ep35Lr5OnmzEMrRerzP9Y