{ "cells": [ { "cell_type": "code", "execution_count": 24, "id": "9330c509-d3bb-49b4-bb6b-6b32496392db", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: matplotlib in c:\\users\\prisc\\anaconda3\\lib\\site-packages (3.8.4)\n", "Requirement already satisfied: contourpy>=1.0.1 in c:\\users\\prisc\\anaconda3\\lib\\site-packages (from matplotlib) (1.2.0)\n", "Requirement already satisfied: cycler>=0.10 in c:\\users\\prisc\\anaconda3\\lib\\site-packages (from matplotlib) (0.11.0)\n", "Requirement already satisfied: fonttools>=4.22.0 in c:\\users\\prisc\\anaconda3\\lib\\site-packages (from matplotlib) (4.51.0)\n", "Requirement already satisfied: kiwisolver>=1.3.1 in c:\\users\\prisc\\anaconda3\\lib\\site-packages (from matplotlib) (1.4.4)\n", "Requirement already satisfied: numpy>=1.21 in c:\\users\\prisc\\anaconda3\\lib\\site-packages (from matplotlib) (1.26.4)\n", "Requirement already satisfied: packaging>=20.0 in c:\\users\\prisc\\anaconda3\\lib\\site-packages (from matplotlib) (23.2)\n", "Requirement already satisfied: pillow>=8 in c:\\users\\prisc\\anaconda3\\lib\\site-packages (from matplotlib) (10.3.0)\n", "Requirement already satisfied: pyparsing>=2.3.1 in c:\\users\\prisc\\anaconda3\\lib\\site-packages (from matplotlib) (3.0.9)\n", "Requirement already satisfied: python-dateutil>=2.7 in c:\\users\\prisc\\anaconda3\\lib\\site-packages (from matplotlib) (2.9.0.post0)\n", "Requirement already satisfied: six>=1.5 in c:\\users\\prisc\\anaconda3\\lib\\site-packages (from python-dateutil>=2.7->matplotlib) (1.16.0)\n" ] } ], "source": [ "!pip install matplotlib" ] }, { "cell_type": "code", "execution_count": 22, "id": "d696d8bb-1f96-4829-bbba-9e4eab24c5ec", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "<Figure size 640x480 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import skimage\n", "import sklearn\n", "import numpy as np\n", "import tensorflow as tf\n", "import keras\n", "import os\n", "import matplotlib.pyplot as plt\n", "from PIL import Image\n", "from sklearn.model_selection import StratifiedShuffleSplit\n", "from PIL import Image\n", "import cv2\n", "\n", "dataset_path = os.path.abspath(\"Dataset/Cropped\")\n", "\n", "# Import labeled dataset.\n", "os.listdir(dataset_path)\n", "images = []\n", "image_labels = []\n", "numbers = [\"zero\",\"one\",\"two\",\"three\",\"four\",\"five\",\"six\"]\n", "for filename in os.listdir(dataset_path):\n", " # Re-scale images\n", " path = os.path.join(dataset_path,filename) \n", " img = Image.open(path)\n", " height = int(img.height)\n", " width = int(img.width)\n", " if (height > width):\n", " new_width = 32\n", " new_height = int(new_width * height / width)\n", " img = img.resize((new_width,new_height))\n", " diff = img.height - img.width\n", " img = img.crop((0,diff/2,32,img.height-diff/2))\n", " elif (width > height):\n", " new_height = 32\n", " new_width = int(new_height * width / height)\n", " img = img.resize((new_width,new_height))\n", " diff = img.width - img.height\n", " img = img.crop((diff/2,0,img.width-diff/2,32))\n", " alpha = 1.5\n", " beta = 10\n", " img_contrast_up = cv2.convertScaleAbs(img, alpha=alpha, beta=beta)\n", " images.append(np.array(img))\n", " image_labels.append(numbers.index(filename.split(sep=\"_\")[0]))\n", " plt.imshow(img_contrast_up)\n", "\n", "# Split into test and training sets.\n", "sss = StratifiedShuffleSplit(20,train_size=0.75,random_state=0)\n", "sss.get_n_splits(images,image_labels)\n", "\n", "#for i, (train_index, test_index) in enumerate(sss.split(images, image_labels)):\n", "# print(f\"Fold {i}:\")\n", "# print(f\" Train: index={train_index}\")\n", "# print(f\" Test: index={test_index}\")\n", "\n", "# Train neural network\n", "model = keras.models.Sequential([\n", " # Input\n", " # Convolutional layers\n", " # Flatten\n", "])\n", "\n", "# Image analysis\n", "\n", "# Image segmentation.\n", "\n", "# " ] }, { "cell_type": "markdown", "id": "e39db9ae", "metadata": {}, "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.12.3" } }, "nbformat": 4, "nbformat_minor": 5 }