diff --git a/notebooks/Extract_ArcFace_from_MOBIO.ipynb b/notebooks/Extract_ArcFace_from_MOBIO.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..fa331e43dcbe3eceb262e40d81eed96ad5e82ae7 --- /dev/null +++ b/notebooks/Extract_ArcFace_from_MOBIO.ipynb @@ -0,0 +1,171 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "54da1cf9", + "metadata": {}, + "source": [ + "# Extracting embedding features from face data\n", + "In this notebook, we aim to extract embedding features from images using face recogntion extractors.\n", + "As an example, we use MOBIO dataset, and extract Arcface features from the face images:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "3e7ff891", + "metadata": {}, + "outputs": [], + "source": [ + "##### CHANGE YOUR DATABASE HERE\n", + "from bob.bio.face.config.database.mobio_male import database\n", + "annotation_type = database.annotation_type\n", + "fixed_positions = database.fixed_positions" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "a5fba83d", + "metadata": {}, + "outputs": [], + "source": [ + "from bob.bio.face.config.baseline.arcface_insightface import load\n", + "pipeline = load(annotation_type, fixed_positions) #pre-process and feature extraction pipeline\n", + "transformer = pipeline.transformer" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "4d610eb0", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CheckpointWrapper(estimator=Pipeline(steps=[('samplewrapper-1',\n", + " SampleWrapper(estimator=FaceCrop(cropped_image_size=(112,\n", + " 112),\n", + " cropped_positions={'leye': (55,\n", + " 81),\n", + " 'reye': (55,\n", + " 42)}),\n", + " fit_extra_arguments=(),\n", + " transform_extra_arguments=(('annotations',\n", + " 'annotations'),))),\n", + " ('samplewrapper-2',\n", + " SampleWrapper(estimator=ArcFaceInsightFace(),\n", + " fit_extra_arguments=(),\n", + " transform_extra_arguments=()))]),\n", + " features_dir='features',\n", + " load_func=<function load at 0x7f5c5424d4c0>,\n", + " save_func=<function save at 0x7f5c5424d670>)\n" + ] + } + ], + "source": [ + "import bob.pipelines\n", + "\n", + "features_dir = \"features\" #Path to store extracted features\n", + "transformer = bob.pipelines.CheckpointWrapper(transformer, features_dir=features_dir)\n", + "\n", + "# Printing the setup of the transformer\n", + "print(transformer)" + ] + }, + { + "cell_type": "markdown", + "id": "7ea60d56", + "metadata": {}, + "source": [ + "As an example, we consider 10 samples from this database and extract features for these samples:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "bb65175a", + "metadata": {}, + "outputs": [], + "source": [ + "# get 10 samples from database\n", + "samples = database.all_samples()[:10]" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "aee7754f", + "metadata": {}, + "outputs": [], + "source": [ + "features = transformer.transform(samples)" + ] + }, + { + "cell_type": "markdown", + "id": "bb27ce2a", + "metadata": {}, + "source": [ + "In the following cells, we convert the extracted features to `numpy.array` and check the size of features." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "a0a9efe1", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "from bob.pipelines import SampleBatch\n", + "\n", + "np_features = np.array(SampleBatch(features))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "92971828", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(10, 512)" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np_features.shape" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.8.8" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}