Tabas34/electronics-recogniser_test
0
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 