{"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 zipfile\npath='/kaggle/input/dogs-vs-cats'\ne= zipfile.ZipFile(path+'/train.zip')\ne.extractall()","metadata":{"execution":{"iopub.status.busy":"2023-01-23T12:35:02.394214Z","iopub.execute_input":"2023-01-23T12:35:02.394922Z","iopub.status.idle":"2023-01-23T12:35:16.585027Z","shell.execute_reply.started":"2023-01-23T12:35:02.394866Z","shell.execute_reply":"2023-01-23T12:35:16.583246Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import zipfile\npath='/kaggle/input/dogs-vs-cats'\ne= zipfile.ZipFile(path+'/test1.zip')\ne.extractall()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import cv2\nimport os\nimport numpy as np\nfrom sklearn.neighbors import KNeighborsClassifier\nfrom scipy.cluster.vq import kmeans, vq\nimport matplotlib.pyplot as plt\nimport pandas as pd\nfrom sklearn.preprocessing import StandardScaler","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_path = \"/kaggle/working/train\"","metadata":{"execution":{"iopub.status.busy":"2023-01-23T12:37:46.418342Z","iopub.execute_input":"2023-01-23T12:37:46.418756Z","iopub.status.idle":"2023-01-23T12:37:46.424908Z","shell.execute_reply.started":"2023-01-23T12:37:46.418721Z","shell.execute_reply":"2023-01-23T12:37:46.423361Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(os.listdir((train_path)))","metadata":{"execution":{"iopub.status.busy":"2023-01-23T12:37:55.234356Z","iopub.execute_input":"2023-01-23T12:37:55.234787Z","iopub.status.idle":"2023-01-23T12:37:55.267188Z","shell.execute_reply.started":"2023-01-23T12:37:55.234750Z","shell.execute_reply":"2023-01-23T12:37:55.265946Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_folder_path = os.listdir(train_path)","metadata":{"execution":{"iopub.status.busy":"2023-01-23T12:38:09.402221Z","iopub.execute_input":"2023-01-23T12:38:09.402615Z","iopub.status.idle":"2023-01-23T12:38:09.422397Z","shell.execute_reply.started":"2023-01-23T12:38:09.402582Z","shell.execute_reply":"2023-01-23T12:38:09.421356Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"labels = []\ntrain_img_list = []\ntrain_id_list = []","metadata":{"execution":{"iopub.status.busy":"2023-01-23T12:38:16.080874Z","iopub.execute_input":"2023-01-23T12:38:16.081274Z","iopub.status.idle":"2023-01-23T12:38:16.086792Z","shell.execute_reply.started":"2023-01-23T12:38:16.081240Z","shell.execute_reply":"2023-01-23T12:38:16.085772Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for idx, folder_path in enumerate(train_folder_path):\n  image_name = folder_path.split('.') \n  image_class = image_name[0] \n  if image_class not in labels: \n    labels.append(image_class) \n  \n  train_id_list.append(labels.index(image_class)) \n\n  image_full_path = f'{train_path}/{folder_path}'\n  train_img_list.append(image_full_path)","metadata":{"execution":{"iopub.status.busy":"2023-01-23T12:38:24.640860Z","iopub.execute_input":"2023-01-23T12:38:24.641326Z","iopub.status.idle":"2023-01-23T12:38:24.676428Z","shell.execute_reply.started":"2023-01-23T12:38:24.641290Z","shell.execute_reply":"2023-01-23T12:38:24.675241Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sift = cv2.SIFT_create()\ntrain_descriptor_list = []\n\nfor img in train_img_list:\n  image = cv2.imread(img)\n  _, train_descriptor = sift.detectAndCompute(image, None)\n  train_descriptor_list.append(train_descriptor)","metadata":{"execution":{"iopub.status.busy":"2023-01-23T12:40:29.820088Z","iopub.execute_input":"2023-01-23T12:40:29.820825Z","iopub.status.idle":"2023-01-23T13:01:50.042436Z","shell.execute_reply.started":"2023-01-23T12:40:29.820784Z","shell.execute_reply":"2023-01-23T13:01:50.041149Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"stacked_descriptor_list = train_descriptor_list[0]\nfor descriptor in train_descriptor_list[1:]:\n  stacked_descriptor_list = np.vstack((stacked_descriptor_list, descriptor)\n  )\n\nstacked_descriptor_list = np.float32(stacked_descriptor_list) ","metadata":{"execution":{"iopub.status.busy":"2023-01-23T13:01:50.044590Z","iopub.execute_input":"2023-01-23T13:01:50.045024Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"centroids, _ = kmeans(stacked_descriptor_list, k=2, iteration=40)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_features = np.zeros((len(train_img_list), len(centroids)), dtype=\"float32\")","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for i in range(len(train_img_list)):\n    words, _ = vq(train_descriptor_list[i], centroids) \n    for word in words:\n        train_features[i][word] += 1","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"scaler = StandardScaler().fit(train_features)\ntrain_features = scaler.transform(train_features)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"knn = KNeighborsClassifier(n_neighbors=3)\narray_id = np.array(train_id_list_small)\nknn.fit(train_features, array_id)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_descriptor_list = [] \n\ntest_img_list = test_img_list[:40] \n\nfor image_path in test_img_list:\n    image = cv2.imread(image_path)\n    _, test_descriptor = sift.detectAndCompute(image, None)\n    test_descriptor_list.append(test_descriptor) \n\nlength_test_img = len(test_img_list)\ntest_features = np.zeros(\n    (length_test_img, length_centroids), dtype='float32')","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for i in range(len(test_img_list)):\n    words, _ = vq(test_descriptor_list[i], centroids) \n        test_features[i][word] += 1","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_features = scaler.transform(test_features)\nresults = knn.predict(test_features)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(15,15))\nplt.suptitle('Prediction Result')\nfor idx, (id, image_path) in enumerate(zip(results, test_img_list)):\n    plt.subplot(6,5,idx+1)\n    image = cv2.imread(image_path)\n    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)\n    plt.imshow(image)\n    plt.title(labels[id])\n    plt.axis('off')\nplt.show()","metadata":{},"execution_count":null,"outputs":[]}]}