{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0123456789+?-×/= 17\n" ] } ], "source": [ "import os\n", "# os.environ['CUDA_VISIBLE_DEVICES'] = ''\n", "\n", "from captcha.image import ImageCaptcha\n", "from PIL import Image, ImageFont, ImageDraw\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import random\n", "import uuid\n", "import math\n", "import glob\n", "import string\n", "\n", "%matplotlib inline\n", "%config InlineBackend.figure_format = 'retina'\n", "\n", "characters = '0123456789+?-×/=' # 验证码字符集合\n", "\n", "width, height, n_len, n_class = 200, 64, 12, len(characters) + 1 #图片宽、高,验证码最大长度,分类类别:字符集+1个空值\n", "\n", "font_paths = glob.glob('latin/*')\n", "# '/usr/share/fonts/opentype/noto/NotoSerifCJK-Bold.ttc', , '/usr/share/fonts/truetype/arphic/ukai.ttc' '/usr/share/fonts/truetype/arphic/uming.ttc', 'latin/arialbi.ttf',\n", "fonts = [ '/usr/share/fonts/opentype/malayalam/Manjari-Regular.otf', '/usr/share/fonts/opentype/malayalam/Manjari-Thin.otf', '/usr/share/fonts/opentype/noto/NotoSerifCJK-Regular.ttc', '/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc', '/usr/share/fonts/opentype/noto/NotoSansCJK-Bold.ttc']\n", "fonts2 = ['latin/segoeuil.ttf', 'latin/verdana.ttf', 'latin/calibri.ttf', 'latin/SIMLI.TTF', 'latin/verdanai.ttf', 'latin/framd.ttf', 'latin/ariali.ttf', 'latin/LSANS.TTF']\n", "fonts = fonts+fonts2\n", "print(characters, n_class)" ] }, { "cell_type": "code", "execution_count": 155, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['70', '/', '10', '+', '0', '×', '20', '=', '?']" ] }, "execution_count": 155, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# paths = glob.glob('/data/captcha/arithmetic/160_60/*.jpg') # 100_26 70_25 100_40 330_69 160_60 146_46\n", "# i = 12\n", "# img = Image.open(paths[i])\n", "# img2 = img.resize((width, height), Image.BILINEAR)\n", "\n", "# plt.imshow(img)\n", "# plt.show()\n", "# plt.imshow(img2)\n", "# plt.show()\n", "text = '70/10+0×20=?'\n", "re.split('(\\+|\\-|\\*|×|/|=)', text)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0+1-0=?\n", "image size (200, 64) (200, 64)\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAEjMAAAIvCAYAAAAvsJ7pAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAWJQAAFiUBSVIk8AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzs3WmsXOd5H/DnnZm7kSIvSVNcrMW0tVB2Fimy4iZWvdVo4CSwYzQ24G9FmxboAhRJm36pU8AFmq91m6BNgRRpgBaoDdRIiyZBqzh26tiyY1lQ4liyFsoiLXETxX27l/fOeftBl63g6jxj8szl3OX3A4wx56/nnEdzxTPnnHnvM6XWGgAAAAAAAAAAAAAAAAAAAAAAADerN+kGAAAAAAAAAAAAAAAAAAAAAACA9c0wIwAAAAAAAAAAAAAAAAAAAAAAoBPDjAAAAAAAAAAAAAAAAAAAAAAAgE4MMwIAAAAAAAAAAAAAAAAAAAAAADoxzAgAAAAAAAAAAAAAAAAAAAAAAOjEMCMAAAAAAAAAAAAAAAAAAAAAAKATw4wAAAAAAAAAAAAAAAAAAAAAAIBODDMCAAAAAAAAAAAAAAAAAAAAAAA6McwIAAAAAAAAAAAAAAAAAAAAAADoxDAjAAAAAAAAAAAAAAAAAAAAAACgE8OMAAAAAAAAAAAAAAAAAAAAAACATgwzAgAAAAAAAAAAAAAAAAAAAAAAOjHMCAAAAAAAAAAAAAAAAAAAAAAA6MQwIwAAAAAAAAAAAAAAAAAAAAAAoJOJDjMqpdxZSvmdUsqxUspiKeVwKeVfl1J2TrIvAAAAAAAAAAAAAABYq6zFBwAAAAAA1qJSa53Mjku5JyIej4g9EfHfI+LZiHhPRHwoIp6LiEdrradvctsvRcT2iDg8lmYBAAAAAID14EBEXKi1vn3SjQAAAAAAwGpZzbX4K9u3Hh8AAAAAADafAzGG9fiD8fRyU/5dvP7hyT+qtf7m9SdLKf8qIn4lIn49Iv7eTW57+9T0zK79+w/s6t4mAAAAAACwHhw/fjimBtM+GwAAAAAAYKNbzbX4ERHb5+bmdh08eNA9dwAAAAAA2CSee+65mJ2d7fzZQKm1jqOfG9vp698EcShe/6aGe2qtzRuybRFxPCJKROyptV6+ie0/effbDj786c/8zpg6BgAAAAAA1rpf/8zfjoiII4efLRNuBQAAAAAAVsVqr8Vf2c6TDz300MNf+cpXxtAxAAAAAACwHrz//e+PiIinnnqq03r83li6uXEfWnl87I0fnkRE1FovRsTXImJLRPzUrW4MAAAAAAAAAAAAAADWKGvxAQAAAACANWswof0eXHl8viV/ISJ+JiLuj4g/bttIKeXJluiBm28NAAAAAAAAAAAAAADWpLGsxY+wHh8AAAAAABi/3oT2O7/yeL4lv/78jlvQCwAAAAAAAAAAAAAArAfW4gMAAAAAAGvWYNINdFFrffebPb/yDREP3+J2AAAAAAAAAAAAAABgXbAeHwAAAAAAGLfehPZ7/dse5lvy68+fuwW9AAAAAAAAAAAAAADAemAtPgAAAAAAsGZNapjRcyuP97fk9608Pn8LegEAAAAAAAAAAAAAgPXAWnwAAAAAAGDNGkxov19eefyZUkqv1tpcD0op2yLi0Yi4EhHfWK0G9u7f0Zrt2LlltXYLAAAArFHnmotpfrpeaM3u7u9Na6cmdgsGANavc2evtGYnj/syaQAAAAAANq2Jr8UHAAAAAABo05vETmutL0bEYxFxICL+4Q/E/yIitkbEf6q1Xr7FrQEAAAAAAAAAAAAAwJpkLT4AAAAAALCWDSa4738QEY9HxG+UUj4cEd+NiL8SER+KiOcj4tMT7A0AAAAAAAAAAAAAANYia/EBAAAAAIA1qTepHa98I8QjEfG78foHJ/8kIu6JiH8TET9Vaz09qd4AAAAAAAAAAAAAAGAtshYfAAAAAABYqwaT3Hmt9eWI+FuT7AEAAAAAAAAAAAAAANYTa/EBAAAAAIC1qDfpBgAAAAAAAAAAAAAAAAAAAAAAgPXNMCMAAAAAAAAAAAAAAAAAAAAAAKCTwaQbmJSdu7a2ZnfevesWdgIAAACsBXNNfpuk17Rnd/bzewnTZepmWmITurL4Wpr3e9NpPjO1fZztAExUKaU1O3n83C3sBAAAAAAAAAAAAAAA+GH0Jt0AAAAAAAAAAAAAAAAAAAAAAACwvhlmBAAAAAAAAAAAAAAAAAAAAAAAdGKYEQAAAAAAAAAAAAAAAAAAAAAA0IlhRgAAAAAAAAAAAAAAAAAAAAAAQCeGGQEAAAAAAAAAAAAAAAAAAAAAAJ0YZgQAAAAAAAAAAAAAAAAAAAAAAHRimBEAAAAAAAAAAAAAAAAAAAAAANDJYNINAAAAAKwFu3vznXL4YdRa0/zkmb9I87mZ3Wm+b9eDN9wTAAAAAAAAAAAAAAAAwDj0Jt0AAAAAAAAAAAAAAAAAAAAAAACwvhlmBAAAAAAAAAAAAAAAAAAAAAAAdGKYEQAAAAAAAAAAAAAAAAAAAAAA0IlhRgAAAAAAAAAAAAAAAAAAAAAAQCeGGQEAAAAAAAAAAAAAAAAAAAAAAJ0YZgQAAAAAAAAAAAAAAAAAAAAAAHRimBEAAAAAAAAAAAAAAAAAAAAAANDJYNINAAAAAMBmUUpJ8327fiLN+72pcbYDAAAAAAAAAAAAAAAAMDa9STcAAAAAAAAAAAAAAAAAAAAAAACsb4YZAQAAAAAAAAAAAAAAAAAAAAAAnRhmBAAAAAAAAAAAAAAAAAAAAAAAdGKYEQAAAAAAAAAAAAAAAAAAAAAA0IlhRgAAAAAAAAAAAAAAAAAAAAAAQCeGGQEAAAAAAAAAAAAAAAAAAAAAAJ0YZgQAAAAAAAAAAAAAAAAAAAAAAHQymHQDwOpomuU0P3/5aJrPzuxoz6a25vtevprmvcGW1qyUfloLAAAAG9nczK5JtwAAAAAAAAAAAAAAAABwU3qTbgAAAAAAAAAAAAAAAAAAAAAAAFjfDDMCAAAAAAAAAAAAAAAAAAAAAAA6McwIAAAAAAAAAAAAAAAAAAAAAADoxDAjAAAAAAAAAAAAAAAAAAAAAACgE8OMAAAAAAAAAAAAAAAAAAAAAACATgwzAgAAAAAAAAAAAAAAAAAAAAAAOhlMugFgdTR1mOYXrhxP81L6rdnMYDatHS5fzrfdn7mp/QIAAAAAAAAAAAAAAAAAAAAAa1Nv0g0AAAAAAAAAAAAAAAAAAAAAAADrm2FGAAAAAAAAAAAAAAAAAAAAAABAJ4YZAQAAAAAAAAAAAAAAAAAAAAAAnRhmBAAAAAAAAAAAAAAAAAAAAAAAdGKYEQAAAAAAAAAAAAAAAAAAAAAA0IlhRgAAAAAAAAAAAAAAAAAAAAAAQCeGGQEAAAAAAAAAAAAAAAAAAAAAAJ0MJt0AsDr6/ek0v2P3T6R5r/Tbs157FhExNXt7mpdijhoAAAAAAAAAAAAAAAAAAAAAbCQmigAAAAAAAAAAAAAAAAAAAAAAAJ0YZgQAAAAAAAAAAAAAAAAAAAAAAHRimBEAAAAAAAAAAAAAAAAAAAAAANCJYUYAAAAAAAAAAAAAAAAAAAAAAEAnhhkBAAAAAAAAAAAAAAAAAAAAAACdGGYEAAAAAAAAAAAAAAAAAAAAAAB0YpgRAAAAAAAAAAAAAAAAAAAAAADQyWDSDQCro0RJ80F/ZvX2Xfqrtm0AAACAcVqqV9P8YrzWmr1aX0hrz9djaX65nkn6upLWNtGk+VSZTfMtsbM1my/709p9vXem+fayp72vmEtrAQAAAAAAAAAAAAAAWL96k24AAAAAAAAAAAAAAAAAAAAAAABY3wwzAgAAAAAAAAAAAAAAAAAAAAAAOjHMCAAAAAAAAAAAAAAAAAAAAAAA6MQwIwAAAAAAAAAAAAAAAAAAAAAAoBPDjAAAAAAAAAAAAAAAAAAAAAAAgE4MMwIAAAAAAAAAAAAAAAAAAAAAADoxzAgAAAAAAAAAAAAAAAAAAAAAAOhkMOkGAG7Eciym+eV6Js0v1dOt2WJc6rTvWodp3ivth9ypmE1rZ2N7mm8ve1uzmXJbWtuPqTQHGL86Im3Pz9Vjae2FejLNF+r5NM+O1fvKA2nttrInzYGNaSEupnl2fno5OTeNiFiKq2k+jKU0r7X9eNpPjncREdORn0NuLTvTPDsmTsVMWluin+YAN2rU8fJkfSHNDzdPtGYn6jNp7Zn6Sppfrq+1Ztfq5bS2iSbNp0p+r2FrvKU121nuTGvP1JfT/K7eQ63ZnnJfWrul7EhzAAAAAAAAAAAAAAAA1q7epBsAAAAAAAAAAAAAAAAAAAAAAADWN8OMAAAAAAAAAAAAAAAAAAAAAACATgwzAgAAAAAAAAAAAAAAAAAAAAAAOjHMCAAAAAAAAAAAAAAAAAAAAAAA6MQwIwAAAAAAAAAAAAAAAAAAAAAAoJOxDDMqpXyilPKbpZQ/LaVcKKXUUsp/HlHz3lLKH5ZSzpRSrpZSvl1K+eVSSn8cPQEAAAAAAAAAAAAAwFpmLT4AAAAAALCRDMa0nV+LiAcj4lJEvBIRD2T/cCnlFyLiCxGxEBGfj4gzEfHRiPhsRDwaEZ8cU1/AOtPEUppfqq+l+YvNN9L8cPPN1uxUfaHTvpfrtTSfLnOt2XzZn9buL+9M84P9D7dme8v9ae3W2JXmZTxz74BNpEZN8yaW0/xaXG3Nnh/+77T2ueaP0/xY80yaZ8fqn5v6tbT2gdJ+LAbWr+XIz/FO18Np/r1h+/lpdm4aEXGuHkvzhTif5sM6bM1my7a0dnd5e5rf3Xs4zQ/2P9ia7Sx3pLVTsTXNS5Q0BzafUeefi/Vymj87/FKaPzH8XJI2ae2oa+osH1XbG5GPuk9xLo62ZmfqkbT2e82fpfm7+n+9NXuw/7G09kB5T5p7HwAAAAAAADYga/EBAAAAAIANY1wTKn4lIu6PiO0R8fezf7CUsj0ifjsihhHxwVrrL9Va/2lEPBQRX4+IT5RSPjWmvgAAAAAAAAAAAAAAYK2yFh8AAAAAANgwxjLMqNb65VrrC7XW/GvQX/eJiLg9Ij5Xa/3WG7axEK9/q0TEiA9hAAAAAAAAAAAAAABgvbMWHwAAAAAA2EgGE9jnX1t5/J9vkn0lIq5ExHtLKTO11sVsQ6WUJ1uiBzr0BwAAAAAAAAAAAAAAa83Y1uJHWI8PAAAAAACMX28C+zy48vj8Dwa11uWIeCleH7L0jlvZFAAAAAAAAAAAAAAArGHW4gMAAAAAAGvaYAL7nF95PN+SX39+x6gN1Vrf/WbPr3xDxMM33hoAAAAAAAAAAAAAAKxJY1uLH2E9PgAAAAAAMH69STcAAAAAAAAAAAAAAAAAAAAAAACsb5MYZnT92x7mW/Lrz5+7Bb0AAAAAAAAAAAAAAMB6YC0+AAAAAACwpg0msM/nIuKRiLg/Ip58Y1BKGUTE2yNiOSK+d+tbA26FJpZbs5eaP0trnx4+lubHmu+k+ZXks9mlejWtHcZSmteoab5Qh63Zcj2S1l4sp9L8WPPd1uyB/ofT2neOyHeVt6V5iZLmwOazUC+k+YnafsyKiPiL4e+3Zieb59LaC/VEmo86li/W9mP5sOa1wNpVoxmRt5+n/fnw99LaF4ePp/mr9VBrtlgvprXLsZjmTdJ3RH5+erXmaxZHHavP1aNpfrj5Zmv2yOCTae1d5eE031b2pDnADxp1vByUqTTf2buzNbuz/Hhau6d3X5rPx77WbKpsSWuX6pU0Px/5ufHx5unW7HvN19PahRHvYYebJ1qzfuSv995yMM1ny9Y0743YPgAAAAAAwDpnLT4AAAAAALCm9Sawzy+tPH7kTbL3R8SWiHi81pr/1iYAAAAAAAAAAAAAAGwe1uIDAAAAAABr2iSGGf3XiHgtIj5VSnnk+pOllNmI+Jcrf/ytCfQFAAAAAAAAAAAAAABrlbX4AAAAAADAmjYYx0ZKKR+PiI+v/HHfyuNPl1J+d+X/v1Zr/dWIiFrrhVLK343XP0j5k1LK5yLiTER8LCIOrjz/+XH0BQAAAAAAAAAAAAAAa5W1+AAAAAAAwEYylmFGEfFQRPzNH3juHSv/i4g4EhG/ej2otf63UsoHIuLTEfGLETEbEYci4h9HxG/UWuuY+gIAAAAAAAAAAAAAgLXKWnwAAAAAAGDDGMswo1rrZyLiMzdY87WI+Llx7B8AAAAAAAAAAAAAANYba/EBAAAAAICNpDfpBgAAAAAAAAAAAAAAAAAAAAAAgPXNMCMAAAAAAAAAAAAAAAAAAAAAAKCTwaQbgHG4/OpSa7a8WNPa+bumx93OplejSfPjzdOt2aHma2nt4eabaX6pnk7zPeXe1uwt/QNp7W1xe5r3Sknzq/VCa3a2vpzWnmieTfNT8WJrNmim0tpBmUnzd/f35fXR/neomJkH61YTy2l+uh5pzV5u/jytPdI8keaHm2+1ZgvJsTQiYhjt5wQ/jOzfu0Z+TgGsXVfjfJofa77Tmh1qvprX1vbaiIimDluzfb0H0tod5Y40n41taV5L+3HrSj2T1p5sXkjzs/WVNL9UX2vNnh7Op7X9fn5+em/Z2V4b+bkvsDlNx1yaH+j9ZJpvK3tbs93lQFo7X/an+VzsaM0GJb9ntVyvpfnVOJfmu5L3mS1JXxERzwwfS/PL9Wxrdqrm7zEn6jNpvr+8K82z15Q3t3AxPy/oD9rfX6fm8vMRAAAAAAAAAAAAAABgczFlAgAAAAAAAAAAAAAAAAAAAAAA6MQwIwAAAAAAAAAAAAAAAAAAAAAAoBPDjAAAAAAAAAAAAAAAAAAAAAAAgE4MMwIAAAAAAAAAAAAAAAAAAAAAADoxzAgAAAAAAAAAAAAAAAAAAAAAAOjEMCMAAAAAAAAAAAAAAAAAAAAAAKATw4wAAAAAAAAAAAAAAAAAAAAAAIBOBpNuAMZh8cKwNbt2uUlr5++aHnc7G16NmubLsZjmh5rHW7MjzRNp7ZV6Ns3ny740v7//gdbsHb2fTmt3l3ekea/00/xCPdmafb95Mq0d9ZqfbJ5rzU7U9iwiYtDMpvm95dE0n++1v+ZTMZfWApMz6lh9sb6a5oeGf9qaPdt8Ka092Tyf5lNlpjWbK/Np7VJdSPPFuJTmwPrURPv1QETE+Xoizf9y+Q9as+P1u/m+a77vPb37WrMfG/x8WntH/Hiabyu3p3kt7ddCZ5uX09pnS34sf6Fpfx+IiHi1OdSavdR8I63dWe5K8/3lXa3ZqNekmOkMG1KJkubTZUuaHyjvyfPI80npl6k0n4mtab617GrNtsf+tPZo8500v1IvtGZX6/m09pXm22m+s9yd5nNlR5pvRrXm95WuXc2vk6Zm2u/vTM1tu6meAAAAAAAAAAAAAACAjclv8QEAAAAAAAAAAAAAAAAAAAAAAJ0YZgQAAAAAAAAAAAAAAAAAAAAAAHRimBEAAAAAAAAAAAAAAAAAAAAAANCJYUYAAAAAAAAAAAAAAAAAAAAAAEAnhhkBAAAAAAAAAAAAAAAAAAAAAACdGGYEAAAAAAAAAAAAAAAAAAAAAAB0Mph0AzAOOw7MtIf11vWxWSzHUppfrKfT/EjzZGt2uvl+Wntb2Z3mDw0+nub39z7Ymu0qd6e1vY6HzGz7s71tae32si/Nv7j02dbstXo4rb3QnEzz75WvpfnB8uHWbL7MpbXA5Jyvx9P8meFjaf7t4e+3ZhdGbHumbE/zu3oPtmajjoevNofS/EjzRJoD69NSvZrmZ5uX0/yF5qut2XIspLV39R5O8wcHH23NsnPTiIjp2JLmpcN84r29g2k+U25L8+nYmuanmn/bmi3V/DU91byY5kfLt1uz+/sfSmv7ZjoD/F9TMduabe/tTWt39u5I83PN0dZsKa7ltfVYmi+NeG/m/1dKSfNtu/OfZ4yoBwAAAAAAAAAAAAAAuM5v8QEAAAAAAAAAAAAAAAAAAAAAAJ0YZgQAAAAAAAAAAAAAAAAAAAAAAHRimBEAAAAAAAAAAAAAAAAAAAAAANCJYUYAAAAAAAAAAAAAAAAAAAAAAEAnhhkBAAAAAAAAAAAAAAAAAAAAAACdGGYEAAAAAAAAAAAAAAAAAAAAAAB0YpgRAAAAAAAAAAAAAAAAAAAAAADQyWDSDcA49AZl0i1sKgv1Qpofb/4yza/Us61Zifxnua3sTfN7en81zefL/tasH1NpbVcl+q3ZXJlPa2+Pe/O8vL01uxLtr3dExGJcTPOj9Ttp/rb6k61Z9npzc2rUND9fj6X5N4f/pTVrYjmtvas8lOY/0v9ImrO2LNWFNL9cT6f5VMy2Zvf235fW3t17d5q/tbyrNTtbj6a1F8rJNAc2pvP1eJqfqofSfCmutGaDMpPW3l7ekeZ3l/Zj3kxsTWvLKs4fLiNuB4w6795T8vPT3eVAa3ZuxPnKhZofy19Nfp73xQfSWgDeqP0ezKj3oH5Mp3kvuQcyHHHtOSqPEdfF3LjSa/95AQAAAAAAAAAAAAAA3IjV+81IAAAAAAAAAAAAAAAAAAAAAABgUzDMCAAAAAAAAAAAAAAAAAAAAAAA6MQwIwAAAAAAAAAAAAAAAAAAAAAAoBPDjAAAAAAAAAAAAAAAAAAAAAAAgE4MMwIAAAAAAAAAAAAAAAAAAAAAADoxzAgAAAAAAAAAAAAAAAAAAAAAAOjEMCMAAAAAAAAAAAAAAAAAAAAAAKCTwaQbANafhbiQ5sebZ9J8MS63ZjNxW1q7o7w1zXeVu9N8KmbTfFL6MZXmW8p8mu/uvb01e214OK09F8fS/NXmhTRf7F9Jc8atpumVOJvmzwwfa82WYiGt7fX7af4j8ZE0Z22ZKVvT/PbevWm+pexszfaUvPatvR9N8+1lX2u21OT/nfad3sKmdCFOpPnp5kia1+T9dWvsSmt3lDvTfL7sb81KlLR2kkadN28rt6f5nuR95MowP1+5HKfT/Gx9OUmbtBaA/6fGsDVbqvl592K9lObLca01G3UPZCa2pHkv8mtTAAAAAAAAAAAAAAAAJqc36QYAAAAAAAAAAAAAAAAAAAAAAID1zTAjAAAAAAAAAAAAAAAAAAAAAACgE8OMAAAAAAAAAAAAAAAAAAAAAACATgwzAgAAAAAAAAAAAAAAAAAAAAAAOjHMCAAAAAAAAAAAAAAAAAAAAAAA6MQwIwAAAAAAAAAAAAAAAAAAAAAAoJPBpBsA1p9r9XKan6ovpflyvdqabSt70tqd5a4070U/zUuUNF+ryojZczuS12VL2ZHWvtbkP6+z8UqaL0X7zzOiprWxTn8ek1RHvKbDOkzz5Vhoza7VS3ltXUxz1pf5sj/Nf6z/82k+iOnWbNSx2N99YNwu1TNpfq4eu+lt7yh3pPm2sjvNV/X8szYj8uX2rDc1YuN539Nla5rvLve0Zq+U76S1F+vJEfmrrVkTI14TgE2kifz68Fq03985X0+ktWfr0TRfqBdbs/ny1rR2VD6I2TQHAAAAAAAAAAAAAABgcvLpGAAAAAAAAAAAAAAAAAAAAAAAACMYZgQAAAAAAAAAAAAAAAAAAAAAAHRimBEAAAAAAAAAAAAAAAAAAAAAANCJYUYAAAAAAAAAAAAAAAAAAAAAAEAnhhkBAAAAAAAAAAAAAAAAAAAAAACdGGYEAAAAAAAAAAAAAAAAAAAAAAB0YpgRAAAAAAAAAAAAAAAAAAAAAADQyWDSDQDrz3IspvmFenJE/VJrNl22pLVbyo40L1HSfL0qI2bPbS1vac2m47a0tkaT5sPk5xURca1eas2W6kJaO1Xm0hxYPb3op/lUzKZ5frzdmMdiYO1aqBfT/EqcHbGF9uPW3Ijzz5mSn2utpmYxP++ul19qzXo7HkprSz8/Lx/ETJpvK3uT2qm0thlxfrqUXI+M+m9hUPJ990b0BnAr1ahp3sQwzUfdn3mleao1e2b4R2ntuXoszbN7DXNle1r7tt4jaT6qHgAAAAAAAAAAAAAAgMnJp2MAAAAAAAAAAAAAAAAAAAAAAACMYJgRAAAAAAAAAAAAAAAAAAAAAADQiWFGAAAAAAAAAAAAAAAAAAAAAABAJ4YZAQAAAAAAAAAAAAAAAAAAAAAAnRhmBAAAAAAAAAAAAAAAAAAAAAAAdGKYEQAAAAAAAAAAAAAAAAAAAAAA0IlhRgAAAAAAAAAAAAAAAAAAAAAAQCeDSTcArD/DWErzK/XcTdcPYjqtnY4taR5RRuTrUxkxe242trVmU2W2075r1DS/Fgut2XJcS2unYu6megLGIT9elg16PAU2pqW4kuYL9eJNb3t6xPnKqPPX1VT6I86NZ/a215ZutwP6MZXmW8p8a9YbeSsiP/9sYrk1W4xLae1cbE/z3oh/r/XqVPNimp+o323NztTvp7WjrhcYv/myP833lPtas/29d6a1o/9+cqOWavs1c0TE8eTv35HmibR2ORbT/Gq9kOZn68ut2cnmubT2WlxO87f03taaHeg9ctO1ERFT0e0+BwAAAAAAAHBjzp3L1xM+/XS+zvn559vzM2fybS/ly9ajjFjqOJcs/XnggSatffTR4Yht52smer56HAAAAADYpNweBQAAAAAAAAAAAAAAAAAAAAAAOjHMCAAAAAAAAAAAAAAAAAAAAAAA6MQwIwAAAAAAAAAAAAAAAAAAAAAAoBPDjAAAAAAAAAAAAAAAAAAAAAAAgE4MMwIAAAAAAAAAAAAAAAAAAAAAADrpPMyolPKWUsrfKaX8XinlUCnlainlfCnlq6WUXyqlvOk+SinvLaX8YSnlzErNt0spv1xK6XftCQAAAAAAAAAAAAAA1jrr8QEAAAAAgI1kMIZtfDIifisijkfElyPi+xGxNyL+RkT8h4j42VLKJ2ut9XpBKeUXIuILEbEQEZ+PiDMR8dGI+GxEPLqyTQAAAAAAAAAAAAAA2MisxwcAAAAAADaMcQwzej4iPhYRf1Brba4/WUr5ZxHxzYj4xXj9g5QvrDy/PSJ+OyKGEfHBWuu3Vp7/5xHxpYj4RCnlU7XWz42hN2AVNLGc5tfiUprXaFqz3ojD0iCm03yzmo7Z1qwfU6u67+W41poNY2lV9w0AEJGfj0RELMXCTW+7P+L8sz+Wy+ptO66bAAAgAElEQVSbU6bmO+Vd9CL/EseZ2NqalXjTL4z8odWordmon3V2LbKRna6H0/zp4f9qzV5svpbWZj8PVsedvQfT/Ef7P9ua7Y3709pR1+TcuMUR90iONE+2Zo8v/8e0djkWR+y9pGl2v2Aq5tLaneXONL+n92hrdm/vfWntXKze+xcAAAAAAMAaZT0+E3f0aPt6jqeeytd6fPGL+WfNX/96+zqTY8fyzzUXR3wsWvLyuO229nUN73vfMK3tjVji8uCDef2OHe37nlrd5d0Am8bFi/kbwalTeX7+fHu+nP/qVNQRS+dGvY/MzbVvYO/efOO7duX5qH0DbBZXruT5mTOj3kfaD6jD/HIgmo7L1rNrnVHXE3v25Du//XbXKsDmMOqcfWnEr8AfP56fWJ89e/PXE6PeJ0b1nhl1PTDbPpIgIiJ2725vLnsPiYgY+JUU3qDzpWmt9Uu11v/xxg9OVp4/ERH/fuWPH3xD9ImI+D/s3XmUZVd9H/rfvjV1l7qrWz13q9E80gINyAZrIQxGxhgbY1vYTwrghKzYKyE4UYJfnh+Jlx2TATvx8opXprecxCyenQCKjfMcQCAQgyIilgZAQhKaWmNLtLrVs7q6pnveH2plKbL270h1qroGfT7/9Or61j5n33v3cM69++7aGBGfev6Dk+O/fywi/tHx//6trvUCAAAAAAAAAAAAAIDFzHp8AAAAAABgOZnvfXaf34/shXuH/djxf69/id//RkQcjYjLSykj81kxAAAAAAAAAAAAAABYxKzHBwAAAAAAlpTB+TpwKWUwIn7p+H9f+EHJecf/vf/FZZqmmS6lPBwROyLizIi4t+Uct1ei819ZbQEAAAAAAAAAAAAAYHGwHh8AAAAAAFiKevN47I9HxIUR8fmmab74gp+vOf7vwUq553++dr4qBgAAAAAAAAAAAAAAi5j1+AAAAAAAwJIzOB8HLaX8nYj4SER8PyI+MB/niIhomuYNlfPfHhGXztd5AQAAAAAAAAAAAABgPliPDwAAAAAALFW9uT5gKeXDEfGvIuKeiHhb0zT7XvQrz/+lhzXx0p7/+YG5rhsAAAAAAAAAAAAAACxW1uMDAAAAAABL2eBcHqyUcm1E/H5EfC8i3t40zdMv8Wv3RcRlEXFuRNz+ovKDEXFGRExHxM65rBswd/rRT/PpmEzzJinfi6G07EAZSfOSpstX9rz1YmBez91vputZzMzruQEAIiL6Ub8eeS6fmvWxB8twmrddvy5XpWVv5IGoP29tZds0Tf1+YqbJX+u2e5lX7Q0FMG8m4kieN4eq2VQc63TuoZb3UFbFxmq2sZydlj1v4K1p/preRdVsbdmelgUAAAAAAHg1sx6fhXLddfU1MH/4h/n6mN278wUXM8ly4n7LUo6myfPSstbj2LH6L/zFX+RrWG6/PV+D/fGP52vm3/Sm+pqm9etbHhgAL8u99+Zj+Wc+k89hN91UL3/gQH7sbH6LiFixIh/rzz23nn/gA/layHe9K183OzJingGIiHj00Xwsv/76/Cv2111Xzw8ezG9GJia6LUwfHKyP5Rs25OP81Vfn88Q119TnmXXr8mO33YMBLCZt1+zPPJPPE5/8ZP6dsi9/uV5+//58wBwfz/PpZChvG4vb7gfOPDPPf/Zn6yf/xV/M71VWr86P3ev2lTKWmDl7uUsp/1c898HJd+K5vwDxUh+cRETcePzfd75E9paIGI2IbzZNMzFXdQMAAAAAAAAAAAAAgMXKenwAAAAAAGA5mJPNjEopvxERH4/n/rLD25um2Zv8+n+NiL0RcXUp5bIXHGNFRPyT4//9d3NRLwAAAAAAAAAAAAAAWMysxwcAAAAAAJaLwa4HKKX81Yj47YiYiYibIuLvlFJe/GuPNE3ziYiIpmkOlVJ+OZ77EOVrpZRPRcS+iPiZiDjv+M8/3bVeAAAAAAAAAAAAAACwmFmPDwAAAAAALCedNzOKiDOO/zsQEddWfufrEfGJ5//TNM2fl1J+NCL+YURcFRErIuLBiPj7EfEHTdM0c1AvAAAAAAAAAAAAAABYzKzHBwAAAAAAlo3Omxk1TfNbEfFbsyh3c0S8q+v5AQAAAAAAAAAAAABgKbIeHwAAAAAAWE56C10BAAAAAAAAAAAAAAAAAAAAAABgabOZEQAAAAAAAAAAAAAAAAAAAAAA0MngQlcAWKyaWWYRTUvOq0eJsoBnz9vhseZImt8y88lqtr/ZlZbtx1Sad9HWv8abQ2k+1YzP+tg7+7ek+Z9O/Z9pPr/ytjYSq6rZ+QNvS8ue3btiVjUCYC51u/50dbrcLOQ15tJ0Su91aX5SWV/NLm7ek5bVv0680bI2zcfK5mo2EENzXR1azOeI1XbPffHAz6X52b03V7PsHioiYqxsSvOVSTvtxUBaFgAAAAAAADjxxuvLS+NQvjQ1JifzfNOm+uqClSvzslMtS3Kffjr/3HRmpsux878d/p/+U/4Z/MhI/XFfeeV0fnIAIiLi3//7fKz90pfyr0Y+8EA+lu/ZU59HpqbyOaZpWTw3MJCXf/bZ+gEOHMgf95135o/rwx+uT85jY3nFhywxA5aRL3whnyc++9k8f/jh+njbNk/0+2ncqpT68Q8dysfyP/7jfDC///7647rqqvxG6XWvyx/YunVWlwOLR3a9HxHxu787nOY335yve9+1q378ycnZv2cV0X6/ken18nMfPZofPLsf+e5383uRn/u5/D2v178+f+AbN5pHlpO8tQAAAAAAAAAAAAAAAAAAAAAAALSwmREAAAAAAAAAAAAAAAAAAAAAANCJzYwAAAAAAAAAAAAAAAAAAAAAAIBObGYEAAAAAAAAAAAAAAAAAAAAAAB0YjMjAAAAAAAAAAAAAAAAAAAAAACgE5sZAQAAAAAAAAAAAAAAAAAAAAAAndjMCAAAAAAAAAAAAAAAAAAAAAAA6GRwoSsALEUlTXst+6T1YyZNM01L/mqVPS/z/Zz1YqCalUW8Z950TKT5o/3bqtlT/Xs7HXupOtDsyvOZPJ9PpWVcGi3rqtmm3llzXR3gZWqiSfN9zaNpvqt/VzXLrzeeO/tiNRQr03xtOaWare+dnpZdEatnU6VFr20eaMuztth2LfXqvT7N+1DeB7v1v+z17LW8zdHWFpar1WVTpxzoIr8v7jIuleR+PCJiSzk/zc/qXT7rcwMAAAAAAADLy+hofT3Huefm62POPz/PN26sH3tlvlQqJifz/Kmn8s9cb7qp/rnqo4/mn+dOtCwH/ta38vLvfne9bk3L8pny6lziAixThw7lg9pdd9XH6s99bigte8st+Vg8OZmfeyBZfvP61+drkUdH0zgeeCCv27599brddlu+Lujgwfxxbd1an5vf9a7ptOz27Yt3jTXAK7VzZz4WP/JInq9YUc/OOSe/D+r18vG0bX584ol63Y4ezcvec0+e7907+3uVdeumWvK27/IAnDht4+U3v5lfd7fNI/1kKhgeTovGyMjsr7unp/PHdfRoXn7//rx8lu/alZdtq9vatfnj3rjRPLKcLN5dJgAAAAAAAAAAAAAAAAAAAAAAgCXBZkYAAAAAAAAAAAAAAAAAAAAAAEAnNjMCAAAAAAAAAAAAAAAAAAAAAAA6sZkRAAAAAAAAAAAAAAAAAAAAAADQic2MAAAAAAAAAAAAAAAAAAAAAACATmxmBAAAAAAAAAAAAAAAAAAAAAAAdGIzIwAAAAAAAAAAAAAAAAAAAAAAoJPBha4AsFiVJBlISw7EUJo30a9m/ZhJy/abqTR/tZqJyWrW9px2NViGq9nAIp5mSst+fqPl5Gq2umxMy87E/LXTJpqWc0+n+Xizf9bHHoqVab6yjKX5/KqPWRERo2VtNRuOk+a6Msyjpp+307acxSW7JoiIeKx/R5rfMPV71WwqjnU690IaK5vT/LUD76hmF5efS8uuKKtnVaeFl4/zA63Xp3k+ncyfM00+t873tdZi1daHZmIiKdttrC6l3h6GykhL2bwtAMy1tnvPkr7/ks9/vZZ77rbyAAAAAAAAAM97zWvqa0He8558/cyHPlRfxxwRMZAs10iWgURExEzL0pyjR/MDfOhDK6rZY4/ln+f2W5aYHTqUn3t8vJ63HTt7zgCWmqeeysfL//Af6t9Buu++fKyemMiPPVz/uktERGzdWh+Qr7km/17Ili35Wsjrrsu/W3XTTfXBfv/+/HE9+mj+vPzu79bXUl5wQT4Jbd/+6lwXCyxPY2P5WH3qqXmezRNve1s+Xg4P58d++OF8LP/qV+trRB95JC/77LNpHHv31ueZz3wmX5v6kz+Z3x9eeGF+7rZ7QIC51MuHy1i9Oh+rN27M85HkK0xr1+ZlV66c/Xer2t4P2707z595Js8n6l8JiwMH8rJ/+qf5PHLllfk8cuml9fnVHLL0tHRBAAAAAAAAAAAAAAAAAAAAAACAnM2MAAAAAAAAAAAAAAAAAAAAAACATmxmBAAAAAAAAAAAAAAAAAAAAAAAdGIzIwAAAAAAAAAAAAAAAAAAAAAAoBObGQEAAAAAAAAAAAAAAAAAAAAAAJ3YzAgAAAAAAAAAAAAAAAAAAAAAAOhkcKErACw9vRhI85FyUpr3m+lqNh2TadnJOJrmTTRpvlS1Pa6J5HmZbvLntKvhMlrNhsqKeT13rqTpyrImzX988CPVbCqOtZx7/tphP/pp/nT/wTS/fvqfVbPJJu9fZ/fenOZvGfqVNJ9f+eudjVujcfJcV4Z5NHlwPM2nSsuYVx+yYBFpG9Pqe9KWlrLL1UCMpPlQcr0SETHdHKxmbdefbdevy9VM1K/pIyLGm8PVrB8znc6dzett13gDMdTp3ACvVDZvR0SUkuUt1wQlf3+m2MceAAAAAAAAeJl+7Mfq6zmmpvK1HgP5R5dROixp6rV87Dk6mq/ZzfKhobzs5GS3tVj9ZMlvv58fe2Bgea6JB16dnn02H/O+8536YH/wYLexePPm/PsXH/vYRDX7oR/K579Vq/Jzn3FGPpY/8EB97ev+/fnkOjWVn3vfvvrzNj6eP6czLUs82+Z9gMXkgx/MB8xf+IV8TfzatfWxfNWqfJxvu5eZqE9BERFxzTX1uv/tv70yLZvNrRH5vcrERD5PtN0nzczk+eCgex3gxMnG8YiIX/qlfJ7YujUvv21bfUAdHk6Lts4Tmel8+orx/Cu48ZGP5N/9v/XW+kV/NodEREy2fM2uLZ+ers8jbe/lsfj4RgsAAAAAAAAAAAAAAAAAAAAAANCJzYwAAAAAAAAAAAAAAAAAAAAAAIBObGYEAAAAAAAAAAAAAAAAAAAAAAB0YjMjAAAAAAAAAAAAAAAAAAAAAACgE5sZAQAAAAAAAAAAAAAAAAAAAAAAndjMCAAAAAAAAAAAAAAAAAAAAAAA6MRmRgAAAAAAAAAAAAAAAAAAAAAAQCeDC10BYOkZjKE0Hy0np/lEc7SaTTbjadnx5mCaN9Gk+VLV9riONvur2VTUn++IiF4MpPlQWZHnMVrNBlraykJqe9xryyknqCavTD9m0nyy5H2odNjHcGUZS/ON5exZHxteroEV+bgy0OR9m8WlbUw6pfe6NH/b4Ier2UxMt5x98V4zDJeT0nxDOaOajZZ1c12dJWGo1K9HIiJGYlWaj0f9GvNYczgtO9k8m+bL1XRMpvmzzTPVbCam0rJt15BZHxmKlWnZtmvA5erp/gNp/mRzdzV7pnk4Lbt4R9Pla23ZluZbynnVbFvvwrRsz1uFc65tTBuI4VmXXRmrZ31sAAAAAAAAgBdau3ZprgBoWqo9M1NmlUVElDxuzQeSZSq93tJ8vl+tnngiX+t41115fuut+Zqlv/JX6uupzj67n5ZdSOPjeSe44Yb64257XK997eJ93Lxy/ZaX89ixbKzudu7hluUzWVvcsCEfq0dG8mO/5jX5Ax9Nlr72Wr720facTrcto4Y5cP31+XrD22/P57+BgXofu+aavBG39a+2PsSrx2mndbumaJtH5tO6dfU+snp1Pkdl9yIR+fzaNse0rR4vxb0OsHicdFI+Jl1xRX7DkY3FERFjY/W87X2jLtrfD8vztnmki7a6tT0v3jNbXlyWAwAAAAAAAAAAAAAAAAAAAAAAndjMCAAAAAAAAAAAAAAAAAAAAAAA6MRmRgAAAAAAAAAAAAAAAAAAAAAAQCc2MwIAAAAAAAAAAAAAAAAAAAAAADqxmREAAAAAAAAAAAAAAAAAAAAAANCJzYwAAAAAAAAAAAAAAAAAAAAAAIBObGYEAAAAAAAAAAAAAAAAAAAAAAB0MrjQFQCWnsEYSfNVZVOaH46nq9mxOJyWPRJ707yJJs2Xqib6aX6o2V3NxuNQWnYghtJ8dcvrORyj1azEQFoW4JUaXJmPWQMzLZe3M3NYGTorUdJ8UzknzwfznFePFbEqzUfLyWl+oNlVzdquP4+1XGtFen2a94HFbCrG03x/83g1m46JtOxIy+t5UqyvZgMxnJZtG3eWq33NY2n+/ZmvVLOH+jenZZfrPdhitr13Uf4LyW3YlrggLdrzVuGcG4qVab6unFbNzuy9KS3bNr+tLhvTHAAAAAAAAGCxO3YsX+uxc2ee79tXz2da1hMOtCyDXr06XzOxcmU9bzs2i8szz+Tt7NZb8xf03/ybfE3TunX1tvLTPz2dlj399Px7Bl3s358/7rvv7qX5pz5VX4dy2WV5vQcH88d97rnz97iZe8PD+Xi5fXv99Tx8OG9nk5N5O53Om1LaztvmoF4vf1wHD+bl+0kzLi1LHYfyJfWxZk29biMjeb17+VMO/8tNN+Xz3yc/mTfUoaF6W3zLW/ILtVNOSWPtmP9lOL8Mm1dNyxLro0fzwf6JJ+r5RL4cv3UeGUyWC69alVd8xYr82Prfiffss/UXvO2a/dix/NhZO25rZ4vZQtZ9y5b6k3rWWfl9jv71yrXNA2ecsTTvLbN+HxHx0EN5YzlyZPadoO053bgxn0fGxvLce2bLi2ELAAAAAAAAAAAAAAAAAAAAAADoxGZGAAAAAAAAAAAAAAAAAAAAAABAJzYzAgAAAAAAAAAAAAAAAAAAAAAAOrGZEQAAAAAAAAAAAAAAAAAAAAAA0InNjAAAAAAAAAAAAAAAAAAAAAAAgE5sZgQAAAAAAAAAAAAAAAAAAAAAAHRiMyMAAAAAAAAAAAAAAAAAAAAAAKCTwYWuALD0DJfRNF9XXpPme8oD1exosy8tu7/ZleZNzKR5RJNkpaXswml7XHuandXsSLMnLdv2em4qZ6f5SEt5AID5NlpOTvPVZdOsj32weSrNjzR707xJrj/LIr7+bHOsOZzmTzX3VrPJ5mhadqxsTvN1ZXs1W8rP6ULK2imLkddrKRkpq9J8x8BPVLPXDryj07mLfewBAAAAAACAJW7PnnwtyB/90VCaP/jg7NeSDLZ82+aMM/ppfvLJPt9fLtasyV/LDRvyfHIyP/7v/d5wNTtyJG/Dv/7rE/nBO7jrrnzdQVbviIjbbhuoZnfckZ/7ySfzc//Lf3ksPwCLyrp1eR/58R+frmb79uXj/KFDeR85ejTPb7qpPthv2DCVlt24MY3jvvvydnz4cL1uMy1fjWqbY374h+sHaCtbLMPkZZqud92IiJhomaL6/XpjaxoNkaWvrY889ljezv/sz+pz1FNP5WXbzj02Vp8LduzI73PWrjWPLDZPPFF/0j/84RVp2V278uuV7Jqk7bXuzeMy5lK63W+31T3Luz6uX/iFegf92MfyyXNkRP/jOTt35g3xt397JM0femj2DbntPZJ3vSufhLZvz+cZlhffaAEAAAAAAAAAAAAAAAAAAAAAADqxmREAAAAAAAAAAAAAAAAAAAAAANCJzYwAAAAAAAAAAAAAAAAAAAAAAIBObGYEAAAAAAAAAAAAAAAAAAAAAAB0YjMjAAAAAAAAAAAAAAAAAAAAAACgE5sZAQAAAAAAAAAAAAAAAAAAAAAAnQwudAWApWdFrE7zreW1af5wfKuaPRv70rKHm91p/kT/u2m+tVxQzVaWtWnZ+TTRHEnzPbEzzfc2D1Wzo82BtOya3pY0P7X3hjRfEWvSHABgvo2VzWm+vpw262NPtlyn7WseS/PdzX3VbFM5Jy3bW8Bb9sPN3jTfk1x/Ppc/XM2m4lhadk3ZmuZbyvnVrNiz+SVt712U5lkfuiz+j7muDh2tbLknX102VbOBGJrr6tBRNm6VE1iPF5uemU7zBx/P57+TV49Vs83rN8yqTgAAAAAAAMDyc9dd+VqPz38+Xz/zla/k+e7ds//kdfXqJs3/xt+YSvNLL52Z9blZXDZvztvCm96Uf8b+1/963g6//OV6O77++ryNDw3ldfuVX8nb6de+NlDNPvvZ/Nzf/W69bETE+Hj9cV9ySd4/LrpI/1lONmzI2+lVV9X70K5def85dixfD9U2D1x3Xb2d3357PkeNjKRxPPlkfu6nnqrnbePO5Zfn487f/bv1vn/66fmx4eVqWppSW54pRTvlxPj61/Prnf/4H+v51FQ+zk/nQ3UcOZKX/8EP6vmePXnZdevyPnTZZfVrrWuvnUzLnndeP8058frJSzIxkZc9ln+1I2Y6XJaXeV0IPb+rrOez7tlzbv5bXtrmgYceyu83vvjF+hyUZRER996bH/vQobyRn3pqvS1ecUX+wN73vvx9iDPO0M5fTXzLDwAAAAAAAAAAAAAAAAAAAAAA6MRmRgAAAAAAAAAAAAAAAAAAAAAAQCc2MwIAAAAAAAAAAAAAAAAAAAAAADqxmREAAAAAAAAAAAAAAAAAAAAAANCJzYwAAAAAAAAAAAAAAAAAAAAAAIBO5mQzo1LK75RSvlJKebyUMl5K2VdK+XYp5TdLKesrZS4vpXz++O+Ol1LuLKVcW0oZmIs6AQAAAAAAAAAAAADAYmc9PgAAAAAAsFzMyWZGEfH3IuKkiLghIv5VRPxJRExHxG9FxJ2llNe88JdLKe+JiG9ExFsi4rMR8a8jYjgifj8iPjVHdQIAAAAAAAAAAAAAgMXOenwAAAAAAGBZGJyj44w1TXPsxT8spfzTiPhoRPzfEfGh4z8bi4g/jIiZiHhr0zS3Hf/5b0TEjRHx3lLK1U3T+BAFFqmRWJXmW3sXpPnqsrmaHWp2p2UPN3vS/J6ZL6V5vzdTzbb0zk/Lrixr0ryJJs3Hm4PVbE/zYFr2wf7NaX6g2VXNepH/gZ21ZVuav6Z3cZqvjLE058TqtexTOBBD1WwwRlrKztVlAwDMrbGoX19GRGwsZ6X5aDm5mk00R9Kyu/sPpPl9M1+rZr2B/DptrGxJ86FYmeYzMV3Njjb70rKP9b+d5g/3b0nzY82harayrE7LbuydmeabeudUs7ZroVerVWVDpxyYvfE4kOZ7+4/Us2ZnWra0jHlbWt6fWV9OrWa9MpyWHRnK88EB949zbebYZDVr+v207ODoirmuDgAAAAAAMPesx2fZuuWW+hqZG27I1898+cv5Z4+PPZZ/bjo1Vc+2bs3Xfr/5zfV15xERl1+e51u25Mdn6Vi5Mn8tz8qXp8V731tfxxURsW9fqWbf/W7eR/7bf6uvDY+IWL06r/vNN9f72C235P3ryJF6vSMiXv/6eh95+9vz5+QNb8j7F0vLipZlC2edVV/3sGNHvibinnvy/PHH8z700EP1dr5rV97G2xw7NvvyWf+JiLjiijy/5JJ6Xro9LIBl5ckn80HxS1+qXytNTORlW5b1RTOPtwvr1+cHz+6FduzI55gxXyVddNaurb+ebfciBw7k7XgmaQ7z2Ybbjj/f5850Pfcb31h/Ulu+YsQidOhQvQ9l9xoREV/4Qv6Cf/GL9fv9O+/Mj5313Yj8fiEif8/rbW/Ly772tfkEuGKF98teTebkW34v9cHJcZ85/u8Lv2n43ojYGBGfev6Dkxcc4x8d/+/fmot6AQAAAAAAAAAAAADAYmY9PgAAAAAAsFzMyWZGiXcf//fOF/zsx47/e/1L/P43IuJoRFxeShmZz4oBAAAAAAAAAAAAAMAiZj0+AAAAAACwpAzO5cFKKb8WEasiYk1EXBYRb47nPjj5+At+7bzj/97/4vJN00yXUh6OiB0RcWZE3Ntyvtsr0fmvrOYAAAAAAAAAAAAAALBwrMcHAAAAAACWujndzCgifi0iNr/g/9dHxF9rmmbPC3625vi/ByvHeP7na+e4bgAAAAAAAAAAAAAAsFhZjw8AAAAAACxpc7qZUdM0WyIiSimbI+LyeO4vQHy7lPLTTdPcMZfnOn6+N7zUz4//hYhL5/p8AAAAAAAAAAAAAAAwH6zHBwAAAAAAlrrefBy0aZrdTdN8NiLeERHrI+KTL4if/0sPa/5Swf/95wfmo24AAAAAAAAAAAAAALBYWY8PAAAAAAAsVfOymdHzmqZ5NCLuiYgdpZQNx3983/F/z33x75dSBiPijIiYjoid81k3AAAAAAAAAAAAAABYrKzHBwAAAAAAlprBE3CObcf/nTn+740R8b6IeGdE/JcX/e5bImI0Ir7RNM3ECagbMAvDZTTN18Xpab6ld341O9zsTsseaHal+T0zX0rzkuzhNhlH07Lre6el+Uwzk+b7m8eq2SP9W9Oy9/a/nObTzbFqdnI5NS27rVyY5pvK2WleYiDNmVslSpoPlxVpvr6cUc2mSz71ru5tSnOWlpmYTvPJJh8TJ+JINWsiHw+7ONzsSfO2sbyLZ5tn0nx/8/i8nXswRtJ8OPK5eaSsmsvqwKIzWk5O8w3lzDTf1ttRzZ7s35OW3ds8kuZTM/XrtIEYSstuTeoVEXFSy+OeSq4R9/QfSst+v7kxzXf170zzwRiuZht7+fXllnJBmp9ctidpfq0EcKIdaJ5M8+x9jDtn/r+0bK/kb+2+afCvpvnK3upqtqa3rZpFRJxxSjYWMx9mJiarWX8qvwcbHM3fKwAAAAAAABY96/FZUOPjef6DH+R/Y/tP/od4jacAACAASURBVKS+RubGG/N1yI8/3u3vd598clPN3vjG/HO297+//hldRMSWLfVjR0QMnohv67AorFmTt4Uf+ZG8rT32WH3N0/79+Xqob3wjb2j/4l/U13FFRBw6VD9+v5+f+5RT+ml+1VVT1ewnfiJ/Ts49Nz82S8tEyxXJ7t31sb60LAlcuTLP28oPJcs4myYv3J/HZrpxYz6unHJKno+P1+s+MpKXHfAVoROurY9k11rz2Q7bZHNIRESTN7W07k89lR/7kUfya8T5vA4bG8sfWHb92TYmceKNjuavZ3bNP5nfLsSx+lL+l5nXG8xMy9e22vrfkSP1Y99zTz4RnHNOPvBkfSAin3uZnc2b68/5P/gHeUNtaytteabrHJWdez6P3abruUeSrwh6H2HpefLJ+nj6F3+Rv6B//Md5nl0DZu0oov09q5//+fr9ekTEO99Zn2jOO8/9Oi9ft3d2I6KUcm4pZc1L/LxXSvmnEbEpIr7ZNM3+49F/jYi9EXF1KeWyF/z+ioj4J8f/+++61gsAAAAAAAAAAAAAABYz6/EBAAAAAIDlZC72aHtXRPzzUsr/iIiHI+KZiNgcET8aEWdGxA8i4pef/+WmaQ6VUn45nvsQ5WullE9FxL6I+JmIOO/4zz89B/UCAAAAAAAAAAAAAIDFzHp8AAAAAABg2ZiLzYy+HBFnR8SbI+KSiFgbEc9GxP0R8f9GxB80TbPvhQWapvnzUsqPRsQ/jIirImJFRDwYEX//+O83c1AvAAAAAAAAAAAAAABYzKzHBwAAAAAAlo3Omxk1TfO9iPjwLMrdHM/9FQkAAAAAAAAAAAAAAHjVsR4fAAAAAABYTnoLXQEAAAAAAAAAAAAAAAAAAAAAAGBps5kRAAAAAAAAAAAAAAAAAAAAAADQyeBCVwBYfgZiIM1f13tXNZuOibTs92Y+l+aTzbNpfu/MDdXswf7/SMsOxFCat5mJqWo2FeNp2ckmz0fLydXs3IEfTcteOFB/PSIiSsvryYlVWvYhPLmclubvGfrtatZEk5YdjpPSnKXlcLM7zR/s35Tmd898sZodaZ6ZVZ1ejuk4luYTLfNAmyb61eybM59Iy94285lO585s6+1I83N7+Vi/Y+Cdc1kdWHJO7m1P88vjg9Xspvh/0rK7+nel+cHmyWp268x/TssOzoykedt1Wja3z8RkWrbtujq/aogYK5ur2SW9n0/Lntq7tOXopSUHWDwO9/Pr7uy6fLLlvYLS5ONh27mPlH3VbE3ZlpblxBtaNZqkbTMzAAAAAAAAzN73vpevUfnIR/I1Lo8/Xl/7eujQ/K4Dee976+u3r7pqOi170UX19YQREStX+pyOufGWt9Tb2ve/n7fDr341P/Yzz+Rrz/vJ4XfsmEnLXn113ofe/e56+W3b8sfF8nL//fk88mu/Vp9HsjkkImJffflLREQMD+f56afX2+lIPr3FwYP5HPboo3ndM1/9av6cHTmSn3tsrP7drB078v63dq357UR76KH89b722npDPnAgb2dNy8tZOlyK7d6dF56ayvOZZJr52MfyDjg62q2d9mbfPVuvIX/1V+trtAdavqLX5fVgdi6+OB8T//E/ro+nWRuOiLj33ryhffvbeYO46656+bZrvKefzhvTDTfUz33rrSvSstdem38P4Z3vzJ+Y7dtdB861bEwbHp6/eb1tjlnK5vOxGeuXl0ceqXfA667Lt3HZv3/2FyTnnJOPtb/+6/lY3Tb/bdlirGZudLjsBgAAAAAAAAAAAAAAAAAAAAAAsJkRAAAAAAAAAAAAAAAAAAAAAADQkc2MAAAAAAAAAAAAAAAAAAAAAACATmxmBAAAAAAAAAAAAAAAAAAAAAAAdGIzIwAAAAAAAAAAAAAAAAAAAAAAoBObGQEAAAAAAAAAAAAAAAAAAAAAAJ3YzAgAAAAAAAAAAAAAAAAAAAAAAOhkcKErACw/pWWftJN726vZa+PH07KjsSbNn+jfmeb7myeq2XjsT8sebSbSvERJ8+EyWs1Wx6a07PreaWm+vXdRNTu194a07JqyNc1ZWgZjOM3XlG0nqCYsdjMxlebjzaE0P9A8Wc0ON0/Pqk6L3bPNM3keed7F6mZjmk80R+bt3HCiNDP9anbkB4fTssOr8/lveKx+HRYRsal3TjW7tHlvWnZDOTPNn+rfW82ysTQi4mhzMM37MZ3mvRioZiNlVVp2Y+/sPC95/prexUl2SVp2tJyc5gBLyYoyluYjST4QQ2nZXsnff1lRVrec+6Q0Z3EpA/4uAQAAAAAAAPPnxhvr60w+/en8s8t7762XjYiYSpYr9utLhiIiYuvWJs3f//58LeSVV9bX11xwQX7yk07Kzw1z5XOfq3+16+ab88+KS/4Vhhgeztvx5GT9AM8+mx98166W708ky/qyjKXn9tvzeeCzn82/vvi979XLHz2an/v88/Ox/Mor83lix46ZarZiRX7u/fvzPnDPPfnz8md/Vn9e9uzJj3333fnY8IlP1DvZtdfm341au9b8d6IdO5bnO3fW29K+fXlbaebx5Wy7jms790y9+8Vjj3Wb/9p0Kf/000nF5/G8zI9Nm/KG/KY31RtyWxs/77y2Y+dt6Qc/qPeDBx7I+8jXv57PQdncfehQ3lDb5vWTWpamXnNNy+DBnJrPcceYBhGTk/XswIG8k0znXwlLrc6/JhBveEM+x2zYkE9i7tmZK74BAQAAAAAAAAAAAAAAAAAAAAAAdGIzIwAAAAAAAAAAAAAAAAAAAAAAoBObGQEAAAAAAAAAAAAAAAAAAAAAAJ3YzAgAAAAAAAAAAAAAAAAAAAAAAOjEZkYAAAAAAAAAAAAAAAAAAAAAAEAnNjMCAAAAAAAAAAAAAAAAAAAAAAA6sZkRAAAAAAAAAAAAAAAAAAAAAADQyeBCVwB49RmO0Wq2rXdhWnasbE7zteWUNN/bPFzNjjR70rKTzXia91r2hxspJ1WzsbIlLbupnJ3mp/QuqmajZW1atmcqgFelbCyOiFhXTk3zM3pvrGbjzYFZ1Ym6jb18HlhTtp6gmsytYy1za4mS5iNlxVxWh4XW1KP+1ExedLqf5r0YSPMVsbqand27Ii27JvL+ty7q4+kzzaNp2fHmUJr3YyrNs8e9soylZdeV09J8c+/8ND8lua4fiOG0bFvfB1hK1rTc728v9fv5qd7RtGyv5O9DbO1dkOYnxbo0BwAAAAAAAJaOfr58Jvbuzddj3HhjfT3xF76QrzWemMjPnTn99LziV16Zrxv64Acn03zTpvqipOF8CQu8bEeO5P1r5848//M/r/ex73wnXxuwbl2y8C4iLr8870O7d9frtn9/Xu/bbsvX5X3nO/VzDw/n9d6wIc9ZXO68M2+n11+fzyNHjtSzpqUpnH9+3sbf9758neWZZ9bnobZ5oq3v339/Psd94xv1PtQ2b+/bl+c33FA/9gc+YI3mYjM2ljf0K66ot/Os/0S0XyN28f3v5/PAE0/kbW0gKX7xxXnfbnvOSkszbxtbMmed1bJuPR8SWWRWrmzLZ99YtmzJy+7YkZdvmno/2Lkzb2iH8q8hxB131DtgW/9ouwa86KK8j1x9dT1r67u8tOya5I478rZy7Nj8PelL+fWcz7pv21bvIxdckPefpfycLlebN9cHzbe/fTotOz6ev6DZddyFF+ZtZePGfDAfGkpjmDMujQEAAAAAAAAAAAAAAAAAAAAAgE5sZgQAAAAAAAAAAAAAAAAAAAAAAHRiMyMAAAAAAAAAAAAAAAAAAAAAAKATmxkBAAAAAAAAAAAAAAAAAAAAAACd2MwIAAAAAAAAAAAAAAAAAAAAAADoxGZGAAAAAAAAAAAAAAAAAAAAAABAJzYzAgAAAAAAAAAAAAAAAAAAAAAAOhlc6AoAC6NpycsJqcVfNhjDab62nJLnA3kOwHNWl01pvmPgnZ1yeDn2zexN84EYSPPNg9vmsjossDJY32t3zenrTmBN/ndDZUWab4sL83wwzwFY3ta0vI9xyWA9vyR+dq6rAwAAAAAAACxTk5N5/q1v5Wux7r67vnbnwIH5W1n+Uz81nea/8Rv5AxsezlfFl6TqMzNp0c56yZ8ez+rF4tO0fPni8cfzF/QP/iD/jsT999cby+BgfuwLL8wb8u///rE0v+OO+tjw6U8PpWU///n8K2l/9Ef18gP5kBTveEc+NuhDi8vevfkL8thjed7WxzLr1uWFzzmnn+ZtbTGzalV+7tNPz889Olov39bGp6byfN+++gGmpnSgxebMM/O28m//bT6WZ9r6V5f+99GPjqT5Jz+ZzyMrVtRP/tGP5teAl1ySz39tfaifP+WplSvzPLsGhFcia8dnnZU34q1b886dzX/T+WVYjI/nHezYsdnP+67xZie7H/nwh/Pvwzz1VD5odXm95nM8LKXDBBbtdc/yro/r6qvrF3K/8zsTadm2c+tDJ94P/3D9muSHfqjbG09drtO63OfAXHJpDAAAAAAAAAAAAAAAAAAAAAAAdGIzIwAAAAAAAAAAAAAAAAAAAAAAoBObGQEAAAAAAAAAAAAAAAAAAAAAAJ3YzAgAAAAAAAAAAAAAAAAAAAAAAOjEZkYAAAAAAAAAAAAAAAAAAAAAAEAnNjMCAAAAAAAAAAAAAAAAAAAAAAA6GVzoCgDzY7rfT/OnDh9J87EVI9VszUg9AwB4udYPbEzzEuUE1QQAAAAAAAAAAGDpmpjI11p98Yv5V0fuu29h/k72zTfn9frN38wfVylNSz67bC78zM9MV7PLL5+Z35Mzpx59NO8fN92Ut+O2/NChemP8qZ+qt6OIiF/91ck0X7Mm7yOXXVZviwMDadEYG8uPfdNN9QP89/+ePycjI/mx3/pWfWgxaRtPe/M4xUxN5Sc/ejTPV62qt7W2xzXT0gzb5ubp6Xre5F2gtW4LOf/xyrW9Jm1jYqatLXXRNk+0yR736Ghe8dWrZ38N2NV8jmm8tGy8PXIkf7FXrszbyvDwbGp0YmT99+mn88e9f3+et81hmaGh/DkdHFy4/slf1u93awstX1NfMGUBG1LXU09O6gTLSdYe2q7DDh7M28LUVD1rm7/Wrp3Hi0B4BVw6AwAAAAAAAAAAAAAAAAAAAAAAndjMCAAAAAAAAAAAAAAAAAAAAAAA6MRmRgAAAAAAAAAAAAAAAAAAAAAAQCc2MwIAAAAAAAAAAAAAAAAAAAAAADqxmREAAAAAAAAAAAAAAAAAAAAAANCJzYwAAAAAAAAAAAAAAAAAAAAAAIBObGYEAAAAAAAAAAAAAAAAAAAAAAB0MrjQFQDmR2nJVwzm3X+wZ68zgFe1fpPGU/sOVrPeiuG07MCq0VlVieVnpKxY6CoAAAAAAAAAAAAsedPTef7ww/na8GeeaVt9Pj927szPu2/fQKfjl4V5WBER8frX96vZ5ZfPnMCa0NWePXlDeuihPN+9O8/f8556B/7FX5xKy158cbe2tH59fb3wJZfkxx4czNcaT07Ws2efzZ+Te+7Jx6y3vlUfWkzWrs3zLVvytvLww/X20ORF4+6787byqU8NpflP/mS9j61enZ/78cfzdvyVr+Tf29q7d/aPe2Qkz9etqx9gOF/qzwJou15ZyOuZzHzWayjvuq35Yn3OmJ1svPz0p/PGMDSUD6gbN+b5tm31/NRT87LDw3m+b1/eUO++u34v9MAD+fx32235fVTbPJPZvj0v3Dbv659zL5v33//+/H7i4MH8BenXb2tbdWlnbeW7HruLrud+4xvr9zL6x9LzxBP1F+2WW/L7gUceyV/wo0fr+apVeUM87bQ8f/Ob8zcSN29ewE7GsmK3EgAAAAAAAAAAAAAAAAAAAAAAoBObGQEAAAAAAAAAAAAAAAAAAAAAAJ3YzAgAAAAAAAAAAAAAAAAAAAAAAOjEZkYAAAAAAAAAAAAAAAAAAAAAAEAnNjMCAAAAAAAAAAAAAAAAAAAAAAA6sZkRAAAAAAAAAAAAAAAAAAAAAADQic2MAAAAAAAAAAAAAAAAAAAAAACATgYXugLA/Bjo5XuVbTxp9ATVBIClqGmaNJ8+cKiaDYytTssOrDIHAQAAAAAAAAAAwFxpWfIXR4+WNJ+czPP5cuhQft62fDE7fHjp1p0XyzvYSSflpS+4oJ/mf/NvTlazH/mRmfzg82j9+vxxt9VtZKSe/c//mX+drWn0n6XkjDPyNn7ppXm+a1f9+0+T9e4RERF33DGQ5nv35m3p/2fv7mMsO+v7gH+fO3d29tXeNX4B4zo2L7ZxjF1jU7tragiorXkJEOFQS4napIIqUZM2CYE/UtO6VWiqiiQ0ECUVbSghUmw1NFEsOSRSHLwiWG2xLNEGsFPiTUAlyGbZBe8buzNP/9i76XS657m7c+7svXf285Gs4zm/c57zm517z7kz57nfu2NH9+P80kvbz4Enn2y/b+vXfm2xWR/XW8vu3e3e9u492di3/fOAszXu9ee4eksZ8/QYV2dz+frXu8+3H/7wlua+464jV1/dPifeckt3/Y472vvu3Nl+EjzzTPuB/PDD3deRp55q7/v88+16663HS0vtvm+7rf1933ij68z5dtll3T+zn/zJMU+CMVrn8nHn+ZWeD4U+x+4z9rh63++r9XvSmFgAZtCf/mn3D+2Xf7l9jfrSl9rn6sOHu+u7drUfxC97Wbs+7vp3xRXT+1sEm4vTGgAAAAAAAAAAAAAAAAAAAAAA0IswIwAAAAAAAAAAAAAAAAAAAAAAoBdhRgAAAAAAAAAAAAAAAAAAAAAAQC/CjAAAAAAAAAAAAAAAAAAAAAAAgF6EGQEAAAAAAAAAAAAAAAAAAAAAAL0IMwIAAAAAAAAAAAAAAAAAAAAAAHoRZgQAAAAAAAAAAAAAAAAAAAAAAPQynHYDAADMnrLQzrzc+l1XdhcH8jIBAAAAAAAAAABgViwvt+srK+enD5hHN9/cfoK89KXfadZ/6Ifa9csvr+fc0yzYsqVdv/XW7hPPjTe2/01LWU9HTMveve2LzLif52c/u9BZe/bZ9s4nTrTH/spX2vPa779/qbO20N1WkuT48Xb9299u997n2vuyl7V3/rmf625uz575POcAF67aOG2NO5d+61vtc/EXv9g+2X/5y93XkUceaR973PXv5Ml2/ciR7gHGXf/G2bat+x913DXmne9sH/zuu8f88snEtd7Gt2XL/F73W8/9eeZ3nc3l0KHuH+iXvtT+XeTo0fUf9/Dh9gPpT/6kXX/+eQ9Ezg/vNAcAAAAAAAAAAAAAAAAAAAAAAHoRZgQAAAAAAAAAAAAAAAAAAAAAAPQizAgAAAAAAAAAAAAAAAAAAAAAAOhFmBEAAAAAAAAAAAAAAAAAAAAAANDLhoQZlVJ+sJRSR/+9q2Obt5RSPl1KOVRKeb6U8l9LKf9gI/oBAAAAAAAAAAAAAIB5YD4+AAAAAAAwryYeZlRK+WtJPpLk+cY2P5bk4SQ3JfmNJB9NcmWS/1RK+eCkewIAAAAAAAAAAAAAgFlnPj4AAAAAADDPhpMcrJRSknwsyTeS/JckP32Gba5J8sEkB5LcXmvdP1r/r5L89yTvKaV8stb6+CR7Y7at1JPN+sHj+5v1rcPdnbXtw0vX0xIA0FAWJ/oyEgAAAAAAAAAA4IJnPj7rtXNnbdbf977jzfqBA6WzVttDj61vpD7H3ui+77xzeWMPwHmztDSu3n4w7e5+u0uSZDDxj6k/P0r3aSNJsnVrqzbFEwcTt21b++d5883t8+EHPtB9jfrMZxaa+z7xRLv+9NPtB+o3vrH+699C+9Bj/11e8pLu+l13tf/N3vCG9vvwrriie+xxz104W/fee6JZv+mm9uN42HhLytVXr6ynJTapPXu6z2lve1v7fPjZz7ZP1l/5SvukePRod/3w4eauY68j414DLi52D7BrV3vfW25pP4da15lXvrL93L311nZ9+3av82bJPF/357l3LhxXXdV9znvjG9vXqMcea1+jWr+rtK6NSXL77e1z9SWXOFdzfkz6T17/JMnrk/xwkq6XYv8wyVKSj5y+cZIktdZvJvnXoy9/ZMJ9AQAAAAAAAAAAAADALDMfHwAAAAAAmGsTCzMqpbwiyb9J8u9qrfsam75+tPzUGWq/t2YbAAAAAAAAAAAAAADY1MzHBwAAAAAANoPhJAYppQyTfCLJXyT5mTGbXz9aPr22UGv9WinlcJKrSinba61Hxhz3iY7SDWN6AAAAAAAAAAAAAACAqTMfHwAAAAAA2CwmEmaU5J8nuTXJa2qtR8dse/FoeaijfijJjtF2zZsnAAAAAAAAAAAAAAAw58zHBwAAAAAANoXeYUallDty6tMffr7W+nj/ls5erfW2jp6eSPKq89kLAAAAAAAAAAAAAACcC/PxAQAAAACAzWTQZ+dSyjDJryd5Osn7z3K3058AcXFHfdwnRQAAAAAAAAAAAAAAwFwzHx8AAAAAANhseoUZJdmZ5Lokr0hyrJRST/+X5F+MtvnoaN2HRl8/NVpet3awUsqLkuxI8tVa65GevQEAAAAAAAAAAAAAwKwyHx8AAAAAANhUhj33P57kP3bUXpXk1iSfyakbJo+P1j+a5K4k96xad9obV23DBWQltVl/bvlgs75nsNRZ276ujgAAAAAAAAAAAAAANpT5+EzE1q3t+lvecnLdY9f2VP+pWlnZuLH7ft+Dvh89zqbhscCF7tJL2yfUd7zjRGftxS9un+ivvbZd/8IX2k/Ao0dLZ23cNWY45l2Z27e3v++Xv7z7AN/zPcvNfW+5pV2H8+GOO9qPw1e/ev2P03HPLy4se/Z0n0/f/vbua0iSXHll+2S+f3/7OnH4cPd1YnnMQ3zc7xPjXiNu2dI9wLZt7cFvv739fb/mNd3NX3NNe1+vbQH+r6uv7j5nvvOd7WvUJZe0z7fPPtt9wn3BC9r77t3brr/whRv4BzVYpdfL+lrr0STvOlOtlPJATt08+Xit9T+sKn0syfuS/Fgp5WO11v2j7fck+ZnRNr/apy8AAAAAAAAAAAAAAJhl5uMDAAAAAACbzXnPKK21PlNKeW+SX0ryuVLKQ0m+k+TeJFcl+fla69pPiAAAAAAAAAAAAAAAgAua+fgAAAAAAMAsO+9hRklSa/1wKWV/kp9O8veTDJJ8Icn9tdaPT6MnAAAAAAAAAAAAAACYdebjAwAAAAAAs2rDwoxqrQ8keaBRfzjJwxt1fAAAAAAAAAAAAAAAmEfm4wMAAAAAAPNoMO0GAAAAAAAAAAAAAAAAAAAAAACA+SbMCAAAAAAAAAAAAAAAAAAAAAAA6EWYEQAAAAAAAAAAAAAAAAAAAAAA0Mtw2g1AkqykNOuHFnY361vLtkm2AwAAAAAAAAAAAAAAF7zSnuo/VQsL0+4AgI10553LverAxhn3OszrNCZl167aWbv77vZ1YFwdAPq4/PLua9Q995xs7juuDpvBYNoNAAAAAAAAAAAAAAAAAAAAAAAA802YEQAAAAAAAAAAAAAAAAAAAAAA0IswIwAAAAAAAAAAAAAAAAAAAAAAoBdhRgAAAAAAAAAAAAAAAAAAAAAAQC/CjAAAAAAAAAAAAAAAAAAAAAAAgF6EGQEAAAAAAAAAAAAAAAAAAAAAAL0IMwIAAAAAAAAAAAAAAAAAAAAAAHoZTrsBSJLFstCs37Dlxc36luKhDAAAAAAAAAAAAAAAAAAAAAAwLYNpNwAAAAAAAAAAAAAAAAAAAAAAAMw3YUYAAAAAAAAAAAAAAAAAAAAAAEAvwowAAAAAAAAAAAAAAAAAAAAAAIBehBkBAAAAAAAAAAAAAAAAAAAAAAC9CDMCAAAAAAAAAAAAAAAAAAAAAAB6EWYEAAAAAAAAAAAAAAAAAAAAAAD0Mpx2A5AkJaVZ3zXYdp46AQAAAAAAAAAAAAAAAAAAAADgXA2m3QAAAAAAAAAAAAAAAAAAAAAAADDfhBkBAAAAAAAAAAAAAAAAAAAAAAC9CDMCAAAAAAAAAAAAAAAAAAAAAAB6EWYEAAAAAAAAAAAAAAAAAAAAAAD0IswIAAAAAAAAAAAAAAAAAAAAAADoRZgRAAAAAAAAAAAAAAAAAAAAAADQizAjAAAAAAAAAAAAAAAAAAAAAACgl+G0GwA4F3WlNusnjq8068Mt3Rlug4Wyrp4AAAAAAAAAAAAAAAAAAAAA4ELXneoBAAAAAAAAAAAAAAAAAAAAAABwFoQZAQAAAAAAAAAAAAAAAAAAAAAAvQgzAgAAAAAAAAAAAAAAAAAAAAAAehFmBAAAAAAAAAAAAAAAAAAAAAAA9CLMCAAAAAAAAAAAAAAAAAAAAAAA6EWYEQAAAAAAAAAAAAAAAAAAAAAA0IswIwAAAAAAAAAAAAAAAAAAAAAAoJfhtBsAOBcnjq0061/ff7RZv/SqrZ21bRc5JQIAAAAAAAAAAAAAAAAAAADAegym3QAAAAAAAAAAAAAAAAAAAAAAADDfhBkBAAAAAAAAAAAAAAAAAAAAAAC9CDMCAAAAAAAAAAAAAAAAAAAAAAB6EWYEAAAAAAAAAAAAAAAAAAAAAAD0IswIAAAAAAAAAAAAAAAAAAAAAADoRZgRAAAAAAAAAAAAAAAAAAAAAADQizAjAAAAAAAAAAAAAAAAAAAAAACgl+G0GwA4Fwtb2hlsl7xoqVlf3LYwyXYAAAAAAAAAAAAAAAAAAAAAgCTtVBAAAAAAAAAAAAAAAAAAAAAAAIAxhBkBAAAAAAAAAAAAAAAAAAAAAAC9CDMCAAAAAAAAAAAAAAAAAAAAAAB6EWYEAAAAAAAAAAAAAAAAAAAAAAD0IswIAAAAAAAAAAAAAAAAAAAAAADoRZgRAAAAAAAAAAAAAAAAAAAAAADQy3DaDQCci4VhadZ37Fk8T50AAAAAwPTVEyfb9cNHmvXBzu3tAwzdRgAAAAAAAAAAAAAAAM7OYNoNAAAAAAAAAAAAAAAAAAAAAAAA802YEQAAMveHXgAAIABJREFUAAAAAAAAAAAAAAAAAAAA0IswIwAAAAAAAAAAAAAAAAAAAAAAoBdhRgAAAAAAAAAAAAAAAAAAAAAAQC/CjAAAAAAAAAAAAAAAAAAAAAAAgF6EGQEAAAAAAAAAAAAAAAAAAAAAAL0IMwIAAAAAAAAAAAAAAAAAAAAAAHoZTrsBgPlRm9WV5eVmvQy68+NKkS0HAAAAwLmrx4836ye/9myzvvhdVzbrZeg2AgAAAAAAAAAAAAAAcHakZwAAAAAAAAAAAAAAAAAAAAAAAL0IMwIAAAAAAAAAAAAAAAAAAAAAAHoRZgQAAAAAAAAAAAAAAAAAAAAAAPQizAgAAAAAAAAAAAAAAAAAAAAAAOhlImFGpZT9pZTa8d9fduyzt5TySCnlQCnlaCnl86WUnyilLEyiJwAAAAAAAAAAAAAAmHXm4wMAAAAAAJvFcIJjHUryoTOsf37tilLK25J8MsmxJA8lOZDke5P8YpK7knz/BPsCAAAAAAAAAAAAAIBZZj4+AAAAAAAw9yYZZnSw1vrAuI1KKRcl+WiS5SSvq7V+brT+/UkeTXJvKeW+WuuDE+wNAAAAAAAAAAAAAABmlfn4AAAAAADA3JtkmNHZujfJZUl+/fSNkySptR4rpdyf5A+T/GgSN0+AmbJ84kSzfvBr+5v17bsv7axtu+iSdXQEAAAAwIVusG1bs754zYub9bK0ZZLtAAAAAAAAG898fAAAAAAAYGZNMsxoqZTyg0muTnI4yeeT7Ku1Lq/Z7vWj5afOMMa+JEeS7C2lLNVaj0+wPwAAAAAAAAAAAAAAmEXm4wMAAAAAAHNvkmFGL0zyiTXrniml/HCt9bFV664fLZ9eO0Ct9WQp5Zkk353kJUm+2DpgKeWJjtINZ9cyAAAAAAAAAAAAAABMnfn4AAAAAADA3BtMaJyPJXlDTt1A2ZHklUn+fZJrkvxeKeWWVdtePFoe6hjr9PrdE+oNAAAAAAAAAAAAAABmlfn4AAAAAADApjCcxCC11n+5ZtX/TPIjpZTnk7wnyQNJvm8Sx1pz3NvOtH70CRGvmvTxAAAAAAAAAAAAAABgkszHBwAAAAAANovBBo//q6Pl3avWnf6kh4tzZqfXH9yQjgAAAAAAAAAAAAAAYPaZjw8AAAAAAMyVjQ4zena03LFq3VOj5XVrNy6lDJNcm+Rkkj/b2NYAAAAAAAAAAAAAAGBmmY8PAAAAAADMleEGj3/naLn6RsijSX4gyT1JfnPN9ncn2Z5kX631+Ab3BnBOyqCd/7a0s+sDbk4ZblmaZDsAwBStZLmzdmB5f3PfreWiZn3n4LL1tATADFlZOdFZO7F8pLnv4nBHsz4oG/3nvPU5efJks/7c155r1nddvKtZ33FR+98FLmgL7b9ZlW1bz1MjAAAAAADABjAfHwAAAAAAmCvtdzmchVLKK0op/9+7iUop1yT5yOjL31hV+q0kzyW5r5Ry+6rttyb52dGXv9K3LwAAAAAAAAAAAAAAmGXm4wMAAAAAAJvJJD7K/e8leU8pZV+SP0/y7SQvTfLmJFuTPJLkg6c3rrV+q5Ty7py6ifLpUsqDSQ4keWuS60frH5pAXwAAAAAAAAAAAAAAMMvMxwcAAAAAADaNSYQZ/VFO3fS4NcldSXYkOZjkM0k+keQTtda6eoda6++UUl6b5J8leUdO3WT5X0l+Kskvrd0eAAAAAAAAAAAAAAA2IfPxAQAAAACATaN3mFGt9bEkj61jvz9O8qa+xwcAAAAAAAAAAAAAgHlkPj4AAAAAALCZDKbdAAAAAAAAAAAAAAAAAAAAAAAAMN+EGQEAAAAAAAAAAAAAAAAAAAAAAL0IMwIAAAAAAAAAAAAAAAAAAAAAAHoZTrsBgHkxWGifMndecsV56gQAmL7aWTmycrC552Dg1zCAza5mpbO2vHKsue9i3dYevKyno41XV7qvjUly+NDhZn1p61KzviM7zrmnSVmpJztrx1fa39eWwfZmfaEsrqsnAAAAAAAAAAAAAAAAmEWDaTcAAAAAAAAAAAAAAAAAAAAAAADMN2FGAAAAAAAAAAAAAAAAAAAAAABAL8KMAAAAAAAAAAAAAAAAAAAAAACAXoQZAQAAAAAAAAAAAAAAAAAAAAAAvQgzAgAAAAAAAAAAAAAAAAAAAAAAehFmBAAAAAAAAAAAAAAAAAAAAAAA9CLMCAAAAAAAAAAAAAAAAAAAAAAA6GU47QYAAADmzaDxq9RVi3+9uW9JmXQ7AMyYhcFSZ23b0uXNfef1OrG4ZbFZv/YV1zbrZTC73/exlcOdta8e+Xxz3yu33dis7xy+YF09AQAAAAAAAAAAAAAAwCwaTLsBAAAAAAAAAAAAAAAAAAAAAABgvgkzAgAAAAAAAAAAAAAAAAAAAAAAehFmBAAAAAAAAAAAAAAAAAAAAAAA9CLMCAAAAAAAAAAAAAAAAAAAAAAA6EWYEQAAAAAAAAAAAAAAAAAAAAAA0IswIwAAAAAAAAAAAAAAAAAAAAAAoBdhRgAAAAAAAAAAAAAAAAAAAAAAQC/DaTcAMC+WV44364eOfrlZ377lis7a1sUXrKsnAGD2DLIw7RYAmGElZdotTMVgYX4z1ZcG2ztrL9p6Q3PfrQs7J90OAAAAAAAAAAAAAAAAzKz5fRcRAAAAAAAAAAAAAAAAAAAAAAAwE4QZAQAAAAAAAAAAAAAAAAAAAAAAvQgzAgAAAAAAAAAAAAAAAAAAAAAAehFmBAAAAAAAAAAAAAAAAAAAAAAA9CLMCAAAAAAAAAAAAAAAAAAAAAAA6EWYEQAAAAAAAAAAAAAAAAAAAAAA0Mtw2g0AzIuS0qwPSvuUWor8OAAAAJg3C2Wxs7Zr8bLz2AkAAAAAAAAAAAAAAADMNskaAAAAAAAAAAAAAAAAAAAAAABAL8KMAAAAAAAAAAAAAAAAAAAAAACAXoQZAQAAAAAAAAAAAAAAAAAAAAAAvQgzAgAAAAAAAAAAAAAAAAAAAAAAehFmBAAAAAAAAAAAAAAAAAAAAAAA9CLMCAAAAAAAAAAAAAAAAAAAAAAA6EWYEQAAAAAAAAAAAAAAAAAAAAAA0Mtw2g0AzIvBYEuzvnv7deepEwAAAAAAAAAAAAAAAAAAAACYLYNpNwAAAAAAAAAAAAAAAAAAAAAAAMw3YUYAAAAAAAAAAAAAAAAAAAAAAEAvwowAAAAAAAAAAAAAAAAAAAAAAIBehBkBAAAAAAAAAAAAAAAAAAAAAAC9CDMCAAAAAAAAAAAAAAAAAAAAAAB6EWYEAAAAAAAAAAAAAAAAAAAAAAD0IswIAAAAAAAAAAAAAAAAAAAAAADoRZgRAAAAAAAAAAAAAAAAAAAAAADQizAjAAAAAAAAAAAAAAAAAAAAAACgF2FGAAAAAAAAAAAAAAAAAAAAAABAL8KMAAAAAAAAAAAAAAAAAAAAAACAXoQZAQAAAAAAAAAAAAAAAAAAAAAAvQgzAgAAAAAAAAAAAAAAAAAAAAAAehFmBAAAAAAAAAAAAAAAAAAAAAAA9CLMCAAAAAAAAAAAAAAAAAAAAAAA6EWYEQAAAAAAAAAAAAAAAAAAAAAA0IswIwAAAAAAAAAAAAAAAAAAAAAAoBdhRgAAAAAAAAAAAAAAAAAAAAAAQC/CjAAAAAAAAAAAAAAAAAAAAAAAgF6EGQEAAAAAAAAAAAAAAAAAAAAAAL0IMwIAAAAAAAAAAAAAAAAAAAAAAHoRZgQAAAAAAAAAAAAAAAAAAAAAAPQizAgAAAAAAAAAAAAAAAAAAAAAAOhFmBEAAAAAAAAAAAAAAAAAAAAAANCLMCMAAAAAAAAAAAAAAAAAAAAAAKAXYUYAAAAAAAAAAAAAAAAAAAAAAEAvwowAAAAAAAAAAAAAAAAAAAAAAIBehBkBAAAAAAAAAAAAAAAAAAAAAAC9TDTMqJTyhlLKb5dS/rKUcryU8r9LKb9fSnnTGbbdW0p5pJRyoJRytJTy+VLKT5RSFibZEwAAAAAAAAAAAAAAzDJz8QEAAAAAgM1gOKmBSin/Nsl7k3w1ye8meS7JZUluS/K6JI+s2vZtST6Z5FiSh5IcSPK9SX4xyV1Jvn9SfQEAAAAAAAAAAAAAwKwyFx8AAAAAANgsJhJmVEp5d07dPPl4kn9Ua/3Omvriqv+/KMlHkywneV2t9XOj9e9P8miSe0sp99VaH5xEbwAAAAAAAAAAAAAAMIvMxQcAAAAAADaTQd8BSilLST6Q5C9yhpsnSVJrPbHqy3tz6lMiHjx982S0zbEk94++/NG+fQEAAAAAAAAAAAAAwKwyFx8AAAAAANhshhMY42/n1A2RDyVZKaW8OclNSY4l+W+11sfXbP/60fJTZxhrX5IjSfaWUpZqrccn0B8AAAAAAAAAAAAAAMwac/EBAAAAAIBNZRJhRq8eLY8leTKnbp78lVLKviT31lqfHa26frR8eu1AtdaTpZRnknx3kpck+WLrwKWUJzpKN5xd6wAAAAAAAAAAAAAAMBVTm4s/Gt98fAAAAAAAYKIGExjj8tHyvUlqkr+VZFeSm5P8QZK7k/znVdtfPFoe6hjv9PrdE+gNAAAAAAAAAAAAAABmkbn4AAAAAADApjKcwBinA5FOJnlrrXX/6Ov/UUr5viRPJXltKeVv1lofn8Dx/kqt9bYzrR99QsSrJnksAAAAAAAAAAAAAACYoKnNxU/MxwcAAAAAACZvMH6TsQ6Olk+uunmSJKm1Hkny+6Mv/8ZoefrTHi7OmZ1ef7CjDgAAAAAAAAAAAAAA885cfAAAAAAAYFOZRJjRU6Nl1w2Pb46W29Zsf93aDUspwyTX5tQnS/zZBHoDAAAAAAAAAAAAAIBZZC4+AAAAAACwqQwnMMYfJqlJbiylDGqtK2vqN42Wz4yWjyb5gST3JPnNNdvenWR7kn211uMT6G3ulBMnm/XBocPN+spF25v1umXxnHsCAAAAAAAAAAAAAGDizMUHAAAAAAA2lUHfAWqtf57k4SRXJ/mnq2ullL+T5O/m1CdFfGq0+reSPJfkvlLK7au23ZrkZ0df/krfvgAAAAAAAAAAAAAAYFaZiw8AAAAAAGw2wwmN84+T3JrkF0opb07yZJJrk7w9yXKSd9VaDyVJrfVbpZR359SNlE+XUh5MciDJW5NcP1r/0IT6AgAAAAAAAAAAAACAWWUuPgAAAAAAsGkMJjFIrfWrSW5L8pEkL8+pT4V4XU59SsRdtdZPrtn+d5K8Nsm+JO9I8uNJTiT5qST31VrrJPoCAAAAAAAAAAAAAIBZZS4+AAAAAACwmQwnNVCt9dmcuhHy42e5/R8nedOkjg8AAAAAAAAAAAAAAPPGXHwAAAAAAGCzGEy7AQAAAAAAAAAAAAAAAAAAAAAAYL4JMwIAAAAAAAAAAAAAAAAAAAAAAHoRZgQAAAAAAAAAAAAAAAAAAAAAAPQynHYD0/LNA4c7a7XW89jJ/6ucXG7WB98+8n/au/NgS86yDsC/d8gyMUgMuICCDiIEF0QBERIlBEqEkkWsoGAlEhQESjaFKkoRIYKWVQIqiQLKEgQVZFFEA6IkISi4gUBRLGHJAIEBzAokkkh4/eP0wM2de+/Mueeee+aefp6qW53T/XXPdyrn669P96/es+H2r974yxtu7yNH+78cAAAAAIAd5MorNr4fDgAAAAAAAAAAAAAAHF52LboDAAAAAAAAAAAAAAAAAAAAAADAzqaYEQAAAAAAAAAAAAAAAAAAAAAAMBPFjAAAAAAAAAAAAAAAAAAAAAAAgJkoZgQAAAAAAAAAAAAAAAAAAAAAAMxEMSMAAAAAAAAAAAAAAAAAAAAAAGAmihkBAAAAAAAAAAAAAAAAAAAAAAAzOWLRHViUz+27clPbDn9fXHQHAAAAAAAAAAAAAAAAAAAAAAAYmV2L7gAAAAAAAAAAAAAAAAAAAAAAALCzKWYEAAAAAAAAAAAAAAAAAAAAAADMRDEjAAAAAAAAAAAAAAAAAAAAAABgJooZAQAAAAAAAAAAAAAAAAAAAAAAM1HMCAAAAAAAAAAAAAAAAAAAAAAAmIliRgAAAAAAAAAAAAAAAAAAAAAAwEyquxfdhy1XVZcdedTRN73FLfYsuisAAAAAAMA22bdvb4484qhcffUXatF9AQAAAACAnaqqLjvmmGNuesIJJyy6KwAAAAAAwDb58Ic/nN27d+fyyy+fKY+/rMWMLk5ykyR7h1W3H5YfWkiHYPGMAcbOGGDsjAHGzhhg7IwBxs4YYOyMAcZmT5IvdPetF90RAAAAAADYqeTx4QDGAGNnDDB2xgBjZwwwdsYAY2cMMHbGAGOzJ1uQx1/KYkarVdW7kqS777zovsAiGAOMnTHA2BkDjJ0xwNgZA4ydMcDYGQMAAAAAAADMyjMnxs4YYOyMAcbOGGDsjAHGzhhg7IwBxs4YgM3ZtegOAAAAAAAAAAAAAAAAAAAAAAAAO5tiRgAAAAAAAAAAAAAAAAAAAAAAwEwUMwIAAAAAAAAAAAAAAAAAAAAAAGaimBEAAAAAAAAAAAAAAAAAAAAAADATxYwAAAAAAAAAAAAAAAAAAAAAAICZVHcvug8AAAAAAAAAAAAAAAAAAAAAAMAOtmvRHQAAAAAAAAAAAAAAAAAAAAAAAHY2xYwAAAAAAAAAAAAAAAAAAAAAAICZKGYEAAAAAAAAAAAAAAAAAAAAAADMRDEjAAAAAAAAAAAAAAAAAAAAAABgJooZAQAAAAAAAAAAAAAAAAAAAAAAM1HMCAAAAAAAAAAAAAAAAAAAAAAAmIliRgAAAAAAAAAAAAAAAAAAAAAAwEyWuphRVd2yql5aVZ+pqmuram9V/WFVHb/ovsFWqKqbVdUjq+pvquqjVfW/VXVVVf1LVf1SVe1a1X5PVfUGf69a1HuBzRrO7et9pj+7zj4nVtW5VXX5MG7eV1VPqqobbXf/YRZVdcZBzutdVdevaG8eYEeqqlOr6qyqentVfWH4vL7yIPtMfa6vqvtX1QXD9dSXqurfq+rhW/+OYDrTjIGqum1VPbWqzquqT1XVdVX1uap6Q1Wdss4+B5tPHjPfdwgbm3IMbPp6p6oeXlX/McwBVw1zwv3n987g0Ew5Bs45hO8Ib121j3kAAAAAAACAA5QsPkuuZPFBFp/RO4TcjDw+S2GaDNqKfeTxWRpT5jDl8Vk6U44BeXyWzpRjQB4ftsgRi+7AvFTVbZK8I8m3JnlDkg8luWuSJya5b1Wd1N2XLbCLsBUekuQFSfYlOT/JJ5N8W5KfSfLiJPerqod0d6/a771J/naN471/jn2FeboqyR+usf5Lq1dU1YOSvC7Jl5O8OsnlSR6Q5A+SnJTJuIKd4j1Jzlxn248nuVeSN62xzTzATvObSe6YyXn9kiS336jxZs71VfW4JGcluSzJK5Ncl+TUJOdU1R26+ylb9WZgE6YZA89K8nNJPpDk3Ew+/yckeWCSB1bVE7v7+evs+4ZM5pbV/muT/YatMtU8MJjqeqeqnpPkycPx/yzJUUkemuSNVfX47j57E/2GrTLNGPjbJHvX2XZ6ku/O2t8REvMAAAAAAAAAA1l8RkIWHyZk8RkzeXzGQh6fsZPHZ+zk8Rk7eXxYgDrwvupyqKp/THKfJE/o7rNWrH9ekl9N8qLuVsWMHa2q7pXk2CT/0N1fXbH+5kn+I8mtkpza3a8b1u9JcnGSl3f3GdvdX5iHqtqbJN295xDa3iTJR5Mcl+Sk7v6vYf3uJOcluXuSh3W3avjseFX1ziR3S/Kg7v67Yd2emAfYgYbq9Zdkcg4/OZPgyF9092lrtJ36XD+MjQ8luTrJnbt777D++CT/meQ2SU7s7nfO5x3CxqYcA2ckeW93//eq9Scn+acknWRPd+9btc/Lkjyiu8+Zz7uAzZtyDOzJlNc7VXVikn9N8rEkP9LdV6w41rsy+d59+/3zA2y3acbABsf4piSfSXKjJN/R3Zeu2HZGzAMAAAAAAACsIIvPGMjigyw+bEQen2Uij8/YyeMzdvL4jJ08PizGrkV3YB6GX4K4TyZVz/541eZnZPKl6PSqOnabuwZbqrvP6+43rnx4Mqz/bJIXDi/vue0dg8PXqUm+Jcmr9t9MS5Lu/nImlTWT5LGL6Bhspaq6QyYPTj6d5B8W3B2YWXef390fWeMXrtaymXP9LyY5OsnZK2+MDTfPfnd4KXzFwkwzBrr7nNUPTob1b0tyQSbV7U/c+l7C/Ew5D2zG/nP87+x/cDL8u3szua90dJJHzOnfhoPaojFwepJjkrx+5YMTAAAAAAAAWE0Wn7GQxYepyeIzGvL4LBt5fMZOHp+xk8dn7OTxYTGOWHQH5uSUYfmWNW4sf7Gq/jWTByx3S/LW7e4cbJP/G5ZfWWPbt1fVo5PcLMllSd7Z3e/btp7B1ju6qk5L8p2ZPCR/X5ILu/v6Ve3uNSzfvMYxLkxyTZITq+ro7r52br2F+fvlYfmSNcZBYh5guW3mXL/RPm9a1QZ2so2+IyTJD1XVk5LszuQB/Pndfcm29Ay23jTXOwebB54+tHnGlvcSts+jhuWfbtDGPAAAAAAAAEAiiw+JLD7jIosPB5LHZ8zk8WF98viMiTw+3JA8PkxpWYsZnTAsL1pn+0cyeYByu3iAwhKqqiOS/MLwcq2Lv58Y/lbuc0GSh3f3J+fbO5iLmyd5xap1F1fVI4aqx/utOz9091eq6uIk35/ku5N8cC49hTmrqmOSnJbk+iQvXqeZeYBltplz/Ub77Kuqq5Pcsqq+obuvmUOfYe6q6ruS3DuTB4gXrtPsiateX19VL07ypOHXVGAnOaTrneGXQr8jyZe6e98ax/nIsLzdnPoJc1dVd09yhyQXdff5GzQ1DwAAAAAAAJDI4jNysviMkCw+rCCPD/L4sBZ5fEZIHh8G8viwObsW3YE5OW5YXrXO9v3rv2kb+gKL8HtJfiDJud39jyvWX5PkWUnunOT44e/kJOcnuWeStw4XjrCTvCyTGwE3T3JsJheEL0qyJ8mbquqOK9qaHxiDn83kM/zm7v7Uqm3mAcZgM+f6Q93nuHW2w2Gtqo5O8hdJjk7yzO6+YlWTi5M8PpMHiccm+fZM5pO9SR6d5KXb1lmY3bTXO74jMAb7fynuz9bZbh4AAAAAAABgJc9RGTtZfMZEFh8OJI/P2Mnjwyry+IyMPD4cSB4fNmFZixnBaFXVE5I8OcmHkpy+clt3f767f6u7393dVw5/F2by6yj/nuR7kjxy2zsNM+juM7v7vO7+XHdf093v7+7HJHlekmOSPHOxPYRtt/+L0YtWbzAPAIxPVd0ok1/NOinJq5M8Z3Wb7n5bd5/d3RcN11P7uvs1SU5JckWSh60KpcBhy/UO3FBVHZfJg5DrkpyzVhvzAAAAAAAAAMCELD5jI4sPa5LHB+Br5PEZG9c7cEPy+LB5y1rM6GCVWvevv3Ib+gLbpqoel+SPknwgySndffmh7NfdX0ny4uHlPebUPdhuLxyWKz/T5geWWlV9f5ITk1yS5NxD3c88wJLZzLn+UPdZr0o4HJaGByevTPKQJH+d5LTu7kPdf/hFof3zifmBHW2D6x3fEVh2pyX5hiSv7+5Lp9nRPAAAAAAAADBanqMySrL4cAOy+IySPD4kkceHr5HHh6+Tx2fE5PFhk5a1mNGHh+Xt1tl+22F50Tb0BbZFVT0pyVlJ3p/Jw5PPTnmI/xmWx25px2Bx1vpMrzs/VNURSW6d5CtJPj7frsHc7P8ViJd09/VT7mseYFls5ly/0T63yGRcXNLd12xtV2F+qurIJH+V5KFJ/jLJzw83j6dlfmCZHPB57u6rk3w6yY2Hc/5q7iGx0z1qWB7wS3GHyDwAAAAAAAAwPrL4jI4sPhxAFp+xkscHeXxIIo8P65DHZ4zk8WGTlrWY0fnD8j5VdYP3WFXfmOSkJNck+bft7hjMQ1U9NckfJHlPJg9PPr+Jw9xtWLpxzLJY6zN93rC87xrt75FJdcx3dPe18+wYzENV7U5yepLrk7xkE4cwD7AsNnOu32if+61qA4e9qjoqyWsy+QWIP09y+iYequ/3o8PS/MAyWO96xzzAUqqqH01yxyQXdfcFmzyMeQAAAAAAAGB8ZPEZFVl8WJMsPqMjjw9fI4/P6Mnjw7rk8RkVeXyYzVIWM+rujyV5S5I9SX5l1eYzM6lc9oqh2h/saFX19CS/l+RdSe7d3Zdu0PZOqx8qDuvvneRXh5evnEtHYQ6q6nur6oBqlFW1J8nZw8uVn+nXJrk0yUOr6i4r2u9O8uzh5Qvm0lmYv4ckOT7Jm7r7U2s1MA8wEps5178sybVJHjfMIfv3OT7JbwwvXzin/sKWqqqjk/xNkgdl8jD9Ed391YPsc5c11u2qql9PcvdMxtSb59Bd2HKbvN7Zf45/2nDu37/PnkzuK12byVwBO83+X4r7040amQcAAAAAAABYSRafMZHFZ8xk8eEA8vgwIY/PqMnjM3by+HAD8vgwg+ruRfdhLqrqNknekeRbk7whyQczqVx2SpKLkpzY3Zctrocwu6p6eJJzMqn6fVaSq9Zotre7zxnaX5DktpmMjUuG7T+Y5F7Dfz+9u5+9+gBwuKqqZyZ5cpILk3wiyReT3CbJTyXZneTcJA/u7utW7PPTmdxY+3KSVyW5PMkDk5wwrP/ZXtbJkaVWVW9P8mNJHtjdb1ynzQUxD7ADDefunx5e3jzJT2ZSjfjtw7pLu/spq9pPda6vqscneX6Sy5K8Osl1SU5Ncsskz115fNhu04yBqnpZkjMyudH1J0nWuq65YGVF8KrqJO9P8t4kn05yXCa/ovgDmfyS4oO7+y1b+qZgClOOgQuyieudqnpukl8b9nltkqOS/FySmyV5fHefvXof2C7TXgsN+9wkyWeSHJHklgcJ3JoHAAAAAAAAuAFZfMZAFp+xk8WHG5LHZ5nJ4zN28viMnTw+YyePD4uxtMWMkqSqbpXkt5NSriWGAAACqklEQVTcN5PJbl8mFTHP7O4rFtk32ArDzeNnHKTZ27r7nkP7X0ry4Ewmv29OcmSSzyV5Z5Kzu/vt6x0EDkdVdXKSxyT54UwuII9NcmWS9yR5RSa//HPARFdVJyV5WiYVLXcn+WiSlyZ5fndfvz29h61TVd+b5AOZfNnfs97n2DzATnUI1zyf6O49q/aZ+lxfVQ9I8pQkd0qyK5NxdXZ3v3zGtwAzmWYMDDeOTz7IIc/s7meuOP7vJ7lrJjecb5rkq0k+meSfkzyvuz++ya7DlphyDGz6eqeqzsjklx++L5Nx8O4kv9/dfz/zm4AZbPJa6LGZPER/VXc/7CDHNw8AAAAAAABwAFl8lp0sPmMniw9fJ4/PspPHZ+zk8Rk7eXzGTh4fFmOpixkBAAAAAAAAAAAAAAAAAAAAAADzt2vRHQAAAAAAAAAAAAAAAAAAAAAAAHY2xYwAAAAAAAAAAAAAAAAAAAAAAICZKGYEAAAAAAAAAAAAAAAAAAAAAADMRDEjAAAAAAAAAAAAAAAAAAAAAABgJooZAQAAAAAAAAAAAAAAAAAAAAAAM1HMCAAAAAAAAAAAAAAAAAAAAAAAmIliRgAAAAAAAAAAAAAAAAAAAAAAwEwUMwIAAAAAAAAAAAAAAAAAAAAAAGaimBEAAAAAAAAAAAAAAAAAAAAAADATxYwAAAAAAAAAAAAAAAAAAAAAAICZKGYEAAAAAAAAAAAAAAAAAAAAAADMRDEjAAAAAAAAAAAAAAAAAAAAAABgJooZAQAAAAAAAAAAAAAAAAAAAAAAM1HMCAAAAAAAAAAAAAAAAAAAAAAAmIliRgAAAAAAAAAAAAAAAAAAAAAAwEwUMwIAAAAAAAAAAAAAAAAAAAAAAGaimBEAAAAAAAAAAAAAAAAAAAAAADCT/wexHBFsMbcvTAAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "image/png": { "height": 279, "width": 2329 }, "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "random_color(rs, re, gs, ge, bs, be) (10, 18, 14)\n" ] } ], "source": [ "'''生成彩色图像'''\n", "import re\n", "\n", "def get_arith(top=9, i=None, que_mark=True, numOfas=1):\n", " '''生成带等号问号+x-三种算法,返回公式及求解答案\n", " i: 第几个位置为问号\n", " numOfas:算术符号数量\n", " que_mark:True公式包含问号,False不包含'''\n", " a = random.randint(0,top)\n", " sign = random.choice(['+','*','-','/']) if top<10 else random.choice(['+','-'])\n", " b = random.randint(0,top) if sign!='/' else random.randint(1, top) \n", " if sign=='/':\n", " answer = int(eval(('%d*%d'%(a,b)))) if sign!='/' else int(eval(('%d*%d'%(a,b))))\n", " a, answer = answer, a\n", " elif sign=='-':\n", " b = random.randint(0,a)\n", " answer = int(eval('%d%s%d'%(a,sign,b)))\n", " else:\n", " answer = int(eval('%d%s%d'%(a,sign,b))) \n", " \n", " if numOfas==2: \n", " sign2 = random.choice(['+','-'])\n", " c = random.randint(0,top) if sign2=='+' else random.randint(0,answer)\n", " answer = int(eval('%d%s%d%s%d'%(a,sign,b,sign2,c)))\n", " if sign=='*' and random.random()>0.5:\n", " sign = '×' \n", "# arith = '%d%s%d%s%d=%d'%(a,sign,b,sign2,c,answer)\n", " a = str(a)\n", " b = str(b)\n", " c = str(c)\n", " answer = str(answer)\n", " l = [a,b,c,answer]\n", " if que_mark:\n", " i = random.choice([0,1,2,3]) if i==None else i\n", " question = l[i]\n", " l[i] = '?'\n", " arith = '%s%s%s%s%s=%s'%(l[0],sign,l[1],sign2,l[2],l[3])\n", " return arith, question\n", " arith = '%s%s%s%s%s='%(l[0],sign,l[1],sign2,l[2])\n", " return arith, answer\n", " else:\n", " if sign=='*' and random.random()>0.5:\n", " sign = '×' \n", "# arith = '%d%s%d=%d'%(a,sign,b,answer)\n", " a = str(a)\n", " b = str(b)\n", " answer = str(answer)\n", " l = [a,b,answer] \n", " if que_mark:\n", " i = random.choice([0,1,2]) if i==None else i\n", " question = l[i]\n", " l[i] = '?'\n", " arith = '%s%s%s=%s'%(l[0],sign,l[1], l[2])\n", " return arith, question\n", " arith = '%s%s%s='%(l[0],sign,l[1])\n", " return arith, answer\n", "\n", "\n", "def get_wavy_line(w = (0, 100),h = (30, 50)):\n", " '''产生波浪线坐标'''\n", " import random\n", " n = 50\n", " x = 0\n", " y = random.randint(h[0],h[1])\n", " flag = random.randint(0,2)\n", " xy = [(x, y)]\n", " while x < w[1]:\n", " temp_y = random.randint(1, 3)\n", " temp_x = random.randint(5, 10)\n", " if flag == 0:\n", " if y + temp_y > h[1]:\n", " y -= temp_y\n", " flag = 1\n", " else:\n", " y += temp_y\n", " else:\n", " if y - temp_y < h[0]:\n", " y += temp_y\n", " flag = 0\n", " else:\n", " y -= temp_y\n", " x = x+temp_x if x+temp_x < w[1] else w[1]\n", " xy.append((x, y))\n", " return xy\n", "def Asin(x, A=8,w=0.05, b=6, k=40):\n", " '''\n", " y=Asin(ωx+φ)+k在直角坐标系上的图象\n", " A——振幅,当物体作轨迹符合正弦曲线的直线往复运动时,其值为行程的1/2。\n", " (ωx+φ)——相位,反映变量y所处的状态。\n", " φ——初相,x=0时的相位;反映在坐标系上则为图像的左右移动。\n", " k——偏距,反映在坐标系上则为图像的上移或下移。\n", " ω——角速度, 控制正弦周期(单位弧度内震动的次数)。\n", " '''\n", " return A*math.sin(w*x+b)+k\n", "\n", "def random_xy(width,height): \n", " '''\n", " 随机位置函数,返回指定范围随机位置坐标\n", " 参数:width:图片宽,height:图片高\n", " '''\n", " x = random.randint(0, width)\n", " y = random.randint(0, height)\n", " return x, y\n", "def random_color(color_tuple):\n", " '''\n", " 随机颜色函数,返回指定范围随机颜色值\n", " 参数:start:颜色最低值,end:颜色最高值\n", " '''\n", " if len(color_tuple)==2:\n", " rs, re = color_tuple\n", " gs = bs = rs\n", " ge = be = re\n", " else:\n", " rs, re, gs, ge, bs, be = color_tuple\n", " red = random.randint(rs, re)\n", " green = random.randint(gs, ge)\n", " blue = random.randint(bs, be)\n", " return (red, green, blue)\n", "\n", "def gen_captcha(text, fig_size=(200,70), fonts=['fonts/ANTQUAB.TTF'],font_color=(10,100),same_color=1, font_size=(25, 35), rotate=(0,0),\n", " font_noise=0, offset_w=(0,0), offset_h=0, line=(0,0), shortline=(0,0), line_width=(0,1), line_color=(200,250), point=(0,500), \n", " point_color=(150,250), frame_color=None, wavy=(0,0), bg=(200,255)):\n", " '''\n", " text:验证码文本\n", " size:验证码图片宽高\n", " fonts:字体列表,随机选择一个\n", " font_noise: 字体散点干扰,0不加干扰,1加干扰\n", " offset_hor: 左右偏移值\n", " offset_var: 上下偏移值\n", " fill:字体颜色范围\n", " rotate:字体旋转角度\n", " line:干扰线条数范围\n", " point:干扰点数范围\n", " wavy:波浪线数范围\n", " color:干扰线、点 颜色\n", " bg:背景色范围\n", " '''\n", " bg = random_color(bg)\n", " img = Image.new(mode='RGB', size=fig_size, color=bg) #\n", " draw = ImageDraw.Draw(im=img, mode='RGB') # im, mode=None\n", " \n", " font_path = random.choice(fonts)\n", "# font_path = 'latin/verdana.ttf'\n", "# print('font_path:',font_path)\n", "# font_name = font_path.split('/')[-1][:-4]\n", "# print('font_name:', font_name)\n", " rotate = (rotate, rotate) if isinstance(rotate, int) else rotate\n", " font = ImageFont.truetype(font_path, size=random.randint(font_size[0], font_size[1])) # font=None, size=10, index=0, encoding=\"\"\n", " \n", " def get_char_img(char,font,font_color,rotate,bg, font_noise=0):\n", " '''\n", " 生成单个字符图片,随机颜色加随机旋转\n", " \n", " '''\n", "# print('get_char_img', char)\n", " w, h = draw.textsize(char, font=font)\n", " im = Image.new('RGBA',(w,h), color=bg)\n", " ImageDraw.Draw(im).text((0,0), char, font=font, fill=font_color) \n", " if rotate!=(0, 0) and char not in ['+','-','×']:\n", " im = im.rotate(random.randint(rotate[0], rotate[1]),Image.BILINEAR,expand=1)\n", " im = im.crop(im.getbbox())\n", " if font_noise: \n", " im_draw = ImageDraw.Draw(im)\n", "# for i in range(random.randint(1,20)):\n", " for i in range(random.randint(int(w*h*0.01),min(int(w*h*0.05), 5))):\n", " im_draw.point(xy=(random.randint(0, w), random.randint(0, h)),fill=bg)\n", "\n", " table = []\n", " for i in range(256):\n", " table.append(i * 97) # 5.97\n", " mask = im.convert('L').point(table) \n", " return (im, mask)\n", " \n", "# char_color = random.randint(font_color[0],font_color[1])\n", " char_color = random_color(font_color)\n", " \n", " # 解决两位数问题\n", " chars = re.split('(\\+|\\-|\\*|×|/|=)', text)\n", " char_imgs = []\n", " char_list = []\n", " if same_color: \n", " for char in chars:\n", " char_list.append(char)\n", " char_imgs.append(get_char_img(char, font, font_color=char_color, rotate=rotate, bg=bg, font_noise=font_noise))\n", " else:\n", " for char in chars:\n", " char_list.append(char)\n", " char_imgs.append(get_char_img(char, font, font_color=random_color(font_color), rotate=rotate, bg=bg, font_noise=font_noise))\n", "\n", "\n", "# re_s = re.search('(\\d+|\\?)(\\+|-|\\*|×)(\\d+|\\?)(=)(-?\\d+|\\?)?', text)\n", "# if re_s:\n", "# # print(re_s.group(0))\n", "# char_imgs = []\n", "# char_list = []\n", "# if same_color: \n", "# for i in range(1,6):\n", "# if re_s.group(i)!=None:\n", "# char_list.append(re_s.group(i))\n", "# char_imgs.append(get_char_img(re_s.group(i), font, font_color=char_color, rotate=rotate, bg=bg, font_noise=font_noise))\n", "# else:\n", "# for i in range(1,6):\n", "# if re_s.group(i)!=None:\n", "# char_list.append(re_s.group(i))\n", "# char_imgs.append(get_char_img(re_s.group(i), font, font_color=random_color(font_color), rotate=rotate, bg=bg, font_noise=font_noise))\n", "# else:\n", "# if same_color: \n", "# char_imgs = [get_char_img(char, font, font_color=char_color, rotate=rotate, bg=bg, font_noise=font_noise) for char in text]\n", "# else:\n", "# # char_imgs = [get_char_img(char, font, font_color=random.randint(font_color[0],font_color[1]), rotate=rotate, bg=bg, font_noise=font_noise) for char in text]\n", "# char_imgs = [get_char_img(char, font, font_color=random_color(font_color), rotate=rotate, bg=bg, font_noise=font_noise) for char in text] \n", " ws = [img[0].size[0] for img in char_imgs]\n", " hs = [img[0].size[1] for img in char_imgs]\n", " w = max(sum(ws), fig_size[0])\n", " h = max(max(hs), fig_size[1])\n", " if w>fig_size[0] or h>fig_size[1]:\n", " img = Image.new('RGB',(w+6,h+6), color=bg)\n", " draw = ImageDraw.Draw(im=img, mode='RGB') # im, mode=None\n", " w, h = img.size\n", " fig_size = img.size\n", " \n", "\n", " # 短线\n", " for i in range(random.randint(shortline[0], shortline[1])):\n", " x0, y0 = random_xy(w, h)\n", " x1 = x0 + random.randint(2, 5)\n", " y1 = y0 + random.randint(2, 5)\n", " draw.line(xy=((x0,y0),(x1,y1)),\n", " fill=random_color(line_color),\n", " width=random.randint(line_width[0], line_width[1])) # xy, fill=None, width=0\n", " \n", " if rotate!=(0, 0):\n", " temp_x = random.randint(0, min(50,int((fig_size[0]-sum(ws))/2+1))) #int((fig_size[0]-sum(ws))/5)\n", " temp_y = random.randint(int((fig_size[1]-hs[0])/8), int((fig_size[1]-hs[0])/2+1))\n", "# print('len(char_imgs):',len(char_imgs))\n", " for i in range(len(char_imgs)):\n", " tmp_offset = random.randint(offset_w[0], offset_w[1]) if sum(ws)+(len(ws)-1)*offset_w[1] 0:\n", " temp_x = new_x if new_x+ws[i]=0.5:\n", " A_ = random.uniform(hs[1]*0.1,hs[1]*0.2)\n", " w_ = math.pi*4/w#random.uniform(0.04, 0.06)\n", " b_ = random.random()*math.pi\n", " k_ = random.uniform(h*0.5, h*0.7)\n", " # 波浪线\n", " for _ in range(random.randint(wavy[0],wavy[1])): \n", " draw.line(xy=[(x, Asin(x, A_, w_, b_, k_)) for x in range(int(w))], \n", " fill=char_color, width=random.randint(line_width[0], line_width[1])) \n", " else:\n", " # 波浪线\n", " for _ in range(random.randint(wavy[0],wavy[1])): \n", " draw.line(xy=get_wavy_line(w = (0, w),h = (min(hs)-5, max(hs)+5)), \n", " fill=char_color, width=random.randint(line_width[0], line_width[1])) \n", " \n", " # 边框\n", " if frame_color!=None:\n", " draw.line(xy=[(0,0),(0, h), (0, 0), (w, 0),(w-1,0),(w-1, h), (0,h-1),(w-1, h-1)], fill=random_color(frame_color))\n", " \n", " if rotate==(0, 0): \n", " temp_x = random.randint(0, min(50, int((fig_size[0]-sum(ws))/2+1))) #int((fig_size[0]-sum(ws))/5)\n", " temp_y = random.randint(int((fig_size[1]-hs[0])/8), int((fig_size[1]-hs[0])/2+1))\n", " for i in range(len(char_imgs)):\n", " tmp_offset = random.randint(offset_w[0], offset_w[1]) if sum(ws)+(len(ws)-1)*offset_w[1] 0:\n", " temp_x = new_x if new_x+ws[i]0.3\n", "re_s = re.search('(\\d+|\\?)(\\+|-|\\*|×)(\\d+|\\?)(=)(\\d+|\\?)?', random_str)\n", "print(random_str)\n", "for i in range(1,6):\n", "# print(i)\n", " if re_s.group(i)!=None:\n", " print(re_s.group(i))" ] }, { "cell_type": "code", "execution_count": 106, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "6×0=?\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "image/png": { "height": 140, "width": 370 }, "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# 重组验证码\n", "\n", "crops = glob.glob('/data/captcha/arithmetic/crop_70_25/crop_num/*.jpg')\n", "bgs_7025 = glob.glob('/data/captcha/arithmetic/crop_70_25/crop_bg/*.jpg')\n", "def merge_img_7025():\n", "# if random.random()>0.4:\n", "# img = Image.new(mode='RGB', size=((70,25)), color=(255,255,255))\n", "# else:\n", " img = Image.open(random.choice(bgs_7025))\n", " w, h = img.size\n", " draw = ImageDraw.Draw(img) \n", " \n", " w0 = random.randint(0,4)\n", " h0 = random.randint(1,5)\n", " label = []\n", " range_num = random.randint(1,2)\n", " for i in range(range_num):\n", " im_p = random.choice(crops)\n", " lb = im_p.split('/')[-1].split('_')[0]\n", " if lb=='0' and range_num == 2 and i==0:\n", " continue\n", " label.append(lb)\n", " im = Image.open(im_p)\n", " w, h = im.size \n", " img.paste(im, (w0,h0)) # ,w//4*(i+1), h\n", " w0 += w\n", " \n", " fh = glob.glob('/data/captcha/arithmetic/crop_70_25/crop_sign/jiajiancheng/*.jpg')\n", " im_p = random.choice(fh)\n", " lb = im_p.split('/')[-1].split('_')[0]\n", " if lb == 'jia':\n", " lb = '+'\n", " elif lb == 'jian':\n", " lb = '-'\n", " elif lb == 'cheng':\n", " lb = '×'\n", " label.append(lb)\n", " im = Image.open(im_p)\n", " w, h = im.size \n", " img.paste(im, (w0,h0)) # ,w//4*(i+1), h\n", " w0 += w \n", " \n", " range_num = random.randint(1,2)\n", " for i in range(range_num):\n", " im_p = random.choice(crops)\n", " lb = im_p.split('/')[-1].split('_')[0]\n", " if lb=='0' and range_num == 2 and i==0:\n", " continue\n", " label.append(lb)\n", " im = Image.open(im_p)\n", " w, h = im.size \n", " img.paste(im, (w0,h0)) # ,w//4*(i+1), h\n", " w0 += w \n", " \n", " fh = glob.glob('/data/captcha/arithmetic/crop_70_25/crop_sign/denghao/*.jpg')\n", " im_p = random.choice(fh)\n", " lb = im_p.split('/')[-1].split('_')[0]\n", " if lb == 'deng':\n", " lb = '='\n", " label.append(lb)\n", " im = Image.open(im_p)\n", " w, h = im.size \n", " img.paste(im, (w0,h0)) # ,w//4*(i+1), h\n", " w0 += w \n", " \n", " fh = glob.glob('/data/captcha/arithmetic/crop_70_25/crop_sign/wenhao/*.jpg')\n", " im_p = random.choice(fh)\n", " lb = im_p.split('/')[-1].split('_')[0]\n", " if lb == 'wen':\n", " lb = '?'\n", " label.append(lb)\n", " im = Image.open(im_p)\n", " w, h = im.size \n", " img.paste(im, (w0,h0)) # ,w//4*(i+1), h\n", " w0 += w \n", " w, h = img.size \n", " for i in range(0,2):\n", " x0, y0 = random_xy(w, h)\n", " x1 = x0 + random.randint(2, 5)\n", " y1 = y0 + random.randint(2, 5)\n", " draw.line(xy=((x0,y0),(x1,y1)),\n", " fill=random_color((200,250)),\n", " width=1) # xy, fill=None, width=0 \n", " for _ in range(random.randint(0,10)):\n", " draw.point(xy=(random_xy(w, h)),fill=random_color((180,250))) \n", "\n", " return img.resize((width, height), Image.BILINEAR), ''.join(label)\n", "\n", "img, label = merge_img_7025()\n", "print(label)\n", "plt.imshow(img)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 113, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "7-2=?\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "image/png": { "height": 140, "width": 370 }, "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "'''添加真实验证码'''\n", "imgs_60 = glob.glob('/data/captcha/arithmetic/160_60/*.jpg') #变形字体\n", "imgs_46 = glob.glob('/data/captcha/arithmetic/146_46/*.jpg') #两个算术符号\n", "name_label_dic = dict() \n", "with open('/data/captcha/arithmetic/146_46/answer.txt', 'r', encoding='utf-8') as f: #/data/captcha/arithmetic/160_60/answer.txt\n", " lines = f.readlines()\n", " for line in lines:\n", " f_n, q, a = line.strip().split('\\t') \n", " name_label_dic[f_n] = q\n", " \n", "with open('/data/captcha/arithmetic/160_60/answer.txt', 'r', encoding='utf-8') as f: #/data/captcha/arithmetic/160_60/answer.txt\n", " lines = f.readlines()\n", " for line in lines:\n", " f_n, q, a = line.strip().split('\\t') \n", " if f_n in name_label_dic:\n", " print('file 已存在:', f_n)\n", " continue\n", " name_label_dic[f_n] = q \n", "\n", "def get_real_img(imgs):\n", " num = len(imgs)\n", " im_p = random.choice(imgs[:int(0.9*num)])\n", " file_name = im_p.split('/')[-1]\n", " label = name_label_dic[file_name]\n", " img = Image.open(im_p) \n", " w, h = img.size \n", " draw = ImageDraw.Draw(img) \n", " for i in range(2,20):\n", " x0, y0 = random_xy(w, h)\n", " x1 = x0 + random.randint(2, 5)\n", " y1 = y0 + random.randint(2, 5)\n", " draw.line(xy=((x0,y0),(x1,y1)),\n", " fill=random_color((200,250)),\n", " width=1) # xy, fill=None, width=0 \n", " for _ in range(random.randint(20,500)):\n", " draw.point(xy=(random_xy(w, h)),fill=random_color((180,250))) \n", "\n", " return img.resize((width, height), Image.BILINEAR), label\n", "img, label = get_real_img(imgs_60) #imgs_46 imgs_60\n", "print(label)\n", "plt.imshow(img)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from tensorflow.keras.utils import Sequence\n", "# from collections import Counter" ] }, { "cell_type": "code", "execution_count": 114, "metadata": {}, "outputs": [], "source": [ "''' 彩色图像生成 '''\n", "from tensorflow.keras.utils import Sequence\n", "from collections import Counter\n", "\n", "class CaptchaSequence(Sequence):\n", " '''\n", " 继承Sequence的数据生成类,方便调用多CPU,加快生成训练及测试数据\n", " 参数:self.characters:验证码字符集合,self.batch_size:每批次样本数,self.steps:生成多少批数据,self.n_len:验证码长度,\n", " self.width:图片宽度,self.height:图片高度,self.input_length:lstm time step长度,self.label_length:标签长度\n", " 返回:array类型训练或测试数据 \n", " \n", " '''\n", " def __init__(self, characters, batch_size, steps, n_len=n_len, width=width, height=height, \n", " input_length=12, label_length=6, chars_len=(4, 6)): # width=128, height=64, input_length=16, label_length=4\n", " self.characters = characters\n", " self.batch_size = batch_size\n", " self.steps = steps\n", " self.n_len = n_len\n", " self.width = width\n", " self.height = height\n", " self.input_length = input_length\n", " self.label_length = label_length\n", " self.chars_len = chars_len\n", "# self.label_length = self.n_len\n", " self.n_class = len(characters)+1\n", "# self.n_class = -2\n", "# self.generator = ImageCaptcha(width=width, height=height, font_sizes=(12,20,18,25))\n", "# self.fonts_list = glob.glob('/usr/share/fonts/WindowsFonts/fonts/*.ttf')\n", " \n", " def __len__(self):\n", " return self.steps\n", "\n", " def __getitem__(self, idx):\n", " batch_label_length = random.choice([4,5,4,4])\n", "# imgs = []\n", "# print('batch_label_length',batch_label_length)\n", " X = np.zeros((self.batch_size, self.height, self.width, 3), dtype=np.float32)\n", " y = np.zeros((self.batch_size, self.n_len), dtype=np.uint8)\n", "# print(y)\n", "# y = np.zeros((self.batch_size, batch_label_length), dtype=np.uint8)\n", " input_length = np.ones(self.batch_size)*self.input_length\n", " label_length = np.ones(self.batch_size)*self.n_len \n", "# label_length = np.ones(self.batch_size)*batch_label_length\n", " max_num = 65\n", " for i in range(self.batch_size):\n", "\n", " if i%max_num <= 3: # line=(0,0), line_width=(0,1), point=(0,100),wavy=(0,0) \n", " random_str, question = get_arith(top=9, i=1)\n", " image = gen_captcha(random_str, fig_size=(100,26), fonts=fonts,font_color=(20,230,20,230,20,230),same_color=1, font_size=(15, 20), rotate=0,\n", " font_noise=0,offset_w=(-1,3),offset_h=0, line=(0,0), shortline=(10,20), line_width=(0,1), line_color=(100,150), point=(0,0),\n", " point_color=(0,0),frame_color=(120,150),wavy=(0,0), bg=(255,255))\n", "\n", "\n", " elif i%max_num <= 6: # line=(0,5), line_width=(0,1), point=(20,300),wavy=(0,0)\n", " random_str, question = get_arith(top=99, i=2)\n", " image = gen_captcha(random_str, fig_size=(70,25), fonts=fonts,font_color=(70,100),same_color=1, font_size=(12, 15), rotate=0,\n", " font_noise=0,offset_w=(-1,0),offset_h=0, line=(0,0), shortline=(150,200), line_width=(0,1), line_color=(180,230), point=(200,300),\n", " point_color=(200,250),frame_color=None,wavy=(0,0), bg=(210,255))\n", "\n", " elif i%max_num <= 9: # line=(0,0), line_width=(0,2), point=(0,0),wavy=(1,1)\n", " random_str, question = get_arith(top=9)\n", " image = gen_captcha(random_str, fig_size=(100,26), fonts=fonts,font_color=(20,230,20,230,20,230),same_color=1, font_size=(15, 20), rotate=0,\n", " font_noise=0,offset_w=(-1,3),offset_h=0, line=(0,0), shortline=(0,0), line_width=(0,1), line_color=(100,150), point=(0,0),\n", " point_color=(0,0),frame_color=(120,150),wavy=(0,0), bg=(255,255))\n", "\n", " elif i%max_num <= 12: # line=(0,0), line_width=(0,1), point=(0,80),wavy=(0,0)\n", " random_str, question = get_arith(top=99, i=2)\n", " image = gen_captcha(random_str, fig_size=(70,25), fonts=fonts,font_color=(10,230,10,230,10,230),same_color=0, font_size=(12, 15), rotate=0,\n", " font_noise=0,offset_w=(-1,1),offset_h=0, line=(0,0), shortline=(0,0), line_width=(0,1), line_color=(150,200), point=(0,0),\n", " point_color=(0,0),frame_color=None,wavy=(0,0), bg=(150,255))\n", " \n", " elif i%max_num<=15:\n", " random_str, question = get_arith(top=9, que_mark=False)\n", " image = gen_captcha(random_str, fig_size=(100,40), fonts=fonts,font_color=(0,0),same_color=1, font_size=(20, 25), rotate=0,\n", " font_noise=0,offset_w=(-1,1),offset_h=0, line=(3,3), shortline=(0,0), line_width=(0,1), line_color=(0,0), point=(0,0),\n", " point_color=(200,250),frame_color=None,wavy=(0,0), bg=(250,255))\n", "\n", " elif i%max_num<=20:\n", " random_str, question = get_arith(top=99, i=2)\n", " image = gen_captcha(random_str, fig_size=(330, 69), fonts=fonts,font_color=(10,250,10,250,10,250),same_color=0, font_size=(35, 40), rotate=30,\n", " font_noise=0,offset_w=(5,5),offset_h=0, line=(3,6), shortline=(0,5), line_width=(1,2), line_color=(150,230), point=(30,130),\n", " point_color=(50,230),frame_color=None,wavy=(0,0), bg=(255,255))\n", " \n", " elif i%max_num<=30:\n", " random_str, question = get_arith(top=9)\n", " tmp_w = random.randint(70,100)\n", " tmp_h = random.randint(25, 35)\n", " font_s = (int(tmp_h*0.8), int(tmp_h*0.9))\n", " image = gen_captcha(random_str, fig_size=(tmp_w,tmp_h), fonts=fonts,font_color=(200,250),same_color=0, font_size=font_s, rotate=20,\n", " font_noise=0,offset_w=(-2,1),offset_h=2, line=(0,5), shortline=(0,100), line_width=(0,1), line_color=(10,150), point=(0,200),\n", " point_color=(50,255),frame_color=None,wavy=(0,0), bg=(10,150)) \n", " elif i%max_num<=35:\n", " random_str, question = get_arith(top=9, i=2) \n", " image = gen_captcha(random_str, fig_size=(160, 60), fonts=fonts,font_color=(0,250,0,250,0,250),same_color=1, font_size=(35, 40), rotate=(20,30),\n", " font_noise=0,offset_w=(-6,-2),offset_h=0, line=(0,0), shortline=(0,0), line_width=(1,2), line_color=(150,230), point=(0,0),\n", " point_color=(50,230),frame_color=(120,150),wavy=(0,0), bg=(190,250))\n", " elif i%max_num<=40:\n", " random_str, question = get_arith(top=9, i=3, numOfas=2)\n", " image = gen_captcha(random_str, fig_size=(146, 46), fonts=fonts,font_color=(0,250,0,250,0,250),same_color=1, font_size=(25, 30), rotate=(0,0),\n", " font_noise=0,offset_w=(-2,3),offset_h=0, line=(0,0), shortline=(0,0), line_width=(1,2), line_color=(150,230), point=(10,50),\n", " point_color=(150,230),frame_color=(150,200),wavy=(0,0), bg=(220,250))\n", "\n", " elif i%max_num<=45:\n", " image, random_str = merge_img_7025()\n", " elif i%max_num<=50: \n", " image, random_str = get_real_img(imgs_46) #imgs_46 imgs_60\n", " elif i%max_num<=55: \n", " image, random_str = get_real_img(imgs_60) #imgs_46 imgs_60\n", " \n", " else: \n", " random_str, question = get_arith(top=99, i=2)\n", " tmp_w = random.randint(70,100)\n", " tmp_h = random.randint(25, 35)\n", " font_s = (int(tmp_h*0.8), int(tmp_h*0.9))\n", " image = gen_captcha(random_str, fig_size=(tmp_w,tmp_h), fonts=fonts,font_color=(0,180),same_color=0, font_size=font_s, rotate=20,\n", " font_noise=0,offset_w=(2,5),offset_h=2, line=(0,5), shortline=(0,100), line_width=(0,1), line_color=(10,200), point=(0,200),\n", " point_color=(50,255),frame_color=None,wavy=(0,0), bg=(150,255)) \n", " \n", "\n", " X[i] = np.array(image)/255.0\n", " random_str = random_str.replace('*', '×') \n", " label = [self.characters.find(x) for x in random_str] # 全部标签转换为小写\n", " if len(random_str) < self.n_len:\n", " label += [self.n_class]*(self.n_len-len(random_str)) \n", " y[i] = label\n", " \n", "# return imgs# \n", " return [X, y, input_length, label_length], np.ones(self.batch_size)" ] }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [], "source": [ "import re\n", "a = re.search('(\\d+|\\?)(\\+|-|\\*|×)(\\d+|\\?)(=)(-?\\d+|\\?)?', '2-?=-7')" ] }, { "cell_type": "code", "execution_count": 131, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "('6*23=?', 138)" ] }, "execution_count": 131, "metadata": {}, "output_type": "execute_result" } ], "source": [ "get_arith(top=99, i=2)" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [], "source": [ "data = CaptchaSequence(characters, batch_size=64, steps=2,input_length=12, label_length=10,chars_len=(5, 5)) # (characters, batch_size=128, steps=100)" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(64, 32, 100, 3)\n" ] }, { "ename": "ValueError", "evalue": "cannot reshape array of size 9600 into shape (32,100)", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0midx\u001b[0m \u001b[0;34m=\u001b[0m\u001b[0;36m18\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mimshow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreshape\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0midx\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mheight\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwidth\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;31m# x = data[1]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/anaconda3/envs/dl_nlp/lib/python3.5/site-packages/numpy/core/fromnumeric.py\u001b[0m in \u001b[0;36mreshape\u001b[0;34m(a, newshape, order)\u001b[0m\n\u001b[1;32m 255\u001b[0m [5, 6]])\n\u001b[1;32m 256\u001b[0m \"\"\"\n\u001b[0;32m--> 257\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0m_wrapfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'reshape'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnewshape\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0morder\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0morder\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 258\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 259\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/anaconda3/envs/dl_nlp/lib/python3.5/site-packages/numpy/core/fromnumeric.py\u001b[0m in \u001b[0;36m_wrapfunc\u001b[0;34m(obj, method, *args, **kwds)\u001b[0m\n\u001b[1;32m 50\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_wrapfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmethod\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 51\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 52\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmethod\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 53\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 54\u001b[0m \u001b[0;31m# An AttributeError occurs if the object does not have\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mValueError\u001b[0m: cannot reshape array of size 9600 into shape (32,100)" ] } ], "source": [ "l, _ = data[1]\n", "x = l[0]\n", "print(x.shape)\n", "idx =18\n", "plt.imshow(np.reshape(x[idx], (height, width)))\n", "\n", "# x = data[1]\n", "# idx = 8\n", "# plt.imshow(x[idx])\n", "# len4_imgs[:5]" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "input_1 (InputLayer) (None, 64, 200, 3) 0 \n", "_________________________________________________________________\n", "conv2d (Conv2D) (None, 64, 200, 32) 896 \n", "_________________________________________________________________\n", "batch_normalization (BatchNo (None, 64, 200, 32) 128 \n", "_________________________________________________________________\n", "leaky_re_lu (LeakyReLU) (None, 64, 200, 32) 0 \n", "_________________________________________________________________\n", "conv2d_1 (Conv2D) (None, 64, 200, 32) 1056 \n", "_________________________________________________________________\n", "batch_normalization_1 (Batch (None, 64, 200, 32) 128 \n", "_________________________________________________________________\n", "leaky_re_lu_1 (LeakyReLU) (None, 64, 200, 32) 0 \n", "_________________________________________________________________\n", "max_pooling2d (MaxPooling2D) (None, 32, 100, 32) 0 \n", "_________________________________________________________________\n", "conv2d_2 (Conv2D) (None, 32, 100, 64) 18496 \n", "_________________________________________________________________\n", "batch_normalization_2 (Batch (None, 32, 100, 64) 256 \n", "_________________________________________________________________\n", "leaky_re_lu_2 (LeakyReLU) (None, 32, 100, 64) 0 \n", "_________________________________________________________________\n", "conv2d_3 (Conv2D) (None, 32, 100, 64) 4160 \n", "_________________________________________________________________\n", "batch_normalization_3 (Batch (None, 32, 100, 64) 256 \n", "_________________________________________________________________\n", "leaky_re_lu_3 (LeakyReLU) (None, 32, 100, 64) 0 \n", "_________________________________________________________________\n", "max_pooling2d_1 (MaxPooling2 (None, 16, 50, 64) 0 \n", "_________________________________________________________________\n", "conv2d_4 (Conv2D) (None, 16, 50, 128) 73856 \n", "_________________________________________________________________\n", "batch_normalization_4 (Batch (None, 16, 50, 128) 512 \n", "_________________________________________________________________\n", "leaky_re_lu_4 (LeakyReLU) (None, 16, 50, 128) 0 \n", "_________________________________________________________________\n", "conv2d_5 (Conv2D) (None, 16, 50, 128) 16512 \n", "_________________________________________________________________\n", "batch_normalization_5 (Batch (None, 16, 50, 128) 512 \n", "_________________________________________________________________\n", "leaky_re_lu_5 (LeakyReLU) (None, 16, 50, 128) 0 \n", "_________________________________________________________________\n", "max_pooling2d_2 (MaxPooling2 (None, 8, 25, 128) 0 \n", "_________________________________________________________________\n", "conv2d_6 (Conv2D) (None, 8, 25, 256) 295168 \n", "_________________________________________________________________\n", "batch_normalization_6 (Batch (None, 8, 25, 256) 1024 \n", "_________________________________________________________________\n", "leaky_re_lu_6 (LeakyReLU) (None, 8, 25, 256) 0 \n", "_________________________________________________________________\n", "conv2d_7 (Conv2D) (None, 8, 25, 256) 65792 \n", "_________________________________________________________________\n", "batch_normalization_7 (Batch (None, 8, 25, 256) 1024 \n", "_________________________________________________________________\n", "leaky_re_lu_7 (LeakyReLU) (None, 8, 25, 256) 0 \n", "_________________________________________________________________\n", "max_pooling2d_3 (MaxPooling2 (None, 4, 25, 256) 0 \n", "_________________________________________________________________\n", "conv2d_8 (Conv2D) (None, 4, 25, 256) 590080 \n", "_________________________________________________________________\n", "batch_normalization_8 (Batch (None, 4, 25, 256) 1024 \n", "_________________________________________________________________\n", "leaky_re_lu_8 (LeakyReLU) (None, 4, 25, 256) 0 \n", "_________________________________________________________________\n", "conv2d_9 (Conv2D) (None, 4, 25, 256) 65792 \n", "_________________________________________________________________\n", "batch_normalization_9 (Batch (None, 4, 25, 256) 1024 \n", "_________________________________________________________________\n", "leaky_re_lu_9 (LeakyReLU) (None, 4, 25, 256) 0 \n", "_________________________________________________________________\n", "max_pooling2d_4 (MaxPooling2 (None, 2, 25, 256) 0 \n", "_________________________________________________________________\n", "permute (Permute) (None, 25, 2, 256) 0 \n", "_________________________________________________________________\n", "time_distributed (TimeDistri (None, 25, 512) 0 \n", "_________________________________________________________________\n", "bidirectional (Bidirectional (None, 25, 256) 492288 \n", "_________________________________________________________________\n", "bidirectional_1 (Bidirection (None, 25, 256) 295680 \n", "_________________________________________________________________\n", "dense (Dense) (None, 25, 17) 4369 \n", "=================================================================\n", "Total params: 1,930,033\n", "Trainable params: 1,927,089\n", "Non-trainable params: 2,944\n", "_________________________________________________________________\n", "None\n" ] } ], "source": [ "# 定义网络\n", "from tensorflow.keras.models import *\n", "from tensorflow.keras.layers import *\n", "\n", "# 定义 CTC Loss\n", "import tensorflow.keras.backend as K\n", "\n", "def ctc_lambda_func(args):\n", " '''\n", " 定义ctc损失函数\n", " 参数:y_pred:预测值,labels:标签,input_length:lstm tiemstep,label_length:标签长度\n", " ''' \n", " y_pred, labels, input_length, label_length = args\n", " return K.ctc_batch_cost(labels, y_pred, input_length, label_length)\n", "\n", "input_tensor = Input((height, width, 3))\n", "x = input_tensor\n", "\n", "for i, n_cnn in enumerate([2, 2, 2, 2, 2]): \n", " for j in range(n_cnn):\n", " kernel_size = 3 if j==0 else 1\n", " x = Conv2D(32*2**min(i, 3), kernel_size=kernel_size, padding='same', kernel_initializer='he_uniform')(x) # 32*2**min(i, 3)\n", " x = BatchNormalization()(x)\n", "# x = Activation('relu')(x) # 20200729 relu 改LeakyReLU\n", " x = LeakyReLU(0.01)(x)\n", " x = MaxPooling2D(2 if i < 3 else (2, 1))(x)\n", "\n", "x = Permute((2, 1, 3))(x)\n", "x = TimeDistributed(Flatten())(x)\n", "rnn_size = 128 # 128 32\n", "\n", "x = Bidirectional(GRU(rnn_size, return_sequences=True))(x)\n", "x = Bidirectional(GRU(rnn_size, return_sequences=True))(x) # 200epoch 0.0153 - val_loss: 0.0136\n", "\n", "x = Dense(n_class, activation='softmax')(x)\n", "base_model = Model(inputs=input_tensor, outputs=x)\n", "print(base_model.summary())\n", "\n", "labels = Input(name='the_labels', shape=[None], dtype='float32')\n", "input_length = Input(name='input_length', shape=[1], dtype='int64')\n", "label_length = Input(name='label_length', shape=[1], dtype='int64')\n", "loss_out = Lambda(ctc_lambda_func, output_shape=(1,), name='ctc')([x, labels, input_length, label_length])\n", "model = Model(inputs=[input_tensor, labels, input_length, label_length], outputs=loss_out)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 7, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/100\n", "1000/1000 [==============================] - 273s 273ms/step - loss: 0.0988 - val_loss: 0.6654\n", "Epoch 2/100\n", "1000/1000 [==============================] - 264s 264ms/step - loss: 0.0516 - val_loss: 0.1077\n", "Epoch 3/100\n", "1000/1000 [==============================] - 263s 263ms/step - loss: 0.0344 - val_loss: 0.0714\n", "Epoch 4/100\n", "1000/1000 [==============================] - 265s 265ms/step - loss: 0.0243 - val_loss: 0.0662\n", "Epoch 5/100\n", "1000/1000 [==============================] - 264s 264ms/step - loss: 0.0202 - val_loss: 0.2005\n", "Epoch 6/100\n", "1000/1000 [==============================] - 264s 264ms/step - loss: 0.0163 - val_loss: 0.0482\n", "Epoch 7/100\n", "1000/1000 [==============================] - 263s 263ms/step - loss: 0.0162 - val_loss: 0.0576\n", "Epoch 8/100\n", "1000/1000 [==============================] - 263s 263ms/step - loss: 0.0124 - val_loss: 0.2479\n", "Epoch 9/100\n", "1000/1000 [==============================] - 263s 263ms/step - loss: 0.0130 - val_loss: 0.0381\n", "Epoch 10/100\n", "1000/1000 [==============================] - 263s 263ms/step - loss: 0.0092 - val_loss: 0.0623\n", "Epoch 11/100\n", "1000/1000 [==============================] - 263s 263ms/step - loss: 0.0130 - val_loss: 0.0643\n", "Epoch 12/100\n", "1000/1000 [==============================] - 262s 262ms/step - loss: 0.0105 - val_loss: 0.3409\n", "Epoch 13/100\n", "1000/1000 [==============================] - 264s 264ms/step - loss: 0.0102 - val_loss: 0.6846\n", "Epoch 14/100\n", "1000/1000 [==============================] - 264s 264ms/step - loss: 0.0099 - val_loss: 0.0280\n", "Epoch 15/100\n", "1000/1000 [==============================] - 263s 263ms/step - loss: 0.0114 - val_loss: 0.0403\n", "Epoch 16/100\n", "1000/1000 [==============================] - 265s 265ms/step - loss: 0.0080 - val_loss: 0.0108\n", "Epoch 17/100\n", "1000/1000 [==============================] - 263s 263ms/step - loss: 0.0078 - val_loss: 0.2057\n", "Epoch 18/100\n", "1000/1000 [==============================] - 264s 264ms/step - loss: 0.0083 - val_loss: 0.0482\n", "Epoch 19/100\n", "1000/1000 [==============================] - 265s 265ms/step - loss: 0.0070 - val_loss: 0.0104\n", "Epoch 20/100\n", "1000/1000 [==============================] - 262s 262ms/step - loss: 0.0063 - val_loss: 0.0053\n", "Epoch 21/100\n", "1000/1000 [==============================] - 264s 264ms/step - loss: 0.0058 - val_loss: 0.0156\n", "Epoch 22/100\n", "1000/1000 [==============================] - 264s 264ms/step - loss: 0.0048 - val_loss: 0.0793\n", "Epoch 23/100\n", "1000/1000 [==============================] - 262s 262ms/step - loss: 0.0082 - val_loss: 1.3160\n", "Epoch 24/100\n", "1000/1000 [==============================] - 265s 265ms/step - loss: 0.0076 - val_loss: 0.0200\n", "Epoch 25/100\n", "1000/1000 [==============================] - 264s 264ms/step - loss: 0.0049 - val_loss: 0.0352\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from tensorflow.keras.callbacks import EarlyStopping, CSVLogger, ModelCheckpoint\n", "from tensorflow.keras.optimizers import *\n", "import gc \n", "\n", "# model.load_weights('gru_DigitAndEnglist_ctc_best.h5') # gru_DigitAndEnglist_ctc_best_0924\n", "# model.load_weights('gru_DigitAndEnglist_ctc_best_0927.h5') #DigitAndEnglist_cnn5gru_ctc_best2.h5 DigitAndEnglist_cnn5gru_ctc_best\n", "# 'mobilenet_DigitAndEnglist_ctc_best_32.h5' 损失下降到0.2左右 准确率97 \n", "# model.load_weights('gru_english4to6_ctc_best_1012.h5')\n", "\n", "train_data = CaptchaSequence(characters, batch_size=128, steps=1000,input_length=25, label_length=12,chars_len=(4, 6)) # (characters, batch_size=128, steps=1000)\n", "valid_data = CaptchaSequence(characters, batch_size=128, steps=100,input_length=25, label_length=12,chars_len=(4, 6)) # (characters, batch_size=128, steps=100)\n", "\n", "callbacks = [EarlyStopping(patience=5),ModelCheckpoint('gru_arithmetic_ctc_best_20220617.h5', save_best_only=True)]\n", "model.compile(loss={'ctc': lambda y_true, y_pred: y_pred}, optimizer=Adam(1e-3, amsgrad=True))\n", "model.fit_generator(train_data, epochs=100, validation_data=valid_data, workers=4, use_multiprocessing=True,\n", " callbacks=callbacks)" ] }, { "cell_type": "code", "execution_count": 115, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/100\n", "1000/1000 [==============================] - 267s 267ms/step - loss: 0.0983 - val_loss: 0.0179\n", "Epoch 2/100\n", "1000/1000 [==============================] - 254s 254ms/step - loss: 0.0109 - val_loss: 0.0143\n", "Epoch 3/100\n", "1000/1000 [==============================] - 254s 254ms/step - loss: 0.0075 - val_loss: 0.0107\n", "Epoch 4/100\n", "1000/1000 [==============================] - 257s 257ms/step - loss: 0.0063 - val_loss: 0.0016\n", "Epoch 5/100\n", "1000/1000 [==============================] - 255s 255ms/step - loss: 0.0051 - val_loss: 0.0084\n", "Epoch 6/100\n", "1000/1000 [==============================] - 255s 255ms/step - loss: 0.0042 - val_loss: 0.0024\n", "Epoch 7/100\n", "1000/1000 [==============================] - 254s 254ms/step - loss: 0.0037 - val_loss: 0.0037\n", "Epoch 8/100\n", "1000/1000 [==============================] - 253s 253ms/step - loss: 0.0035 - val_loss: 0.0032\n", "Epoch 9/100\n", "1000/1000 [==============================] - 253s 253ms/step - loss: 0.0031 - val_loss: 3.8587e-04\n", "Epoch 10/100\n", "1000/1000 [==============================] - 253s 253ms/step - loss: 0.0034 - val_loss: 0.0012\n", "Epoch 11/100\n", "1000/1000 [==============================] - 253s 253ms/step - loss: 0.0035 - val_loss: 5.9768e-04\n", "Epoch 12/100\n", "1000/1000 [==============================] - 254s 254ms/step - loss: 0.0028 - val_loss: 0.0012\n", "Epoch 13/100\n", "1000/1000 [==============================] - 253s 253ms/step - loss: 0.0029 - val_loss: 6.9224e-04\n", "Epoch 14/100\n", "1000/1000 [==============================] - 255s 255ms/step - loss: 0.0026 - val_loss: 3.2590e-04\n", "Epoch 15/100\n", "1000/1000 [==============================] - 255s 255ms/step - loss: 0.0027 - val_loss: 2.5925e-04\n", "Epoch 16/100\n", "1000/1000 [==============================] - 254s 254ms/step - loss: 0.0026 - val_loss: 0.0045\n", "Epoch 17/100\n", "1000/1000 [==============================] - 255s 255ms/step - loss: 0.0026 - val_loss: 4.6918e-04\n", "Epoch 18/100\n", "1000/1000 [==============================] - 255s 255ms/step - loss: 0.0028 - val_loss: 6.1181e-04\n", "Epoch 19/100\n", " 9/1000 [..............................] - ETA: 4:23 - loss: 2.4819e-04" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Process ForkPoolWorker-1440:\n", "Process ForkPoolWorker-1439:\n", "Process ForkPoolWorker-1438:\n", "Process ForkPoolWorker-1437:\n", "Traceback (most recent call last):\n", " File \"/home/python/anaconda3/envs/dl_nlp/lib/python3.5/multiprocessing/process.py\", line 254, in _bootstrap\n", " self.run()\n", " File \"/home/python/anaconda3/envs/dl_nlp/lib/python3.5/multiprocessing/process.py\", line 93, in run\n", " self._target(*self._args, **self._kwargs)\n", "Traceback (most recent call last):\n", "Traceback (most recent call last):\n", " File \"/home/python/anaconda3/envs/dl_nlp/lib/python3.5/multiprocessing/pool.py\", line 119, in worker\n", " result = (True, func(*args, **kwds))\n", " File \"/home/python/anaconda3/envs/dl_nlp/lib/python3.5/multiprocessing/process.py\", line 254, in _bootstrap\n", " self.run()\n", " File \"/home/python/anaconda3/envs/dl_nlp/lib/python3.5/multiprocessing/process.py\", line 254, in _bootstrap\n", " self.run()\n", " File \"/home/python/anaconda3/envs/dl_nlp/lib/python3.5/multiprocessing/process.py\", line 93, in run\n", " self._target(*self._args, **self._kwargs)\n", " File \"/home/python/anaconda3/envs/dl_nlp/lib/python3.5/multiprocessing/process.py\", line 93, in run\n", " self._target(*self._args, **self._kwargs)\n", " File \"/home/python/anaconda3/envs/dl_nlp/lib/python3.5/multiprocessing/pool.py\", line 119, in worker\n", " result = (True, func(*args, **kwds))\n", " File \"/home/python/anaconda3/envs/dl_nlp/lib/python3.5/site-packages/tensorflow/python/keras/utils/data_utils.py\", line 432, in get_index\n", " return _SHARED_SEQUENCES[uid][i]\n", "Traceback (most recent call last):\n", " File \"/home/python/anaconda3/envs/dl_nlp/lib/python3.5/multiprocessing/pool.py\", line 108, in worker\n", " task = get()\n", " File \"/home/python/anaconda3/envs/dl_nlp/lib/python3.5/site-packages/tensorflow/python/keras/utils/data_utils.py\", line 432, in get_index\n", " return _SHARED_SEQUENCES[uid][i]\n", " File \"/home/python/anaconda3/envs/dl_nlp/lib/python3.5/multiprocessing/queues.py\", line 342, in get\n", " with self._rlock:\n", " File \"\", line 82, in __getitem__\n", " point_color=(50,230),frame_color=None,wavy=(0,0), bg=(255,255))\n", " File \"/home/python/anaconda3/envs/dl_nlp/lib/python3.5/multiprocessing/process.py\", line 254, in _bootstrap\n", " self.run()\n", " File \"\", line 108, in __getitem__\n", " image, random_str = get_real_img(imgs_60) #imgs_46 imgs_60\n", " File \"/home/python/anaconda3/envs/dl_nlp/lib/python3.5/multiprocessing/synchronize.py\", line 96, in __enter__\n", " return self._semlock.__enter__()\n", " File \"\", line 30, in get_real_img\n", " x1 = x0 + random.randint(2, 5)\n", " File \"/home/python/anaconda3/envs/dl_nlp/lib/python3.5/multiprocessing/process.py\", line 93, in run\n", " self._target(*self._args, **self._kwargs)\n", "KeyboardInterrupt\n", " File \"/home/python/anaconda3/envs/dl_nlp/lib/python3.5/random.py\", line 218, in randint\n", " return self.randrange(a, b+1)\n", " File \"/home/python/anaconda3/envs/dl_nlp/lib/python3.5/multiprocessing/pool.py\", line 108, in worker\n", " task = get()\n", " File \"/home/python/anaconda3/envs/dl_nlp/lib/python3.5/multiprocessing/queues.py\", line 343, in get\n", " res = self._reader.recv_bytes()\n", " File \"/home/python/anaconda3/envs/dl_nlp/lib/python3.5/multiprocessing/connection.py\", line 216, in recv_bytes\n", " buf = self._recv_bytes(maxlength)\n", " File \"/home/python/anaconda3/envs/dl_nlp/lib/python3.5/multiprocessing/connection.py\", line 407, in _recv_bytes\n", " buf = self._recv(4)\n", " File \"/home/python/anaconda3/envs/dl_nlp/lib/python3.5/multiprocessing/connection.py\", line 379, in _recv\n", " chunk = read(handle, remaining)\n", "KeyboardInterrupt\n", " File \"\", line 188, in gen_captcha\n", " char_imgs.append(get_char_img(char, font, font_color=random_color(font_color), rotate=rotate, bg=bg, font_noise=font_noise))\n", " File \"\", line 160, in get_char_img\n", " im = im.rotate(random.randint(rotate[0], rotate[1]),Image.BILINEAR,expand=1)\n", " File \"/home/python/anaconda3/envs/dl_nlp/lib/python3.5/random.py\", line 189, in randrange\n", " istop = _int(stop)\n", " File \"/home/python/anaconda3/envs/dl_nlp/lib/python3.5/site-packages/PIL/Image.py\", line 1915, in rotate\n", " fillcolor=fillcolor)\n", "KeyboardInterrupt\n", " File \"/home/python/anaconda3/envs/dl_nlp/lib/python3.5/site-packages/PIL/Image.py\", line 2192, in transform\n", " return self.convert('RGBa').transform(\n", " File \"/home/python/anaconda3/envs/dl_nlp/lib/python3.5/site-packages/PIL/Image.py\", line 1026, in convert\n", " if dither is None:\n", "KeyboardInterrupt\n" ] }, { "ename": "KeyboardInterrupt", "evalue": "", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcompile\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mloss\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m{\u001b[0m\u001b[0;34m'ctc'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mlambda\u001b[0m \u001b[0my_true\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_pred\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0my_pred\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moptimizer\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mAdam\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1e-4\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mamsgrad\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 16\u001b[0m model.fit_generator(train_data, epochs=100, validation_data=valid_data, workers=4, use_multiprocessing=True,\n\u001b[0;32m---> 17\u001b[0;31m callbacks=callbacks)\n\u001b[0m", "\u001b[0;32m~/anaconda3/envs/dl_nlp/lib/python3.5/site-packages/tensorflow/python/keras/engine/training.py\u001b[0m in \u001b[0;36mfit_generator\u001b[0;34m(self, generator, steps_per_epoch, epochs, verbose, callbacks, validation_data, validation_steps, class_weight, max_queue_size, workers, use_multiprocessing, shuffle, initial_epoch)\u001b[0m\n\u001b[1;32m 1777\u001b[0m \u001b[0muse_multiprocessing\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0muse_multiprocessing\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1778\u001b[0m \u001b[0mshuffle\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mshuffle\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1779\u001b[0;31m initial_epoch=initial_epoch)\n\u001b[0m\u001b[1;32m 1780\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1781\u001b[0m def evaluate_generator(self,\n", "\u001b[0;32m~/anaconda3/envs/dl_nlp/lib/python3.5/site-packages/tensorflow/python/keras/engine/training_generator.py\u001b[0m in \u001b[0;36mfit_generator\u001b[0;34m(model, generator, steps_per_epoch, epochs, verbose, callbacks, validation_data, validation_steps, class_weight, max_queue_size, workers, use_multiprocessing, shuffle, initial_epoch)\u001b[0m\n\u001b[1;32m 202\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 203\u001b[0m outs = model.train_on_batch(\n\u001b[0;32m--> 204\u001b[0;31m x, y, sample_weight=sample_weight, class_weight=class_weight)\n\u001b[0m\u001b[1;32m 205\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 206\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mouts\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/anaconda3/envs/dl_nlp/lib/python3.5/site-packages/tensorflow/python/keras/engine/training.py\u001b[0m in \u001b[0;36mtrain_on_batch\u001b[0;34m(self, x, y, sample_weight, class_weight)\u001b[0m\n\u001b[1;32m 1550\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1551\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_make_train_function\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1552\u001b[0;31m \u001b[0moutputs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtrain_function\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mins\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1553\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1554\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0moutputs\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/anaconda3/envs/dl_nlp/lib/python3.5/site-packages/tensorflow/python/keras/backend.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, inputs)\u001b[0m\n\u001b[1;32m 2912\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_make_callable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfeed_arrays\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfeed_symbols\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msymbol_vals\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msession\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2913\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2914\u001b[0;31m \u001b[0mfetched\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_callable_fn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0marray_vals\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2915\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_call_fetch_callbacks\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfetched\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_fetches\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2916\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mfetched\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0moutputs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/anaconda3/envs/dl_nlp/lib/python3.5/site-packages/tensorflow/python/client/session.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1380\u001b[0m ret = tf_session.TF_SessionRunCallable(\n\u001b[1;32m 1381\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_session\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_session\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_handle\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstatus\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1382\u001b[0;31m run_metadata_ptr)\n\u001b[0m\u001b[1;32m 1383\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mrun_metadata\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1384\u001b[0m \u001b[0mproto_data\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtf_session\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTF_GetBuffer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrun_metadata_ptr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mKeyboardInterrupt\u001b[0m: " ] } ], "source": [ "from tensorflow.keras.callbacks import EarlyStopping, CSVLogger, ModelCheckpoint\n", "from tensorflow.keras.optimizers import *\n", "import gc \n", "train_data = CaptchaSequence(characters, batch_size=128, steps=1000,input_length=25, label_length=12,chars_len=(4, 6)) # (characters, batch_size=128, steps=1000)\n", "valid_data = CaptchaSequence(characters, batch_size=128, steps=10,input_length=25, label_length=12,chars_len=(4, 6)) # (characters, batch_size=128, steps=100)\n", "\n", "callbacks = [CSVLogger('ctc.csv', append=True), ModelCheckpoint('gru_arithmetic_ctc_best_20220617.h5', save_best_only=True)]\n", "# model.load_weights('gru_english4to6_ctc_best_5.h5') # 以前英文数字模型预测\n", "# model.load_weights('gru_english4to6_ctc_best_1014.h5') # lose:0.0203 val_loss:0.012\n", "# model.load_weights('gru_english4to6_ctc_best_1104.h5') # 1104 卷积核 3 5 ,1105卷积核3 1\n", "model.load_weights('gru_arithmetic_ctc_best_20220617.h5')\n", "# gru_DigitAndEnglist_ctc_best.h5 mobilenet_DigitAndEnglist_ctc_best0930\n", "# callbacks = [CSVLogger('ctc.csv', append=True), ModelCheckpoint('DigitAndEnglist_cnn5gru_ctc_best2.h5', save_best_only=True)]\n", "# model.load_weights('DigitAndEnglist_cnn5gru_ctc_best2.h5')\n", "model.compile(loss={'ctc': lambda y_true, y_pred: y_pred}, optimizer=Adam(1e-4, amsgrad=True))\n", "model.fit_generator(train_data, epochs=100, validation_data=valid_data, workers=4, use_multiprocessing=True,\n", " callbacks=callbacks)" ] }, { "cell_type": "code", "execution_count": 121, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.0" ] }, "execution_count": 121, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 准确率回调函数\n", "from tqdm import tqdm\n", "\n", "def evaluate(model, batch_size=128, steps=1):\n", " '''\n", " 准确率验证函数,每批次的验证码长度必须一致\n", " ''' \n", " batch_acc = 0\n", " valid_data = CaptchaSequence(characters, batch_size, steps)\n", " for i in range(len(valid_data)):\n", " [X_test, y_test, _, _], _ = valid_data[i]\n", " y_pred = base_model.predict(X_test)\n", " shape = y_pred.shape\n", " # out = K.get_value(K.ctc_decode(y_pred, input_length=np.ones(shape[0])*shape[1],)[0][0])[:, :4]\n", " out = K.get_value(K.ctc_decode(y_pred, input_length=np.ones(shape[0])*shape[1],)[0][0])[:, :]\n", " # print(y_test)\n", " # print(type(y_test))\n", " # print(y_test[y_test<10, axis=1])\n", " # print(out)\n", " if out.shape[1] >= 4:\n", " batch_acc += (y_test[:,:out.shape[1]] == out).all(axis=1).mean()\n", " return batch_acc / steps\n", "evaluate(base_model,batch_size=256, steps=10)" ] }, { "cell_type": "code", "execution_count": 133, "metadata": {}, "outputs": [], "source": [ "base_model.save('gru_arithmetic_base_model_20220620.h5') # 保存基础模型,预测用\n", "\n", "x= base_model.output # [batch_sizes, series_length, classes]\n", "input_length = Input(batch_shape=[None], dtype='int32')\n", "ctc_decode = K.ctc_decode(x, input_length=input_length * K.shape(x)[1])\n", "decode = K.function([base_model.input, input_length], [ctc_decode[0][0]])\n", "\n", "def decode_arith(arith = '2×?=12'):\n", " arith = arith.replace('×', '*')\n", " items = re.split('=', arith)\n", " if len(items)==2:\n", " if items[-1] in ['?', '']:\n", " return eval(items[0])\n", " l = re.split('-|\\+|\\*', items[0])\n", " signs = re.findall('-|\\+|\\*', items[0])\n", " if len(l)==2 and len(signs)==1:\n", " if l[1] == '?':\n", " if signs[0] == '+':\n", " return eval('%s-%s'%(items[-1], l[0]))\n", " elif signs[0] == '-':\n", " return eval('%s-%s'%(l[0],items[-1]))\n", " elif signs[0] == '*':\n", " return eval('%s/%s'%(items[-1], l[0])) \n", " elif l[0] == '?':\n", " if signs[0] == '+':\n", " return eval('%s-%s'%(items[-1], l[1]))\n", " elif signs[0] == '-':\n", " return eval('%s+%s'%(l[1],items[-1]))\n", " elif signs[0] == '*':\n", " return eval('%s/%s'%(items[-1], l[1])) \n", " return ''\n", "def decode_arith(arith = '2×?=12'):\n", " arith = arith.replace('×', '*')\n", " if re.search('^(\\d+|\\?)([\\+\\-\\*/](\\d+|\\?))+=(\\d+|\\?)?$', arith) and len(re.findall('\\?', arith))<=1:\n", " if arith[-1] == '?':\n", " answer = str(int(eval(arith[:-2])))\n", " elif arith[-1] == '=':\n", " answer = str(int(eval(arith[:-1]))) \n", " elif re.search('^(\\d+|\\?)[\\+\\-\\*/](\\d+|\\?)=\\d+$', arith):\n", " a,sign,b,_,quest = re.split('(\\+|\\-|\\*|×|/|=)', arith)\n", " if a=='?':\n", " if sign==\"+\":\n", " sign = '-'\n", " elif sign=='-':\n", " sign = '+'\n", " elif sign==\"*\":\n", " sign = '/'\n", " elif sign=='/':\n", " sign = '*'\n", " a, quest = quest, a\n", " elif b == '?':\n", " if sign==\"+\":\n", " sign = '-' \n", " b, quest = quest, b\n", " a, b = b, a \n", " elif sign=='-':\n", " b, quest = quest, b \n", " elif sign==\"*\":\n", " sign = '/'\n", " b, quest = quest, b\n", " a, b = b, a \n", " elif sign=='/':\n", " b, quest = quest, b \n", " else:\n", " print('公式出错:', arith)\n", " answer = str(int(eval('%s%s%s'%(a,sign,b)))) \n", " else:\n", " print('公式出错:', arith)\n", " \n", " else:\n", " answer = ''\n", " return answer" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "out ccntq\n" ] }, { "data": { "text/plain": [ "Text(0.5, 1.0, 'ccntq')" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "image/png": { "height": 163, "width": 370 }, "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "img = Image.open('FileInfo0508/31c1f481-912a-11ea-b24d-408d5cd36814_cmftq.jpg') # 波浪线验证码\n", "# img = Image.open('/data/captcha/shensebeijingsandian/pgv4_d58a8328-c425-11ea-be07-ecf4bbc56acd.jpg') # 深色背景验证码\n", "# img = Image.open('/data/captcha/0ad9.jpg').resize((200,70), Image.BILINEAR) #小图噪点 \n", "img = img.resize((width, height), Image.BILINEAR)\n", "def img2array(image, width=width,height=height):\n", " X = np.zeros((1, height, width, 3))\n", " image = image.convert('L')\n", " px = [image.getpixel((x,2)) for x in range(image.size[0])]\n", " c = Counter(px)\n", " m = c.most_common()\n", " bg = m[0][0]\n", " bg_img = Image.new(mode='L', size=(width,height), color=bg)\n", " bg_img.paste(image, box=(0, 0)) # \n", " X[0] = np.expand_dims(np.array(bg_img)/255.0, axis=-1)\n", " return X\n", "img_arr = img2array(img)\n", "\n", "out_pre = decode([img_arr, np.ones(img_arr.shape[0])])\n", "out = ''.join([characters[x] for x in out_pre[0][0]])\n", "plt.imshow(img)\n", "print('out', out)\n", "plt.title(out)" ] }, { "cell_type": "code", "execution_count": 117, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "pred:17+12=?\ttrue:17-12=?\n", "pred:5+5=?\ttrue:5×5=?\n", "2\n", "总耗时: 23.909424543380737\n", "正确数:998, 错误数:2, 总样本:1000, 准确率:0.9980\n" ] } ], "source": [ "import time\n", "data = CaptchaSequence(characters, batch_size=200, steps=5, input_length=25, chars_len=(6,6))\n", "# model.load_weights('gru_DigitAndEnglist_ctc_best_0927.h5') \n", "# model.load_weights('mobilenet_DigitAndEnglist_ctc_best0930.h5')\n", "# model.load_weights('mobilenet_DigitAndEnglist_ctc_best_32.h5')\n", "# model.load_weights('gru_english4to6_ctc_best_5.h5') \n", "pos = neg = 0\n", "t1 = time.time()\n", "err_img = []\n", "err_label = []\n", "for i in range(len(data)): \n", " flag = False\n", " [X_test, y_test, input_len, label_len], _ = data[i]\n", " for idx in range(len(X_test)):\n", " in_data = X_test[idx:idx+1]\n", " out_pre = decode([in_data, np.ones(in_data.shape[0])])\n", "# print(out_pre)\n", " out = ''.join([characters[x] for x in out_pre[0][0]]) \n", " \n", " y_true = ''.join([characters[x] for x in y_test[idx] if x < len(characters)])\n", "# print('out', out, y_true)\n", " if out != y_true:\n", " err_img.append(X_test[idx])\n", " err_label.append('pre: %s, lab: %s'%(out, y_true))\n", " print('pred:' + str(out) + '\\ttrue:' + str(y_true))\n", " neg += 1\n", " flag = True\n", " else:\n", " pos += 1 \n", "print(len(err_img))\n", "\n", "t2 = time.time()\n", "print('总耗时:',t2-t1)\n", "print('正确数:%d, 错误数:%d, 总样本:%d, 准确率:%.4f'%(pos,neg,pos+neg, pos/(pos+neg)))" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'pre: 51-1+5=?, lab: 5-1+5=?')" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "image/png": { "height": 153, "width": 370 }, "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "i = 3\n", "# plt.imshow(err_img[i].reshape((height, width)))\n", "plt.imshow(err_img[i])\n", "plt.title(err_label[i])\n", "# # idx = 8\n", "# # img_arr = X_test[idx:idx+1]\n", "# # out_pre = decode([img_arr, np.ones(img_arr.shape[0])])\n", "# # out = ''.join([characters[x] for x in out_pre[0][0]])\n", "# # y_true = ''.join([characters[x] for x in y_test[idx] if x < len(characters)])\n", "# # plt.imshow(img_arr.reshape((height, width)))\n", "# # print('out', out)\n", "# # plt.title(out)\n", "# # i = 9\n", "# # print(model.layers[i].name)\n", "# # model.layers[i].get_weights() # 打印某层权重\n", "# # height\n", "# # model.load_weights('gru_english4to6_ctc_best_1105.h5')\n", "# # model.load_weights('gru_arithmetic_ctc_best_1108.h5')\n", "# paths = glob.glob('/data/captcha/arithmetic/330_69/*.jpg') # 100_26 70_25 100_40 330_69\n", "\n", "# i = 12\n", "# img = Image.open(paths[i])\n", "# img2 = img.resize((width, height), Image.BILINEAR)\n", "# # img_arr = [np.array(img2)/255.0]\n", "# # out_pre = decode([img_arr, np.ones((1,))])\n", "# # out = ''.join([characters[x] for x in out_pre[0][0]])\n", "# # print('out', out)\n", "# plt.imshow(img)\n", "# plt.show()\n", "# plt.imshow(img2)\n", "# plt.show()" ] }, { "cell_type": "code", "execution_count": 132, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "预测错误 8 9 False\n", "正确数:838, 总数:839, 准确率:0.9988\n" ] } ], "source": [ "'''预测真实验证码,统计准确率'''\n", "import re\n", "pos = neg = 0\n", "n = 0\n", "model.load_weights('gru_arithmetic_ctc_best_20220617.h5')\n", "\n", "# path3 = '/data/captcha/arithmetic/100_40/*.jpg' #正确数:588, 总数:1505, 准确率:0.3907 正确数:1500, 总数:1505, 准确率:0.9967\n", "# path3 = '/data/captcha/arithmetic/100_26/*.jpg' # 正确数:1122, 总数:2822, 准确率:0.3976 正确数:2761, 总数:2822, 准确率:0.9784\n", "\n", "path3 = '/data/captcha/arithmetic/160_60/*.jpg'\n", "# path3 = '/data/captcha/arithmetic/146_46/*.jpg'\n", "with open('/data/captcha/arithmetic/160_60/answer.txt', 'r', encoding='utf-8') as f:\n", " lines = f.readlines()\n", "d = dict()\n", "for line in lines:\n", " f_n, q, a = line.strip().split('\\t') \n", " d[f_n] = a\n", "err_imgs = []\n", "err_labels = []\n", "files = glob.glob(path3)\n", "sp = int(len(files)*0.8)\n", "# sp = min(int(len(files)*0.8), 3000)\n", "for file in files[:]:\n", " name = file.split('/')[-1]\n", " if name not in d:\n", " print(name)\n", " continue\n", " try:\n", " img = Image.open(file)\n", " except:\n", " print('打开错误:',file)\n", " continue\n", "\n", "# label = file.split('_')[-1][:-4].lower() # 答案在文件名_分割的情况\n", " label = d[name] #答案在answer.txt 文件中的情况\n", "\n", " img = img.resize((width, height), Image.BILINEAR)\n", " \n", " X = np.zeros((1, height, width, 3))\n", " img = img.convert('RGB')\n", " X[0] = np.array(img)/255.0\n", " \n", " out_pre = decode([X, np.ones(X.shape[0])])\n", " out = ''.join([characters[x] for x in out_pre[0][0]])\n", " \n", " try:\n", " gs = out\n", " out = decode_arith(arith = out)\n", " out = str(int(out))\n", " except:\n", " print('计算错误:输出公式:',gs)\n", " \n", " if label == out:\n", " pos += 1\n", " else:\n", " neg += 1\n", " print('预测错误',label, out, label==out)\n", " err_imgs.append(img)\n", " err_labels.append('label:%s pred:%s pred_gs:%s'%(label,out,gs))\n", " n += 1\n", "# if n > 100:\n", "# break\n", "print('正确数:%d, 总数:%d, 准确率:%.4f'%(pos, pos+neg, pos/(pos+neg)))" ] }, { "cell_type": "code", "execution_count": 120, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "image/png": { "height": 153, "width": 370 }, "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import time\n", "for i in range(min(10, len(err_imgs))):\n", " plt.imshow(err_imgs[i])\n", " plt.title(err_labels[i])\n", " plt.show()\n", " time.sleep(0.5)\n", " if i > 10:\n", " break" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "decode_arith('0×?=60')" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" } }, "nbformat": 4, "nbformat_minor": 2 }