{ "cells": [ { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "from utils import *\n", "warnings.filterwarnings('ignore')\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "fd_collection = getCollection(\"team_5_mwdb_phase_2\", \"fd_collection\")\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Showing 3 similar images for label 2, using euclidean_distance_measure for cm_fd feature descriptor...\n" ] }, { "ename": "ServerSelectionTimeoutError", "evalue": "localhost:27017: [Errno 61] Connection refused, Timeout: 30s, Topology Description: ]>", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mServerSelectionTimeoutError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m/Users/pavanrathnakarshetty/Documents/Multimedia and Web Databases/Phase 2/CSE515_MWDB_Project/Phase 2/task_1.ipynb Cell 3\u001b[0m line \u001b[0;36m1\n\u001b[1;32m 9\u001b[0m selected_feature_model \u001b[39m=\u001b[39m valid_feature_models[\n\u001b[1;32m 10\u001b[0m \u001b[39mstr\u001b[39m(\u001b[39minput\u001b[39m(\u001b[39m\"\u001b[39m\u001b[39mEnter feature model - one of \u001b[39m\u001b[39m\"\u001b[39m \u001b[39m+\u001b[39m \u001b[39mstr\u001b[39m(\u001b[39mlist\u001b[39m(valid_feature_models\u001b[39m.\u001b[39mkeys()))))\n\u001b[1;32m 11\u001b[0m ]\n\u001b[1;32m 12\u001b[0m selected_distance_measure \u001b[39m=\u001b[39m feature_distance_matches[selected_feature_model]\n\u001b[0;32m---> 14\u001b[0m show_similar_images_for_label(\n\u001b[1;32m 15\u001b[0m fd_collection,\n\u001b[1;32m 16\u001b[0m sample_label,\n\u001b[1;32m 17\u001b[0m k,\n\u001b[1;32m 18\u001b[0m selected_feature_model,\n\u001b[1;32m 19\u001b[0m selected_distance_measure,\n\u001b[1;32m 20\u001b[0m save_plots\u001b[39m=\u001b[39;49m\u001b[39mFalse\u001b[39;49;00m,\n\u001b[1;32m 21\u001b[0m )\n", "File \u001b[0;32m~/Documents/Multimedia and Web Databases/Phase 2/CSE515_MWDB_Project/Phase 2/utils.py:538\u001b[0m, in \u001b[0;36mshow_similar_images_for_label\u001b[0;34m(fd_collection, target_label, k, feature_model, distance_measure, save_plots)\u001b[0m\n\u001b[1;32m 535\u001b[0m min_dists \u001b[39m=\u001b[39m {}\n\u001b[1;32m 537\u001b[0m \u001b[39m# Calculate representative feature vector for label\u001b[39;00m\n\u001b[0;32m--> 538\u001b[0m label_rep \u001b[39m=\u001b[39m calculate_label_representatives(\n\u001b[1;32m 539\u001b[0m fd_collection, target_label, feature_model\n\u001b[1;32m 540\u001b[0m )\n\u001b[1;32m 542\u001b[0m \u001b[39mfor\u001b[39;00m cur_img \u001b[39min\u001b[39;00m all_images:\n\u001b[1;32m 543\u001b[0m cur_img_id \u001b[39m=\u001b[39m cur_img[\u001b[39m\"\u001b[39m\u001b[39mimage_id\u001b[39m\u001b[39m\"\u001b[39m]\n", "File \u001b[0;32m~/Documents/Multimedia and Web Databases/Phase 2/CSE515_MWDB_Project/Phase 2/utils.py:497\u001b[0m, in \u001b[0;36mcalculate_label_representatives\u001b[0;34m(fd_collection, label, feature_model)\u001b[0m\n\u001b[1;32m 494\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mcalculate_label_representatives\u001b[39m(fd_collection, label, feature_model):\n\u001b[1;32m 495\u001b[0m \u001b[39m \u001b[39m\u001b[39m\"\"\"Calculate representative feature vector of a label as the mean of all feature vectors under a feature model\"\"\"\u001b[39;00m\n\u001b[0;32m--> 497\u001b[0m label_fds \u001b[39m=\u001b[39m [\n\u001b[1;32m 498\u001b[0m img_fds[feature_model] \u001b[39m# get the specific feature model's feature vector\u001b[39;49;00m\n\u001b[1;32m 499\u001b[0m \u001b[39mfor\u001b[39;49;00m img_fds \u001b[39min\u001b[39;49;00m fd_collection\u001b[39m.\u001b[39;49mfind(\n\u001b[1;32m 500\u001b[0m {\u001b[39m\"\u001b[39;49m\u001b[39mtrue_label\u001b[39;49m\u001b[39m\"\u001b[39;49m: label}\n\u001b[1;32m 501\u001b[0m ) \u001b[39m# repeat for all images\u001b[39;49;00m\n\u001b[1;32m 502\u001b[0m ]\n\u001b[1;32m 504\u001b[0m \u001b[39m# Calculate mean across each dimension\u001b[39;00m\n\u001b[1;32m 505\u001b[0m \u001b[39m# and build a mean vector out of these means\u001b[39;00m\n\u001b[1;32m 506\u001b[0m label_mean_vector \u001b[39m=\u001b[39m [\u001b[39msum\u001b[39m(col) \u001b[39m/\u001b[39m \u001b[39mlen\u001b[39m(col) \u001b[39mfor\u001b[39;00m col \u001b[39min\u001b[39;00m \u001b[39mzip\u001b[39m(\u001b[39m*\u001b[39mlabel_fds)]\n", "File \u001b[0;32m~/Documents/Multimedia and Web Databases/Phase 2/CSE515_MWDB_Project/Phase 2/utils.py:497\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 494\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mcalculate_label_representatives\u001b[39m(fd_collection, label, feature_model):\n\u001b[1;32m 495\u001b[0m \u001b[39m \u001b[39m\u001b[39m\"\"\"Calculate representative feature vector of a label as the mean of all feature vectors under a feature model\"\"\"\u001b[39;00m\n\u001b[0;32m--> 497\u001b[0m label_fds \u001b[39m=\u001b[39m [\n\u001b[1;32m 498\u001b[0m img_fds[feature_model] \u001b[39m# get the specific feature model's feature vector\u001b[39;00m\n\u001b[1;32m 499\u001b[0m \u001b[39mfor\u001b[39;00m img_fds \u001b[39min\u001b[39;00m fd_collection\u001b[39m.\u001b[39mfind(\n\u001b[1;32m 500\u001b[0m {\u001b[39m\"\u001b[39m\u001b[39mtrue_label\u001b[39m\u001b[39m\"\u001b[39m: label}\n\u001b[1;32m 501\u001b[0m ) \u001b[39m# repeat for all images\u001b[39;00m\n\u001b[1;32m 502\u001b[0m ]\n\u001b[1;32m 504\u001b[0m \u001b[39m# Calculate mean across each dimension\u001b[39;00m\n\u001b[1;32m 505\u001b[0m \u001b[39m# and build a mean vector out of these means\u001b[39;00m\n\u001b[1;32m 506\u001b[0m label_mean_vector \u001b[39m=\u001b[39m [\u001b[39msum\u001b[39m(col) \u001b[39m/\u001b[39m \u001b[39mlen\u001b[39m(col) \u001b[39mfor\u001b[39;00m col \u001b[39min\u001b[39;00m \u001b[39mzip\u001b[39m(\u001b[39m*\u001b[39mlabel_fds)]\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pymongo/cursor.py:1262\u001b[0m, in \u001b[0;36mCursor.next\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1260\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m__empty:\n\u001b[1;32m 1261\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mStopIteration\u001b[39;00m\n\u001b[0;32m-> 1262\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mlen\u001b[39m(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39m__data) \u001b[39mor\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_refresh():\n\u001b[1;32m 1263\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m__data\u001b[39m.\u001b[39mpopleft()\n\u001b[1;32m 1264\u001b[0m \u001b[39melse\u001b[39;00m:\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pymongo/cursor.py:1153\u001b[0m, in \u001b[0;36mCursor._refresh\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1150\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mlen\u001b[39m(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39m__data)\n\u001b[1;32m 1152\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m__session:\n\u001b[0;32m-> 1153\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m__session \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m__collection\u001b[39m.\u001b[39;49mdatabase\u001b[39m.\u001b[39;49mclient\u001b[39m.\u001b[39;49m_ensure_session()\n\u001b[1;32m 1155\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m__id \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m: \u001b[39m# Query\u001b[39;00m\n\u001b[1;32m 1156\u001b[0m \u001b[39mif\u001b[39;00m (\u001b[39mself\u001b[39m\u001b[39m.\u001b[39m__min \u001b[39mor\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m__max) \u001b[39mand\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m__hint:\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pymongo/mongo_client.py:1868\u001b[0m, in \u001b[0;36mMongoClient._ensure_session\u001b[0;34m(self, session)\u001b[0m\n\u001b[1;32m 1863\u001b[0m \u001b[39mreturn\u001b[39;00m session\n\u001b[1;32m 1865\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[1;32m 1866\u001b[0m \u001b[39m# Don't make implicit sessions causally consistent. Applications\u001b[39;00m\n\u001b[1;32m 1867\u001b[0m \u001b[39m# should always opt-in.\u001b[39;00m\n\u001b[0;32m-> 1868\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m__start_session(\u001b[39mTrue\u001b[39;49;00m, causal_consistency\u001b[39m=\u001b[39;49m\u001b[39mFalse\u001b[39;49;00m)\n\u001b[1;32m 1869\u001b[0m \u001b[39mexcept\u001b[39;00m (ConfigurationError, InvalidOperation):\n\u001b[1;32m 1870\u001b[0m \u001b[39m# Sessions not supported.\u001b[39;00m\n\u001b[1;32m 1871\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mNone\u001b[39;00m\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pymongo/mongo_client.py:1811\u001b[0m, in \u001b[0;36mMongoClient.__start_session\u001b[0;34m(self, implicit, **kwargs)\u001b[0m\n\u001b[1;32m 1808\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39m__start_session\u001b[39m(\u001b[39mself\u001b[39m, implicit: \u001b[39mbool\u001b[39m, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs: Any) \u001b[39m-\u001b[39m\u001b[39m>\u001b[39m ClientSession:\n\u001b[1;32m 1809\u001b[0m \u001b[39m# Raises ConfigurationError if sessions are not supported.\u001b[39;00m\n\u001b[1;32m 1810\u001b[0m \u001b[39mif\u001b[39;00m implicit:\n\u001b[0;32m-> 1811\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_topology\u001b[39m.\u001b[39;49m_check_implicit_session_support()\n\u001b[1;32m 1812\u001b[0m server_session: Union[_EmptyServerSession, _ServerSession] \u001b[39m=\u001b[39m _EmptyServerSession()\n\u001b[1;32m 1813\u001b[0m \u001b[39melse\u001b[39;00m:\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pymongo/topology.py:583\u001b[0m, in \u001b[0;36mTopology._check_implicit_session_support\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 581\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39m_check_implicit_session_support\u001b[39m(\u001b[39mself\u001b[39m) \u001b[39m-\u001b[39m\u001b[39m>\u001b[39m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m 582\u001b[0m \u001b[39mwith\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_lock:\n\u001b[0;32m--> 583\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_check_session_support()\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pymongo/topology.py:599\u001b[0m, in \u001b[0;36mTopology._check_session_support\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 595\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_select_servers_loop(\n\u001b[1;32m 596\u001b[0m any_server_selector, \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mget_server_selection_timeout(), \u001b[39mNone\u001b[39;00m\n\u001b[1;32m 597\u001b[0m )\n\u001b[1;32m 598\u001b[0m \u001b[39melif\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_description\u001b[39m.\u001b[39mreadable_servers:\n\u001b[0;32m--> 599\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_select_servers_loop(\n\u001b[1;32m 600\u001b[0m readable_server_selector, \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mget_server_selection_timeout(), \u001b[39mNone\u001b[39;49;00m\n\u001b[1;32m 601\u001b[0m )\n\u001b[1;32m 603\u001b[0m session_timeout \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_description\u001b[39m.\u001b[39mlogical_session_timeout_minutes\n\u001b[1;32m 604\u001b[0m \u001b[39mif\u001b[39;00m session_timeout \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n", "File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pymongo/topology.py:269\u001b[0m, in \u001b[0;36mTopology._select_servers_loop\u001b[0;34m(self, selector, timeout, address)\u001b[0m\n\u001b[1;32m 266\u001b[0m \u001b[39mwhile\u001b[39;00m \u001b[39mnot\u001b[39;00m server_descriptions:\n\u001b[1;32m 267\u001b[0m \u001b[39m# No suitable servers.\u001b[39;00m\n\u001b[1;32m 268\u001b[0m \u001b[39mif\u001b[39;00m timeout \u001b[39m==\u001b[39m \u001b[39m0\u001b[39m \u001b[39mor\u001b[39;00m now \u001b[39m>\u001b[39m end_time:\n\u001b[0;32m--> 269\u001b[0m \u001b[39mraise\u001b[39;00m ServerSelectionTimeoutError(\n\u001b[1;32m 270\u001b[0m \u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39m{\u001b[39;00m\u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_error_message(selector)\u001b[39m}\u001b[39;00m\u001b[39m, Timeout: \u001b[39m\u001b[39m{\u001b[39;00mtimeout\u001b[39m}\u001b[39;00m\u001b[39ms, Topology Description: \u001b[39m\u001b[39m{\u001b[39;00m\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mdescription\u001b[39m!r}\u001b[39;00m\u001b[39m\"\u001b[39m\n\u001b[1;32m 271\u001b[0m )\n\u001b[1;32m 273\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_ensure_opened()\n\u001b[1;32m 274\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_request_check_all()\n", "\u001b[0;31mServerSelectionTimeoutError\u001b[0m: localhost:27017: [Errno 61] Connection refused, Timeout: 30s, Topology Description: ]>" ] } ], "source": [ "sample_label = int(input(\"Enter query label: (0 to 100)\"))\n", "if sample_label < 0 or sample_label > 100:\n", " raise ValueError(\"Query label should be between [0, 100]\")\n", "\n", "k = int(input(\"Enter value of k: \"))\n", "if k < 1:\n", " raise ValueError(\"k should be a positive integer\")\n", "\n", "selected_feature_model = valid_feature_models[\n", " str(input(\"Enter feature model - one of \" + str(list(valid_feature_models.keys()))))\n", "]\n", "selected_distance_measure = feature_distance_matches[selected_feature_model]\n", "\n", "show_similar_images_for_label(\n", " fd_collection,\n", " sample_label,\n", " k,\n", " selected_feature_model,\n", " selected_distance_measure,\n", " save_plots=False,\n", ")\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.11.5" } }, "nbformat": 4, "nbformat_minor": 2 }