{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Barcode Extraction Pipeline" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# import the necessary packages\n", "import os\n", "import cv2\n", "import numpy as np\n", "from imutils import contours\n", "import matplotlib.pyplot as plt\n", "from skimage.feature import hog # HOG Feature Extractor\n", "from sklearn.neighbors import KNeighborsClassifier\n", "from sklearn.model_selection import train_test_split\n", "% matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Input image" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<matplotlib.figure.Figure at 0x7fdc5d1dbb70>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "img = cv2.imread('/path/to/image.jpg', cv2.IMREAD_GRAYSCALE)\n", "plt.axis('off')\n", "plt.imshow(img, cmap='gray')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We first need to remove the vertical bars present in the image and then using the findContours function we will extract the digits present in the image." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "def image_preprocessing(image):\n", " \n", " # input - grayscale image\n", " # removes vertical lines present in the image\n", " \n", " vertical = cv2.bitwise_not(image)\n", " # Specify size on vertical axis\n", " rows = vertical.shape[0]\n", " verticalsize = rows // 5\n", " # Create structure element for extracting vertical lines through morphology operations\n", " verticalStructure = cv2.getStructuringElement(cv2.MORPH_RECT, (1, verticalsize))\n", " # Apply morphology operations\n", " vertical = cv2.erode(vertical, verticalStructure)\n", " vertical = cv2.dilate(vertical, verticalStructure)\n", " \n", " final = cv2.bitwise_or(image, vertical)\n", " thresh = cv2.threshold(final, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]\n", " \n", " return thresh " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Image after processing" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<matplotlib.figure.Figure at 0x7fdc0b61e828>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "thresh_img = image_preprocessing(img)\n", "plt.axis('off')\n", "plt.imshow(thresh_img, cmap='gray')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "def extract_digit(image, contour):\n", " \n", " # input - thresholded image \n", " # - contours present in the image\n", " # returns a cropped image of the digit \n", " \n", " mask = np.zeros(image.shape,dtype=\"uint8\")\n", " (x,y,w,h) = cv2.boundingRect(contour)\n", " hull = cv2.convexHull(contour)\n", " cv2.drawContours(mask,[hull], -1,255,-1)\n", " mask = cv2.bitwise_and(image,image,mask=mask)\n", " digit = mask[y:y+h,x:x+w]\n", " digit = cv2.resize(digit,(40,64))\n", " \n", " return digit " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Extracted Digits" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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slu/fr3kO++8U/K8efOctPftt99KNmen84bfU2z17t07ZPZmIQWAhx9+GABQunRpZ/2YO3eu5JIlSwLIPiMruWH+TPv27Ss5iGP8unXrJJuzwMYSr2wRERERERE5wJMtIiIiIiIiBziM0MKFF14o2VskzYX77rvP2b6JiEybN28G4G7YV04KFiwo2ZvF7v777w+0D+SvnTt3Sv7uu+8km0PwKTWZQ5P3798PAHj00Udlmzlbod9uvfVWAMCHH34o244fP+6svVRmDhcMYujgihUrJLdr105yLGcgNPHKFhERERERkQM82SIiIiIiInKAwwgj4C2O171790DamzRpUiDtEBF5vvnmG8l///vfJY8cOdJJe3nynPqb39VXXw3A3WKnFIxVq1ZJNhe3/fzzz5209+CDD0oeMmSIkzbIf4MHDwYA7N27V7aZMxf6vSD2qFGjAACffPKJbDtw4ICvbaSy6tWrSz7//POdt7dw4ULJDzzwgOQlS5Y4bztSvLJFRERERETkAK9sRcC7cbNevXrO2rjhhhuc7ZuIKDfeTesAkJmZGcOeEIXnlVdekcwrW4ln+PDhkvfs2SO5f//+kqtVq+Zbe88884xk70raiRMnfNt/qrngggsAZJ/85O6773bWnjfpTrdu3WTb4sWLnbXnB17ZIiIiIiIicoAnW0RERERERA5wGGEu6tevL/nll1923t63337rvA0ionB89dVXkq+77jrJPE5RuJYtWyb53XffldyxY8dYdIfinLkGVpcuXST7OYywV69ekp988knf9ptKLr74Ysne8ME2bdo4a2/mzJmSe/bsCSA+J8LICa9sEREREREROcCTLSIiIiIiIgc4jDAX5novNWvWdNLGVVddJfn48eNO2iAiIgrahg0bJM+ePVsyhxESJZZLL71Ucp8+fSTffvvtztt+5513JCfS8EFP2Fe2lFJ5lVKLlFJTs/6/hlJqnlLqV6XUv5VSBdx1kxIV64ZssG7IBuuGbLF2yAbrhsIRyTDC7gBWGP8/CMAQrfX5AP4AwD9TUSisG7LBuiEbrBuyxdohG6wbylVYwwiVUpUB/D8A/QH8n1JKAbgRgLdq2SgAzwEYHnIHCaZ27dqSJ06c6Ly9NWvWOG8jFlKtbsgfrBuywbohW6yd+NS5c2fJH3/8seRLLrnEtzbmzZsHALj33nsj/t5UqBtzRu4BAwZIvvnmm523/dFHH0leunSp8/ZcCvfK1lAA/wLgLbFdGsAurfWxrP/PBFDJ575R4mPdkA3WDdlg3ZAt1g7ZYN1QWHI92VJK3QJgq9Z6obk5xEN1Dt/fWSmVoZTKsOwjJSA/62bbtm1O+kjxh8cbssHjDdniMYdssG4oEuEMI7wGwK1KqVYACgIohpNn8yWUUvmyzuArA9gY6pu11ukA0gFAKRWy6OJNvnynXpYyZco4aeOKK66QnKRv7r7VTVpaWkLUDfki5Y435Aseb8gWjzlxauXKlZIPHDjgpI0GDRoAAAoXLhzptyZt3Xh/HG6AAAAgAElEQVSvCQAMHjxY8o033ui87Q8++EByv379JP/yyy/O23Yp1ytbWusntNaVtdbVAbQF8LXW+m8AZgG4K+thHQBMdtZLSjisG7LBuiEbrBuyxdohG6wbikQ062z1AjBeKdUPwCIA7/rTpdgoV66c5OXLlztp4/rrr5eckZGyV44jrptFixahSJEiAID9+/e77R3Fq6Q63lBgWDdki7VDNhK2btLS0gAAw4YNk21XX32183bfe+89yf3795ecTJPHRXSypbWeDWB2Vl4D4Er/u0TJhnVDNlg3ZIN1Q7ZYO2SDdUO5iWSdLSIiIiIiIgpTNMMIk0qhQoUk58nj7zno4cOHAQDHjh3L5ZEUitbayWtXsGBByebNsa5uxI1HWru5L3f79u0AWPOUeI4dO4YdO3YAAEqXLh3j3hARueMNHQSA9PR0AMDll18eSNtvv/02gOzrd61fvz6QtoPGK1tEREREREQO8GSLiIiIiIjIgZQeRpg3b17Ja9euddZO27ZtAQDff/+9szYocg888IBkc62z3r17x6I7gSlfvrxkV8OkKlWqBAA4evSok/0TubJ06VJUqVIFgL9DiitXriz53HPPlbx3717f2iAiyo05dNBc16pOnTrO23799dclezMPbt682Xm7scYrW0RERERERA7wZIuIiIiIiMiBlB5GWKNGDWf7NoelcSFeiifdu3eXfPfdd8ewJ0TxRykFpZTv+x04cKDkJUuWSJ42bZrvbRERmRo0aCD5008/lVy1alXnbb/66quS+/TpI3nnzp3O244XvLJFRERERETkAE+2iIiIiIiIHEjpYYS//vqrs30/8cQTkmfOnOmsHSIi8o/W2tli30REQalfv77kGTNmSC5VqpTztocMGSL5mWeekbxv3z7nbccjXtkiIiIiIiJyICWvbF155ZVO9rtu3TrJW7ZscdJGKtJa4/jx4wCyr9HQtWvXWHWJiIjCUL16dcmtWrWKXUco4XhrlAJAhQoVYtiTxHLppZcCAObNmyfbChQo4LzdV155RXKvXr0kHzt2zHnb8Y5XtoiIiIiIiBzgyRYREREREZEDKTmMcPr06U72++abb0qeOnWqkzZSlTeM8LnnnpNtfg4jvPHGGyXfcMMNkmfNmuVbG7FkPifzufrp2Weflez9vDjRQGJLS0uTnJ6e7qSNQ4cOSb7++usBACtWrHDSVji01jh69CgAoF+/frL9qaee8q2Njh07Sl6+fLnk9evX+9ZGvLjoooskt2vXzkkbvXv3drJfiq2HHnpIsqv1oP71r38BADIzM53s3yVzPcDLLrtM8qJFi5y37b3HA6cmw+jZs6fzdhMVr2wRERERERE5wJMtIiIiIiIiB1JmGGGLFi0k58vn39P+5ZdfQmZKLA0bNpTcqFEjyckyjNB8TuZz9dMbb7wh2RxiQImrePHiks3hYH46ceKE5Pnz5ztpI1Le7Fnm0Ek/hxHeeeedkgcPHiw5GYcRBmHo0KGx7gIlKG8GvUR5z8qbN6/kK664QvKcOXOct33w4EHJr776quTHH3/ceduJLqyzDqXUWgB7ARwHcExrnaaUKgXg3wCqA1gL4C9a6z/cdJMSEeuGbLBuyBZrh2ywbsgG64bCFckwwhu01vW11t4d048D+EprfT6Ar7L+n+h0rBuywbohW6wdssG6IRusG8pVNOPpbgPQJCuPAjAbQK+cHhwLN998s+SRI0dKLlq0qG9tTJo0KWSmHMV93VBcYt0EpHnz5pKT5JgW17VjLtR+++23S964cWMsuuOLOnXqSB4wYIDz9sxZ2XwU13WTrMxhtfXq1YthT6z5Xjfm0MHrrrtOchC3OezevVvya6+9Jvnpp5923nYyCffKlgYwQym1UCnVOWtbea31JgDI+reciw5SQmPdkA3WDdli7ZAN1g3ZYN1QWMK9snWN1nqjUqocgJlKqZXhNpBVgJ1zfSAlI9YN2WDdkC2r2mHdpDwec8gG64bCEtbJltZ6Y9a/W5VSEwFcCWCLUqqi1nqTUqoigK05fG86gHQAUEoFusKpuQBuuXL+/XHBXHAziBlgEpWLutm1a5c8pmXLlgD8X6S6e/fukteuXSt53LhxvrbjmrmAqPmc/Ob9HMyfTTT8qpu0tDSdkZEBAChRooQ8xhwWQafkyXNyoEPBggVlW+HChZ236y0g7Afb2snpeLN582Z5zF133QUA+OSTT3zrL5B9RrFChQr5uu9YKVasmOT69es7aaNZs2aSzYWxbfh1zLn44ov1v//97zP6ZP6M6Uxvvvmm5HvvvVeyn7d8mMyfhzkbaqRcfzb2hg+as2l//vnn1v0N144dOySbQwf79OnjvO1kleswQqVUEaXUuV4G0ALAMgBTAHTIelgHAJNddZISD+uGbLBuyBZrh2ywbsgG64YiEc6VrfIAJmbdgJoPwFit9RdKqQUAPlJKdQSwHkAbd90Mn/fXRwCoWLGikza+//57yUlyA7kLTurGXAvD1bpm5cuXl1y6dGknbQTB7Lv5nPzm/Rx8WqfESd2YV9289aL27Nkj27Zs2SI5UdZb8YN5JaVt27YAgPfeey+Qtr2fScmSJf3ape+1Y151W716tV/9zNGCBQsk16hRA0DiXImtXr26ZL9HG4Ty888/S47m6gR8rJtChQrhkksuAQBofepixbZt2wAA27dvl22u1q1LRNWqVZPs6mqWafny5ZLNn1OEnLxXmZNheBPm+H01PSdbt568CGeuWzdw4MBA2k52uZ5saa3XALgsxPYdAJq66BQlPtYN2WDdkC3WDtlg3ZAN1g1FIpJ1toiIiIiIiChM0ayzFZfuu+8+yVWqVPF13ytXnpxoZvJkDsGNB97kFeZaHD/++KOvbZg3h+7fvx9A9jXbohiC4CtznZm///3vALL33W/mULt4eQ3CZU5w4zFvQDaHFJp+/fVXAMDBgwfddCwg5rC9jh07Sn7xxRedt33s2DHJy5Ytc96enxYvXgwg+8QMX375pa9tmD8bb5hl/vz5ZZv5+sWbAgUKSDYnpPHb5ZdfDgDIzMx01oYfzGNymTJlsv0LZD9umkNUzTXKvMck+tBmc2ic+bp4w+NatWoVSD+83694PIZ7r8vf/vY32TZq1CgnbZnvceZaXd6EUi+//LKTdlMZr2wRERERERE5wJMtIiIiIiIiB5JiGKG5npDLGX68YYSfffaZszYocubQGm82HcDftdWAU7O0mcN6Ro8eLTnatV4iZa6H1L59e8lvv/2287bNtXPWrVvnvD3XZsyYketjOnc+uf7kqlWrQn7dG2YGAH/88Yc/HYtCpUqVJF9wwQWSmzdvLvmJJ55w3o/Dhw9L/s9//iP5zjvvdN62C+bzMdejcTVzqXlcMYfGb9q0yUl74ahcubJkb00tc4Y3v3mz+QH+rssWL2rVqiXZfH7eUNubb7455PeZtWi+RrFiDh81ZxUcNmyY5DvuuCPQPm3cuFFylLNWOlO2bFmZSdtcc8xP5vFi8ODBks2ZB8kdXtkiIiIiIiJygCdbREREREREDiTFMEJzJhtvIUi/eDOQAcDw4cN93Tf5wxveCQC33Xab5Dlz5jhpzxymZ87ANXfuXMnmkJpoZz4yF569+OKLJTdq1Eiyy5kHPebrHPSQyXiQnp5+1q/37dtXcm4z7c2bN0+y7TDMunXrSvYWUjWZwwUfeOABqzb8YA7tTdShg6bvvvtOsjmEfcSIEZLNRVqjZc7kZtZVy5YtJe/bt0+y+XsaLfN4Yx6HzGOd2T8/mTP0eQtuA26HK8Yb7/d6w4YNIb9uLoL90EMPnXVf5oLK3ky+kTKHJlesWPGMr/fq1UuyNywu1rzZK4HsC9nHk6pVqzoZPmgOoXz++eclB3GrAWXHK1tEREREREQO8GSLiIiIiIjIgYQeRnjvvfcCAK655hpnbWzevFlyODOWUWx5C4EC2YdqNWzY0El7OQ3f69q1q+RoZ+szhyS9/vrrUe0rUuZr6C2WDOQ8I18qe/rpp8N+rLlYpfkaR8Kcoax169ZW+3Bl9+7dkj/44IMY9sStmTNnSh40aJBkVzOKlSpVSrI5hMwcXujnDJPm8zBnQgxC7969JXuLrVJ2V1xxhWSzHkIxF6995ZVXrNozF9w1h3bGm6+++krykSNHYtiT+FG9enXJAwcOjF1Hkky4n8l4ZYuIiIiIiMgBpbUOrjGlfG1syJAhAIAePXr4udtsN6OaN0D/73//87WdRKO1VrFo17ZuzJu7zXU+mjZtGn2nkpj5V8Hu3btLtr0xPVZ1k5aWpvkX8eCY6/wMGDBAsu06Lol2vGnSpInkl156SXKDBg2i7lOqMCcfefTRRyVH+Hu8UGud5l+vwsdjTux89NFHkh988EHJkax5yPcqilRaWhoyMjJyrRte2SIiIiIiInKAJ1tEREREREQOJNwEGffcc49kV2u27N27V3KqDx1MZOawN3M4nHdzaLxNKhAvzPXkUmlNG7KTmZkJIPvEDGPGjIlVd2Jm9uzZkh977DHJ3sQZV155ZdBdimvz588HkH3iqc8++0wyh1VRbt566y3JTz75pORIhg4SBYFXtoiIiIiIiBzgyRYREREREZEDCTeM0FwrwM91P3bu3Cn5r3/9q2/7pfhgDof717/+BQA4dOiQbGvTpk3gfYoHH3/8seRvvvkGALB48eJYdYcSxOrVqyV369YNADBt2rRYdSfumEMK//nPfwIA6tevL9v+8Y9/SK5bt25g/Yo1cy0o73UxZyBMdBs2bMAjjzwCAHj11Vdj3JvkYs7w6a1d+eGHH8o2Dh2keBbWlS2lVAml1CdKqZVKqRVKqauUUqWUUjOVUr9m/VvSdWcpsbBuyAbrhmyxdsgG64ZssG4oXOEOIxwG4AutdR0AlwFYAeBxAF9prc8H8FXW/xOZWDdkg3VDtlg7ZIN1QzZYNxSWXBc1VkoVA7AEQE1tPFgp9TOAJlrrTUqpigBma60vzGVfVotFtm3bVrK5OG25cuVsdhfS1q1bJZcvX963/SaTSBb8i4e6yU3t2rUl9+nTR/Ldd9/torm4MXbsWMnPPvus5FWrVjlpL1Z1U7x4cd2oUSMAwJQpU2T7OeecE9kTSGGLFi2S/Pjjpz4z7N69W/K8efOctB3pAqN+1Y6r443p2muvlfzee+9JPv/88103HTizhjp37izZ4WyDES1q7Pd7lVIny9acLblw4cIAgFGjRkXwNOjpp5+W/Oabb0o2b/vwU6zeq7ioceLyc1HjmgC2AXhfKbVIKfWOUqoIgPJa600AkPVvyDMfpVRnpVSGUoqVlFpYN2TDt7o5cuRIcL2meGBdOzzepDS+V5EN3+pm27ZtwfWaYiKck618AP4EYLjW+nIA+xHBZVGtdbrWOi2SvzRRUmDdkA3f6qZAgQKu+kjxybp2eLxJaXyvIhu+1U3ZsmVd9ZHiRDizEWYCyNRae2NFPsHJgtqilKpoXCrdmuMeolSy5Kn7C/0cOnj8+HHJf/rTn3zbLwGIg7rJjTlsrlevXpLNRX179Ogh2dUi2q58+umnkocOHSp57dq1kr0FaeOIb3WzZ88eWTDVG04IAHnynPk3ps8//1xyqg4j9mbQ82aJA06+hh5Xw0x9FPfHHI85A585E+q5554r2ZvdsWjRosF1LArmsaRdu3aSzVni4nSRdF/rxhtR9sknn8i2fPlOftRas2ZNyO+pVKmS5PHjx0fa/4TXs2dPyXPnzpW8dOlSyeaxKE4kzPGGYi/XK1ta680ANiilvDGnTQH8BGAKgA5Z2zoAmOykh5SQWDdkg3VDtlg7ZIN1QzZYNxSJXCfIAAClVH0A7wAoAGANgPtw8kTtIwBVAawH0EZrfda7FiO58fj222+X/MEHH0j286985pUt7y9PlDOLG9YDrxu/mZf3ixcvDgB4/fXXZVvLli0D71Mo06dPl9y1a1cA2ScxiOWY8ESoG/Mvy3nz5j3rYydPPvXeaa6dlCgmTJgg+dFHH5V88OBBALGtFVOkdQP4UzuxPN6YatasCQDInz+/bFu5cmWsupNNnTp1JHvvo0ePHpVt3jpIMRLRBBlA7N+rzJ9xtWrVzvrYtLRTT23cuHE2zQXusccek2wePz0bN26UfODAgUD6FEqs3qs4QUbiCneCjLDOMLTWiwGEOng1jbRjlDpYN2SDdUO2WDtkg3VDNlg3FK5w19kiIiIiIiKiCMTt2DlzJjFXNwh7a18Q5cQcUuVlc4ir7fDTHTt2hNxeunRpq/0dO3ZM8qFDh6z2kcp+//33sB971VVXSQ412UY0zIlMOnXqBAB46qmnZNuQIUOibsOsFU6PH79CTaZgTqARCXOin759+0p+6KGHJJvD9XOzb98+q35QaOYQzNwmovntt98kT5061dd+ePUwaNAg2Wbmfv36We3XfE8yjz9EqYJXtoiIiIiIiBzgyRYREREREZEDYc1G6FtjSm3DyYXftgfWaPDKIDmfXzWtdUxW3mPdJLRY1806JO9rCyTvc2PduJXMzy3WtcP3qsTEunErpesm0JMtAFBKZSTzSuvJ/vxiJdlf12R/frGUzK9tMj+3WEvm1zaZn1usJftrm+zPL1aS/XVN9ueXGw4jJCIiIiIicoAnW0RERERERA7E4mQrPQZtBinZn1+sJPvrmuzPL5aS+bVN5ucWa8n82ibzc4u1ZH9tk/35xUqyv67J/vzOKvB7toiIiIiIiFIBhxESERERERE5wJMtIiIiIiIiBwI92VJK3aSU+lkptUop9XiQbftNKVVFKTVLKbVCKbVcKdU9a3sppdRMpdSvWf+WjHVfEx3rhmwkU90ArJ2gsG7IVjLVDusmOKyb5BfYPVtKqbwAfgHQHEAmgAUA2mmtfwqkAz5TSlUEUFFr/YNS6lwACwHcDuDvAHZqrV/I+qUpqbXuFcOuJjTWDdlItroBWDtBYN2wbmwlW+2wboLBukkNQV7ZuhLAKq31Gq31EQDjAdwWYPu+0lpv0lr/kJX3AlgBoBJOPqdRWQ8bhZNFRvZYN2QjqeoGYO0EhHVDtpKqdlg3gWHdpIAgT7YqAdhg/H9m1raEp5SqDuByAPMAlNdabwJOFh2AcrHrWVJg3ZCNpK0bgLXjEOuGbCVt7bBunGLdpIAgT7ZUiG0JP++8UqoogE8B9NBa74l1f5IQ64ZsJGXdAKwdx1g3ZCspa4d14xzrJgUEebKVCaCK8f+VAWwMsH3fKaXy42Qxfai1npC1eUvWmFVv7OrWWPUvSbBuyEbS1Q3A2gkA64ZsJV3tsG4CwbpJAUGebC0AcL5SqoZSqgCAtgCmBNi+r5RSCsC7AFZorV8xvjQFQIes3AHA5KD7lmRYN2QjqeoGYO0EhHVDtpKqdlg3gWHdpIDAZiMEAKVUKwBDAeQF8J7Wun9gjftMKXUtgG8B/AjgRNbm3jg5NvUjAFUBrAfQRmu9MyadTBKsG7KRTHUDsHaCwrohW8lUO6yb4LBukl+gJ1tERERERESpItBFjYmIiIiIiFIFT7aIiIiIiIgc4MkWERERERGRAzzZIiIiIiIicoAnW0RERERERA7wZIuIiIiIiMgBnmwRERERERE5wJMtIiIiIiIiB3iyRURERERE5ABPtoiIiIiIiBzgyRYREREREZEDPNkiIiIiIiJygCdbREREREREDvBki4iIiIiIyIGoTraUUjcppX5WSq1SSj3uV6coubFuyBZrh2ywbsgG64ZssG7odEprbfeNSuUF8AuA5gAyASwA0E5r/ZN/3aNkw7ohW6wdssG6IRusG7LBuqFQ8kXxvVcCWKW1XgMASqnxAG4DkGNBKaXszux8ppTK9u/pLrjgAslFihRx0of9+/dL/uWXX0I+xjsRtj0h9pvWOvQLFpmErZs8ec68EFyuXDnJlSpVCrI72axdu1byH3/8ccbXT5w4EWBvsvOpboAIayenuqlfvz4AIG/evD51i/y2du1abN++Pa7qJmi5vU8VLFhQ8kUXXeSkDytWrJB86NChkI+Jt/cpANu11mV92E/CvlfFG7OGL7/88pDbbSxcuDCq7z9dMn/GCfX55XTFixcHANSsWdN1d8Kybt06yTt37jzrY+P9M040J1uVAGww/j8TQMPTH6SU6gygcxTt+K5AgQIAgPz584f8+siRIyU3bHjGU/LFvHnzJDdr1izkY44ePQoAOHz4sJM+xEhC1Y15gCpcuPAZX7/vvvskDxgwIJA+hXL//fdL/vjjj8/4unlyH0cfiiKVa+2EUzezZs0CAJQoUcLn7pFf0tLS/NydL3UTNO9kKqcPpHXq1JGckZHhpA8NGjSQvHLlypCP8Y4nBw8edNIHC+tyf0hYEuq9Kp7ly3fqo+acOXMke5/FbEV7suZI3NSN+QfFQoUK5fr4li1bAgDGjRvnrE+R6NSpk+Tx48ef9bHm8ef48ePO+mQrmpOtUFV+xqc4rXU6gHQg+L/6lC5dWnLJkiUlDxo0CABwxx13BNmdbMyTuL1794Z8zIQJEwAAvXr1km3mVYsdO3Y46p1TcV83tWvXllyjRg3JM2bMCLIbEXnvvfdCZo93NQfIXm9r1qxx2zF/5Vo7sawbiltxXTcVKlSQbH74/PHHHwEAxYoVC7I72YRz5WDPnj0AgHr16sm2I0eOSN68ebP/HQtG3L9XxbOiRYtKNv+4HO0JVgIIrG7MCwbVqlU74+vm76T3eTKRjBgxImQOpX379pLNE/rMzEzJOV2dD0I0E2RkAqhi/H9lABuj6w6lANYN2WLtkA3WDdlg3ZAN1g2dIZqTrQUAzldK1VBKFQDQFsAUf7pFSYx1Q7ZYO2SDdUM2WDdkg3VDZ7AeRqi1PqaU6gpgOoC8AN7TWi/3rWcRqFixouRatWpJ7tz51HDYe++9N9A++cEb5mgOd/zggw8kp6enS169erXkTZs2BdA7O/FUN+b9COZ45m+//TYW3XFq8eLFkg8cOCC5cePGkv2+2dhv8VQ7lDjisW7M96lJkyZJvuSSS2LRnah4wxzNm9mXLVsm+fbbb5dsvk/Fu3ism3hn3gc7duxYyXXr1o1Fd2LCz7rx7nVr1KhRyK+bk3Lldk9Tshs9enTI7eZ5gFeT5j3sQYnmni1orT8H8LlPfaEUwbohW6wdssG6IRusG7LBuqHTWa+zZdWYzzePejcEPv3007KtY8eOfjaRMN59913Jffv2BZD9L41+8HEK74j4XTfXX389gOx/eTvvvPP8bCJhbNx4aih59+7dAQDr16+XbfPnz4+6jXirG2+SGc5GGL/S0tKQkZERV3Vj68ILLwSQ/QZ27xgNAFdeeaWfzcUd8xhivj+bV798tlBr7et0luFK1QkyvGPp4MGDZZs5k5wrfs9GGA/vVeYMgn/7298AAKNGjQq+U0moZ8+eALIvlfPFF19I3rdvn9V+w6mbaO7ZIiIiIiIiohzwZIuIiIiIiMiBhBtGaN5Y/NxzzwEA7rnnnmh3m1TGjBkD4NTrA/hzY3I8XGK31aJFC8mvv/46AOD888+PdrdJyVwgtUePHpL/97//We0v3uqGwwjjX6IPIzQnunjxxRcBADfddFO0u0143333neQ333wTwKn1xADfhhZyGGEAzHW0vOFZzzzzTKB9SMZhhIULF5btsZjIIdX06dNH8ksvvSQ5kiGFHEZIREREREQUIzzZIiIiIiIiciAhhhHWrl1b8sCBAyXfdddd0XcqiX3yySeSn3jiCcmrVq2y2l88XGKPhDlsxxvKA8RuLZuhQ4dK3rFjR8jHlC5dWrI5hC9W5s6dK/mxxx6THMmQwnirGw4jjH+JOIzQPK6Y71O33HJL9J1KYlOnTpVsvk9FMaSQwwgdyZ8/v+QuXbpIfu2112LRnaQcRmiu+WmuiUnuvfrqq5J79+4tObfhnBxGSEREREREFCM82SIiIiIiInIgX6w7EI6aNWtKjoehg+bwrpwuLxYpUkSyOXwsSOZrZc4c1LVrV8l+zFIYT8xZB80FFoMYOvjRRx9Jnjlz5hlf//jjjyXv3r075D6KFy8uefny5Wdtr02bNpLN5+2nRo0ahcy2MxMSJRPzuDJo0CDJrVq1ikV3AAArV64EAIwbNy6i72vXrh0AoE6dOr736WzMYZaff/65ZIeLHpOlv/zlL5JjNXSQyJVHHnlEcv/+/SX7MSskr2wRERERERE5wJMtIiIiIiIiB+J2GKE5lOH5558PtG1vgT7g1JAM04wZMyQfOXIk5D4KFCggOdRQPfP5mTPluWLOzFe2bFnJyTaMsF69eiGzn/773/9KNhfB++mnnySvWbPGat/m8MJ33nnnrI/9/vvvJXsLhALA9ddfb9V2bu6//37J5sLH5utBJ3kLZwPZ64LCs379+lh3ISx169aVHMTQwb1790ru1atXyMesXbsWADBt2rSI9r1gwQIAQPXq1WWbuUhthQoVItqfjbZt20qeN2+e5B9++MF525S7MWPGxLoL5JA3+7A5hC5o3bp1k+zq9ohwmLX+5z//GUB0wwl5ZYuIiIiIiMiBuFpny1xP67PPPpMcxA275tn0yJEjJe/bt89Je+aEFebzu/HGGyWbN1z7ybxa17p1a8m5rb8VD2tQhNKyZUvJI0aMkFylShVf+7Fw4UIA2W8Str2C5TdzEplSpUoByL7OWrVq1Xxtz3ze3uvhvT6ni7e6CWKdLfMqR6RXGOikeKsbjzkpRnp6uuSrrrrKSX/++te/Sj506JDkKVOmOGnPZI6IKFasmGRz8o08edz8zXbOnDmSO3fuLDmMiTO4zpaP2rdvL3nUqFEx7MmZuM5W+BYvXiy5U6dOIR+za9cuAPZrsfrBvLJepkwZyQMGDJDcvHnzILuEkiVLAjj1+pyO62wRERERERHFCE+2iIiIiIiIHIirCTIKFiwoOYihg126dJE8evRoyeZQDVfM4YnmZAPm2kpHjx4FALzyyiu+toWdhdkAACAASURBVG2+tuZrnmi8dZ/Gjh0r27whdH4xh8vdfPPNAIBt27b52oYfzH56+fDhw87aM4ctnnvuuc7aIYoXtWrVAgB88MEHsq1+/frO2rv11lsBZB9SH7Qvvvgi5HbzGPj11187adscllm+fHnJXH/LPXOikjfeeCOGPUk9fgyN9H5HvM8sQPbPA/H4GcbjTfBzejZr0vvMZ95C4pL3udy81engwYMR7YNXtoiIiIiIiBzI9WRLKfWeUmqrUmqZsa2UUmqmUurXrH9Luu0mJSLWDtlg3ZAN1g3ZYN2QDdYNRSLX2QiVUo0B7AMwWmt9Sda2wQB2aq1fUEo9DqCk1jr0oh/Z9xWyMW+mNHPNp7x584b5FCLnrRdkzjoY5KyM4erQoQOA7P302/HjxyV7w2TWrVsX8rGRztTjV+3kVDdNmjQBAMyaNSuSbuXKXMvGm4UGyP5aJQLzd8ibgQ/wf9jfDTfcAACYPXt2yK/HW91wNsLEEG914w0ZXLRoUSTdisgtt9wi2RvCF+/HnWuuuQYA8N133zlrwxwm7f1u/fzzzzk9PKLZCIP4jJMovKGr5jqBfs/q66dYzkboqm4imY3Q/Mxs3h7ifZ6N92OHLe+zzdSpU2WbOXOqK4ULF5ZsDiP0ZTZCrfU3AHaetvk2AN4coKMA3B5GPynFsHbIBuuGbLBuyAbrhmywbigSthNklNdabwIArfUmpVS5nB6olOoMoHNOX6eUE1btsG7oNKwbssG6IRv8jEM2WDcUkvPZCLXW6QDSgZwvsXuXgl0OHTQXLX7//fedteMnbwHB/Pnzy7YhQ4ZINhdGtmW+5t6QufXr18u2WA2vzKluzP4WL17cSds7duyQnMiX4c2+mwuS+v0z9YZxXnjhhbLtl19+8bWNcIVzvCE6XU51c95558ljZsyY4bwf5oLziXLs8RYfNmcPNBck9oM5+6k5zCoeJPoxxxsGDgD9+/cH4M/QQXPWTnMR2goVKkS972QQTt1s3749278AcNFFFwXQu/jmHRvN2Ra//PJLyU2bNg28T7mxnY1wi1KqIgBk/bvVvy5RkmPtkA3WDdlg3ZAN1g3ZYN1QSLYnW1MAdMjKHQBM9qc7lAJYO2SDdUM2WDdkg3VDNlg3FFKuwwiVUuMANAFQRimVCeBZAC8A+Egp1RHAegBtIm3YHA52wQUXRPrtYdmyZYtkc2hYonnnnXckly1bVvKAAQN8bcebZatMmTKyLZrXzUXteDMmAsCkSZOs+3Y2NWrUcLJfCo+rYw4lNxd1kyfPqb9HmsdeP1177bWSzVn3EsWJEycABLdQ6vz58wFkH1qYmZlpvb9UPN6Yi3GbnyMuueSSqPY7efKpc4vnnnsuZHvJMozQVd2Ys9y5OuaQnYsvvljywoULAYR/W0auJ1ta63Y5fCn+BkVSXGHtkA3WDdlg3ZAN1g3ZYN1QJJxPkJETc42b6dOnO2lj2LBhkseNG+ekDSIiSh558uRBwYIFAQAbNmxw0oa5fs6hQ4ckx+N6j+Ey1/xp2LCh5Hnz5vnajjdhlN9rLCW7ypUrSx46dKjkRo0aRb3vb7/9FgDw1FNPybZEvEpLdDYLFiyQnC/fydOncCcysr1ni4iIiIiIiM6CJ1tEREREREQOxGwYIdlZvny55GXLlkmO9sZWIiIKxl133SXZu9E6mRw+fFjy5s2bJfs5OULVqlUlmxNkJPJQTL95Q50AYOTIkZKvv/76qPf9888/S3700UcBZP9MQhQkc52tevXqSS5XLsd1pQPFK1tEREREREQO8GSLiIiIiIjIgcCHEXrraz388MNO9m/OfDR37lwnbcTSlClTJJuzCPk5jND82fTv3x9A+DOuEBFRaluyZInk+++/X/Lnn3/uWxvfffed5CJFikg2Z3pMdeY6cU2bRj8j+Z49eyS3b99ecjIOhaXE8sILL0hu1aqVZA4jJCIiIiIiSmI82SIiIiIiInIg0GGESikZRtinTx8nbXz99deSZ82a5aSNZGf+bLxLsydOnIhVd4iIAlOsWDE0adLE9/2aQ+u2bdvm+/6JTjd79mxf93f06FHJ8+fP93XfRNHo0qWL5Bo1ajhpo3fv3pIj/UzMK1tEREREREQO8GSLiIiIiIjIAS5qTERElKVWrVqYOHGi7/t96aWXJGdkZPi+fyLPtGnTAABXXXWVr/tt3Lixr/sj8kubNm0kV65c2UkbQ4cOlRzp4um8skVEREREROQAr2wRncZcy+zWW2+NYU+IiBLbb7/9Jtm74gIAN998s29tdOvWTfKgQYN8228iGTlypORmzZr5tt8GDRpI/umnn3zbL1GiUUpZfy+vbBERERERETnAky0iIiIiIiIHOIwwgQ0bNkxytWrVJN99992x6E7ScLHGTjK7//77AQDr1q2LcU+IKN6sXLlS8tixYyX7OYzQWw8SSK1hhAMGDJDcrl07yfnyRffRrlWrVpIXL14c1b6IkkWkk2KYcr2ypZSqopSapZRaoZRarpTqnrW9lFJqplLq16x/S1r3gpIO64ZssG7IFmuHbLBuyAbrhiIRzjDCYwD+qbW+CEAjAA8rpeoCeBzAV1rr8wF8lfX/RB7WDdlg3ZAt1g7ZYN2QDdYNhS3Xa81a600ANmXlvUqpFQAqAbgNQJOsh40CMBtALye9zMU777wjuV+/frHoQkxs2bJF8o4dO5y08fvvvwOIfHYjV3WzevVqybfffjsAYNKkSRH1LTdFixaVPHfuXMmNGjXytZ1k4c02dvjw4aj3lQjHG4pPrB2ykWh18+CDD0ru2bOn5GiHDgJAly5dAADTp0+XbSdOnIh6v8ko0eomGY0bN06yyzXgatWqBQA4dOiQ9T4imiBDKVUdwOUA5gEon1VsXtGVs+4FJTXWDdlg3ZAt1g7ZYN2QDdYN5SbsP4UopYoC+BRAD631nnDnm1dKdQbQ2a57lOhYN2SDdUO2bGrHrJuqVau67SDFJR5zyAbrhsIR1smWUio/ThbTh1rrCVmbtyilKmqtNymlKgLYGup7tdbpANIBIC0tTWdkZPjQ7ezMS3sHDhzwff+JIJrF1s6mTJkyAOyGKPhVN0opmQLm+PHj8phdu3adsS1v3rwR9zNEvyU3bNhQ8uzZswEATZs2lW1m2/Fsz549vu7PfN7RzNATiou6odRgWzunv08F1mGKC/F+zGnRooXk4cOHR70/85g9cOBAyenp6VHvO5XEe90kK+9zXokSJWRb/vz5fW3j2LFjknfu3AnA/WyECsC7AFZorV8xvjQFQIes3AHAZOteUNJh3ZAN1g3ZYu2QDdYN2WDdUCTCuVxxDYB7AfyolPIWXOgN4AUAHymlOgJYD6CNmy5SgmLdkA3WDdli7ZAN1g3ZYN1Q2MKZjfA7ADmNUWuaw3ZKcUHUzX//+18AwL333ivbzEUz/Xb99dcDAD755BPZ1q1bN8m7d++WvHfvXmf9CFeFChUk+z3M1HzNvZ+DH3i8IVusHbIRz3WTJ8/JwUeFCxf2db8TJkyQ/OSTT/q671QRz3WTLEqVKiXZ/B3wZiBv2bKlr+1t2rRJ8qWXXirZu2UlGhHNRkhEREREREThiX5hBqIY825eBIANGzZIrlKlipP2vPW9Ts9Dhw6V3Ldv35D9C5J5xclcO8yW+drG6jkREaWKtLQ0AMDEiROj3tfRo0cl//HHH1Hvj8iF6tWrS37jjTckt2rVykl7P/74o+TmzZtL3r59u6/t8MoWERERERGRAzzZIiIiIiIicoDDCCnhTZ8+XXL37t0lv/TSS5Jr1qzpvB89evSQbA7Z+OabbwAAs2bNkm379+931o9GjRoB8Oem6jVr1kh+7LHHJJuvOZ3JnKjlyJEjMezJ2U2efGpW4s6dub4mUazVrl1b8rx586Lal7kukHnM7tSpU1T7JbJVp04dyWate8xJx8z15fxk3mLRrl07yVu2bHHSHsArW0RERERERE7wZIuIiIiIiMgBDiOkpGLO2pQv36nyHjhwoORatWo570fPnj3PyE899ZRsMy9Xe2tGROOGG26QPHz4cABA5cqVrfa1evVqyU888YRkP2bEShUlSpSIdRfC8sADD0ju2LHjGV//+uuvJZszNVHkRo8eLXnHjh2Sp02bFovuUBwxh1YtXbrUt/3Onz9fcuvWrX3bLyU387aLG2+80dd933nnnZJvuukmX/edG+8zzMMPPyzbzLW1XOKVLSIiIiIiIgd4skVEREREROQAhxFS0vr4449Dbn/xxRcBANWqVQuyO+jXr1/I7RUqVAi5fd26dQCADz74IOTXmzVrJvnll1+WfOGFF1r1z2vPHDqY02tIyUEpFTJ7zBozZzZbuHCh5KZNmwIAdu/e7aKLgTt+/Lgs+lqyZEnf9hvq9aXUVbduXcmfffaZ5Pz580e9b2/4oDczLVEkvMW0AWDEiBEx7Ikdc8j2+vXrJb/55psAghs6aOKVLSIiIiIiIgd4skVEREREROQAhxFSSjCHwx07dgwA8NZbb8m2cuXKBd4nT9++fUNuz8zMBABceeWVIb9+zTXXSL700kut2t66davkRx99FABnHaTcNWjQQPKcOXMAAK1atZJta9euDbpLvlmyZAkqVaoEADhw4ICTNrz9A0DBggUlHzp0yEl7FB/MId5vv/22ZHP2N1sLFiyQfOutt0a9P6J45828DAA//fST5AkTJkjeuHFjoH3KCa9sEREREREROcArW5RyvCs35l+tzz33XMnxMimEt05W165dfd3vwYMHJbdv317y9OnTfW2HUsNFF10EAJg1a5ZsM9dS+eGHHwLvU7wzbzo311Uy10Wi5FG9enUA2dd7vPbaa6Pe76JFiyR36tRJsrmOI1GyGTx4MABgyJAhsm3z5s2x6k5YeGWLiIiIiIjIAZ5sEREREREROcBhhJSyUmnYXIsWLSTv3btX8ty5c2PRHUpC3lApAJg6darkDh06SJ45c2aQXbJ24sQJANn727x5cydtXXfddZKXL18uef/+/U7ao+A1adIEAPDnP//Z1/2+9957kpcsWeLrvoniVevWrQEAV199tWz7/+3debQUxdk/8O/DDopssqMgBiUCBuQKxDfnYEBA+UX8GSESI8vLphACmCDIFjWoUfGoEIXAMYkXlUUwIhgBcwgG4gkEENTIIoIom7Jz2S9LvX/c6aKuDMxMTVf3TM/3cw6H5zYzXdU9Dz3Tt56pGjZsmI7NdSAzRcKRLREpJyL/EZGPReQzEXk8tv0aEVkpIptFZLaIlHHfXcoWzBuywbwhW8wdssG8IRvMG0pFMmWEpwC0U0r9AEBzALeLSBsAzwB4QSnVCMBBAH3ddZOyEPOGbDBvyBZzh2wwb8gG84aSlrCMUCmlAByN/Vg69kcBaAfgvtj2fACPAZjy3edTbsq2vFm3bl3YXXDKXFPs2muvDbEnl5ZteWNatGiRjoNY26N58+Y6vummm5y3l4ratWvreNasWTo2Z9acOXOmr236lTtKKZw6dQoA0KdPH719+/btvvbX89xzz+m4VKnzb8neTFuFhYVO2g2KN6sqALRt2zbEnsTn6ppj/h9o3769Dz0tYpYLmjNZUrCy+b0q23kz4JrmzZun44utV+iVH27cuNFNxy4hqQkyRKSkiKwDsAfA3wFsAXBIKXUm9pAdAOpe7PmUm5g3ZIN5Q7aYO2SDeUM2mDeUrKRutpRSZ5VSzQHUA9AKwIW3lUV39BcQkQEislpEVu/du9e+p5R1/Mobl32kzMO8IVu2ucO8yW285pAN5g0lK6XZCJVSh0TkAwBtAFQWkVKxO/h6AOLWzSilpgGYBgB5eXlxk46iLd28ERFf8+a9994DUHwWsMsuu8zPJjJOw4YNdWzORvjFF1/ouEWLFoH2KRFXeTNp0iQAwPDhw/W2/Px8HZvnJxXmQrXmeXXFLE0yZ5uM58Ybb9Tx7bff7qxP8VStWlXH06ZN03H16tUBnH89/JRq7lwsb8xcePXVVwEAvXv39r2/nqefflrHZcuWBQD87ne/c9aenypXrqzjAQMG6Pj666/XsVmWmYnSveaUKFFClStXDgDw6KOP6sfcf//9afVr69atOh43bpyOly1bltZ+yR+Z9hknF5nlyhfjzVLozTYLAM2aNdPxtm3bfO+XJ5nZCKuLSOVYXB7AbQA2AFgKoGvsYb0AvOOqk5R9mDdkg3lDtpg7ZIN5QzaYN5SKZEa2agPIF5GSKLo5e1Mp9a6IrAcwS0SeALAWwJ8c9pOyT+h54/1mGABee+01Hd9xxx1p7ffMmTM6njBhgo5Hjx4d9/GJRtJEJK3+pOryyy/XsTnJQtH3fYE5c+bobT169NCxN2mAY87zxvuN8549e/S26dOn69h2ZCtoS5YsiRvHY45sHTp0SMfdu3f3v2OXYObe448/DsDXkS3fc+fw4cM6njhxIgC3I1sm7/yY14qjR4/qePz48YH0I5FnnnkGwMVHtrKAb3lTt25d/PrXvwYAPPDAA2l37ODBgwCAMWPG6G0LFixIe7/ki9A/47hy+vRpHZvXnCCYn9tKly7t674rVKhwwbYvv/xSx40bN9bx559/rmPvs1E6kpmN8BMAF9QXKaW2oqhGlegCzBuywbwhW8wdssG8IRvMG0pFUhNkEBERERERUWpSmiCDKNOZpSzm+jXdunVLe98nTpwAUHzNqouVDpo6d+58wTZzXS+zTMgcNq9fv75VP9NlnquCggIdmxNKmKVo2erll18OuwuBMdfjGTt2rI7ff/99HXtrdZlrYbnklXRMmXJ+CZqBAwcG0raNr7/+GkDx64r5f8KVESNG6Ni7BgFAgwYNLvm85cuX69ib3ONSvNc91YlyMn3SiyDVrFkTDz30kG/780oSzbXqiFx7++23dVyxYsVA237qqad0bH4WqVWrlo7NcnQ/metvtWnTRserVq0CUHxijVRxZIuIiIiIiMgB3mwRERERERE5wDJCynreej0A8Nvf/lbHffv2TXvfZtnOK6+8AuB8aUc6zFkATVdddZWOZ8yYAaD48Zlr1gTBPIfmuTDX/uFi5dlly5YtceOFCxcCAPbv36+3mWsF+a1MmTIAgJ49e+ptmVxGeODAAQDnZ98DipeVmOV+rpQvX17Hicr3brvtNh3ffffdCffdqlXRd/rNch0KnjmTYzLln0RRYn41w4y92VkB4Je//CUAoFq1as76sWLFCh1XqVIFQHpfn+DIFhERERERkQO82SIiIiIiInKAZYSUtbzyOnOo2Y+Z1MxFi73SQQAYMmRI2vtOZPv27Tr2FkH+0Y9+pLcNHTpUx+ZCtdddd53zvpnn1jxH3uxBLCfMbt988w0AYOXKlYG2W65cOR1/+OGHADJ7hrt9+/bp+Nlnn9VxiRLnf3cZxCyFiVx99dVxY8psHTt21LFZCprNXOXf7NmzfdvXqFGjfNsX+c8saT927BgAFJv502X5c5cuXQAAb7zxht529uzZlPbBkS0iIiIiIiIHeLNFRERERETkAMsIKWs1adIEADBs2DBf92vOuhdE6WAi//rXv+LG5gxjTz/9tI6DKCk0z7mIAAAee+wxvS0Kix7nqmXLlum4d+/eOnY1M5pZfnfLLbcAcLdopd/MmRuffPJJHZuLk5ulv0SJdO3aNewuZI2f/exnvu3LLAmmzOa9VkeOHNHbzK+T1KtXz9f28vPzAQBz587V244fP57SPjiyRURERERE5ABHtiirXHnllTp29SX68ePHO9mv395++20dK6V03LRpUwDFf6Nunje/ee1MnjxZb+PIVvbyvnwMADt27AixJ9nFzHnzy/Zly5YFADz44IOB9yksa9as0bE54YM5EjFlypRA+0RE0WJeQwoKCnRsVhnUr1/ft/bMdVy9kTRzrcVL4cgWERERERGRA7zZIiIiIiIicoBlhJRVqlatquMePXo4aWPChAlO9uvSvHnzLog3bdqkt02fPl3H5rpGfnriiSd03LNnTwDAqVOnnLRFwViyZImOvXXfAGD58uVhdCdrmJPsDBw4sNjfALBgwQIdd+7cWcfmZCGZLF7pzJYtW3Scl5cX93lHjx4NrD9ElDvMNbAeeOABHftZRjhy5EgdjxkzJqXnZseVnYiIiIiIKMvwZouIiIiIiMgBlhFSxhMRXfo2depUJ21069bNyX7DNGfOHB2b61EsXLjQSXvmOezbty8AoLCw0ElbRNnszjvvjLt95cqVOm7QoMEF/16jRg1XXdIOHjyo49OnT8d9TJ06dXR89uxZ531KpGLFimF3gYjoopIe2RKRkiKyVkTejf18jYisFJHNIjJbRMq46yZlK+YN2WDekA3mDdli7pAN5g0lI5UywqEANhg/PwPgBaVUIwAHAfT1s2MUGcwbssG8IRvMG7LF3CEbzBtKKKkyQhGpB+D/AXgSwK9FRAC0A3Bf7CH5AB4DwFUKSfMrb0QEpUoVpeqtt97qpK+LFy92st9MsWjRorC7kDReb8hGFPKmdevWF2wrWbKkjj/55BPnffBmEgWKL04cZVHIHQoe8yYzDRgwQMfm1ymaNm3qWxteyXeys2InO7L1IoARALz5VasBOKSUOhP7eQeAuvGeKCIDRGS1iKzeu3dvks1RRPiSN0op9z2lTOJL3rjvJmUY5g3Z4mccssFrDiUl4c2WiPwEwB6llPkrLonz0LifiJVS05RSeUqpvOrVq1t2k7KNn3lT9MsiygV+5o2TDlJGYt6QLX7GIRu85lAqkikj/B8AXUSkM4ByAK5A0d18ZREpFbuDrwdgl7tuUhZi3mSoxo0b63jjxo0h9iQu5g3ZiGzemLP9NWnSJMSe2DEXor/++utD7MlFRTZ3yCnmTYYyP9ccP37cSRstW7YEAFSoUCGpxycc2VJKjVJK1VNKNQDQHcA/lFK/ALAUQNfYw3oBeMeivxRRzBuywbwhG8wbssXcIRvMG0pFOutsjQQwS0SeALAWwJ8SPWHt2rW47LLLAADHjh1Lo2nKYinnDQC4/t5WLn0vbOfOnc7bOHDgAID4X/i3ZJU3lPOYNyEzrwFjx44NsScpSzl31qxZU2xCEyry8ccf69jPSQr8PNfnzp1L/KDk8JpDF0jpZksp9QGAD2LxVgCt/O8SRQ3zhmwwb8gG84ZsMXfIBvOGEkllnS0iIiIiIiJKUjplhClTSuHMmTOJH5iicuXK6dj8spqrL8ZlIldlcPv27QMAJ69bslq0aIHVq/2fHdX8svbRo0d93382OHjwoI6rVKni2369ddE4kyQRuTBjxgwdh/n+9F0+lqNFhqvPJzzXlC04skVEREREROQAb7aIiIiIiIgcCLSM0JV+/frp2FzBffTo0WF0JzA1a9bUcbVq1Zy0Ubdu0eLnp0+fdrJ/Cp5ZMtmmTRsdb9q0KYzuEFHE1KlTR8f33nuvkzZGjhyp48LCQidtEBH5gSNbREREREREDvBmi4iIiIiIyIFIlBHmqqFDh+r4vvvuC7EnRERERerVq6fjXr16OWmDM50SUbbgyBYREREREZEDvNkiIiIiIiJygGWElLO6dOmi44kTJ+qYMy8SEWWmcePGAQAOHDgQck+IiJLDkS0iIiIiIiIHAh3ZUkrh7NmzAICXXnpJbx88eHCQ3aAss2fPHkyaNAkAMGTIEN/2O2HCBB1PnTpVxxzZIiJKTe3atXX8wgsvOGvn3XffBQAcO3bMWRtElL26d++u41q1aoXYk/M4skVEREREROQAb7aIiIiIiIgcCHyCDK+M8LHHHtPb/CwjbNeunY5//OMf63jp0qW+tREm85jMY/XTo48+qmPv9VJKOWkrGTt37sTYsWMB+FtGmKvKli2r45EjR4bYE8p0eXl5Op42bZqTNk6ePKnjtm3bAgA2bNjgpC1yp0KFCjq+5ZZbQuwJEeWyQYMG6fjqq6920saIESMAADt27Ejq8RzZIiIiIiIicoA3W0RERERERA5Ebp2t1q1b67hNmzY6jkoZoXlM5rH66eWXX9axV0ZI0VGmTBkd9+nTx0kb/fv3BwB89dVXTvZPwahUqZKOv//97ztp49y5czr+z3/+46QNcueKK64A4PY9tkePHjpev369s3aIiJLx/PPPA0j+M3JSN1sisg3AEQBnAZxRSuWJSFUAswE0ALANwM+UUgdT7TBFF/OGbDBvyBZzh2wwb8gG84aSlUoZ4Y+VUs2VUt43ph8BsEQp1QjAktjPRN/FvCEbzBuyxdwhG8wbssG8oYTSKSO8C8CtsTgfwAcAOLUZJZKReTN//nwdmzM+kp3Zs2cD8HXh0YzMmyjq0KGDjufNmxdiT3zD3HHIm42rYsWKztrYvXu3jgsLC5218x3MG7LBvAnBs88+q+NmzZqF2JP4kh3ZUgDeF5E1IjIgtq2mUmo3AMT+rhHviSIyQERWi8jq9LtLWcaXvAlz2nkKBa83ZMsqd5g3OY/XHLLBvKGkJDuy9T9KqV0iUgPA30VkY7INKKWmAZgGACLCT825xZe8KVmyJPMmt/B6Q7ascod5k/N4zSEbzBtKSlI3W0qpXbG/94jI2wBaAfhWRGorpXaLSG0Ae1Jp+NChQzru1KkTAGDx4sWp7CKhoUOH6njbtm06njlzpq/tuPbzn/9cx+Yx+c17HczXJh0u8saVW2+9NewuBGbFihVhd+GS/Mqbli1bYvXqol8aVq5cWW8/fPiwk35nuxIligodypUrp7eZC9W6cvr0ad/2lU3XnGxmzmjqqnzw3nvv1fGSJUuctOFh3pANv/Lmhhtu0KX35iLvN998s5N+R8XkyZN1bM5Yevnllztpz3w9zFl0k5GwjFBELhORil4MoCOA/wKYD6BX7GG9ALyTUssUacwbssG8IVvMHbLBvCEbzBtKRTIjWzUBvC0i3uNnKKUWicgqAG+KSF8AXwPolkrD5tz0n3/+eSpPTVrNmjV1XK1aNSdtBMHsu3lMfvNegcslDwAADvpJREFUB5/W1vItb86dO4ejR48CKL7OmKsRmi+//FLH11xzjZM2wnTDDTc42a/52nivl8X37Zxcb8zRWm+9qIKCAr3t22+/1XEurS1Xvnx5HXfv3h0A8Oc//zmQtr3XpEqVKn7t0knuUJFatWrp2JsUw2/mqPOJEyectBEH84Zs+JY35cuXR9OmTQEUf8/cu3cvAGDfvn16m6v1DrNR/fr1dexqNMv02Wef6TjVzzYJb7aUUlsB/CDO9v0A2qfUGuUM5g3ZYN6QLeYO2WDekA3mDaUilXW2iIiIiIiIKEnprLPlG2/yCnNu/E8//dTXNv7whz/o2Fv759VXX9XbMmV68diQNACgd+/eAIr33W9myVSmnIN4vL4dPHh+IXav7yVLlvS1rQYNGuh406ZNOvbK77KlzMw8L+Z585t3Psw2MjmXNmzYcMG2jh076tgsKTRt3rwZQKDlTU6YZXt9+/bV8YQJE5y3febMGR3/97//dd4epee6667T8b///W8d+3nN/eabb3RsTgC1YMEC39ogyhbmZ8Arr7yy2N9A8ffWLVu26Lhx48YXPCZbPqtcjHmdMc/L3LlzAQCdO3cOpB/ee2Y67/0c2SIiIiIiInKAN1tEREREREQOZEQZoccsMdmz5/zSBDVqxF2A25o321bp0qX1tunTp+vYXOcgCOa6Nj179tTx1KlTnbfdvHlzHX/11VfO20uXOXPlbbfdBgBYunSps/bMMprly5cDAH7yk5/obQcOHHDWtq3q1asDKD5bo6u1cIDzr4OrWUWD8P777yd8zIABAwAAX3zxRdx/X7dunY5dlm0mq27dujo287hDhw46HjVqlPN+nDp1Ssd/+9vfdHzPPfc4b5uS582G5l0/AOAvf/mLjqtWrepre9u3bwcAjB49Wm978803fW2DKMquvfZaHZvrFXol2nfccUfc55nXZG/GwzCZ62CaswpOnDhRxz/96U8D7dOuXbt0nOqaWvFwZIuIiIiIiMgB3mwRERERERE5kFFlhBs3btTxXXfdpWNzFiQ/mWV6ZcqU0bFZfmUuYpbuLGTmAqJNmjTRsbkYrMuZBz3meQ66ZNJPR44cAQBs3bpVb2vYsKGz9n74wx8CAGbMmKG39evXT8euFvpMhnncXimOy3NhnnPvdYi6adOmXfLfx48fr+NEM+2tXLlSx7blu+bi1F4JmMksFzTzNGhmSXiUSwfNkp6WLVvq+KOPPgJw8fLToN144406NmcwGz58OADg5ptvDqQfb731FgDg9ddfD6Q9olzhvR94pbrftWrVKh0PGjTokvsyF1T2Zg5PlVnSXrt27Qv+feTIkTru2rWrVRt+a9GihY4LCgrS3h9HtoiIiIiIiBzgzRYREREREZEDGVVGaDp06JCOzZKb1q1bO2nvYuV7gwcP1nG6s/XVr19fxy+99FJa+0qVeQ69xZKBzCltsbFmzRoAQJ8+ffS2yZMn69gss/JTp06ddDxp0iQde7NcfpdXBrt//36r9swheHNo2+SVAAHFS5j8tH79eh2bpQfe65Drxo0bl/Rj8/PzdWz+30yFOdPUnXfeabUPVw4fPqzj1157LcSeBMdcGNu8DnkLcP7jH/9IuA+zRNk8h/GYi1N379496X7efffdOjZLTYNgzlj64YcfBto2ERUxS4XNksJ4zNmen3/+eav2fvGLX+g4lWtV0JYsWaLjwsJCX/fNkS0iIiIiIiIHRCkVXGMiVo2Zk0mY8+63b98+/U5FmHmXPnToUB2bk36kQiklaXfKQip5Y/52+bnnntNxs2bN/O1UCiZMmADAfh2qVq1a6bh///6+9ClZn376qY7N0bNk1qXyhJU3eXl5avXq1WE0nZPM9VqeeuopHb/44otW+8uG641p4MCBOjZHtlJhnqtEa7WZ62GZFRiZxqyeeOSRR3TsTZDhwBqlVJ6rnV+Kbe5E3SeffKJjP9+LRfy9RPC9KveYa/s9+OCDOk5lrcxk8oYjW0RERERERA7wZouIiIiIiMiBjJ0gw2SWvZnlcL///e8BZN6XwzPFlClTdGxbOphtzPK2ESNG6Ngr5QPir0nk0sMPPxxoe+ky14gyz2EqpYOUO7z15UaNGqW3ce0kO8OGDQu7C74wJ5P6zW9+o+P58+eH0R0iIu2Pf/yjjseMGaPjVEoHU8WRLSIiIiIiIgd4s0VERERERORAVpQRmsxyOK/E6eTJk3pbt27dAu9TJpgzZ46Oly1bBgBYt25dWN3JCIsWLdLxuXPndOytcdaoUaPA+5TJNm/eDKB42Q9LBymeLVu26PhXv/oVAGDhwoVhdYdCdPz4cQBAv3799LYDBw7oePHixYH3iSibbN++HUOGDAFQfO1OSp85K7VX3vzGG2/obS5LB01JjWyJSGURmSsiG0Vkg4j8UESqisjfRWRz7O8qifdEuYR5QzaYN2SLuUM2mDdkg3lDyUq2jHAigEVKqcYAfgBgA4BHACxRSjUCsCT2M5GJeUM2mDdki7lDNpg3ZIN5Q0lJuKixiFwB4GMADZXxYBHZBOBWpdRuEakN4AOl1PUJ9uVkwb/vfe97On788cd1fN9997loLmPMmDFDx48++qiOzUUk/ZTKgn+ZnDdt27YFUPz81alTx88mMtqJEyd03LNnTx17i9L+85//9LW9sPKmUqVKqk2bNgCKz4JWtmzZ1A4gh61du1bH5oK0hw8f1vHKlSudtJ3qAqN+5U6Yixpno3bt2gEAli5dGnJPtJQWNc7k96qoiOKixn7njXcs99xzj95eoUIFAEB+fn4KR0Hjxo3TsXktNsub/eTXosYNAewF8BcRWSsir4jIZQBqKqV2xxraDaBGvCeLyAARWS0iXB47tzBvyIZveVNYWBhcrykTWOcOrzc5je9VZIN5Q0lL5marFICbAExRSrUAcAwpDIsqpaYppfJS+U0TRQLzhmz4ljdlypRx1UfKTNa5w+tNTuN7Fdlg3lDSkpmNcAeAHUopr1ZkLooS6lsRqW0Mle5x1clEzLK5kSNH6thc1NdcLNIcps0Gb731lo5ffPFFHW/btk3H3sKiGSRj88Yrk+vSpYveVr58+bhxVGbj69ixo46PHDmi4xUrVoTRnUvxLW8KCgr06+eVEwJAiRIX/o7pvffe03HNmjXT6H72+uCDDwAUn42yoKBAx67Kk32UsdecKOjQoYOOzXKcjz76KIzu+Il5QzZ8zRuvEnHu3Ll6W6lSRR/Rt27dGvc5devW1fGsWbNS7X/We/jhh3VsfpYxy1bN97AwJRzZUkp9A2C7iHg1p+0BrAcwH0Cv2LZeAN5x0kPKSswbssG8IVvMHbLBvCEbzBtKRcIJMgBARJoDeAVAGQBbAfwvim7U3gRwNYCvAXRTSl3y22dhfnm0evXqOq5UqRKA8+stAUCnTp0C71M85pokgwcPBlD8y+jeJAZhsPjCelbmjTny0bBhQx23bt0aAPD6668H2Z2U3X///QCKT1xg/mbMXHMsCNmQN+ZvCEuWLHnJx77zzvn3zubNmyfbRMb461//quOHHnpIx97EKWFeY0yp5g3gT+7k+gQZXbt21fGqVat0vHPnTh2fPXs20D6lKKUJMoDsfa/KFlGcICPWfqh5U7p0aR3Xr1//ko/Nyzv/X2LmzJk2zQVu+PDhOjbfdz27du3SsbfeXxiSyZukFjVWSq0DEO/i1T7VTlHuYN6QDeYN2WLukA3mDdlg3lCykl1ni4iIiIiIiFKQVBmhb41l2BB7uXLldOx9ETFV+/fvj7u9WrVqVvs7c+aMjk+ePGm1D1dsynr8kCl545WXmRNopML8InmjRo3iPmbz5s06vummm6za8crBMqXUJ2p5Y1434k22kQ5zApz+/fsDAMaOHau3vfDCC2m3YV5jMnl6/GzLm2wpI0yUT+b7TtAlxz5JuYzQL5nyXpVpolpG6Jcg8sYsj7f9DHMxgwYNAgA888wzepsZP/HEE1b7Na9F5vtWpvFrnS0iIiIiIiJKEW+2iIiIiIiIHAi6jHAvihZ+2xdYo8G7EtE8vvpKqeqJH+Y/5k1WCztvvkJ0zy0Q3WNj3rgV5WMLO3f4XpWdmDdu5XTeBHqzBQAisjrKK2ZH/fjCEvXzGvXjC1OUz22Ujy1sUT63UT62sEX93Eb9+MIS9fMa9eNLhGWEREREREREDvBmi4iIiIiIyIEwbramhdBmkKJ+fGGJ+nmN+vGFKcrnNsrHFrYon9soH1vYon5uo358YYn6eY368V1S4N/ZIiIiIiIiygUsIyQiIiIiInIg0JstEbldRDaJyBci8kiQbftNRK4SkaUiskFEPhORobHtVUXk7yKyOfZ3lbD7mu2YN2QjSnkDMHeCwrwhW1HKHeZNcJg30RdYGaGIlATwOYAOAHYAWAXg50qp9YF0wGciUhtAbaXURyJSEcAaAP8fQG8AB5RST8f+01RRSo0MsatZjXlDNqKWNwBzJwjMG+aNrajlDvMmGMyb3BDkyFYrAF8opbYqpQoBzAJwV4Dt+0optVsp9VEsPgJgA4C6KDqm/NjD8lGUZGSPeUM2IpU3AHMnIMwbshWp3GHeBIZ5kwOCvNmqC2C78fOO2LasJyINALQAsBJATaXUbqAo6QDUCK9nkcC8IRuRzRuAueMQ84ZsRTZ3mDdOMW9yQJA3WxJnW9ZPhSgilwN4C8AwpVRB2P2JIOYN2Yhk3gDMHceYN2QrkrnDvHGOeZMDgrzZ2gHgKuPnegB2Bdi+70SkNIqS6Q2l1F9jm7+N1ax6tat7wupfRDBvyEbk8gZg7gSAeUO2Ipc7zJtAMG9yQJA3W6sANBKRa0SkDIDuAOYH2L6vREQA/AnABqXU88Y/zQfQKxb3AvBO0H2LGOYN2YhU3gDMnYAwb8hWpHKHeRMY5k0OCHRRYxHpDOBFACUB/Fkp9WRgjftMRH4EYDmATwGci20ejaLa1DcBXA3gawDdlFIHQulkRDBvyEaU8gZg7gSFeUO2opQ7zJvgMG+iL9CbLSIiIiIiolwR6KLGREREREREuYI3W0RERERERA7wZouIiIiIiMgB3mwRERERERE5wJstIiIiIiIiB3izRURERERE5ABvtoiIiIiIiBzgzRYREREREZED/wc5sEraUpnq/wAAAABJRU5ErkJggg==\n", "text/plain": [ "<matplotlib.figure.Figure at 0x7fdc0b5ba128>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "(cnts,_) = cv2.findContours(thresh_img, cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)\n", "(cnts, _) = contours.sort_contours(cnts, method=\"left-to-right\")\n", "avgCntArea = np.mean([cv2.contourArea(k) for k in cnts])\n", "\n", "digit = []\n", "for (i,c) in enumerate(cnts):\n", " if cv2.contourArea(c)<avgCntArea/10:\n", " continue\n", "\n", " digit.append(extract_digit(thresh_img, c))\n", "\n", "fig, axes = plt.subplots(2, 6, figsize=(12, 6))\n", "axes = axes.flatten()\n", "for i, ax in enumerate(axes):\n", " dig= digit[i]\n", " ax.imshow(dig, cmap='gray')\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Create the training set\n", "\n", "Save the digits present in the barcodes and sort them manually to form the training set." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "train_dir = '/path/to/directory/' # directory containing images of barcode\n", "for filename in os.listdir(train_dir):\n", " \n", " image = cv2.imread(os.path.join(train_dir, filename), cv2.IMREAD_GRAYSCALE)\n", " thresh = image_pre_processing(image)\n", " \n", " (cnts,_) = cv2.findContours(thresh,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)\n", " (cnts, _) = contours.sort_contours(cnts, method=\"left-to-right\")\n", " avgCntArea = np.mean([cv2.contourArea(k) for k in cnts])\n", "\n", " for (i,c) in enumerate(cnts):\n", " if cv2.contourArea(c)<avgCntArea/10:\n", " continue\n", " \n", " digit = extract_digit(thresh, c)\n", " save_img_dir = '/path/to/directory/image.jpg' #directory to save the digits\n", " cv2.imwrite(save_img_dir, digit)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Training the model\n", "\n", "A simple KNN Classifier with n_neighbors=1 gives good accuracy on the training as well as validation set." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',\n", " metric_params=None, n_jobs=None, n_neighbors=1, p=2,\n", " weights='uniform')" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "features_list = []\n", "features_label = []\n", "\n", "for digit in range(0,10):\n", " label = digit\n", " train_dir = '/path/to/training/images/' + str(label) + '/'\n", " for filename in os.listdir(train_dir):\n", " image = cv2.imread(os.path.join(train_dir, filename), cv2.IMREAD_GRAYSCALE)\n", " # Using Histogram of Oriented Gradients(HOG) feature extractor\n", " feat = hog(image, orientations=7, pixels_per_cell=(6,6), cells_per_block=(4,4),\n", " transform_sqrt=True, block_norm=\"L2\")\n", " features_list.append(feat)\n", " features_label.append(label)\n", " \n", "#convert features array into a numpy array\n", "features = np.array(features_list, 'float64')\n", "\n", "# split the dataset \n", "#X_train, X_test, y_train, y_test = train_test_split(features, features_label)\n", "\n", "# train using KNN \n", "knn = KNeighborsClassifier(n_neighbors=1)\n", "knn.fit(features, features_label)\n", "\n", "#model_score_train = knn.score(X_train, y_train)\n", "#model_score_test = knn.score(X_test, y_test)\n", "\n", "# Printing the scores\n", "#print('Train accuracy : ',model_score_train)\n", "#print('Test accuracy : ', model_score_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Predictions on Test Set" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "def extract_barcode(test_image):\n", " \n", " # input - test image in grayscale\n", " # returns barcode present in the image\n", " \n", " barcode=[]\n", " thresh = image_preprocessing(test_image)\n", " \n", " (cnts,_) = cv2.findContours(thresh,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)\n", " (cnts, _) = contours.sort_contours(cnts, method=\"left-to-right\")\n", " avgCntArea = np.mean([cv2.contourArea(k) for k in cnts])\n", "\n", " for (i,c) in enumerate(cnts):\n", " if cv2.contourArea(c)<avgCntArea/10:\n", " continue\n", " \n", " digit = extract_digit(thresh, c)\n", " feat = hog(digit, orientations=7, pixels_per_cell=(6,6), cells_per_block=(4,4),\n", " transform_sqrt=True, block_norm=\"L2\")\n", " features = np.array(feat, 'float64')\n", " \n", " predict = knn.predict(features.reshape(1,-1))[0]\n", " barcode.append(predict)\n", " \n", " barcode = int(''.join(map(str, barcode)))\n", " \n", " return barcode " ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<matplotlib.figure.Figure at 0x7fdc08183550>" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Barcode: 9876543210987\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "<matplotlib.figure.Figure at 0x7fdc08103f60>" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Barcode: 3401312345624\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "<matplotlib.figure.Figure at 0x7fdc080ef4a8>" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Barcode: 610762569327\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAARQAAAD8CAYAAAC2EFsiAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvAOZPmwAAEKVJREFUeJzt3V+oFPX/x/H35zOzu3qTmQRpcDz050IwsD9UmF5FF0H/LtKwsroroqC78sKCIjIvjAiSqC5KgjBC1AgvKqgoKkpEDTIxg4jC7B8WnbOzM+/fxfl9xtnZmdk9+tY99X0+4FBn9jOf+cxn5vPa2dnPeJyqCgBY8ONuAID/DgIFgBkCBYAZAgWAGQIFgBkCBYAZAgWAGQIFgBkCBYCZeNwNGIJpvMCZ56wq4goFgBkCBYAZAgWAGQIFgBkCBYAZAgWAGQIFgBkCBYAZAgWAGQIFgBkCBYAZAgWAGQIFgBkCBYAZAgWAGQIFgBkCBYAZAgWAGQIFgBkCBYAZAgWAGQIFgBkCBYAZAgWAGQIFgBkCBYAZAgWAGQIFgBkCBYAZAgWAGQIFgBkCBYAZAgWAGQIFgBkCBYAZAgWAGQIFgBkCBYAZAgWAGQIFgBkCBYAZAgWAGQIFgBkCBYAZAgWAGQIFgBkCBYAZAgWAGQIFgBkCBYAZAgWAGQIFgBkCBYAZAgWAGQIFgBkCBYAZAgWAGQIFgJn/fKCoat/vWZadVh2qOlBHeRvl18qvl+toWv9U2ngm1zvV/gz7XNUfw7aVJEnj68PaULW9sCxN06HtqTrmdfVWLS/v82z6vO5cO5Xz+Gz4TweKc07iOBaRmQPgnJMoikRk5kRyzuU/dQfIOSfe+/zE897ndZTLVf0UT6YsyySKIvHei/e+cf2iLMvEe5+/5r3P6wzLoijK16trSxDKFvujuN6wPg3rhXbFcdy3Xrke7720Wq2+9je1r9hXaZpKq9WqbU8URZX7UPzx3g8c33a73XeM6vbdOZe3vajc/8WfOI4lTdO+OorHPOz/sFAI/RbKhXqKdTT1zTjE427AmRYOfDgQ4cQoD+jy70E44cIBrCtTp1hv3Uk0bBAXA6RunTAoRnGq75ZFIaBFpG/w1G0vBHid8mthn+uOS1in2I4m5Xp6vV7l8ipVbW/apqpWvukU1x22b6GeYeXCfswV/+krFABnF4ECwAyBAsAMgQLADIECwAyBAsAMgQLADIECwAyBAsAMgQLADIECwAyBAsAMgQLADIECwAyBAsAMgQLADIECwAyBAsAMgQLADIECwAyBAsAMgQLADIECwAyBAsAMgQLADIECwAyBAsAMgQLADIECwAyBAsAMgQLADIECwAyBAsAMgQLADIECwAyBAsAMgQLADIECwAyBAsAMgQLADIECwAyBAsAMgQLADIECwAyBAsAMgQLADIECwAyBAsAMgQLADIECwAyBAsAMgQLADIECwAyBAsAMgQLADIECwAyBAsAMgQLADIECwAyBAsAMgQLADIECwAyBAsAMgQLADIECwAyBAsAMgQLADIECwAyBAsAMgQLADIECwAyBAsAMgQLADIECwAyBAsAMgQLADIECwAyBAsAMgQLADIECwAyBAsAMgQLADIECwAyBAsAMgQLADIECwAyBAsAMgQLADIECwAyBAsAMgQLADIECwAyBAsAMgQLADIECwMx/PlCccyIikmWZiIioat/vQfn3qvXDumV164bXitv2frDL0zRt2gXJsixvR1BuSxRFA2XqFMuNus6o9dW97r1v7KdyHWmaShRFQ/vWOSeq2lgu1BcUj0Px+NSpanuWZbXHzTnXeEzrzsGqerz3A3UVj33V+TROrm6QzBHmjVPVUx5Eoa/qgqFunXL5qmWj1NPU7lPdr9muVy6fJIm0Wq2R1imea6NsM6zX6/UkjuOR2zSb19M0Fe/90PZYnDdh/dnUlWVZ5XkySr/Pwum/q4SK/tcCBcAAs0CZW9dLAP7VCBQAZggUAGYIFABmCBQAZggUAGYIlDlilMlZxbKnuy1ro07WmqvSNJ1V20+lD/+tfTMb9bOF/sdlWSZ79uyRv/76q7aMc07a7bbceuut+bLt27fXlj/vvPPk+uuvH5jUFGbhdjodSdNUtm3bJuvWrRORmRmwQZg9un//frnyyivzCXI7d+6Um266SbIs6ysvMnPi79+/X1asWJEv27lzp9xyyy0D5d56662GHplx++23S5qm+aSqNE3l/vvvl1dffVVEROI4lp9//lkWLVo0tK4wKMN2165dW1nugQcekJdeeklEZvr8l19+qa0/TBpbvXq1fPbZZzIxMSFHjhypnSAmMtP/YX9UVX777TdZuHBhZbkwa3blypXy+eefy9KlS+X777+v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\n", "text/plain": [ "<matplotlib.figure.Figure at 0x7fdc08088dd8>" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Barcode: 7502273430803\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "<matplotlib.figure.Figure at 0x7fdc081899e8>" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Barcode: 416000336108\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "<matplotlib.figure.Figure at 0x7fdbf700dda0>" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Barcode: 798527504636\n" ] } ], "source": [ "test_dir = '/path/to/test/images'# directory containing test images\n", "\n", "for filename in os.listdir(test_dir):\n", " image = cv2.imread(os.path.join(test_dir, filename), cv2.IMREAD_GRAYSCALE)\n", " plt.axis('off')\n", " plt.imshow(image, cmap='gray')\n", " plt.show()\n", " \n", " print('Barcode:', extract_barcode(image))" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.8" } }, "nbformat": 4, "nbformat_minor": 2 }