{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "9a4cc8f4", "metadata": {}, "outputs": [], "source": [ "#|default_exp app" ] }, { "cell_type": "code", "execution_count": 2, "id": "6ef87687", "metadata": {}, "outputs": [], "source": [ "#|export\n", "from fastai.vision.all import *\n", "import gradio as gr" ] }, { "cell_type": "code", "execution_count": 3, "id": "d8c5d365", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAIAAADdvvtQAAAAOmVYSWZNTQAqAAAACAABh2kABAAAAAEAAAAaAAAAAAACQAAAAwAAAAEAAAAAQAEAAQAAAAEAAAAAAAAAAAAAtl9pIgAAQpNJREFUeJztnXeYXVd16Nfa+7Tb28yd3keaUe+92Jbl3mRsY4gLj1CCCUkehLwQUgh5CSH0YAzEphhiYxuDwb1ItmSr9y6NRqPR9N5uv6fsvd4fdyQLSzaG+V48ku/vm0/flKOZfc/53b3XbmsjEUGePH8s7L0uQJ6Lm7xAeSZEXqA8EyIvUJ4JkRcoz4TIC5RnQuQFyjMh8gLlmRB5gfJMiLxAeSZEXqA8EyIvUJ4JkRcoz4TIC5RnQuQFyjMh8gLlmRB5gfJMiLxAeSZEXqA8EyIvUJ4JkRcoz4TIC5RnQuQFyjMh8gLlmRB5gfJMiLxAeSZEXqA8EyIvUJ4JkRcoz4TIC5RnQuQFyjMhFAKJkgGAZCAAGABCPmVQnnEY2YhAoAEAkgAAQH7uBYoDqAIAAYLgIFAylIxYXqE8AAAIBMgo9wlcwArMEmkASAAI8DYX5Xkf83uCHEUFgQApSxw63WeSyoFUQqJ8bJQHAECgUCjjkhkFHQkcgDESAmBK/RSXywUACpM2MNY1Ev/Mvzw6aBcQk7oEJtV8VZQHAEmOza2gD18xhVPa5i4EpklnLJkI+ANVVVUAoIBUgYFkzMaADWEgC3kCuPVeFz3PpMCy1EBR6ZVrrmAymeEeRuhCaO/qlFLmLlAIOQIggUKoS6lilhGT4M3XQHkAUDJnLGm3tLRwSmVULwoW4CAQEDF3hQKcAFBDJOZYis2IMwLJnPe24HkmCWQKTSNfwMdtv0uRDmRKC6r7+nvPEShPnneGcoCUkpCEI879Yb63lecdQQAARdUMzeCK4vV5w4Whc5PT52ugPL8Ht9tVGIkwBzxMoOqA/J2f5gXK804gYDZrDgwPKSZk0QpFveD6nQvyAuV5RxB0XSsqLGQ2CJV0FwP8nZ/nBcrzJnje0A0CJJPp9vYObgHzqNV1pW+5IC9QnjfB875DkjRNDQaD3AJ/NMjYWy/J98LyvBOIiIi2cGzbtm37/AvyNVCed4KIFEUJBYNuqXK/LsF8ywV5gfK8E0TEGCqcAyAA4XmtXL4Jy/NOIKJlO5msqSj8QjHS+6kGovEVcwCECJh7S50/Z4znrYUilAQAcGb6Z/y/4Nk+CyEQIL5liO2SgIA0VQ34vAy4Q3S+Qu+XGogACJBQEtqADgEQKUjIiBAkggSQhAJQ5L4890MyRzIBAEAcCRgIBIGEjFCRwAmBuECOhIzg3I/ze8WTnLe+cgRkODY20jc0CAwZApz3Jnm/1ECckDscGEmUxByJAtAE0oAYEgASAgEBoRDnrYXihAAMAQAFgAB0CFEAcMptPyBAYEiASq6Wu5SQUhYUFFSUlIBNcKGV8u8XgQAIQRAAAJfE5fhCcRXH2zUJJBCRpELyzbF6Nt5qWYhAwCj3L6gEUjICiQSIQADyzJrzS00gRCQihPOj53HeLwJJRpZiAqkkuZQKAJcESGnHyQIJVUGVI0lhqKrXACkkMpSSTDNLUtqk2450iEBRUdEkcK6AIk2SCpECgAACUSJdijEQUW5DBr7PBSIgm6RCgkmHWwkubZeuFhawupqSSNgTLSiYUlsMJNyGUhx2OVJyRMsWg0OjjLPRmHryVPdoMtHZO9beMzIyZjmWAA7APRJdgCoAB4Lz44P3A+8TgVAKTrZOZJcVuGbWFi6YXjx7Wll1WTjoc3MABhJAnOlend1QQFARBGAAWVhVSMDjNvUOZ1s7hg4d69zZ1H6qc2w0lUXFwzlDlCDZpdeE/V4uAYEYkIogEASABCQCRMhK5AJcEjg6GTTjYR9bOKvy6vkNC2bXFJdrRi66kWCBJYQjkHOJSDLDLQUSSfSGLN1mxBEYZSRziDEbpaHyhmJvY7Hv6sU1vWnrZOfwtv3Nm3e3HW9LZsGrMgWZIHQYSJUUxVEByFbODv8jEANAuuj6Zu/IJSAQMbAAiFACkEQAAAdVAiQ7rTjZUj9ec/WMm66ZV1UeDnLkICTYNjAkziVyybkJpGqOAqoAgxkmgFcAcgncAmIO07hwEYFuAQpyDLAZuQRVqKxiSvGaKSWj1y/bcajnNy/s2dLclcwyVPzAXRKFUNIIEsE4O/h0du/mpcRFLxCCQDQlcgGKRE6IAGBLBaxkVYBuWj7jA1fNb6gOMpBCOAJQEio2auCQ5iAaMc6FIh0zpduKO+sMD3ZkDpx6vbt12W03hTVfWsGAxXQvl26dM1UFpjJACdJBqSBKmzEn6IPrVpatXFS0+VD3U8/v33VgOOVo0mCWajEgzfK92SCCvPR6ahe9QAAAwBA0Io0IOErbzvghftWyho/eunReXZihTWAKR3JHMtCRcZAcmDKYGj7SfHBgoGtGxhlNxatWLD7w/SfUjZtjyuDjK2p//qve7132cZHoO/LAj3g2a00pLv3QtUnDNUX4CyurEqGADxiSAgBEgqTj0fh1i+pXzKlbv7X5v5/ZfvD0GEEIUAWQRIjAAHNjmWcSWFwqXPwCIQMypFRIgEI22qOzqsN/cefNVyyudalAMiukkEwVXDcVIstJJZKDmcRTO15/assrp5O9C7Lybw6mSzRXy+F9Y69ua0hqW25c0SRabz7RbLz+r03mqZHR9vohFx3VYq2nB7MO6xJH5tbq932goXqG1+3xGF7GNSlBOsC48GvWrVdULZhX+ujT+3/1bFvclODJSptzpl9oIvJS4KIXSJKUJBERpanJ2M1rpvz5vWurIjqQECQBGSKqwJMZs31ssGAkqShyWE1977kfp4mXhQutSg6FhvLCwaGnN8R5pjkQiZxM3lgdWRQM7zt93DU4UCWUtMtxss7Y/iNFCxdunJbeEu4pP/raN6qn9va0I3JvIOAvKSYAg0ghYOBUB40vfGT1yum13/rpiweH0opikOSIF/2tviAX3auicz7LDW6hzYhbsaiHfeT2tXffONuvZCyR5VJzmMoRicThTetff/6Zq++8a/A3r3a1HOu+rKayOFjkL/vgqpuHzW71+W0DZibj1gNpUaxly09ujQ6U+T+8Uv3EVUP/9l+qORpz22O69MakFg446xafOLSnojW25zs/Hu08NXvdDSdSY32trZd96k+N0nqBLu4ASQImL18ULa26+SuP7Nq69bQAAxUB4CC9dU3xmebsYo2tLzKBGAgAksgEoJTEAIArWUvMCmpf+sTa1ctqAEiC4SAqAgSnxPBYW6z/5Le+Naez+WDzgcDpTHTufLlgYf/rpxtCwYHsiLNpc+BXm5RAifORm+GJV+XNs91zlle0dGWcVHbD+ogbZaSw4t479JMnPY+9JLbu6i8cCldHx3i4MTrz1IZHj95/LONyzTwyuN8XnXLPnd5IqAS8JNDUEB11ajT4n59e/f1QyU+fOZABQUiK8HGeG3MCHJ/5RwK4ePv2F5lAQIjACLjM9b9IyGx8UY377++7bfGUMJAJJDhqblT6WP+eDS+Fj/Sp2cyM0322dJSmDr8WLfjgmh/0HYeEdfe9f7IiGXh19296ls1qvOP2KddctR0goLLayy9P1PUYPrXA7z+5aZunOFIxf35i33boHgtuOnqPNaWksOqnR1/fcP3y2Vet4I9t63fFVR2923eO6vZhDzQsXD597hKPVByiGHCPEfjkPQs8IfzRL7YlbZ9UnNxLGH85SDmZLt6w+mITCBgBA1AYEZIlzdjs+oJv//UNFWVhIgvJAclBUdr62o594/7MG6+7U44rlUmGlKQrsGTMyKjeJx997ESdW/Qn927aVtO4vPIjd44tioykjZkyNP8Tf7b9+ed3Pb0xEg4vvmLVgz/+yfVXXTWUjJ/afaqwca75VwF9aZOlyfVvvDomMk88/njdptMz3UXVTqavxGGnDujHjwZdrt0FG05/8k9Wf+DDfnS7BAFAQLE+tW5+xKV+7cGNCTvE1PFXQggSCNABQCD1nV70JOaiEwgIEAA5CsjGZtT4v/LXt9aX+WwpgYCkhlzd1dzyg0cfuPvo6ExPXfvleu/uw4GEwgOFx+eEm9p7K6sa7r/3QwfGRsszGhV4Lap88XuP6EKd+hc1uza/lukd/sDnPt7Z2yNQ7N6786bbbm49sO/ZB3/x99/72uaTrXd+9Lb9u7b+xexPKaZdN2btOvjjgzOsK8YMNtCvqLGhhVNr7aLG0/ajv3p9k3T++qZ7SxSVFAmWpnDrzmsabZD/+V8HE8JmnAnJgDFg443XRduCXWwLyghzI86CrERNkf6P9904o8wLFgEgRxUlP9La8vNtL4SnVLBv3Mcf+gd267VWHCzwiC987MkVNQP3XLf605+Kd47cMHvZwc2bj768sbS29vTw6GlKm4ppKqLPGuvsPn3/T76XjY+5hO0xeKGhzrxs0Q/uv/+K6lnp1qHn//PhW+rn37HoskhdXfkX/+rVBeUbPnt9+oZr+QgJ03B9468Hf/jpOZ//aFNHyyu7Ng3G+5ARSARSENJ3XDPnY7fO4TIhKYsgYbwt5nSxPYVzuchqIEJJgCTsoFf9y09eu6QxCmLMBp9AbmbNna9u2Dt48tcHX2DSemDnszdVLLy8ZXCtHfh1lThyZMuqaZcrXckjp7rSqYzZ03vt7dd973vfv+aeD7ltPmN642+f/O/r/+q+Lb94tv1I6w1rb9QFv+ryK0fSydHY6Cc++ZFP3Hefu8D//PMvXrHyMrfPs2nfpl/8+0Nf/dFPGivKHnr52YcSw3cXFpYcjP/7L3766ljHaHtfvEgfea3DM3b91OqZs+cucCSTwm8w/Nid006m4r99eY+m6AAoieVmYN7r+/rHM3kFIgSJEokwNwZHCIAWaAjSQ8OfumXVtQvKQWQEuAgkUuzA//331ld3uf7spqnRKibxg1evu7lhcftDv97VkrzqvrvuWrGoKlB+aOfO//j2txrqGpfMnjululrzqr2tg//0ub+qmF5pZvDVVzZymR6JKUtmzXQXhG//6EeyQtbedY+K+NCDDyouV//o4DVr1m7Y+NrGnW+kFFI0qPfXfOXuzxwZ6DpUGD391MbPXH3XnT7X5r1bf7btmYUNC0fW7zy65wHjG1+auuoGaSFKYCp87s45g12dG4+ndFUaMuMQc1B7r2/2H88krjyJ8Ozk0fhMJEPgYKauWzntf92yUKMsIScwQNUefewnyRdfbQy5b58+58us7u9F49VmQUEgqFy9sPrvPrXo6ptK/EVCmrOXLPrq17/e0TuYRe72FnzrK/9eM7W8ftFsxUUvrF/f2z6UQNE7MPCbX/16aHSEiHREFZkkKiyIBl2eL33hi3NmzzYU9da1N1ogVUaOFIByTlnlDfd8fPon7ioprJzrKbvRKvhnteHDwZqFS6aXpZMvff0/97QeYrlJNKlWhXyf/9j15UEQTtphnADZxZyXe/IKxAAUCZwYEidQCDgBV53MjDLPZ+5eo6sSkBymKhxe3Ld9169erEtyOzGy+++/rPziSXPzLhFLHTt5nKLBeVddaSMqxJCkY4uy8soHHvy+y+c63NSkawGmWAQwGh/q7utgisu2WNZJdQ/2Do2OAiKBBLQRgYgIQBJpmrZy1aqpU6f+77/8SyEEA2CMSSHD4dCiOz7Q3N/bNzSYOdE89bdb9L/96shD/11peupOJb7xyANt1qijgCKYsHF+TegLdy1zUTrFvA7qjMTvvx2TlckrEABwIiQk4IAMAUnabkp++sOragt0EBkBwCQ093V/c8evV65cctSVTo+Mho53m87otM/c6kwrKvIHF0drvRaqkhOgRAWZCoJ0ljq2+fFtT3x7uLObMRIC3e5IYWFpX29LwOWuKnJFQ64XX3gunckCIwA5PuCNyBhTFIWIfD7fimXLPS537rvIUJJUddfMhmm9uuX61JUja6uGMr2Jnq5dnmym2DW9rPChZ34aZzY4QIAgs7esmnbVsqm2lRGEk/oZnIUufIDBpC48ASNkEoBIMrTBil+5pH7NomqQGYlAoJqDg8ce/tk1vz1Q9dxex61pnnBBqNLyFWzef6AwXFhaUEKSJAehADGUTAEGTMGhtr1lvP+mWZHdr28mUIHI0Px33HJTJNw23Lpv6Ogmrz08o6bM0DSSnIADjOeUZIzhGYAAARljAONyCSDN4UuLpzo9qeODo55wRYmrNO11+WOZxY/vdv1m48GtG+NuIRQCkIoqP7puaaU3w0VWTOJI9FwISJCwLds0TToT+E/moqMAJhAJgIGDIlUScX/o5qUezQEnbSs+yMIz3/wGbd1wXZwl0mOGrrMP32gtWJJpO3HttbcWugtIkq2gQFAAVBAINiMXIIyMjnJNO338tK9xLgIis1BKkR0pKtolU7Ouv3xRd0w3fRrnTEhwQOG5QP6Cy8opt6sQCEAjW6gq2mzOtGXp+z4z0Hx6bnHlyA8f1Lvb/CPxW3qDe/7mq4V/k53xgRsE6gA4vy5yz+op33vmiKMXKXCBvAWTDkKGrLWl9fjx40uXLc0lupu8AhEAokRAAC4ApZlce83sWQ1hsNMpzoj40OCAv7woUxY9OcerHz0x86SdAo+6cN6y+jn+2kqLSJOo5XakEABIBjaBC4FM27Gl2jIGH1o53yIbpc0VZo0M1pT0CVgoRvutETCK51oAHIiEyKWo6O7qihQUGIbrgqVFAAQaU0FRwWfxeUuvai5udzEqTDoxFVoWlEpHC5TX97LsVDNDqkcgKGDesWbOhm2du+PkH+9yAhIDRDkpN5ghQ8uxXW53UVHxeDU8uZswQrA1meUSHNALI/4PX9VgIIFl2DIgCZ7Y88p/mKc3rbvJ+xf/7C+oFF7z9EsvD3V1FU6p1IRUAYAj5ia/EQBVCV6bgXRSbKyzr+noydMdsaRMAknb+1rnyDObmrQhw+cR3FueNs2iirK0cASRKmwGNDjQ98jPHh4ZHoSz26Fx/AMBWG6RGNPDgH4AUEFXtPrKqleefio7NFiSVUsvv+bEn9/1/OKG+3duPtbSqknULGcYE+Xlvg+tnO1QghFJZhKzFYlMcsEmlUG5zXMEALFELJ1KSSlw/HuT+EwMAhSoClQRJWVG1iydUV8ZRUFZFwtaePT4wS17N3enB/YPNyPahxoLn424jBuvXjx7ITkOk+fHe8SQOEA2k84kxjRGbhUUJWRkEhuee/LeX7zx2RZxLHljvVrANVWLVJr7fj38wncH+jpNzQVMOXL8pFR0zfDAGXPeqeREBOQ29Mvv/GBLTUWb19NdXZBJpTf07m+H/vu3PtnnpBVHCQmvqfDlV0+bGuYWSYGaBFUiAIrJuHYaUZK0bVs3jFxPAnKx33tdrndCguqgAmQXuOx1a2aoIG2QiDBqZLfsWF/b0j/jaF/Zzuav//q/vjvY3DytcdG9H9WYYqEDeP4WLQIpEMBKxny6Gva7yc4M9bac3vjzbHfTkFI9NmP+/fumDlslbpatLwlHDatC6eva/mRssJ0A+gaG3N6A2+cf/1XvuAUs9+6UQhSW15X+6Ue+MV397MYnD23dtuCNU9U9ffLgwbaj+0FFXeoO8IpS983L6xyRJVAkaIQAICfn1JhjO+l02sxmhRBn30OTV6Bc+yCBSTu9oKFwTl0EyFEJNEEnju8r337s8u7kJ4fcBYNjJ9K93VxZc8dHIsUlQkBaQeLs/JiXEIFgbHREOpbP40rGxtp3/7g2OKa7Xax/mGf7DoSXfHZ7LGZZbjFk6gWgh+b5Y11vPJKKDYwOD0ajUV1Vx8V5x6G/XIefca5KmHftNcbKBQOZ7EBq9MZO+acD7KajI5ln1scyMVLQ5aAGYs3yBr9hoS2AOKAkdHLrhP5/3dk/BCKSUuYyAGSyGSLSDYMxdraCnNQCMSFASoXZa5ZMd7Nci8utbHzo6z+aseWYd6i/PJEWHijg7munrbxy1ZUgiRRpgAIXqFkRgBGCqumEqGka57y8MGhJo83iGOv3dnRSVeUz2rx/2DgwogaPtfYc7kwcOn6q3Iu7NzyTHe0vLwrzP/CZMgGFLs+XFq9b6i9DBoaLl3eO1vSMOL95Yd/6ZyQCs5EI6qoj86ZEuJVBxwGwYfzkyEkGQl9fX19fX39fXyKZPJtrfPIV9AwIwIRNwi4M++fNqAESACymyMHe1tCRU4KnLC3bZg6uTHkKOtKfWHJtyOORaGbR9lqcyfMfNUpkNkGgsNi0HCGkkE7fUEnCtcQ9Z6nJHDGqSZGSJct+lF702LEUS/R2d3ScNmb1p5DifZmxvsKQ/w99CQ6XUtgLF8xZVl5f0p6IcL3Djo167CrLim/dAmADgkPco2rL59Rq0lIBEBxASZNs5wYCCMtJxBOcc875uRXwZBEI6a0fQABcF47ZWB2uKfECWJJxk1gy7Wazy8AW0nJXqnxoOHbL1bcsnTUPSCJTXaTihVNpISPQ0fH4gpnCeUcTYZP0wjkLyhdebnsKhdvv1n1qz2m3JZXSafeflEdjEI0WF8xaXLng+hMxw4NK79HfmuYIAhEknHcZOzJGAExxf2j1rb7GWrtvsE7Vxmx0VO6eOW8oKUd1mzlJA3DRtCqPT7EQiFxccg4mTpYoerzPYFl2KByJRosLC4sCweDZCGGyCARv9ovPdnNQEHKwZzVWeDQOQIjMENnU0OCYk4x7sJz5XSm5Z1qgpLzS6/aiBASuAiN+4T4wQ2DkAMK8FddOmb/aH4yEC6MAOHyql3t0gBQb6U8ONhNSm3feD2Izv3LS/8TBYW/VTG9xhd/N/brZcfokAgLId1k9IABjHAGmVtQVlFQ0RxREtYz7eCZT0jVmdQ7qKFBBJKqripaVhoW0CRQgBXNBx+Qgl8gtHo87ti0c4TiOlOIiaMKIgED6DJzdUAYAAIwBmKOdAz/4r+iOU2N2WqpOV1G4L+SeWl6l0tnxnjeTJFwIRoQu3e3xeEwzC1mQwKYYqqfvmGb2hMyYSx9yyTHdKNnjnv0ya7Q81Za00rGukFeGfP5kIgkASNq7v2skyUSpu1yNBbXbK9w9xdEkmr1qevipp049/4QbJKBOJHxudUZdlIs0AUrQAPjv/9X/czBJ5NiOqmqqpmqawjmfjDXQW0EUZBcH9fqyEJDMDVkN7tsb3X+4GxxSNeZi+29dXLVq5dSSCkbAGIMz6z/eHsZQJULdcHm9Xgm2DXDZnLrF/sQ/fXj13962hnUec7pPq73tGhco7Z0btvzXw49mE7GIn1kZpzhaDABA+ru8awwAGUpEBXDprAXqknmwZK4QzqjBwY5ZG9cn4kPMVBwgDWBeQ6kOGQJ0UMULJCN8b0BEZGg7djKZzGQy6XQ6mUpLITlnMOkHEkmSqIy6igO6JCGBCYLTr+8qIuZxlQZYaMCJHyTnU7VXuFQV4Eyz93t2DucGjUFhqqoqoFoEEI26fvqlv7x79aLB/lE/eC3PVB4s9Hj9ZIlOcH/ttwdSaVYY8ZpZ9AUiAACSv8tUQEggMDcbDGUlJcvmL9nZfGJOyhvMBnggXNg60HHkJHAQiACyrtTnVYQEEgwB37Ea/Z8FAVKplKZr7jMwzoWUMMkHEgmREIrCXg0BSAJTTMvWDw9sj1Di3lv4zJm1I+Ke0MJiXxFyRjjeJiMBf6e3LwIAInCuWLY1ODasAwCHEp/nZFvs5ydGsjxA4WiyqGDMJK2yDufNKZi1mBxVEjA1qHtDEiQgSHh3JzoSCAJVAoHj8bnmRcrmBYq7VYr86d0H5lV3oD3U1O2ooFEWgIUMPezVBQiBBGhNEoEQUUo5OjpmWXY2m81msmY2K4UAgsk+mSqJiJxZjVMQUSIjAYxE67TojjlSVPCoEbksPbUwXCJLfLk8hUTnTJi/bQ6M8YxtLq/PFww6aRsFEGMA6ubmnj49DJjw2IMx3aNEIoFEv4ZHy31DytAIAx8LhoSiIwkmHMR3txAegQEgEiFpjAfdPrWqbtPS4e453oOq93o5Y4lmJACCggBlSVGosrS06XgauaDJYQ8AIGAimY7FYkoWTEVKnhGCW5aFbNJPpiKCwoQihARwgCkSUqn49mLY6yvcsXNLQXXZou/8UK+oUDNpAGB4dmnO205WEQCgzGX1BYVnBXBTAAfJJCdj7/CAOjjGImHTzmhdfbatiMHENHugJHniniVFEQbuoiJ7PD+UI+HdrWJG0AgERyBUHD5gUsV9H7vh058/ceLw4ZHBZ+vCnW7hIQLwAtiS21IoisMYmZL0SRJd5NbLGbpmuHW3W3e7PC6XS9U0kuMHYU6KUl4YIq9XC4f8BDIX2iTT2VjSHOjpmS/4ou+/1P3Ki4GQL/Aun+W5vxiAIdqWNZSKA4BAblpW99goGSB5NmtZwaFk4eldg+W1O7TrglIJ+d27+rxHO6UPgCNmNSNz3qE1b/eHAM/M2SP43G4lkxn5xvfv2T1cPywOjQ6ecLKqLXLVFEMeLSo8MwI2WZBSAuDZRZmAkKt5LoJeGIHkKMpLIwwIiUACKmq2OLCyqPoDA7L4dKv9xhZjKGb7PX/ErwYETdNQ4QDAgFuO6B0bBk7uDDOGEqP+QTIzXHVl1GSPlv7w5qa/Gq78TrOImTY4UhfgfnfL4HMuMBi/9RG/r/PQEWxvath78s99jWXegqDLbzJMMwACQ+HRaJBATJYOGACciYFY7n1ABARE8uxU/KQOogHAtixpW+NZvhHiZjpA9OnLrp7Sm7DUjHOibccbr5vvtk/9JrnUzqZpopAAoJAaG02PJLIoFJ0st2ZmCqenqVwZEmq2Zm/f2ld9N7eWrNoXp5bBEeJIZCNk3s0fOps6GgFBAZHN7P/NM4awbJGYo3lvm7NIT2dTdlaVuS0okDWTkuwzA5WTwiMiIKJsNpPNZNKZTDqTTmcy54abkzeIBgAOispUyAmkwMGWo/DUBi8rT+qOkraxyFdQV+X7o3LGIYDjiKxlAQAQnuzoG7LRFSpMIpLbY1jV6D2mKPst6R8x0D8UW6IdqtRaO0/AnPLrsgwYcPcf9tdAErg1tTFS6Db1wyxWxmLRrYPPdbXfcsVVWshDHACkpnFEOdmaBVXVokVFalaaKkm0XDJg2VkpxwcyJrFABCg5CQkAQAJQycjs7LGs+cjzI2W6t1XrjMWNfU2rblj7h97w3LlFhqFztwYAhLC3pdXx+qxA0BIG5wRGh1NY7OrpwchAylM3d+C1n1wTimjxfcOA5lo36pK/q7HiXDvHCAiRAMx0qnnfAW6zZKG/t6Nl2ebBjav8DsoEg1wiRcdxJlseRUQwTXNwYJBlHFslyWxNpJKp5HiXZbLJfi4MUKCTUnJroxkBMOBlmHaNxIZAN91sSiwhe7otRvRuIhKSJMkGzqTNJAnQpZPUyAKgEXPwt6dG+Jjl6Nxlx5gaJ8sEvzfJDM5LHYa6YYVoxB4dCUEmlYoxSCnvLs5FkEwKAegAMoKstAO9gwYZ6FLEYFdI2iWOKlXQxifvOBJDIkYSJ0/K6fEdKMQZy21g4oyzcyKfyVsDEZCi6g6Oj6RIgJrK6hZ0u2xetudUlFGsOBRau9giR3vXW4MpNzNIAKC43TomsgB4vDPdOiB11NMZqZqGoriyGcPQtWSwwNa9is66BvSmnlRlOJzOyrSQflUViO9msooBAkN2JjV0RPOq1y1PbthdPJBgthlTi6v0aKEnAFICgiDkiis3IYOTZi6eiFRVC4dC3JS2ShJtg7ypbPzsBZO3BkJgWUu0dfSffS+WBgt2Fpd0NRbWYMKLrPKuD4aXL4qPxt72HIcLQ0CScRbwB1SXDQDPt/WNYIY8KfKmkiGvqTMb0wlrmBd50l5uBr1xMtKkByNRkASoSFTfeu7j274EBORIxNARDEaGYgs+/xn/lILaLAYC0Q0zI2NlUbeqcZSAkHGc9q4+QmXSzIMB5FYCCSeZTqdTmXQ6k86kU6lUNps9O9YwiQViPJOFtGkBADAGBMX+CL9sVd/M6GCBmUQ8uWEH6x7Ux3PtvruGDADO1ENCCDs56jh0oGnAAKbbUk+OcoZCs7wFboj385Fef2xI7+ss0XljeTEzE4o0FXCQnHe+a3QGQQQCCECSBICYV42/ejDWclpyokiodWVd4ZolAMjHe2sskcpI5ICIk2ZTBtGZg1ZI5iCJyN7czj95BSIJAFom6xAAgSQCXdWX85C2freVlElHLzzYyjdulcDhDxMIAUFhLBwOd/YnW9u7u0ak6q/MBmY5Y4IEt3RPSg853jJpGzAc948MNfpkCBNoZ71ev9fjRmFpF/pTdCFASJvAAgUEZOwEPv6SlsJ2sPzHe4u3nJzvLcqtMEGEtGllbElMmVwPBZFIkpTyTJUjSZCk3DFQMLnK+hYQJSiHjzYJkIjIGQBB6dDQwiT5KXrMpXuckdS2zR0Dw2ef5puP7cLQmQMvGSAaHt/YcMvQ0ae1xF5KtzpuHczOYKrZlRyA+IC0U3asa1og8e/3zP3w6qmUSQipDGa4o7qBkF04RMmN+CAiQ5YDUHUkokAGpmNv2zfcfTAl2PGQFpG0dpj8iZQAQOQAODg43Nndi1w9k312ckRBRIwxXdcNwzB03dANt8cVDoeIZG4oaBIF0W+5YQggJYyksqYkBRgIMjRVuvGoK4s10xZ/+M7YV77Ghjq7Wg/PaqzP5YJnEoGDDYAkFED55iAwEZBAxgAcixLDXbHR7pbDOwr52HL30P2LPds6E5sGd+lm0+LCws6EuzOmTZk1d+GVc66ZUxky+PaOjOCQtdEVLUeFg6OdLTCBhFywDJhIDCOClc66XS5BTtaxXIaSTsbUaK3bgXQsru0/mTLjxSvW1N5Qv+Hbv9BEZl40JEByxwENYimRsogxwsniDkBuygJJCMkkCimFtFVDVRTl7Jt0sgh0fptPRIqCpwfincPpxrAPhACFTb/21i9nT/SEwzcEwnPX3eZsedHcszWxYm0gHCCArtMdW9a/cv3dt3vcbiKUwIgAiFQmEaWVSPe1HR/rbbaGTmO8b0rQ0zKU7Rym5QViXrF2xSBqWFMZ6u4ZHvM23FkxawmADZABcgO6LVVJZzBSVuMBCagAmEA6ocit60BQkPjYaNeO7Q8VBwYM4qapOkbaAbewlqy4+eMawJ7Th3sHegrrp/ffecVTidbktYvX8cqyiqkWkMZNAO1YayblqIpmoUCBDHCS5HwhRWGBQEA1McNsgUrQG0hlEmd/PFkEugBIyGB0LNPSNtBY6AMBBBSuqlemzBjrbtvTevDB5N7qGQWersEZve0R3+ysKk+neh9+8LsNJe7aJcu9kSLOGCIHEPHhvoFTx7HjqGYk6/1Oq3WqrmHu5p5UIgvNXYmSwgCxNNrO0PDI1Kg/aIAUaSBwpMoBkYvSsnJr8GiCjGik0gHOOAmwVWIMEEHB8aEBUVYyJVqUrCzf6BajhihAljnZE/U3fsIHlGFi7+lj2+TA6Lzg2M6nZ5Q39AjHfcVi6fWnALxStxk7fOy0JGDj9c9kqYMQIZVMtbS0qBazFCEwE2yMnLvnbvIKRCQZA9vWDxztum5hHWcARMzvub5g9ooNnYuuiP7q6qu++dyzjbOmdVvJ6RlLMl5bM4WArV//ckHLsaLiCq5ofp+vr7v9xOH9a5fPmFtqoqP0dcUivNCnaxmrndzFodrGtDylUarY64a4ZCRt07HN0fF4hikAtkQWSwmLe13esAIAgAAqICNiuSFmIiIUiuoq8F95/MDBwiAZStxJFYykaqcuqk6jYg0l7Wj4jSpX2OX79rUfsh7edLJmal15tcsi4gBC7Y2nmtsHGNdz6YNg0hgkpAwGw3PnzmMZaSmCFDPkDfUP9p+9YPIKlHs0EjyHTwwOJZ0iHyMiFWlBWV3n8V5t7w/u+OrHG//ss7954eW4bY6kEwElVOYO/++//+db77r94x9YO6d2aCSZJinMdNxOJ/sHSk8Ey1zkDI4kZjc22ELaFkUrSwPlxcmh06V62GN6XBAT0rEBmKIBkJmNDQz3I+BQ50CIUAK5QD2+6UhyJFU8uyRSWqLrfPysQ5IOgRuwvuEWt6solTnpgK0WFs2KzjKMIrCVU/ERaTtX183/0k2fyH7969aze+iDa6YUFwEQMps09fjRkd7htER/LhX/JLEnh2mme7q7WBYsxYkUv3Vz3CQWKHcasuJr7Uy0do8VNUakEEgiWVnc2hgo3nuy6ds/mnf7XXLHie3H2oyPf/yq+Vcpabhm3bpPfu5zz//w+5HbvCZJYnzVFddWV9YURiuNSFWsb7fPHJRep3tIJFgt0w3dG0i0lezc3rZjw9Fog7tyar3BaaAne8R+IxM/rDnUtDt7cNeOf/zC0q37j//rfZ8a3jVII75Bf+rP7//8/EUN/b1Nbr8WKizXNT8iGl5WO305wNUCwAEgcGxSYCD59O7nex/55d+suHb0az80Nmwmn+ErLeAut01gITpIuw63JU2QqgIgEGDy5I1mjNm2MC1LsdGSTm5Fx7lMXoEIiCFI0kcTiT0Hji1pXAkAgsjvDgVnz+k6uruxzcx+/fGS4FiD13j4mQfrpjROMypMgK9+8Z9le+9L23d94Z/+adnqyzWXL+zzOwQKOpufPTZyqp/NjXhKK0ONzqn+Tn+w/IUNL3Rs6HQ5lbY2lkmpXim/9/3HQ9W+mqr2+nDV8DYtQC6ZTSyfVw/x1Kn9dsDXeMBs6zvWtL1jhyPbKutKepu8Q6NQMXdOff18ECqCzXkWpYZSsVX40dEX9j37+N8OWeLxx1Ko+IU4WqjMWbwIgHEbfEzrzZq7DzZJpnFFA2meTSAzGZBSqpoR8AcUC4SOoWDoLePkk3ociJApkiRT1x840Wc5nLhGdgk489Ze31s7IxbVB3EsnoXG4azb9j722/XEQbMscvFv/vCB7z/86NU3fuCf/u7vXvz5d9r2vYBOf2ws1t98wEnENh/tKp9/pS/i5z44tam5Z0PCrzco6LN7ZKyLhJIxbBFvHmpaH3zlR56x0zLaUfPbf0v//LuHQ373rDUVA3SsoUotU0+4+dCBXXsKOSvjMb84/MpvPt1xYhdTFIdbKQALFOKit7v9lzv2zXcMfyzemzANoI7yoLHqyrK5i4kEowTj4sCx0WOdXFVURaSRgEjN9R7f6wcAAICIQsisaaaSacYYZ2+dA5zEAhFDYsgyTIWmU2P7j/WiiraqkFBKGqfPvvceW8UqbkecdCYRv33pZeszLTt6mjgyAVzxeKqqajOWY+jazi1bzNjwC088+thPvgNyTBrK4rU3Mq0gm3F3H4698sNXorIAhWQ6WVI2tXR7PUaAW+Gs3zMUNUbchRBgqI30enp2uN94sPP49oxpBMtmFZeXpooLjelTZjQf6T+y7+SJQ0d9CsRkvHd0TEVuSM4FMsEe3L5h9tzpq3w1HSJuRaVumUpd/eqP3EOaKsEBBbKIL24/YAuFiDDXfk2muTAgUDhXVUV36T6f9/yiTWKBcltwWAKZMDOhp587kRJCMATJBAdt+rRhpno4j3iZ4fdM2XZkRTz+3J4XMtmM31Jig6MP//y/t2zb9X+++A8xW/3Y5/7vpje2dhzdNDA6Eq6ZNXXucgBA7lfTBfF2WxeMzDQjQPCfaI3HXa4TY+2tHYlEjFk0hprP0WyupEMQjFjVOBoUwJKQ8gW9I9YutfT1TOBXTsFmKmiJls4YsmHj5m2vP/1KxswAp1OnuroOHbjxRJu/J6mFI41IKroGQkXuqnIhLSQHuGtXy9Dre1sUPp7w67294xdECMfMZm3b1jTt/BJOaoGQENECkEyN7DrYs/1olwGImpVCUVQ9NXrrHfui0X5XIMZk7KkXb/3RLqevt7WtddTMNh056vF4ysrLd+zef/+DDzXOXvDyqzuigcq+EQyUz9Rdnr7RkROnj6kRNw8qQrV0HVVbDTjFw63UHTPdkeio5cqqgTFyelNpihluZqS0oVPZ492pTjM+svPVky9vDsSVKWmvlglBJuCvmHedt+wya5ThUKZvOHMinugaHWkZ6Ws81NT4wGO9rceTzMVFuLOycfG9H1MU3Y1SA8VxlBdfbY6lOXt3q/T/50EEKUlICvh9mqadn3Vp8gbR47EkaURccGvMsn/5woGlU8sMPYPIOHgaPvgnvfWNpUy89tV/ajL7lmUDvV19fpf72PDJ6Ytn+sOhlzZurCwt6ujq+Y9vfuvHDz38yE9+MmfBglVX3sABxkb6TZH2lLvTweF0Kik5MCGYVFg87R92ZhZMTRpxm1KK42hanInSpJ0c0fodVfVaxe5skZUcnn3NzY1L6gdG/lRFqar+tq7RWNrp37Vn5YLL4hyibiPe2ZPQnWRiMKs5Y/GhqbfeG7zhphLpLW6oBxCKZADqoWMjG99oQnDD22WBnQRwrhBJt8fDEOV5bdjkFSg3gQXCS0ySnpDc3rFv9LW9AzevKPbYqYxqeSMhLKscEHF3lrvDJX3Xre2XA/0HjuHh/bFbriyuapwzY8aplqZUaaS55fS9H//E7bffAYr+6qZNBpPDg0OGq9gfcLWku6XwJiANLJaV8ep5ruJCNVBRdvs/XuP2hqzBdO/xnWbPidWrK9eVrXn+F3u7Dmeyqj79sml18wttolB4Onfg8MFDJsnhvviKlQsOth27+doPtP/oB1krlW2oHZk9b2CuHnz2aYHUU1ShBVyU2+rMeMbCR5/b3Z+0wXDBZE1WL4kAyB8IuD1uogssVZq8AgHkNq0pCA4jBxlLpviDz+1cOv3mqFtjUoKEyprqlzb8MphgDaj+ugJUEUn395b/4qWtu7dc/uUvr12zqut4U0Ntg+Zy2Qrp/qJkKtt5qkXj+Pqu3R4tXOD1nOo7FS6qrq0LAol4Nlm/ODRgpxfeuDTcUOMQOHEZqBss96LPHUMTl62d9ovO3Z4y33V/uU6FECBLxEZPHDxw9FiT4Q+M9Wdroo3XXXvDSz/4evgHP+fTpybrogPTy1IH+hvU0PrW5mslKy+IgHAEcxCN1/Z1bdjd5mg6cpOcyfogiDRNCQWCjDFxoT1rk7XcALmxaEIbCTTHAwBk0MGm7sdeO/hXty1wCVsoknO8ZuWanfM3m3sO7Xn91d2G9gO95H8X85qh4b1f+2bmX4wb1607PTA8d2pE2PEnH3u8ZlrDXbff6SkI3/Cxjx16+dXW5o6bHvvyoTeerI7QwllTrExlIp5WmeSZ3ak9WzhjiUS6JlBg29DRZ0hXcfSauZ9csy4QKohURCxh735ji8L4UCx1xY03Njc13XrbqmHh7P31E/DEw1MUa0Nm7Iev/rZDGbjtlFMBvvp1H6iuq84AGLYEw+lOJh964vW4FeRahihBGJwk/fa3gqAbWsDnBQEI8vw915NZoHMZz8yso/7IUzvnzqhc3VjIxRgjjRWU1Pzrpw/c98WCnrhSyLcWwAcLi2cdapOpvtjx04mlRTXTGsjBo+19rjTXmeuXT/6qprJqytIFjYvnF9dPndFQFwzxvZtf+tFLe2rrG6ZW17Yd35u103W1VWbG6hkYjZJwVy0tmtUYiJSgpucKc6L1RHFJJUk43Nw0hvbYYblu9ZWir3dQjpm7DzR0iJGo92R9cffYSNTwD4ylsrdcdfkd95BEB21ShSD3z3616eCpXjSiKjHpuIlNSnsAYDxr8dsOLVwsAo2jgqs3YX/lke0V/+eaWp9AIdGhmuIZyt99oeupJz8U1Duzvdp0P+/rMvsGHRo72H0g2da7uGaGx+2pbJw6kEp0Z5KLioq3vrw+UlOxcunyvoGB2mkLahpm/eznP3tx9+HmEWOo13/rbXe7y0vTgwP1c4OFRcWGS5MAyawz0NHT29OxcP7M/Vu39TQ/ee99n3QsZ8HCRYqh9vX3vd7V5A4Fwr1WytZTMxtlaencMe/S0orKsDLrs38uuWKjo5FgnL2wte2Xz50kVyFxk1k6B4/FrPf61v6RXGQCAXKmaftPDHz3v1/7t4+v8aiMCDPEoitWXBn1H33x2Suf3zIFMzHMePza8cefemZB4W/T/LrquVdceeXsK5cfPnrEntXgKysQh6z2480nDx+NBEKqqhUURi+77ObZcy+rqC6PJUdC4WDA4/VGPUNDIx0DbYNDg9GCwsHewf27D0ghZzU0hv2F7hnu9fu2XLfmKiee3XZo5yP7Np7IDF8ep5uPHnWHbOfEoU8dbF8e9Ov/cNPcOxapfpd0snGFCqS+p2XgOz99MSVCpBJiFpFATubBlN/DRSaQwxyNEZLy7MbmqqKiT982H8ixGPNI1lA7Y2x+h/PExt54ym94a6VHa7Z/7evfUYiHDndEZ1R6HDlH981bvrIrHS+urWw51pzJJmasWvXKSxuQqR2d3V6fy62ybRtfd7n1dbetc6Sz5dlXysqqQuWhx//7p3/2sfuGu3qPHmvevm13YV119fRqjyV7Tp0WIfejhzY+f3KX16s6bckyZjoeSoHZIlLq9NqZjbPdxUXSthhINxidQ9bXHn791LDNFcmFjYw5jIhdDCetvA0Xm0DcUSntFjwFkR88dag0qN95ZQ1khdC8isWmrbyefaf8gece6Ul0uErCmm0URQN3q+5n31g/2NbReqCtZ0e7a+UcdtWSmSuXrVy88mDTgbFMvKyu+sabr//+Aw+4vYWGV91z7OTc+bO54XUberR2ajJrXT5r0ZGDpwYGEvMWLJ4xZ0G4rHiYsod27wg9e6Cnq4ffc0X7cNeSgrJpU5falX2P1HfbhjLUm1w7b+X1f3Kn7g6kbZKcaUzjI/BvD69/rSnp1nycEioxIsXmgkByeZE9iLNM6nKfn+2ZkFmoo6oy4LaV/dpPNhoe1y1LIwC2UDSXQHXR3LtnVjcf3HXYGvm353+ZaY+v7Ex/WXi9//Gz4zB8h13UteP1n7XN8s5ZEIwUrZtxeb3bv2SGLhlbvWBZwqtm0uYNq5cNBENd2eE6iEbKaxBjIOjaW9alhYgwZePAsRc2vRHsHgw//Zs7TlBazWzd//SnQlWdnL7ddnLU7Vo5bf5dq668Vg8uaVzIgROBi5vInDFb+8qjLz27s82rhBQiRJ0AiZDLSRw/vwsmtUDnw0hKYBIQSSicjabFv97/jAuuv2LZVK5mDbKAjCojGJ6zsqSjfdYd5Y88/6gd38c7WxvSjtdjjBixQFZbdzI79aY5j7741Nd3bly7YLUSsyvmzK2qjpbY0vC5y+vqbIk22gk7Xh/yxDPmie6mzp6hptOtEQPWv/zUZddf11hUlOgxu0JyjBILBOj9ndkQX8yLll/xgcUzV1cFw7XFURvQQUdFmzFtzOJff/D5X71yXHVVqbk0smf6XUgIF1oSfrFwsQkEkoGUhAhcAlcMz3DW+vvvbv30qPMn19XpaIIEkqqP3NXV9e6Y//P1K4Y3NFXFYszLIszlxIaQU7aj7ch3HvjgwcHj3uymfc0/9qWv71z9xcIFJ5/6deXf3hsJVHT+4zeLb7hB3L68/6c/7TrQ7Xzi+s89/9PS1rGPjikf7xtRjj7aG3WrdsZEp9ikeuGyENGRtwXqV9QsCkYqApGAA8IEB1HqDFpHrG//eOOLm9tRK0dSCJyL1pYLcJEJhASYyzcFJJE5pJCu9tn07Z+sT40mP3LrAp+bCNPAFa/k3nBJ4vZ1VpHv4E9+MaV1xGeb3W7LY3NjIOXqOtZUwlZ98q/nNs7Yd/ipqroZ7qRad6Bl7G/+w5ze6G89EFuvjLbsZU885Z45v6xmekV5/W1Lp91WWX/ql4+MPfmq0SIiAZ80OfiCg7aR9Pr61jbe+L8+FiydQpoCIJBSbpDE3Afb09/68YZN+wfRKEbmcIghTbKtgxPjIhNIAj+Tt4IYgWCMQIBiphzf9x87eKI1/tlPrawq1FK6BYAuwb2Od/7qWyoWXdF0bH9BX6/y8uvY3OubW5t+cZui2qlV86ob5nyh0P3c/k1PR9JLPrhMvLClf8PLlQXetrY9cExMKSqyb1v8/b2v3Dpl+Y1LVhkFPtjxhqn6XdPKeWNFZucp90dubqksbqyacX1jI3KWAgAggywVgJj75a2nv/GzHe19KW6EBJeIGcAUCB9M5syCfyAXmUACFQLgRIwIcTznqiaZxdW423hq94nWgfbP/+k1q+eVM5CSodAAJERd/oKFq/syY8myCs22I9Ul7UzzPfXysW/9+LXblz+y4VklGtjek95ZF7nnljXux55u7TcVOVxQO73pzpsf628ZALsVO58/9Ma/z1jFfrhJKyou+NiHvQtmZ7t61bKy5ZV1hqILIRXJNCQOtoIskdUe/M2BH/32QNxRdcMFlNAot+HdCzSpstBPlItMIBxPQkm5w1QBgEnGhMZVsJnD3MbxrtTffvXZO9ZM+eCtK6qiLlsFEywCAsmi/lDh4hVOxkymE+V/fndHccAlsenQ3kKfu9tJp1KxeHtq9FC81OML3nRjvPWwfqir4+XNrY0Y9gUpNVJeFN3f2lz7odW+6TV1y1fF/ME5NTPcFgBSEoQKUhGOomqmYDsPdz/0+Bsbj6QtI8LVDKGtEDEASSqBCr83m/5FxUUmECMJkDsoeTwSJUTgwCR5AABUUkNDEr770omXj3R/5MYFN65oCHk1AUIyYMIGAkXnhhEqiESqPz9zMJ2eFbcOHTnSrMSl5ni3HQ7EThd98q6CG9bZPUOxJx6tbjv+F8uu9QWKxeDoysVLAl6v1+9zqZoE0okBCVuzkaSLkCsKATveNvrIC7uf39IymlGZbrhZNpfnSOayjSMATNJlG380F5lA78CZNzVxBFsPHe1N/8uD6599dfcdV8+7cklj2GcAWoAIyATlNg0xj1vV3crlkUWrkAtFsoWXmaYJrlC23w4XVRZ88S+LpenRowyAAzAJCgIRSEkMkDsCGALXBBMO4Mmuvl+92P3ylmOdIwlhuElnwBwEwYTyO6W75Lh0BDoXJqWm+bPg3dYaP/TAy79+YedNVy5YtmhKSTSg5dItkAOU9UiQiJIxbhM3maO7mc9l2EIvdklGKoKbFJAZKRXEXOp8QM4YEjIHNBvAG7fx8KmxF19remPbsfZRBN1DriJJQgHBpJWrLy9tLk2BPJQVjp1lbksJx5l36+nEroe2FD29a/6MmlXz6udPLa4p8KkKRwcZg4wCKgPFJEUgI0AAi4MAdEs/ShAAjNmIBMiAMQBGgMNpebLH3He4adu+U0dODo2kOSpe7pWINoJUJXKBnDQCsi/yiBkRL7QO8U0uTYEIEEGq0gJUBDBQgzb4OsbMzo2tG95oKg1q06uLZjXWzJziraiOcpfGVRkyDB0YAwYAbiJABIbAgBNkQUtZQgg5MJJqOt1/+ET74ZN9p7pkIpmyAVHVmQckJkEqCJwR5f4nASP8Pec7XwJcmgJluAsBFGm5hEVEEhQJTIDKtJApnFOj8sTg6G/2jHAPlXuMCl2JRH0lNcUgZIHXVVyiZ9IJleuO1LsGhkyRTaWppbU3nZYDI9nhlMyQQgooiqm4XFxqKBl3EMiRXJO5jEEogBGBAICLe6LrXXApCHT+nCsjAQASGY2nS0EEUEkCEOMIwFVFAQDpsP4ROSgd2Tkk9gwAAGMgwRZSIDKFqY4QDkgFmcI4IkOmM5V7kBFKAo7AEQm4JEJEhuNzFLl0HYCTKlHUH4uUcnyibnxN6FuHQC8Fgc7nbJZcwjfPDMjdBjznAgYSOABHDkouViEATpo6/jnpCupvHixCZ/4VREB4Nlk0Ab51vx3CpWAPADDGU6lUR1dXZVHZBS+4NAX6ozmbRhogV4/kThW5dGYe/ggcx3GEeLtcyu/rW3NB8Dze6xK9lyCioiipVGpsePR33l1nyNdAb8v7XJ0cRKTrWklxsaEYtpBMees9yddAed4JBEinzc6urs72bikvENa9j2qgSyKo/Z+GCFwuvbqyEixwHIur7C2jiu8ngfIt0h8OIqbTqRMnWzDtlNVXFbvDb7ngfSRQnj8CAlJVNRIKoUtmshlHOArXz70gL1CedwIRpQRHOCgI5QXyx+aD6DzvBElSVc3j9fq8PkVR48kY/G5nPl8D5XkniEhRlEgwBA45TDJNXDRpfvNMBhhnmWy2b3BQtTCDNmqWp8yP5/TELiAQvg/mkPO8S0hIt9sojES4jRYXkmVtxxFS5k5tJqJ8DZTnnWCcpZKZto4O1UJbFTakS0KVeGaYHhHzAuV5J0iSrqvFRVFmgskdiVkNFMdxOB/vfo3PbdA5ZyCcP2GW530LMhSSLNtmFljMlsziYBPA2WmNN2sgyuUyGz8zMu9QHoBcDaRpfp+faWSrQqJhgLenv+fsBeMCEYAtyBakEACRmDSnxeR5bzFt6UjSdY0hcEVKRA00VVXPpqxXSAAy0JHPKFaLTFNBYMRyRyHneZ9BgOJ3J52RHBHB1OGDx5AcQodAclR7evvC4TlEhIgoHQkIjgTTsSVIJxdd5yce34+cv5AbVSJ0ZNayARwEByTmTqAI+AO5c6lRSpMod1g1zx10xsC55Dej5Hkb1PO+c+GqJBcq5wRycl8jwpnzY9mllH8kz7uG4Px0n8jh3HiGAADkmUPjERHp3GVmBABAKCkfRL8fuUBlw8ZbNA4AQONrqs69ToFzWz0EAiAUBM7/z4LmmbS43vI1kTxnjxQQSADCc+okBcDOnewmAQmQABkpPD/J+v7kwi3PuTWOJBDnNmpIv5NBIt/5yvN7+Z2TM5S8NHn+QH5HmHxvK8+EyAuUZ0LkBcozIfIC5ZkQeYHyTIi8QHkmRF6gPBMiL1CeCZEXKM+EyAuUZ0LkBcozIfIC5ZkQeYHyTIi8QHkmRF6gPBMiL1CeCZEXKM+EyAuUZ0LkBcozIfIC5ZkQeYHyTIi8QHkmRF6gPBMiL1CeCZEXKM+EyAuUZ0LkBcozIfIC5ZkQ/w8n8jgjdE0kTAAAAABJRU5ErkJggg==\n", "text/plain": [ "PILImage mode=RGB size=192x192" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "im = PILImage.create('virginia.jpg')\n", "im.thumbnail((192,192))\n", "im" ] }, { "cell_type": "code", "execution_count": 4, "id": "570e0d36", "metadata": {}, "outputs": [], "source": [ "#|export\n", "learn = load_learner('us_flag_classifier_model.pkl')" ] }, { "cell_type": "code", "execution_count": 5, "id": "b720f38b", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 146 ms, sys: 24.2 ms, total: 170 ms\n", "Wall time: 62 ms\n" ] }, { "data": { "text/plain": [ "('Virginia',\n", " TensorBase(51),\n", " TensorBase([2.4324e-04, 3.2692e-04, 2.7230e-04, 9.8717e-05, 1.7264e-04,\n", " 3.7322e-05, 1.5884e-04, 7.1611e-04, 3.7362e-05, 2.5848e-04,\n", " 2.5484e-04, 9.4434e-06, 5.3560e-03, 3.8893e-04, 3.2906e-03,\n", " 6.0684e-05, 1.3504e-04, 2.8878e-03, 2.7466e-03, 4.7643e-04,\n", " 2.5224e-04, 7.1959e-03, 2.4807e-04, 2.1605e-04, 6.3929e-05,\n", " 7.4255e-02, 3.9130e-04, 2.3757e-02, 6.6141e-03, 2.8289e-04,\n", " 5.9384e-05, 7.2102e-04, 2.0143e-05, 5.2313e-05, 1.4563e-05,\n", " 3.5465e-05, 6.8503e-06, 1.3420e-03, 3.5132e-05, 5.3813e-04,\n", " 3.9269e-05, 6.8339e-03, 3.5217e-05, 1.3791e-04, 6.2349e-05,\n", " 3.0587e-03, 3.5639e-05, 8.6754e-06, 2.9960e-05, 6.8606e-04,\n", " 2.2120e-04, 8.3217e-01, 6.7605e-04, 2.1150e-02, 4.0541e-04,\n", " 4.1559e-04]))" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%time learn.predict(im)" ] }, { "cell_type": "code", "execution_count": 6, "id": "c0b37b48", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['Alabama', 'Alaska', 'American Samoa', 'Arizona', 'Arkansas', 'California', 'Colorado', 'Connecticut', 'Delaware', 'District of Columbia', 'Florida', 'Georgia', 'Guam', 'Hawaii', 'Idaho', 'Illinois', 'Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana', 'Maine', 'Maryland', 'Massachusetts', 'Michigan', 'Minnesota', 'Mississippi', 'Missouri', 'Montana', 'Nebraska', 'Nevada', 'New Hampshire', 'New Jersey', 'New Mexico', 'New York', 'North Carolina', 'North Dakota', 'Northern Mariana Islands', 'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania', 'Puerto Rico', 'Rhode Island', 'South Carolina', 'South Dakota', 'Tennessee', 'Texas', 'U.S. Virgin Islands', 'Utah', 'Vermont', 'Virginia', 'Washington', 'West Virginia', 'Wisconsin', 'Wyoming']" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "learn.dls.vocab" ] }, { "cell_type": "code", "execution_count": 7, "id": "a7fc9102", "metadata": {}, "outputs": [], "source": [ "#|export\n", "def classify_image(img):\n", " pred, pred_idx, probs = learn.predict(img) \n", " return dict(zip(learn.dls.vocab, map(float,probs)))" ] }, { "cell_type": "code", "execution_count": 8, "id": "9b00c6ff", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Running on local URL: http://127.0.0.1:7860/\n", "\n", "To create a public link, set `share=True` in `launch()`.\n" ] }, { "data": { "text/plain": [ "(, 'http://127.0.0.1:7860/', None)" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#|export\n", "image = gr.components.Image(shape=(192,192))\n", "label = gr.components.Label(num_top_classes=5)\n", "examples = ['california.jpg','virginia.jpg','unnamed.jpg']\n", "\n", "iface = gr.Interface(fn=classify_image,inputs=image,outputs=label, examples=examples)\n", "iface.launch(inline=False)" ] }, { "cell_type": "code", "execution_count": 9, "id": "f71f3f79", "metadata": {}, "outputs": [], "source": [ "from nbdev.export import nb_export" ] }, { "cell_type": "code", "execution_count": 12, "id": "191766ed", "metadata": {}, "outputs": [], "source": [ "nb_export('app.ipynb', lib_path=Path('.'))" ] }, { "cell_type": "code", "execution_count": null, "id": "345a7eb6", "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 }