{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import numpy as np\nimport cv2 as cv\nimport matplotlib.pyplot as plt\nfrom scipy.cluster.vq import *\nfrom scipy.stats import mode\nimport sklearn.preprocessing\nimport os\nimport random","metadata":{"execution":{"iopub.status.busy":"2023-01-26T13:54:47.081769Z","iopub.execute_input":"2023-01-26T13:54:47.082866Z","iopub.status.idle":"2023-01-26T13:54:48.481153Z","shell.execute_reply.started":"2023-01-26T13:54:47.082651Z","shell.execute_reply":"2023-01-26T13:54:48.480161Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!unzip /kaggle/input/dogs-vs-cats/train.zip\n!unzip /kaggle/input/dogs-vs-cats/test1.zip","metadata":{"_kg_hide-input":false,"_kg_hide-output":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"labels = ['cat', 'dog']\ntrain_path = '/kaggle/working/train'\ntrain_paths = os.listdir(train_path)\ntrain_image_list = []\ntrain_image_class = []\ntrain_samples = random.sample(range(0, 25000), 10000)\nfor index in train_samples:\n  train_image_list.append(cv.imread(train_path + '/' + train_paths[index]))\n  if 'cat' in train_paths[index]:\n    train_image_class.append(0)\n  else:\n    train_image_class.append(1)","metadata":{"execution":{"iopub.status.busy":"2023-01-26T13:55:08.600254Z","iopub.execute_input":"2023-01-26T13:55:08.600678Z","iopub.status.idle":"2023-01-26T13:55:34.05786Z","shell.execute_reply.started":"2023-01-26T13:55:08.600617Z","shell.execute_reply":"2023-01-26T13:55:34.056852Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize = (20, 60))\nfor i in range(20):\n    plt.subplot(20, 5, i + 1)\n    plt.imshow(cv.cvtColor(train_image_list[i], cv.COLOR_BGR2RGB))\n    plt.title(labels[train_image_class[i]])\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2023-01-26T13:55:34.061179Z","iopub.execute_input":"2023-01-26T13:55:34.062276Z","iopub.status.idle":"2023-01-26T13:55:36.818031Z","shell.execute_reply.started":"2023-01-26T13:55:34.062238Z","shell.execute_reply":"2023-01-26T13:55:36.816686Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sift = cv.SIFT_create()\ntrain_descriptors = []\nfor image in train_image_list:\n  _, descriptor = sift.detectAndCompute(image, None)\n  train_descriptors.append(descriptor)\n\nstacked_descriptors = train_descriptors[0]\nfor descriptor in train_descriptors[1:]:\n  stacked_descriptors = np.vstack((stacked_descriptors, descriptor))\nstacked_descriptors = np.float32(stacked_descriptors)","metadata":{"execution":{"iopub.status.busy":"2023-01-26T13:55:36.819725Z","iopub.execute_input":"2023-01-26T13:55:36.820113Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"centroids, _ = kmeans(stacked_descriptors, 7, 100)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_V = np.zeros((len(train_image_list), len(centroids)), \"float32\")\n\nfor i in range(len(train_image_list)):\n  words, _ = vq(train_descriptors[i], centroids)\n  for w in words:\n    train_V[i, w] += 1\n\ntrain_V_normalized = sklearn.preprocessing.normalize(train_V, 'l1')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_path = '/kaggle/working/test1'\ntest_paths = os.listdir(test_path)\ntest_samples = random.sample(range(0, 12500), 100)\ntest_image_list = []\nfor index in test_samples:\n  test_image_list.append(cv.imread(test_path + '/' + test_paths[index]))","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_descriptors = []\nfor image in test_image_list:\n  _, descriptor = sift.detectAndCompute(image, None)\n  test_descriptors.append(descriptor)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_V = np.zeros((len(test_image_list), len(centroids)), \"float32\")\n\nfor i in range(len(test_image_list)):\n  words, _ = vq(test_descriptors[i], centroids)\n  for w in words:\n    test_V[i, w] += 1\n\ntest_V_normalized = sklearn.preprocessing.normalize(test_V, 'l1')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize = (20, 70))\nfor i in range(20):\n    plt.subplot(20, 5, i + 1)\n    plt.imshow(cv.cvtColor(test_image_list[i], cv.COLOR_BGR2RGB))\nplt.show()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = KNNClassification(9)\nmodel.fit(train_V, train_image_class)\ny_pred = model.predict(test_V)\n\nplt.figure(figsize = (20, 70))\nfor i in range(20):\n    plt.subplot(20, 5, i + 1)\n    plt.imshow(cv.cvtColor(test_image_list[i], cv.COLOR_BGR2RGB))\n    plt.title(labels[y_pred[i]])\nplt.show()","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}