{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[],"authorship_tag":"ABX9TyODiY1KoeltNcj6TfKoXmBr"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"markdown","source":["# Snake Classifier\n","\n","Can classify 13 different types od snakes\n","The types are following:\n","1. Python\n","2. Rattle\n","3. Cobra\n","4. Anaconda\n","5. Black Mamba\n","6. King Cobra\n","7. Coral Snake\n","8. Water Snake\n","9. Sea Snake\n","10. Bushmaster\n","11. Rat Snake\n","12. Parot Snake\n","13. Lora"],"metadata":{"id":"Ndf26sXzOwZD"}},{"cell_type":"code","execution_count":19,"metadata":{"id":"I4Qokf9tb7UP","executionInfo":{"status":"ok","timestamp":1702641318204,"user_tz":-360,"elapsed":13372,"user":{"displayName":"Somoresh Mondol","userId":"12236344121118406952"}}},"outputs":[],"source":["!pip install -Uqq fastai gradio nbdev"]},{"cell_type":"code","source":["from google.colab import drive\n","drive.mount('/content/drive')"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"O6-6_K0QrO5I","executionInfo":{"status":"ok","timestamp":1702641324918,"user_tz":-360,"elapsed":2923,"user":{"displayName":"Somoresh Mondol","userId":"12236344121118406952"}},"outputId":"b16306b6-165f-4227-8af5-6f572577763f"},"execution_count":20,"outputs":[{"output_type":"stream","name":"stdout","text":["Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n"]}]},{"cell_type":"code","source":["%cd /content/drive/My Drive/DataScience/Image_Recognizer/"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"oYjYetwnr4cX","executionInfo":{"status":"ok","timestamp":1702641328168,"user_tz":-360,"elapsed":361,"user":{"displayName":"Somoresh Mondol","userId":"12236344121118406952"}},"outputId":"5439ba3f-9409-4995-a9bf-a19cf54315fd"},"execution_count":21,"outputs":[{"output_type":"stream","name":"stdout","text":["/content/drive/My Drive/DataScience/Image_Recognizer\n"]}]},{"cell_type":"code","source":["from fastai.vision.all import *"],"metadata":{"id":"ngh9TvD1zLaz","executionInfo":{"status":"ok","timestamp":1702641330914,"user_tz":-360,"elapsed":618,"user":{"displayName":"Somoresh Mondol","userId":"12236344121118406952"}}},"execution_count":22,"outputs":[]},{"cell_type":"code","source":["from fastai.vision.all import load_learner\n","import gradio as gr"],"metadata":{"id":"5JE_f_PccUUb","executionInfo":{"status":"ok","timestamp":1702641333247,"user_tz":-360,"elapsed":386,"user":{"displayName":"Somoresh Mondol","userId":"12236344121118406952"}}},"execution_count":23,"outputs":[]},{"cell_type":"code","source":["model = load_learner(f'models/snake-recognizer-v1.pkl')"],"metadata":{"id":"-_3Hef50dRSq","executionInfo":{"status":"ok","timestamp":1702641397809,"user_tz":-360,"elapsed":1029,"user":{"displayName":"Somoresh Mondol","userId":"12236344121118406952"}}},"execution_count":25,"outputs":[]},{"cell_type":"code","source":["snake_labels = {\n"," \"Python\",\n"," \"Rattle\",\n"," \"Cobra\",\n"," \"Anaconda\",\n"," \"Black Mamba\",\n"," \"King Cobra\",\n"," \"Coral Snake\",\n"," \"Water Snake\",\n"," \"Sea Snake\",\n"," \"Bushmaster\",\n"," \"Rat Snake\",\n"," \"Parot Snake\",\n"," \"Lora\"\n","\n","\n","}\n","\n","def recognize_image(image):\n"," pred, idx, probs = model.predict(image)\n"," print(pred, idx, probs)\n"," return dict(zip(snake_labels, map(float, probs)))"],"metadata":{"id":"jj-dm-AcsZef","executionInfo":{"status":"ok","timestamp":1702642178155,"user_tz":-360,"elapsed":2,"user":{"displayName":"Somoresh Mondol","userId":"12236344121118406952"}}},"execution_count":31,"outputs":[]},{"cell_type":"code","source":["from PIL import Image\n","img = Image.open(f'test_images/test_image2.jpg')\n","img.to_thumb(150,150)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":109},"id":"xUbJbhOysyLV","executionInfo":{"status":"ok","timestamp":1702642183003,"user_tz":-360,"elapsed":475,"user":{"displayName":"Somoresh Mondol","userId":"12236344121118406952"}},"outputId":"0e36a520-4aba-4512-e296-b67a0f370955"},"execution_count":32,"outputs":[{"output_type":"execute_result","data":{"text/plain":[""],"image/png":"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\n"},"metadata":{},"execution_count":32}]},{"cell_type":"code","source":["recognize_image(img)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":208},"id":"15xE8EvZtynu","executionInfo":{"status":"ok","timestamp":1702642186257,"user_tz":-360,"elapsed":651,"user":{"displayName":"Somoresh Mondol","userId":"12236344121118406952"}},"outputId":"3fcbae88-2102-48c6-8736-9f189e811389"},"execution_count":33,"outputs":[{"output_type":"stream","name":"stderr","text":["/usr/local/lib/python3.10/dist-packages/fastai/torch_core.py:263: UserWarning: 'has_mps' is deprecated, please use 'torch.backends.mps.is_built()'\n"," return getattr(torch, 'has_mps', False)\n"]},{"output_type":"display_data","data":{"text/plain":[""],"text/html":["\n","\n"]},"metadata":{}},{"output_type":"display_data","data":{"text/plain":[""],"text/html":[]},"metadata":{}},{"output_type":"stream","name":"stdout","text":["Black Mamba tensor(1) tensor([9.9874e-05, 9.9946e-01, 1.8821e-05, 1.1343e-06, 2.2595e-04, 1.8724e-04,\n"," 8.0084e-06])\n"]},{"output_type":"execute_result","data":{"text/plain":["{'Parot Snake': 9.987394150812179e-05,\n"," 'Cobra': 0.9994589686393738,\n"," 'Python': 1.882092510641087e-05,\n"," 'King Cobra': 1.1342710877215723e-06,\n"," 'Rattle': 0.0002259531174786389,\n"," 'Coral Snake': 0.00018724455730989575,\n"," 'Rat Snake': 8.008356417121831e-06}"]},"metadata":{},"execution_count":33}]},{"cell_type":"code","source":["image = gr.Image()\n","label = gr.Label()\n","examples = [\n","\n"," 'test_images/test_image1.jpg',\n"," 'test_images/test_image2.jpg',\n"," 'test_images/test_image3.jpg',\n"," 'test_images/test_image4.jpg',\n"," 'test_images/test_image5.jpg',\n","\n"," ]\n","iface = gr.Interface(fn=recognize_image, inputs=image, outputs=label, examples=examples)\n","iface.launch(inline=False, share=True)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"_M4Mniigv6qR","executionInfo":{"status":"ok","timestamp":1702642198756,"user_tz":-360,"elapsed":3692,"user":{"displayName":"Somoresh Mondol","userId":"12236344121118406952"}},"outputId":"78d12662-fe74-46e5-cc0a-0995811d2bc8"},"execution_count":34,"outputs":[{"output_type":"stream","name":"stdout","text":["Colab notebook detected. To show errors in colab notebook, set debug=True in launch()\n","Running on public URL: https://a1f901e27aa9317343.gradio.live\n","\n","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"]},{"output_type":"execute_result","data":{"text/plain":[]},"metadata":{},"execution_count":34}]},{"cell_type":"markdown","source":["# Notebook to Python Script"],"metadata":{"id":"nS18A_UqXLUe"}},{"cell_type":"code","source":["from nbdev.export import notebook2script"],"metadata":{"id":"TKBRZM8CXTW-"},"execution_count":null,"outputs":[]}]}