harshinde commited on
Commit
2d728e9
β€’
1 Parent(s): d23e27a

Upload 7 files

Browse files
README.md CHANGED
@@ -1,13 +1,12 @@
1
- ---
2
- title: Cat Vs Dog Prediction Cnn
3
- emoji: 🌍
4
- colorFrom: gray
5
- colorTo: yellow
6
- sdk: streamlit
7
- sdk_version: 1.37.0
8
- app_file: app.py
9
- pinned: false
10
- license: mit
11
- ---
12
-
13
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
+ # cat-vs-dog-prediction-cnn
2
+
3
+ Upddate Kaggle Notebook here - https://www.kaggle.com/harshshinde8/cat-vs-dog-prediction-cnn
4
+
5
+ Get Dataset Here - https://www.kaggle.com/datasets/vishallazrus/cat-vs-dog-image-classification-making-prediction
6
+
7
+ To Run on streamlit WebBased.
8
+
9
+ pip install -r requirements.txt
10
+
11
+ streamlit run cat_dog_classifier.py
12
+
 
cat-vs-dog-prediction-cnn.ipynb ADDED
@@ -0,0 +1 @@
 
 
1
+ {"cells":[{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","trusted":true},"outputs":[],"source":["import tensorflow as tf\n","from tensorflow.keras.models import Sequential\n","from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense\n","from tensorflow.keras.preprocessing.image import ImageDataGenerator\n","from tensorflow.keras.preprocessing import image\n","import numpy as np\n","import matplotlib.pyplot as plt\n","import os\n","import random"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["train_datagen = ImageDataGenerator(rescale=1./255,\n"," shear_range=0.2,\n"," zoom_range=0.2,\n"," horizontal_flip=True)\n","training_set = train_datagen.flow_from_directory('/home/hks/ml/Predictions/cat-vs-dog-image-classification-making-prediction/dataset/training_set',\n"," target_size=(64, 64),\n"," batch_size=32,\n"," class_mode='binary')\n","\n","# Data preprocessing for testing\n","test_datagen = ImageDataGenerator(rescale=1./255)\n","test_set = test_datagen.flow_from_directory('/home/hks/ml/Predictions/cat-vs-dog-image-classification-making-prediction/dataset/test_set',\n"," target_size=(64, 64),\n"," batch_size=32,\n"," class_mode='binary')"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["cnn = Sequential([\n"," Conv2D(filters=32, kernel_size=3, activation='relu', input_shape=(64, 64, 3)),\n"," MaxPooling2D(pool_size=2, strides=2),\n"," Conv2D(filters=32, kernel_size=3, activation='relu'),\n"," MaxPooling2D(pool_size=2, strides=2),\n"," Flatten(),\n"," Dense(units=128, activation='relu'),\n"," Dense(units=1, activation='sigmoid')\n","])"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["cnn.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["weights_path = '/home/hks/ml/Predictions/cnn_weights.weights.h5'"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["# Check if weights file exists, if not, train and save weights\n","if not os.path.exists(weights_path):\n"," # Training the CNN and saving history\n"," history = cnn.fit(x=training_set, validation_data=test_set, epochs=50)\n"," # Save weights after training\n"," cnn.save_weights(weights_path) # Corrected line\n","else:\n"," # Load weights if they exist\n"," cnn.load_weights(weights_path)"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["if 'history' in locals():\n"," plt.figure(figsize=(8, 6))\n"," plt.plot(history.history['accuracy'], label='Training Accuracy')\n"," plt.plot(history.history['val_accuracy'], label='Validation Accuracy')\n"," plt.title('Model Accuracy')\n"," plt.ylabel('Accuracy')\n"," plt.xlabel('Epoch')\n"," plt.legend(loc='upper left')\n"," plt.show()"]},{"cell_type":"code","execution_count":null,"metadata":{"trusted":true},"outputs":[],"source":["test_image_dir = '/kaggle/input/cat-vs-dog-image-classification-making-prediction/dataset/test_set'\n","categories = os.listdir(test_image_dir)\n","selected_category = random.choice(categories)\n","selected_image = random.choice(os.listdir(os.path.join(test_image_dir, selected_category)))\n","selected_image_path = os.path.join(test_image_dir, selected_category, selected_image)"]},{"cell_type":"code","execution_count":12,"metadata":{"execution":{"iopub.execute_input":"2024-07-28T07:49:35.380370Z","iopub.status.busy":"2024-07-28T07:49:35.379463Z","iopub.status.idle":"2024-07-28T07:49:35.391656Z","shell.execute_reply":"2024-07-28T07:49:35.390715Z","shell.execute_reply.started":"2024-07-28T07:49:35.380338Z"},"trusted":true},"outputs":[],"source":["test_image = image.load_img(selected_image_path, target_size=(64, 64))\n","test_image_array = image.img_to_array(test_image)\n","test_image_array = np.expand_dims(test_image_array, axis=0)\n","test_image_array /= 255.0"]},{"cell_type":"code","execution_count":13,"metadata":{"execution":{"iopub.execute_input":"2024-07-28T07:49:36.311023Z","iopub.status.busy":"2024-07-28T07:49:36.310355Z","iopub.status.idle":"2024-07-28T07:49:36.375184Z","shell.execute_reply":"2024-07-28T07:49:36.374318Z","shell.execute_reply.started":"2024-07-28T07:49:36.310991Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 17ms/step\n"]}],"source":["result = cnn.predict(test_image_array)\n","confidence = result[0][0]"]},{"cell_type":"code","execution_count":14,"metadata":{"execution":{"iopub.execute_input":"2024-07-28T07:49:49.438840Z","iopub.status.busy":"2024-07-28T07:49:49.438174Z","iopub.status.idle":"2024-07-28T07:49:49.443219Z","shell.execute_reply":"2024-07-28T07:49:49.442333Z","shell.execute_reply.started":"2024-07-28T07:49:49.438809Z"},"trusted":true},"outputs":[],"source":["if confidence > 0.5:\n"," prediction = 'dog'\n"," confidence_percentage = confidence * 100\n","else:\n"," prediction = 'cat'\n"," confidence_percentage = (1 - confidence) * 100"]},{"cell_type":"code","execution_count":16,"metadata":{"execution":{"iopub.execute_input":"2024-07-28T07:50:27.651744Z","iopub.status.busy":"2024-07-28T07:50:27.651059Z","iopub.status.idle":"2024-07-28T07:50:27.841141Z","shell.execute_reply":"2024-07-28T07:50:27.840257Z","shell.execute_reply.started":"2024-07-28T07:50:27.651710Z"},"trusted":true},"outputs":[{"data":{"image/png":"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nOoZu3fvxoABA4ImFQAYO3YsAGDPnj0AgP3796OzsxOjR48OqrPb7cjPz8fu3bv/7esA0P59QUEBzGZz1+8DgQD27dun1X0ypuLiYrS0tAAAxowZgyeffBL79+/H5s2b8eKLL3aN++mnn0ZdXR1+/vOff+a4oqOjkZOTQ9eIhC+RUD+CCV8en3wF9/7776va2lpVXl6uli1bpuLj45XL5VKnTp1SSn38lQQAdffddwf9+w8//FABUM8//3yQvnLlyiC9pqZG2e12NXfuXBUIBLrq/uu//ksBCPraae3atQqAWrt2rVJKqc7OTpWdna2ysrJUQ0ND0Ot8eluf9RUcAHXfffd1/fell16q7HZ70NclFRUVKjIyUp133nna8Zk5c2bQa91xxx3KYrGoxsZGrXbp0qV0DJ/QnWNx++23KwBBaygtLS0qOztb9e3bt+ursf/93/9VANRrr73WVed2u1VeXl7QsTTil7/8pQKgWlpaPrPus76CGzJkiJo+fbqmHzx4UAFQf/nLX5RSSi1fvlwBUBs2bNBqr7jiCpWSkvKZY1iwYIGyWCz0d4mJiV1fndXW1natb57N4sWLFQB15MgRpZRS5eXlasiQIQqAAqAmT56sWlpaVGNjo0pMTFTLli37zDF9wqxZs9SgQYPOqVb4fMgTUC9k5syZSExMREZGBq6++mpERERgxYoV6NOnT1DdzTffHPTfy5cvR3R0NM4//3zU1dV1/RQUFCAiIgJr164FALz//vvw+Xy49dZbg74au/322//t2Hbv3o2SkhLcfvvtiImJCfrdp7d1rvj9frz33nu49NJL0a9fvy49NTUV3/nOd/DRRx+hubk56N/cdNNNQa81efJk+P1+nDx5sku74YYboJT6tzbq7hyLd955B2PHjsWkSZO6tIiICNx0000oLS3FoUOHAAArV65Enz59cPHFF3fVOZ1O/OAHP/jsg/F/nDlzBlarFREREedUz3C73XA4HJrudDq7fv/p/zWq/eT3n/U6drud/u7T//7fvc6na9LT07F7927s3r0bBw8exLp16xAREYFf//rXGDhwIK666ip89NFHGDduHDIyMvCTn/wEPp9P225sbCzq6uo+c/zCF8Ma6gEIXz6LFy/GgAEDYLVakZycjIEDB2rf+1utVu078GPHjqGpqQlJSUl0uzU1NQDQ9Uadm5sb9PvExMSg794Zn3wdOHTo0HPfoc+gtrYW7e3tGDhwoPa7QYMGIRAIoLy8HEOGDOnSMzMzg+o+GfPZ61znQneOxcmTJ+nflwwaNKjr90OHDsXJkyeRk5OjTcj9+/fv9vg+Ly6XC16vV9M9Hk/X7z/9v0a1n/z+s16Hvfmf/e//3et8ugYAbDYb8vPzu/77yJEj+POf/4xNmzahvr4ec+fOxd13341p06bhe9/7Hh544AH8+te/DtquUupzfSgSzh2ZgHohY8eOpd+VfxqHw6FNSoFAAElJSXj++efpv0lMTPzSxhhKLBYL1VUv6U4fHx+Pzs5OtLS0IDIy8nNtIzU1FadPn9b0yspKAEBaWlpX3af1s2s/qfus1/H7/aipqQn64OPz+XDmzJmufx8XFweHw2H4Op8eE+OOO+7Addddh1GjRuHZZ59FXFwcFi5cCAC466676ATU0NCAhISEzxy/8MWQr+CELnJycnDmzBlMnDgRM2fO1H5GjBgBAMjKygLw8RPTp6mtrf23TxE5OTkAgAMHDnxm3bl+8kxMTERYWBiKioq03x05cgRmsxkZGRnntK3PQ3eORVZWluE4P72trKwsFBcXaxPi8ePHz2lMeXl5AP7levw85Ofn4+jRo9rXl5+YOj55uhg6dCisVit27NgRVOfz+bBnz56gpxCj1wGg/fsdO3YgEAh0/d5sNmPYsGFa3Sdj6tevn+Fk+9Zbb2HTpk343e9+BwCoqKjomjiBjycuNtmWlJR0PZ0KXw0yAQldXHnllfD7/fjNb36j/a6zsxONjY0APl5jstlsePzxx4PeJB999NF/+xqjRo1CdnY2Hn300a7tfcKntxUeHg4AWs3ZWCwWzJo1C6+//jpKS0u79OrqarzwwguYNGmS5uQ6F87Vht2dY3HBBRdg27Zt2Lx5c5fW1taGJ598En379sXgwYMBALNnz8bp06eD/hLf4/HgqaeeOqexFxYWAtDf1LvD5ZdfDr/fjyeffLJL83q9WLp0adfaCfCxW2zmzJl47rnnulxowMfuxdbWVlxxxRVdWnt7O44cORK0rjJ9+nTExcVhyZIlQa+/ZMkShIWFYe7cuUFj2r59e9B+FRUV4YMPPgh6nU/j8/lw55134pe//GXXE1ZycjKOHz+Ozs5OAMDhw4eRkpIS9O+amppQXFyMCRMmnNsBEz4fITRACF8yRn+Iejbz589X4eHh9Hc//OEPFQA1Z84c9cgjj6g//elP6rbbblNpaWlq+fLlXXULFy5UANQFF1yg/vSnP6kbb7xRpaWlqYSEhM90wSn1savOZrOprKws9atf/Uo98cQT6o477lCzZs3qqnnppZcUAPXd735XPffcc+rFF1/s+h3OcsEdOHBAhYeHqz59+qgHHnhAPfTQQ6pfv37K4XCoLVu2/Nvjw8Z4ri647hyLqqoqlZycrKKjo9U999yjHnnkEZWfn69MJpN69dVXu+paWlpU3759lcvlUnfffbd67LHH1NixY1V+fr4CoNatW/dvxzR06FD6l/7r169Xv/nNb9RvfvMblZSUpPr27dv13+vXrw+qveKKK5TValU///nP1RNPPKEmTJigrFarVrdz507lcDiCkhCcTmfQ+VTqX8f50+dOqX+52C6//HL11FNPqeuvv14BUA888EBQXXNzs8rJyVFJSUnq4YcfVo888ojKyMhQaWlpqqamhh6Hhx9+WOXm5iqv19ulVVdXq7CwMHXFFVeoRx55RMXFxam77ror6N+9/PLLCoA6fvw4P8DCl4JMQL2IL2MCUkqpJ598UhUUFCiXy6UiIyPVsGHD1F133aUqKiq6avx+v/r1r3+tUlNTlcvlUlOnTlUHDhzQ/vqfvbkrpdRHH32kzj//fBUZGanCw8PV8OHD1eOPP971+87OTnXrrbeqxMREZTKZgizZ7E1s165davbs2SoiIkKFhYWpadOmqU2bNp3T8fmiE9C5HgullCouLlaXX365iomJUU6nU40dO1a99dZb2jZPnDih5s6dq1wul0pMTFQ//elP1SuvvKIABE2qRvzhD39QERERqr29PUi/7777uuzJZ/+cfUzdbrf62c9+plJSUpTD4VBjxoxRK1eupK/34YcfqgkTJiin06kSExPVggULVHNzc1CN0QSk1MfX3MCBA5Xdblc5OTnqkUceCbK1f0J5ebm6/PLLVVRUlIqIiFAXXnihOnbsGB1TVVWVioyMVG+88Yb2u3fffVfl5eWpmJgYdf3112sxVVdddZWaNGkS3a7w5WFSqpesvApCL+fRRx/FHXfcgVOnTmmW+rNpampCv3798PDDD+PGG2/8D42wd1BVVYXs7GwsW7YMl1xySaiH06uRCUgQeiButzvIVuzxeDBy5Ej4/X4cPXr0nLbx0EMPYenS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","text/plain":["<Figure size 640x480 with 1 Axes>"]},"metadata":{},"output_type":"display_data"}],"source":["plt.imshow(test_image)\n","plt.title(f'Prediction: {prediction} ({confidence_percentage:.2f}%)')\n","plt.axis('on')\n","plt.show()"]}],"metadata":{"kaggle":{"accelerator":"gpu","dataSources":[{"datasetId":4525768,"sourceId":7742766,"sourceType":"datasetVersion"}],"dockerImageVersionId":30747,"isGpuEnabled":true,"isInternetEnabled":true,"language":"python","sourceType":"notebook"},"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.10.13"}},"nbformat":4,"nbformat_minor":4}
cat_dog_classifier.py ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from PIL import Image
3
+ import numpy as np
4
+ import tensorflow as tf
5
+ from tensorflow.keras.preprocessing import image
6
+
7
+ # Load the pre-trained model (ensure this path points to your actual model weights)
8
+ model = tf.keras.models.Sequential([
9
+ tf.keras.layers.Conv2D(filters=32, kernel_size=3, activation='relu', input_shape=(64, 64, 3)),
10
+ tf.keras.layers.MaxPooling2D(pool_size=2, strides=2),
11
+ tf.keras.layers.Conv2D(filters=32, kernel_size=3, activation='relu'),
12
+ tf.keras.layers.MaxPooling2D(pool_size=2, strides=2),
13
+ tf.keras.layers.Flatten(),
14
+ tf.keras.layers.Dense(units=128, activation='relu'),
15
+ tf.keras.layers.Dense(units=1, activation='sigmoid')
16
+ ])
17
+
18
+ model.load_weights('/home/hks/ml/Predictions/cnn_weights.weights.h5')
19
+
20
+ # Function to classify the image
21
+ def classify_image(image_path):
22
+ test_image = image.load_img(image_path, target_size=(64, 64))
23
+ test_image_array = image.img_to_array(test_image)
24
+ test_image_array = np.expand_dims(test_image_array, axis=0)
25
+ test_image_array /= 255.0
26
+
27
+ result = model.predict(test_image_array)
28
+ confidence = result[0][0]
29
+
30
+ if confidence > 0.5:
31
+ prediction = 'dog'
32
+ confidence_percentage = confidence * 100
33
+ else:
34
+ prediction = 'cat'
35
+ confidence_percentage = (1 - confidence) * 100
36
+
37
+ return prediction, confidence_percentage
38
+
39
+ # Streamlit app
40
+ st.title("Cat vs Dog Classifier")
41
+
42
+ uploaded_file = st.file_uploader("Choose an image...", type=["jpg", "jpeg", "png"])
43
+ if uploaded_file is not None:
44
+ # Display the image
45
+ img = Image.open(uploaded_file)
46
+ st.image(img, caption='Uploaded Image.', use_column_width=True)
47
+
48
+ # Get prediction and confidence
49
+ prediction, confidence = classify_image(uploaded_file)
50
+ st.write(f'Prediction: **{prediction}** ({confidence:.2f}%)')
cnn_weights.weights.h5 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:772c8df4783545466972e2865cfa4ba7f5abc978a1a17117513db04aacf0d485
3
+ size 9785568
dog.jpeg ADDED
prediction.py ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import tkinter as tk
2
+ from tkinter import filedialog
3
+ from PIL import Image, ImageTk
4
+ import numpy as np
5
+ import tensorflow as tf
6
+ from tensorflow.keras.preprocessing import image
7
+
8
+ # Load the pre-trained model (ensure this path points to your actual model weights)
9
+ model = tf.keras.models.Sequential([
10
+ tf.keras.layers.Conv2D(filters=32, kernel_size=3, activation='relu', input_shape=(64, 64, 3)),
11
+ tf.keras.layers.MaxPooling2D(pool_size=2, strides=2),
12
+ tf.keras.layers.Conv2D(filters=32, kernel_size=3, activation='relu'),
13
+ tf.keras.layers.MaxPooling2D(pool_size=2, strides=2),
14
+ tf.keras.layers.Flatten(),
15
+ tf.keras.layers.Dense(units=128, activation='relu'),
16
+ tf.keras.layers.Dense(units=1, activation='sigmoid')
17
+ ])
18
+
19
+ model.load_weights('/home/hks/ml/Predictions/cnn_weights.weights.h5')
20
+
21
+ # Function to classify the image
22
+ def classify_image(image_path):
23
+ test_image = image.load_img(image_path, target_size=(64, 64))
24
+ test_image_array = image.img_to_array(test_image)
25
+ test_image_array = np.expand_dims(test_image_array, axis=0)
26
+ test_image_array /= 255.0
27
+
28
+ result = model.predict(test_image_array)
29
+ confidence = result[0][0]
30
+
31
+ if confidence > 0.5:
32
+ prediction = 'dog'
33
+ confidence_percentage = confidence * 100
34
+ else:
35
+ prediction = 'cat'
36
+ confidence_percentage = (1 - confidence) * 100
37
+
38
+ return prediction, confidence_percentage
39
+
40
+ # Function to handle file dialog and display the image and result
41
+ def load_and_predict():
42
+ file_path = filedialog.askopenfilename()
43
+ if file_path:
44
+ # Display the image
45
+ img = Image.open(file_path)
46
+ img.thumbnail((250, 250))
47
+ img_tk = ImageTk.PhotoImage(img)
48
+ panel.config(image=img_tk)
49
+ panel.image = img_tk
50
+
51
+ # Get prediction and confidence
52
+ prediction, confidence = classify_image(file_path)
53
+ result_label.config(text=f'Prediction: {prediction} ({confidence:.2f}%)')
54
+
55
+ # GUI setup
56
+ root = tk.Tk()
57
+ root.title("Cat vs Dog Classifier")
58
+
59
+ panel = tk.Label(root)
60
+ panel.pack()
61
+
62
+ button = tk.Button(root, text="Select an Image", command=load_and_predict)
63
+ button.pack()
64
+
65
+ result_label = tk.Label(root, text="")
66
+ result_label.pack()
67
+
68
+ root.mainloop()
requirements.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ streamlit==1.24.1
2
+ tensorflow==2.12.0
3
+ pillow==9.4.0