{
"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
}