Team Ai
Apppublic

Tabas34/electronics-recogniser_test

sourceHugging Facemitupdated 3y agoView on Hugging Face
0likes
app.ipynb460 linesDownload Raw Back to root
1{2  "cells": [3    {4      "cell_type": "code",5      "execution_count": 1,6      "metadata": {7        "id": "LZoKg5OP8qlX"8      },9      "outputs": [],10      "source": [11        "#|default_exp app"12      ]13    },14    {15      "cell_type": "markdown",16      "metadata": {17        "id": "D5u_P9GY8zWE"18      },19      "source": [20        "# Electronics-Recognizer"21      ]22    },23    {24      "cell_type": "code",25      "execution_count": null,26      "metadata": {27        "id": "INF-un9I824k"28      },29      "outputs": [],30      "source": [31        "!pip install -Uqq fastai gradio nbdev"32      ]33    },34    {35      "cell_type": "code",36      "execution_count": 2,37      "metadata": {38        "colab": {39          "base_uri": "https://localhost:8080/"40        },41        "id": "qLu7VFS8BYp-",42        "outputId": "b4c3195a-ebe2-4388-bb03-03b83cbe123f"43      },44      "outputs": [45        {46          "name": "stdout",47          "output_type": "stream",48          "text": [49            "Mounted at /content/drive\n"50          ]51        }52      ],53      "source": [54        "from google.colab import drive\n",55        "drive.mount('/content/drive')"56      ]57    },58    {59      "cell_type": "code",60      "execution_count": 3,61      "metadata": {62        "colab": {63          "base_uri": "https://localhost:8080/"64        },65        "id": "cA86MXQHBdQO",66        "outputId": "d84897d0-e727-481f-e95f-e357ae866810"67      },68      "outputs": [69        {70          "name": "stdout",71          "output_type": "stream",72          "text": [73            "/content/drive/My Drive/MasterCourse/Electronics Recognizer\n"74          ]75        }76      ],77      "source": [78        "%cd /content/drive/My Drive/MasterCourse/Electronics Recognizer"79      ]80    },81    {82      "cell_type": "code",83      "execution_count": 3,84      "metadata": {85        "id": "Y0_5XDt6EQ3i"86      },87      "outputs": [88        {89          "ename": "ModuleNotFoundError",90          "evalue": "No module named 'fastai'",91          "output_type": "error",92          "traceback": [93            "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",94            "\u001b[0;31mModuleNotFoundError\u001b[0m                       Traceback (most recent call last)",95            "Cell \u001b[0;32mIn[3], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mfastai\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mvision\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mall\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;241m*\u001b[39m\n",96            "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'fastai'"97          ]98        }99      ],100      "source": [101        "from fastai.vision.all import *"102      ]103    },104    {105      "cell_type": "code",106      "execution_count": 29,107      "metadata": {108        "id": "OP0blxkf9Dgq"109      },110      "outputs": [],111      "source": [112        "#!export\n",113        "from fastai.vision.all import load_learner\n",114        "import gradio as gr"115      ]116    },117    {118      "cell_type": "code",119      "execution_count": 30,120      "metadata": {121        "id": "AOZzLKz7-TDR"122      },123      "outputs": [],124      "source": [125        "#!export\n",126        "model=load_learner(f'models/elec-recognizer-v4.pkl')"127      ]128    },129    {130      "cell_type": "code",131      "execution_count": 58,132      "metadata": {133        "id": "MhikeFNb-TL-"134      },135      "outputs": [],136      "source": [137        "#|export\n",138        "elec_labels=(\n",139        "    'Air Conditioner appliances',\n",140        "    'Air Fryer appliances',\n",141        "    'Blender appliances',\n",142        "    'Clothes Dryer appliances',\n",143        "    'Coffee Maker appliances',\n",144        "    'Dish Washer appliances',\n",145        "    'Electric Guitar appliances',\n",146        "    'Electric toothbrush appliances',\n",147        "    'Fan appliances',\n",148        "    'Griller appliances',\n",149        "    'Hair dryer appliances',\n",150        "    'Heater appliances',\n",151        "    'Induction cooktop appliances ',\n",152        "    'Iron appliances',\n",153        "    'Kettle appliances',\n",154        "    'Microwave appliances',\n",155        "    'Mixer appliances',\n",156        "    'Refrigerator appliances',\n",157        "    'Rice Cooker appliances',\n",158        "    'Speaker appliances',\n",159        "    'Toaster appliances',\n",160        "    'Vacuum Cleaner appliances'\n",161        ")\n",162        "def recognize_image(image):\n",163        "  # image = input_image.resize((192, 192))\n",164        "  pred,idx,probs=model.predict(image)\n",165        "  return dict(zip(elec_labels,map(float,probs)))\n",166        "\n"167      ]168    },169    {170      "cell_type": "code",171      "execution_count": 59,172      "metadata": {173        "colab": {174          "base_uri": "https://localhost:8080/",175          "height": 209176        },177        "id": "QbaQLkZqAlh4",178        "outputId": "35550e4a-7525-4ddc-fbf0-fe2208f7c292"179      },180      "outputs": [181        {182          "data": {183            "image/png": "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H/H78OHDd9111969e/fu3bu0tPT5z39+w4YNt956648e/NG7/su7Hn300SRJvn7X1x959JE3vOENX/3qV2dnZz/ykY88+OCDhw8fvv3224MguO+++6y111577be//e0rrrhicHDwzn++c2Zm5sMf/vCDDz743HPPvetd79q3b993v/vdX/ziF9dff325XFbVu++++8orr9yyZQuA6enpr3/965VK5bd+67ceeeSRn/zkJ7fddtuuXbt++MMfnjx58uqrrz5w4MDWrVvf8573+Ce1d2ySJLnrrruyLOu0OwcPHvyDP/iDycnJ733ve/v37//CF75www03bNu27cc//vH+/ft/7/d+D8CJEyd++tOf1ut1Ipqfn9+4ceOHPvShv/mbv7n77rsXFhY++9nP/vVf//Wjjz46Ozv7V3/1V5s2bXLO3X///X/xF39x55133n///XfcccerzIzzYC1U9Zvf/KaIbN++nYiazea+ffseeuih//iP/3jgwQcAPPLII81mc9OmTTfddNN11103Pj5+2223PfTQQ/fee6+19h//8R+feOKJe+65541vfOO3v/3tIAi2bt26e/fuiU0Tt91228MPP/zYY49dffXV//zP//ytb33r3//932+55ZYwDLMs+/znP3/y5MmRkREAzrl/+Id/qFQql19++aOPPnrvvffecMMNX/3qVx944IHvfOc7e/bs+bu/+7udO3f+4Ac/eP7554loYWHhT//0TycnJwFkWfa1r33tmmuuuf7664np9ttvv/TSS48ePXrZZZd973vfe+ihh+66665vfetbzHzffff9j4//j+9///vjY+N/9Ed/tG3bNufctm3b3v3ud3/2s58tlUp79uyZnp5+5JFHjh49Ojg4ODU19alPfeqv//qv2+323r17P/7xjx84cOCaa6559cfoPNCCiG6++ebh4eGDBw+mabpt2za/wHdmZqZUKgEIw3BocGh0dPSyyy7bvXv34ODgvn37Dh8+7Jfx7Nmzh4iuvPLKffv2ve1tbyuXy88888zQ0NDw0PC+ffuOHj164403vvWtb63Vavfff/+b3/zmq6666oorrqjX6z/72c/27NnjN41aWlxaWFj4tV/7tauvvnpqaurqq6++8cYbt2/ffvjw4Ysuuujtb397pVJ55zvfuXnz5pmZGQBxHF933XX+s7/85S//6Z/+6YEHHrjvvvvuuuuuIAh+8IMfLC4uvuMd7/jZ4z/7sz/7s7/8y7+8++67d+/e/YUvfOG//7f//v3vf7/dbsdx7B2FpaUlIvrkJz/pHdJ3vOMdnqBXXXXVpz/96c997nNE9KUvfWlycvLzn//8HXfccf/997/6Y3QeJhFVLZfLe/fu/cpXvrJx40bvEKRpOlAbmJ+ff/TRR59++unLL7+ciB577LENGzZYaw8cOLBz585ms/mOd7zDGDM1NeVdtnK5vHv37rvuuuuGG26w1j722GNbtmx5+OGHK5VKvV6/4YYbHn30Uf/B0dHRD33oQ//6r/+6a9euMAwHBgZqtdq99967Z8+ewcHBhx9+eOfOnUePHr3mmmsOHDiAwvXzvTgBVCqV3/mdfBXyrl27PvOZz7Tb7Weeeeayyy67++67v/nNb37sYx+bm5vbOLHx0KFDzWZzfHz8xOSJ//zP/5yZmRkbGwvC4PDhw6dOnTp8+PDS0pK3YWmajo6O7tix49FHH/3IRz6SJMkjjzwyPDxcr9f37dt38ODBJ5988tlnn63Vaq/+GJ0HWvgn5sEHH3zve9+7Z8+et7zlLQCuvvrqnTt3Dg4NPvDAAzfffPP27dvf/e5333vvvc1m8z3vec8TTzzxu7/7u0mSfO1rX/uN3/iNXbt2eVd/YWHh4YcfvuOOO8bHx3/913/98ccff//73590kh/+8Ifvf//7r7jiClW955573vnOd95www3XXHNNkiSzs7PHjh27/vrrP/KRj9x5551Zlt1xxx3M/N3vfve9733v7t27oyjyD3EQBNdec+3GjRt7T96vOnz9618PoNVqXX755ffcc8/GjRu/8Y1vXHLJJe973/u+/OUvP/bYYx/72MestXd/++5yufz7v//7zPxv//Zvl1566b333vvBD37w+PHj3/ve927/zdsvvvjiH/3oR7fccsvWrVvTNJ2amnrggQduueWWt771rRMbJu757j2bNm36wAc+cB7GqC8EvTyc2wKcC62c54KmxenntureXWh38zWDC1Tl7OP84v8H29tfIlmkmoMAAAAASUVORK5CYII=",184            "text/plain": [185              "<PIL.Image.Image image mode=RGB size=178x192>"186            ]187          },188          "execution_count": 59,189          "metadata": {},190          "output_type": "execute_result"191        }192      ],193      "source": [194        "from PIL import Image\n",195        "img = Image.open(f'test_images/unknown_01.jpg.webp')\n",196        "img.to_thumb(192,192)\n"197      ]198    },199    {200      "cell_type": "code",201      "execution_count": 60,202      "metadata": {203        "colab": {204          "base_uri": "https://localhost:8080/",205          "height": 34206        },207        "id": "3lO0BvD0Alka",208        "outputId": "bc42af45-ab46-4915-b8ac-341c350bb334"209      },210      "outputs": [211        {212          "data": {213            "text/html": [214              "\n",215              "<style>\n",216              "    /* Turns off some styling */\n",217              "    progress {\n",218              "        /* gets rid of default border in Firefox and Opera. */\n",219              "        border: none;\n",220              "        /* Needs to be in here for Safari polyfill so background images work as expected. */\n",221              "        background-size: auto;\n",222              "    }\n",223              "    progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",224              "        background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",225              "    }\n",226              "    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",227              "        background: #F44336;\n",228              "    }\n",229              "</style>\n"230            ],231            "text/plain": [232              "<IPython.core.display.HTML object>"233            ]234          },235          "metadata": {},236          "output_type": "display_data"237        },238        {239          "data": {240            "text/html": [],241            "text/plain": [242              "<IPython.core.display.HTML object>"243            ]244          },245          "metadata": {},246          "output_type": "display_data"247        },248        {249          "data": {250            "text/plain": [251              "22"252            ]253          },254          "execution_count": 60,255          "metadata": {},256          "output_type": "execute_result"257        }258      ],259      "source": [260        "len(recognize_image(img))"261      ]262    },263    {264      "cell_type": "code",265      "execution_count": 61,266      "metadata": {267        "colab": {268          "base_uri": "https://localhost:8080/",269          "height": 391270        },271        "id": "UKO9_iXtCiEY",272        "outputId": "74d36e9b-46f6-4740-ffbb-9d6b8e886f2a"273      },274      "outputs": [275        {276          "data": {277            "text/html": [278              "\n",279              "<style>\n",280              "    /* Turns off some styling */\n",281              "    progress {\n",282              "        /* gets rid of default border in Firefox and Opera. */\n",283              "        border: none;\n",284              "        /* Needs to be in here for Safari polyfill so background images work as expected. */\n",285              "        background-size: auto;\n",286              "    }\n",287              "    progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",288              "        background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",289              "    }\n",290              "    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",291              "        background: #F44336;\n",292              "    }\n",293              "</style>\n"294            ],295            "text/plain": [296              "<IPython.core.display.HTML object>"297            ]298          },299          "metadata": {},300          "output_type": "display_data"301        },302        {303          "data": {304            "text/html": [],305            "text/plain": [306              "<IPython.core.display.HTML object>"307            ]308          },309          "metadata": {},310          "output_type": "display_data"311        },312        {313          "data": {314            "text/plain": [315              "{'Air Conditioner appliances': 3.789353553163011e-11,\n",316              " 'Air Fryer appliances': 2.6762986271577915e-10,\n",317              " 'Blender appliances': 1.2193573262209156e-08,\n",318              " 'Clothes Dryer appliances': 8.451239708051617e-12,\n",319              " 'Coffee Maker appliances': 5.264509661540018e-11,\n",320              " 'Dish Washer appliances': 3.880323579813494e-12,\n",321              " 'Electric Guitar appliances': 1.1970174851327897e-10,\n",322              " 'Electric toothbrush appliances': 1.2677254801474191e-08,\n",323              " 'Fan appliances': 2.837603485517093e-10,\n",324              " 'Griller appliances': 5.64121145629759e-11,\n",325              " 'Hair dryer appliances': 1.0,\n",326              " 'Heater appliances': 3.0702532183291e-10,\n",327              " 'Induction cooktop appliances ': 9.259662481220232e-12,\n",328              " 'Iron appliances': 3.7239260564092547e-09,\n",329              " 'Kettle appliances': 2.4638766027429426e-10,\n",330              " 'Microwave appliances': 2.3231638834886326e-11,\n",331              " 'Mixer appliances': 5.283133930333861e-09,\n",332              " 'Refrigerator appliances': 8.410640239819855e-11,\n",333              " 'Rice Cooker appliances': 6.860782081341554e-11,\n",334              " 'Speaker appliances': 4.12378753367193e-09,\n",335              " 'Toaster appliances': 6.427430809807788e-11,\n",336              " 'Vacuum Cleaner appliances': 3.512485857726233e-09}"337            ]338          },339          "execution_count": 61,340          "metadata": {},341          "output_type": "execute_result"342        }343      ],344      "source": [345        "recognize_image(img)"346      ]347    },348    {349      "cell_type": "code",350      "execution_count": 65,351      "metadata": {352        "colab": {353          "base_uri": "https://localhost:8080/"354        },355        "id": "iKv7ghwxFdL3",356        "outputId": "63a20df4-d83c-48c8-8e87-f26ccd4e1c64"357      },358      "outputs": [359        {360          "name": "stdout",361          "output_type": "stream",362          "text": [363            "Colab notebook detected. To show errors in colab notebook, set debug=True in launch()\n",364            "Running on public URL: https://ac69e31870d5249e02.gradio.live\n",365            "\n",366            "This share link expires in 72 hours. For free permanent hosting and GPU upgrades, run `gradio deploy` from Terminal to deploy to Spaces (https://huggingface.co/spaces)\n"367          ]368        },369        {370          "data": {371            "text/plain": []372          },373          "execution_count": 65,374          "metadata": {},375          "output_type": "execute_result"376        }377      ],378      "source": [379        "#!export\n",380        "\n",381        "image = gr.Image()\n",382        "label = gr.Label()\n",383        "examples=[\n",384        "    'test_images/unknown_00.jpg',\n",385        "    'test_images/unknown_01.jpg.webp',\n",386        "    'test_images/unknown_02.webp',\n",387        "    'test_images/unknown_03.jpeg',\n",388        "    'test_images/unknown_04.jpg'\n",389        "]\n",390        "\n",391        "iface = gr.Interface(fn=recognize_image, inputs=image, outputs=label,examples=examples)\n",392        "iface.launch(inline=False,share=True)"393      ]394    },395    {396      "cell_type": "markdown",397      "metadata": {398        "id": "-RKZtKB1ZZdy"399      },400      "source": [401        "# Notebook to Python Script Export"402      ]403    },404    {405      "cell_type": "code",406      "execution_count": 66,407      "metadata": {408        "colab": {409          "base_uri": "https://localhost:8080/",410          "height": 327411        },412        "id": "Ybr_TNnBZelD",413        "outputId": "61dc9f92-f0c4-4f14-9e94-8aa9dca1ad5f"414      },415      "outputs": [416        {417          "ename": "ImportError",418          "evalue": "ignored",419          "output_type": "error",420          "traceback": [421            "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",422            "\u001b[0;31mImportError\u001b[0m                               Traceback (most recent call last)",423            "\u001b[0;32m<ipython-input-66-f5b9b5dbca04>\u001b[0m in \u001b[0;36m<cell line: 1>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mnbdev\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexport\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mnotebook2script\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      2\u001b[0m \u001b[0mnotebook2script\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'app.ipynb'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",424            "\u001b[0;31mImportError\u001b[0m: cannot import name 'notebook2script' from 'nbdev.export' (/usr/local/lib/python3.10/dist-packages/nbdev/export.py)",425            "",426            "\u001b[0;31m---------------------------------------------------------------------------\u001b[0;32m\nNOTE: If your import is failing due to a missing package, you can\nmanually install dependencies using either !pip or !apt.\n\nTo view examples of installing some common dependencies, click the\n\"Open Examples\" button below.\n\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n"427          ]428        }429      ],430      "source": [431        "from nbdev.export import notebook2script\n",432        "notebook2script('app.ipynb')"433      ]434    }435  ],436  "metadata": {437    "colab": {438      "provenance": []439    },440    "kernelspec": {441      "display_name": "Python 3",442      "name": "python3"443    },444    "language_info": {445      "codemirror_mode": {446        "name": "ipython",447        "version": 3448      },449      "file_extension": ".py",450      "mimetype": "text/x-python",451      "name": "python",452      "nbconvert_exporter": "python",453      "pygments_lexer": "ipython3",454      "version": "3.9.6"455    }456  },457  "nbformat": 4,458  "nbformat_minor": 0459}460