{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "83670509", "metadata": {}, "outputs": [], "source": [ "#|default_exp app" ] }, { "cell_type": "code", "execution_count": 2, "id": "66360cf1", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/antonrubisov/mambaforge/lib/python3.10/site-packages/torchvision/io/image.py:13: UserWarning: Failed to load image Python extension: libc10_cuda.so: cannot open shared object file: No such file or directory\n", " warn(f\"Failed to load image Python extension: {e}\")\n" ] } ], "source": [ "#|export\n", "from fastai.vision.all import *\n", "import gradio as gr\n", "\n", "learn = load_learner('model.pkl')" ] }, { "cell_type": "code", "execution_count": 3, "id": "144144fe", "metadata": {}, "outputs": [], "source": [ "#|export\n", "categories = [cat[:-4] for cat in learn.dls.vocab]\n", "\n", "def classify_image(img):\n", " pred, pred_idx, probs = learn.predict(img)\n", " return dict(zip(categories, map(float, probs)))" ] }, { "cell_type": "code", "execution_count": 4, "id": "e5ff35b9", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAADgAAAA4CAIAAAAn5KxJAAAXDklEQVR4nIWayfMlSXLX3T2W3N/2W2rrqu6eXTaDBFgjZGIAiQtmcAPTYWT6b+CAwZjxb3DQFQkwMAyOGIOwQYgxjXqmu7q6qrrq9/u9JddY3J3Dq+puZnqGsHfIzMiX8U1PjwgP/wS+7idiRFHnnKssEQALABhDKWVLVhUEk7MGVEEQDQAAAMEXRd5cUQCEryyqiqjn2xQAQBAEgFQRAAEYQQANKH35CaoKAIioqpbQIoJIjjGSI/IkSKSiCiIgAIhgyAkAoQChKiD+gpy3or9K5Vk8In5ejV/8hfCLa+bzurM+gC8aQkRiVkBUQkFgZmEABUFSAkFgFUUQBIWzQvwllf//IqBvrf5Vr/fm+PyTz5X9QkN2nuemrBARwCQWTWzJICqzgGISVkRDKMJKFgBUwXypCVU9P/Hzg18oCICAv2Rt+X+FgiqIMIgKsDEGvmROEWFmy8w5Z2utqqYYmVmcI6Kcs3OOmQFAgFiyIXTGKGfy9vNmv/x1fp1Vv6II89kFzVlNzsxZGaJBa4yxlsgaPHuggCWiJGzBImIMmUxGRCKKIRtymVFRDUvOqoaJDAt7sPorGv+y2F/dteBszpwDkVVQRGXmzJpyTpI1J2+dK6wFdeQQARFt265Esi99CEkJ0VhWXJaYs0Qeu65LKaBxWTJZk1iFNWYQUSRAVADSzGiNMcAsjiiljKTOOlHhrM6ZGLNzNiWxlkJIwzBUVRVjrOsSFId5ZGZENMbUTeOkBNG4LFOIEmaDdtOtrLP45z/9xBiz2WycczHGs0PknBFxmpa6alJK681KJFtLKaUlTPcu74mIJTQWQSElFgE0EGNs60oEpnk0jqqqIgBWVQZCzDEty2KMQaScpKqLojCCME1BAQrviRABxjkYpOfPny8xbLfbuq6EeZ5nawwej0dVLcsSUXOWlBIzW2tF8jAP8zw7T9YSgM0555z7qScFY4z3ngBZgYVVTUhKkVnSFAJGTJmcMQwZBUA0pXQ8HZqmsc4PfQ92/fruJCIxxrKsjTFxXpzzauh4PA7DYK2NMYYQ9vt9ztmWZSkCzHw87skAgkE0IpJSsNaKKIESgbFIBoyYoijGcTSAxhhOmYhYJYSUWJumGaaZOYFAzqk/3SJiURoRcWRiDEsIIUZByCHOyyAix+N+HOf1eu1cMfUjEaGzANB1XVmW8zz3fS8iTdPYnLP3vu/7ae5F2BhryKlizhGAnHOqypIkJGaOgTOHvh+8sd77ovDOORENIS0xTtOQcyYD5+EihoyIWV0KofJF3/fMfHc8TPOw6Vanw/F4PF5cbNfrtbW27/vbmztjjHH2nXfeOZtznmfnXNu2RVHYZVkAIOcIADnnZQkIBgBijMa4uq5FZOinzEFEJHHkNAwjKYiICCOitRYAARQMnUcMBc45WrQqNMfFOiqsu319owgvX77s+/7+/fsvPn1eVdVms8pZXn72er8/SObNZoOIz549c86dJa5WKyI6HA72dDoZYwCFiBApxpmIAGAJc1nUOceU0umELMkA5JxDnJcpMMs0jafpxDEZct45NFDXdUoJhFlzSgmAlGGch9NpKH2xLEtROBExxqUQieDycnd7e/vzn3/sfblarVarVdu2ihBjbNu2bdumaaqqWpYFEfG//rcfHY+H81w8z/MwDM45RBiGAQDruuasbVdrZkSYpulwvFuWxdkCAAIHYDFIFolBD4e74XSylrrN2jkDQIUtjMFhmKzxMS3MXDiPZM/PORwOZP39+w8/+OCDy8vLqR+dc1XX5pybpkkpjeOoqiKiqvin//m/aGZV7fv+OPQoyszLsuSc+75vmna1WtV1LcLLPJ5Op3keb2/3T548IWsOhwMBauZ5mgR4u92eToccE1lkZgBChZRSjNlafzweRXJdt69evaqqSpVjTu+9+7X3vv6NeZ6XZbm6umrqliWvVitAdPY8B6VpCXEJduqH0+nkvQ8hzMM4TdM0TeNwSpy3m4swLyfRsMxEkFKK8xLiXJd+6oclxXEcLRICMLNz5sc//p+cclEURelYRJgJDGct62ocx5cvXw3DYMmklN59992m6+51HZF98eJFSmm9Xjdta4wN4/Tq1auyLEUkpeSsr+u22W5t3/fTOEpMMcZxGKZpivNCSnXZqGrMKQvHFCxCjHGepjEsMcbbm33mKAwxhP44TNMkkjebVc45hTz2OM8ziBS+stYOxyElTlMssUBAsgbU9KdJhZxJqMdpWcbDmCdxzmXkx48fX+12ifl0OpVlfXl5uVvv7DgMaQkc0zAMx/4U5yXnTETk7DiOiOScywk1p7As8ziNy4yI4zgCgCGaxiXGaAANORJMc5xSCiEMw6CC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\n", "text/plain": [ "PILImage mode=RGB size=56x56" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "im = PILImage.create('male.jpg')\n", "im.thumbnail((192,192))\n", "im" ] }, { "cell_type": "code", "execution_count": 5, "id": "0d828251", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "{'female': 0.000311680807499215, 'male': 0.9996883869171143}" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "classify_image(im)" ] }, { "cell_type": "code", "execution_count": 8, "id": "f49cd34d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Running on local URL: http://127.0.0.1:7861\n", "\n", "To create a public link, set `share=True` in `launch()`.\n" ] }, { "data": { "text/plain": [ "(, 'http://127.0.0.1:7861/', None)" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "Traceback (most recent call last):\n", " File \"/home/antonrubisov/mambaforge/lib/python3.10/site-packages/gradio/routes.py\", line 283, in run_predict\n", " output = await app.blocks.process_api(\n", " File \"/home/antonrubisov/mambaforge/lib/python3.10/site-packages/gradio/blocks.py\", line 892, in process_api\n", " result = await self.call_function(fn_index, inputs, iterator)\n", " File \"/home/antonrubisov/mambaforge/lib/python3.10/site-packages/gradio/blocks.py\", line 733, in call_function\n", " prediction = await anyio.to_thread.run_sync(\n", " File \"/home/antonrubisov/mambaforge/lib/python3.10/site-packages/anyio/to_thread.py\", line 31, in run_sync\n", " return await get_asynclib().run_sync_in_worker_thread(\n", " File \"/home/antonrubisov/mambaforge/lib/python3.10/site-packages/anyio/_backends/_asyncio.py\", line 937, in run_sync_in_worker_thread\n", " return await future\n", " File \"/home/antonrubisov/mambaforge/lib/python3.10/site-packages/anyio/_backends/_asyncio.py\", line 867, in run\n", " result = context.run(func, *args)\n", " File \"/tmp/ipykernel_24169/2631874386.py\", line 5, in classify_image\n", " pred, pred_idx, probs = learn.predict(img)\n", " File \"/home/antonrubisov/mambaforge/lib/python3.10/site-packages/fastai/learner.py\", line 302, in predict\n", " dl = self.dls.test_dl([item], rm_type_tfms=rm_type_tfms, num_workers=0)\n", " File \"/home/antonrubisov/mambaforge/lib/python3.10/site-packages/fastai/data/core.py\", line 532, in test_dl\n", " test_ds = test_set(self.valid_ds, test_items, rm_tfms=rm_type_tfms, with_labels=with_labels\n", " File \"/home/antonrubisov/mambaforge/lib/python3.10/site-packages/fastai/data/core.py\", line 511, in test_set\n", " if rm_tfms is None: rm_tfms = [tl.infer_idx(get_first(test_items)) for tl in test_tls]\n", " File \"/home/antonrubisov/mambaforge/lib/python3.10/site-packages/fastai/data/core.py\", line 511, in \n", " if rm_tfms is None: rm_tfms = [tl.infer_idx(get_first(test_items)) for tl in test_tls]\n", " File \"/home/antonrubisov/mambaforge/lib/python3.10/site-packages/fastai/data/core.py\", line 405, in infer_idx\n", " assert idx < len(self.types), f\"Expected an input of type in \\n{pretty_types}\\n but got {type(x)}\"\n", "AssertionError: Expected an input of type in \n", " - \n", " - \n", " - \n", " - \n", " - \n", " - \n", " - \n", " but got \n" ] }, { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#|export\n", "demo = gr.Interface(\n", " fn=classify_image,\n", " inputs=[gr.Image(shape=(192,192),source='webcam')],\n", " outputs=[gr.Label()],\n", " examples=['male.jpg', 'female.jpg']\n", ")\n", "demo.launch(inline=False)" ] }, { "cell_type": "code", "execution_count": null, "id": "8ba84dab", "metadata": {}, "outputs": [], "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.10.6" } }, "nbformat": 4, "nbformat_minor": 5 }