{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Testing FineNet\n", "Code for FineNet in paper \"Robust Minutiae Extractor: Integrating Deep Networks and Fingerprint Domain Knowledge\" at ICB 2018: https://arxiv.org/pdf/1712.09401.pdf\n", "\n", "If you use whole or partial function in this code, please cite paper:\n", "\n", " @inproceedings{Nguyen_MinutiaeNet,\n", "\tauthor = {Dinh-Luan Nguyen and Kai Cao and Anil K. Jain},\n", "\ttitle = {Robust Minutiae Extractor: Integrating Deep Networks and Fingerprint Domain Knowledge},\n", "\tbooktitle = {The 11th International Conference on Biometrics, 2018},\n", "\tyear = {2018},\n", "\t}" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Using TensorFlow backend.\n" ] } ], "source": [ "import sys,os\n", "sys.path.append(os.path.realpath('../FineNet'))\n", "import FineNet_model" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Found 182 images belonging to 2 classes.\n", "Loading FineNet weights from ../Models/FineNet.h5\n" ] } ], "source": [ "from FineNet_model import FineNetmodel, plot_confusion_matrix\n", "\n", "import numpy as np\n", "import os\n", "import matplotlib.pyplot as plt\n", "from sklearn.metrics import confusion_matrix\n", "from keras.preprocessing.image import ImageDataGenerator\n", "from keras.optimizers import Adam\n", "\n", "os.environ[\"CUDA_VISIBLE_DEVICES\"] = '7'\n", "os.environ['KERAS_BACKEND'] = 'tensorflow'\n", "\n", "\n", "\n", "# ============= Hyperparameters ===============\n", "batch_size = 32\n", "num_classes = 2\n", "path_to_model = '../Models/FineNet.h5'\n", "input_shape = (224, 224, 3)\n", "# ============= end Hyperparameters ===============\n", "\n", "\n", "# =============== DATA loading ========================\n", "test_path = '../Dataset/test/'\n", "\n", "# Feed data from directory into batches\n", "test_gen = ImageDataGenerator()\n", "test_batches = test_gen.flow_from_directory(test_path, target_size=(input_shape[0], input_shape[1]), classes=['minu', 'non_minu'], batch_size=batch_size, shuffle=False)\n", "# =============== end DATA loading ========================\n", "\n", "\n", "#============== Define model ==================\n", "model = FineNetmodel(num_classes = num_classes,\n", " pretrained_path = path_to_model,\n", " input_shape = input_shape)\n", "\n", "model.compile(loss='categorical_crossentropy',\n", " optimizer=Adam(lr=0),\n", " metrics=['accuracy'])\n", "#============== End define model ==============" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Test accuracy: 0.950549450549\n", "Confusion matrix, without normalization\n", "[[78 6]\n", " [ 3 95]]\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAU8AAAEmCAYAAADiNhJgAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3XmcXfP9x/HXeyYiJCEiBAliDX4q\nRISi1lSr1FZUq4qmKKotWtXSWlrKr7a2tH5Um6DUUiqlFaSoqIaIEBHEFluQILZElsnn98c5k96M\nmblL7sw5d+77mcd95J5lvudzZ5LPfLfzPYoIzMysPA1ZB2BmVoucPM3MKuDkaWZWASdPM7MKOHma\nmVXAydPMrAJOntZhJK0g6W+S3pN00zKUc6iku6oZWxYk/UPS4VnHYdXh5GlI+qqkiZI+lDQz/U++\nYxWKPhDoD6waEQdVWkhE/Cki9qhCPEuRtIukkHRLi/1D0v33lVjOmZKuLXZeROwZEaMrDNdyxsmz\nzkk6CbgEOJck0a0D/BbYtwrFrws8GxGLqlBWR5kFbC9p1YJ9hwPPVusCSvj/WlcTEX7V6QtYGfgQ\nOKidc5YnSa6vp69LgOXTY7sArwInA28BM4Ej02NnAQuAhek1RgJnAtcWlD0ICKBbun0E8ALwAfAi\ncGjB/vEFX7c98AjwXvr39gXH7gN+BjyYlnMX0K+Nz9Yc/+XA8em+xnTfT4H7Cs79FfAK8D7wKPCZ\ndP/nW3zOxwviOCeNYx6wYbrvm+nx3wE3F5R/PjAOUNb/Lvwq7eXfhvXt00AP4NZ2zjkN2A7YEhgC\nDAdOLzi+BkkSHkCSIC+TtEpEnEFSm70hInpFxFXtBSKpJ/BrYM+I6E2SICe3cl5f4I703FWBi4A7\nWtQcvwocCawOdAe+3961gauBr6fvPwdMJflFUegRku9BX+A64CZJPSLizhafc0jB1xwGHA30Bma0\nKO9kYAtJR0j6DMn37vBIM6nln5NnfVsVmB3tN6sPBc6OiLciYhZJjfKwguML0+MLI+LvJLWvwRXG\nsxjYXNIKETEzIqa2cs5ewPSIuCYiFkXE9cDTwBcLzvljRDwbEfOAG0mSXpsi4t9AX0mDSZLo1a2c\nc21EvJ1e80KSGnmxzzkqIqamX7OwRXlzga+RJP9rgRMi4tUi5VmOOHnWt7eBfpK6tXPOWixda5qR\n7ltSRovkOxfoVW4gEfER8GXgW8BMSXdI2qSEeJpjGlCw/UYF8VwDfBvYlVZq4pJOljQtnTkwh6S2\n3a9Ima+0dzAiHibpphBJkrca4uRZ3x4CPgb2a+ec10kGfpqtwyebtKX6CFixYHuNwoMRMTYiPgus\nSVKbvLKEeJpjeq3CmJpdAxwH/D2tFS6RNqt/CBwMrBIRfUj6W9UcehtlttsEl3Q8SQ32deCUykO3\nLDh51rGIeI9kYOQySftJWlHScpL2lPS/6WnXA6dLWk1Sv/T8otNy2jAZ2EnSOpJWBn7UfEBSf0n7\npH2f80ma/02tlPF3YON0elU3SV8GNgNurzAmACLiRWBnkj7elnoDi0hG5rtJ+imwUsHxN4FB5Yyo\nS9oY+DlJ0/0w4BRJ7XYvWL44eda5iLgIOIlkEGgWSVPz28Bf01N+DkwEngCmAJPSfZVc627ghrSs\nR1k64TWQDKK8DrxDksiOa6WMt4G903PfJqmx7R0RsyuJqUXZ4yOitVr1WOAfJNOXZpDU1gub5M03\nALwtaVKx66TdJNcC50fE4xExHfgxcI2k5ZflM1jnkQf3zMzK55qnmVkFnDzNzCrg5GlmVgEnTzOz\nCrQ3Odra0NCjdzT0Wi3rMKzAp9bpm3UIVuDll1/i7dmzVfzM0jSutG7EonklnRvzZo2NiM9X69pt\ncfKsQEOv1ejzxXOzDsMK3Pfbile8sw6wyw7bVrW8WDSP5QcfXNK5H0++rNidX1Xh5Glm+SdBQ2PW\nUSzFydPMakPOlkR18jSz2qCqdaFWhZOnmdUAueZpZlY24T5PM7Pyyc12M7OKuNluZlYB1zzNzMrk\neZ5mZhVys93MrFyeqmRmVj4BjW62m5mVzwNGZmblcrPdzKwyrnmamZXJU5XMzCrkZruZWQXcbDcz\nK5cHjMzMyucl6czMKuGap5lZZdznaWZWATfbzczKJDfbzcwq42a7mVn55ORpZlaepNXu5GlmVibl\nruaZrx5YM7M2SCrpVUI5J0qaKulJSddL6iFpPUkTJE2XdIOk7sXKcfI0s5pQjeQpaQDwHWBYRGwO\nNAKHAOcDF0fERsC7wMhi8Th5mln+pX2epbxK0A1YQVI3YEVgJrAbcHN6fDSwX7FCnDzNLPdEabXO\ntObZT9LEgtfRzeVExGvABcDLJEnzPeBRYE5ELEpPexUYUCwmDxiZWU0oY8BodkQMa6OMVYB9gfWA\nOcBNwJ6tnBrFLuLkaWY1oaGhKg3lEcCLETELQNItwPZAH0nd0trnQOD1ovFUIxozsw6lMl7texnY\nTtKKSqqyuwNPAfcCB6bnHA7cVqwgJ08zqwnVGG2PiAkkA0OTgCkkOfAK4IfASZKeA1YFrioWj5vt\nZpZ7quIk+Yg4Azijxe4XgOHllOPkaWY1wbdnmpmVS14YxMysIk6eZmYVcPK0TGy4Rm+uPHb7JduD\nVuvFebdO4cGn3+KCw4ex/HKNNDUFP7hmIo+9+E6GkdavOXPm8J3jjmbaU1ORxKWXX8nwbT+ddVi5\nIEq+9bLTOHnWiefe+IBdzxgLQIPElIv34Y5Jr3LxEcP55W1TGTdlJiO2WJMzD96Sfc//Z8bR1qdT\nf3AiIz77Oa6+7kYWLFjA3Llzsw4pP9znaXmw02b9eemtD3n17bkEQe8Vkn8GK62wHG/MmZdxdPXp\n/fff59/jH+B3V/wBgO7du9O9e9FV0eqKk6dlbv9t1+GWCS8DcNp1j3HTyTtz1pe3okGw5zn3ZBxd\nfXrpxRfo168fxx0zkiefeIIttxrKeRdcTM+ePbMOLTfy1mzv0ncYSdpH0qlZx5EnyzU28PktBzDm\nkSR5Hrnrhpx+/WMMOXkMp1//GL86sqx5wlYlTYsW8fjkxxj5zWN44D8TWbFnTy6+4Pysw8qVai2G\nXC1dOnlGxJiIOC/rOPJkxBZr8sSMd5n1/nwADtlhELc/+ioAtz3yCkPXXzXL8OrWWgMGstaAgQwb\nvi0A++5/AE9MfizjqPKj1MTp5FkCSYMkPS3p9+ly+n+SNELSg+lS+sMlHSHp0vT8UZJ+Lenfkl6Q\ndGC6fxdJtxeUe6mkIzL6WB3ugG3X4ZYJM5ZsvzFnHjsMXh2Az2zanxfe/CCr0Opa/zXWYODAgUx/\n9hkA7r/3nwzedNOMo8qXvCXPWu/z3BA4CDgaeAT4KrAjsA/wY+CvLc5fMz2+CTCG/64cXRdW6N7I\nzv+zBieNnrhk34mjHuHcrw6lsUHMX7iYk0Y9kmGE9e38C3/FUUd+nQULFzBo0Hr89v+Krk1RV/LW\n51nryfPFiJgCIGkqMC4iQtIUYFAr5/81IhYDT0nqX86F0tWojwZo6Nlv2aLOyLwFTWx8wq1L7Zsw\nfTa7n3VXRhFZoS2GbMl9D07IOozcyttoe80221PzC94vLtheTOu/GArPb/5JLGLp70OP1i4UEVdE\nxLCIGKYevSsM18wqovw122s9eVbDDGAzSctLWplkcVQzyxEBUmmvzlLrzfZlFhGvSLoReAKYDniI\n0yx3RIP7PKsjIl4CNi/YPqKNY6NaHk+3exW8PwU4pYNCNbMqyFufZ80mTzOrI53cJC+Fk6eZ5Z6A\nxsZ8ZU8nTzOrCW62m5mVy812M7PyJVOV8pU9nTzNrAZ4qpKZWUVc8zQzK5f7PM3Myuc+TzOzCrnP\n08ysAjmreDp5mlkN8KOHzczKJ09VMjOrTM4qnk6eZlYb3Gw3MyuX53mamZVPQENDvp4a5ORpZjUh\nbzXPfKVyM7M2VOvpmZL6SLpZ0tOSpkn6tKS+ku6WND39e5Vi5Th5mln+lfjkzBJrp78C7oyITYAh\nwDTgVGBcRGwEjEu32+XkaWa51zzPs5RXu+VIKwE7AVcBRMSCiJgD7AuMTk8bDexXLCYnTzOrCQ1S\nSS+gn6SJBa+jC4pZH5gF/FHSY5J+L6kn0D8iZgKkf69eLJ42B4zSDN2miHi/hM9rZlYVZQwYzY6I\nYW0c6wYMBU6IiAmSfkUJTfS2CmrLVCBIZgk0a94OYJ1KLmhmVi4JGqtze+arwKsRMSHdvpkkeb4p\nac2ImClpTeCtYgW1mTwjYu1qRGpmVg3VuMMoIt6Q9IqkwRHxDLA78FT6Ohw4L/37tmJllTTPU9Ih\nwPoRca6kgST9A49W/AnMzMpUxXmeJwB/ktQdeAE4kmT850ZJI4GXgYOKFVI0eUq6FFiOZITqXGAu\ncDmwTcWhm5mVQSQj7tUQEZOB1vpEdy+nnFJqnttHxFBJj6UXfifN2GZmnUOqVp9n1ZSSPBdKaiAZ\nJELSqsDiDo3KzKyFvN2eWUryvAz4C7CapLOAg4GzOjQqM7MCguY5nLlRNHlGxNWSHgVGpLsOiogn\nOzYsM7Ol1epK8o3AQpKmu+9KMrNOVcZ9652maCKUdBpwPbAWMBC4TtKPOjowM7NCZdye2SlKqXl+\nDdg6IuYCSDoHeBT4RUcGZmZWKGcVz5KS54wW53UjmVhqZtYpRNVuz6ya9hYGuZikj3MuMFXS2HR7\nD2B854RnZgaUuNBxZ2qv5tk8oj4VuKNg/386Lhwzs9blLHe2uzDIVZ0ZiJlZe2qp5gmApA2Ac4DN\ngB7N+yNi4w6My8xsiTz2eZYyZ3MU8EeS+PcEbgT+3IExmZl9gkp8dZZSkueKETEWICKej4jTgV07\n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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "score = model.evaluate_generator(test_batches)\n", "print 'Test accuracy:', score[1]\n", "\n", "test_labels = test_batches.classes[test_batches.index_array]\n", "# ============= Plot confusion matrix ==================\n", "\n", "predictions = model.predict_generator(test_batches)\n", "\n", "cm = confusion_matrix(test_labels, np.argmax(predictions,axis=1))\n", "cm_plot_labels = ['minu','non_minu']\n", "plot_confusion_matrix(cm, cm_plot_labels, title='Confusion Matrix')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Example predicting each patch\n", "Note: FineNet works correctly with 'nearest' setting in resize function" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0\n", "{'minu': 0, 'non_minu': 1}\n" ] } ], "source": [ "# # Can use this\n", "# from keras.preprocessing.image import load_img\n", "# image = load_img('../Dataset/samples/m2.jpg',target_size=(224,224))\n", "\n", "# or this\n", "import cv2\n", "\n", "image = cv2.imread('../Dataset/samples/m2.jpg')\n", "image = cv2.resize(image, dsize=(224, 224),interpolation=cv2.INTER_NEAREST)\n", "image = np.expand_dims(image, axis=0)\n", "\n", "[class_idx] = np.argmax(model.predict(image),axis=1)\n", "print class_idx\n", "print test_batches.class_indices" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.14" } }, "nbformat": 4, "nbformat_minor": 2 }