{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Color Detector\n", "\n", "\n", "\n", "This notebook shows primary color analysis of color image using K-Means algorithm.\n", "The output are N primary colors and their corresponding percentage.\n", "\n", "The first cell is only run on google colab and installs the [ammico](https://github.com/ssciwr/AMMICO) package.\n", "\n", "After that, we can import `ammico` and read in the files given a folder path." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2024-01-15T11:10:06.893784Z", "iopub.status.busy": "2024-01-15T11:10:06.893592Z", "iopub.status.idle": "2024-01-15T11:10:06.901045Z", "shell.execute_reply": "2024-01-15T11:10:06.900549Z" } }, "outputs": [], "source": [ "# if running on google colab\n", "# flake8-noqa-cell\n", "import os\n", "\n", "if \"google.colab\" in str(get_ipython()):\n", " # update python version\n", " # install setuptools\n", " # %pip install setuptools==61 -qqq\n", " # install ammico\n", " %pip install git+https://github.com/ssciwr/ammico.git -qqq\n", " # mount google drive for data and API key\n", " from google.colab import drive\n", "\n", " drive.mount(\"/content/drive\")" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2024-01-15T11:10:06.903564Z", "iopub.status.busy": "2024-01-15T11:10:06.903204Z", "iopub.status.idle": "2024-01-15T11:10:20.918642Z", "shell.execute_reply": "2024-01-15T11:10:20.917797Z" } }, "outputs": [], "source": [ "import ammico\n", "from ammico import utils as mutils\n", "from ammico import display as mdisplay\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We select a subset of image files to try the color analysis on, see the `limit` keyword. The `find_files` function finds image files within a given directory:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2024-01-15T11:10:20.922071Z", "iopub.status.busy": "2024-01-15T11:10:20.921343Z", "iopub.status.idle": "2024-01-15T11:10:20.926372Z", "shell.execute_reply": "2024-01-15T11:10:20.925792Z" } }, "outputs": [], "source": [ "# Here you need to provide the path to your google drive folder\n", "# or local folder containing the images\n", "image_dict = mutils.find_files(\n", " path=\"data/\",\n", " limit=10,\n", ")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To check the analysis, you can inspect the analyzed elements here. Loading the results takes a moment, so please be patient. If you are sure of what you are doing, you can skip this and directly export a csv file in the step below.\n", "Here, we display the color detection results provided by `colorgram` and `colour` libraries. Click on the tabs to see the results in the right sidebar. You may need to increment the `port` number if you are already running several notebook instances on the same server." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2024-01-15T11:10:20.929815Z", "iopub.status.busy": "2024-01-15T11:10:20.929407Z", "iopub.status.idle": "2024-01-15T11:10:20.965670Z", "shell.execute_reply": "2024-01-15T11:10:20.964719Z" } }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "analysis_explorer = mdisplay.AnalysisExplorer(image_dict)\n", "analysis_explorer.run_server(port = 8057)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Instead of inspecting each of the images, you can also directly carry out the analysis and export the result into a csv. This may take a while depending on how many images you have loaded." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2024-01-15T11:10:20.968930Z", "iopub.status.busy": "2024-01-15T11:10:20.968358Z", "iopub.status.idle": "2024-01-15T11:10:26.328182Z", "shell.execute_reply": "2024-01-15T11:10:26.327484Z" } }, "outputs": [], "source": [ "for key in image_dict.keys():\n", " image_dict[key] = ammico.colors.ColorDetector(image_dict[key]).analyse_image()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "These steps are required to convert the dictionary of dictionarys into a dictionary with lists, that can be converted into a pandas dataframe and exported to a csv file." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2024-01-15T11:10:26.331271Z", "iopub.status.busy": "2024-01-15T11:10:26.330894Z", "iopub.status.idle": "2024-01-15T11:10:26.334703Z", "shell.execute_reply": "2024-01-15T11:10:26.334030Z" } }, "outputs": [], "source": [ "image_df = ammico.get_dataframe(image_dict)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check the dataframe:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2024-01-15T11:10:26.338776Z", "iopub.status.busy": "2024-01-15T11:10:26.338287Z", "iopub.status.idle": "2024-01-15T11:10:26.350669Z", "shell.execute_reply": "2024-01-15T11:10:26.350034Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
filenameredgreenblueyellowcyanorangepurplepinkbrowngreywhiteblack
0data/106349S_por.png0.010.010.050.0000.220.00.030.680.000.00
1data/102141_2_eng.png0.040.030.020.0000.010.00.320.230.310.05
2data/102730_eng.png0.050.000.000.0000.000.00.000.660.020.27
\n", "
" ], "text/plain": [ " filename red green blue yellow cyan orange purple \\\n", "0 data/106349S_por.png 0.01 0.01 0.05 0.0 0 0 0.22 \n", "1 data/102141_2_eng.png 0.04 0.03 0.02 0.0 0 0 0.01 \n", "2 data/102730_eng.png 0.05 0.00 0.00 0.0 0 0 0.00 \n", "\n", " pink brown grey white black \n", "0 0.0 0.03 0.68 0.00 0.00 \n", "1 0.0 0.32 0.23 0.31 0.05 \n", "2 0.0 0.00 0.66 0.02 0.27 " ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "image_df.head(10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Write the csv file - here you should provide a file path and file name for the csv file to be written." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2024-01-15T11:10:26.353181Z", "iopub.status.busy": "2024-01-15T11:10:26.352811Z", "iopub.status.idle": "2024-01-15T11:10:26.357012Z", "shell.execute_reply": "2024-01-15T11:10:26.356396Z" } }, "outputs": [], "source": [ "image_df.to_csv(\"data_out.csv\")" ] } ], "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.9.18" } }, "nbformat": 4, "nbformat_minor": 2 }