From 531818401e4221bde8e7130f3a789652bd5f7c46 Mon Sep 17 00:00:00 2001 From: shreyu palley Date: Mon, 22 May 2023 16:47:21 +0530 Subject: [PATCH] Added 1st Day --- .DS_Store | Bin 0 -> 6148 bytes 1-1.ipynb => Day1/1-1.ipynb | 0 Day1/1_2.ipynb | 717 ++++++++++++++++++++++++++++++++++++ 3 files changed, 717 insertions(+) create mode 100644 .DS_Store rename 1-1.ipynb => Day1/1-1.ipynb (100%) create mode 100644 Day1/1_2.ipynb diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..c501dc16d5d7ff09a42e3583a58e7bc1b8c20aa0 GIT binary patch literal 6148 zcmeHK%}N6?5Kh`^Q$#4J(Bp#Ff^C(8cvN=1kmDTw zu-EY;>BIPGA({-!$N;{(40D*r?pb;E{rR0J?Db2fH=asoR#vkjE7ruN+mb`K@AU`0 zn%6zY(W#V?KhZtE9yW)K{N|C2`(79~yDA|Jnh8L1@yh$>Uf+JTiZJaCym>v9m@wzB8Try$-2P_Jc2TPp6I6RUdwhz zIX6BUv%a=;9P_P;*Y`pFdHv;Z-XHwx@3dy;{=_Aw>)yHDIFj)V*e3f#KM65F3=jj$ z!hkuO#M-iKi1tAY5CcoY0GQrt@46f6`ZkagSV4_i{Gj56xZdT@|Lg8w4nBP+2jN2NiCkBXtc?QyYn8*A7_~-h6 zK8Z%e05R~d7~mPlb!zZP=5AehIJ|2uXjjlsFfP$JO#ww+#Sn{EaRHhVuv@4A+6EJi RU;&{Y0Yw9K#K502@CEo9W+DIp literal 0 HcmV?d00001 diff --git a/1-1.ipynb b/Day1/1-1.ipynb similarity index 100% rename from 1-1.ipynb rename to Day1/1-1.ipynb diff --git a/Day1/1_2.ipynb b/Day1/1_2.ipynb new file mode 100644 index 0000000..d226de2 --- /dev/null +++ b/Day1/1_2.ipynb @@ -0,0 +1,717 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "code", + "source": [ + "import numpy as np\n", + "import cv2\n", + "from google.colab.patches import cv2_imshow\n", + "import math\n", + "from collections import defaultdict\n", + "from matplotlib import pyplot as plt" + ], + "metadata": { + "id": "7GU9nrR6Wt3J" + }, + "execution_count": 8, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "original = cv2.imread('./input.png')\n", + "image = original.copy()\n", + "image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)" + ], + "metadata": { + "id": "-ueSBzdgd-zP" + }, + "execution_count": 9, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "cv2_imshow(cv2.resize(original,None, fx=0.7, fy=0.7, interpolation = cv2.INTER_CUBIC))" + ], + "metadata": { + "id": "NVTWz0BhePki", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 124 + }, + "outputId": "c7629c32-5d8f-4d91-95a8-baee8807106a" + }, + "execution_count": 10, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "image = cv2.resize(image,None,fx=0.7, fy=0.7, interpolation = cv2.INTER_CUBIC)\n", + "original = cv2.resize(original,None,fx=0.7, fy=0.7, interpolation = cv2.INTER_CUBIC)" + ], + "metadata": { + "id": "nUdu4pvYeJgx" + }, + "execution_count": 11, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "gradX = cv2.Sobel(image, ddepth = cv2.CV_32F, dx = 1, dy = 0, ksize = -1)\n", + "gradY = cv2.Sobel(image, ddepth = cv2.CV_32F, dx = 0, dy = 1, ksize = -1)" + ], + "metadata": { + "id": "zQLmXseEeZOk" + }, + "execution_count": 12, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "cv2_imshow(cv2.resize(gradX,None, fx=1, fy=1, interpolation = cv2.INTER_CUBIC))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 124 + }, + "id": "d5R4foXjkxUf", + "outputId": "9299427b-f690-40be-86ee-49d9dd1bac6f" + }, + "execution_count": 13, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "cv2_imshow(cv2.resize(gradY,None, fx=1, fy=1, interpolation = cv2.INTER_CUBIC))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 124 + }, + "id": "3FlfxEJ1kxfm", + "outputId": "15b6cfc1-eb67-4fd0-d1f6-a6d1cce1b98c" + }, + "execution_count": 14, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "gradient = cv2.sqrt(cv2.add(gradX*gradX, gradY*gradY))\n", + "gradient = cv2.convertScaleAbs(gradient) #converts the gradient image to an 8-bit representation.\n", + "cv2_imshow(cv2.resize(gradient,None, fx=1, fy=1, interpolation = cv2.INTER_CUBIC))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 124 + }, + "id": "DqEcEGGBhL5x", + "outputId": "131dcef1-a475-452d-d545-65f645743565" + }, + "execution_count": 15, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "blurred = cv2.blur(gradient, (3, 3))\n", + "(_, thresh) = cv2.threshold(blurred, 225, 255, cv2.THRESH_BINARY)\n", + "\n", + "cv2_imshow(cv2.resize(thresh,None, fx=1, fy=1, interpolation = cv2.INTER_CUBIC))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 124 + }, + "id": "AGBEiMZLfAPh", + "outputId": "5e1ed275-156c-4983-b32b-126d0397a3da" + }, + "execution_count": 16, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYwAAABrCAAAAABBZOoYAAAEIElEQVR4nO2c27arIAxFk47z/7+c86CVQAJSr4G95kNbEdCyJHIJEAEAAAAAADAFnB+KPiGcBTGRLAmEt2AmEmKdsMxf7NktJL/AN7y4p7+DEcMUyHokWYJv4FKanPQpSp6pKlautk7+Z8X4vH0DIAExAgExAgExAgExAgExAgExAgExAgExAgExAgExAgExAgExAgExAgExAvHv7Rs4TG06Kz7V+ZpxxRh3Ckpqtw4z9TzVxwhiBAJiBAJiBAJiBAJiBGLcpu1dSG+ruTtiN4OLsfnbXV8yLzC4GETk+Y9elfOewnn3reWa2uW2Ovg749ba8PiAy+BiEBGRyIXFJs3D1hlpxG+dS4xuplg7ySfXeOVMvVYeP57384usn1w4fRcxTSqu5lkdlFoZXYwMKb79SOzFayRJp6QU1k0mrZNNhjdTnL47//xpo3Y4/d4bbqqacS2s15twpwTOM7FZq93WxvhicPZHt/fEsce3lpDLouy/Aqeb3GN4M7UwfoePaIaa4SHq81DSyonDmvfdymxinHw5Z8lZtgC/U9F1fdsYqzKJmXqACyzh3pMyU83IOoC/VpGOJFsjQS+WvnLMZAIxlAZqdbkbczP89X63k8gMZmxX5PQ7ZeX0wDsfjgnEUIXPXqA+5lZEI6IT2wY4WXm591g5vDMCATECATECATECATECATECATECATECATECATECMcNwCNH+bMNxj8MHfRVnEUMz7KaTw4sxhZPtygzvjHHXvRaMLsYy1SA97pPHNHtS6cHNlJgjLs5xEZm9mSU2k0DF9sdObjcwuBiWmgeBE7PUrXQecDxqd30KTjGdGHv0+ddWfZtvVWPwd8aVRcP8drNscDFW58lTxchpetzk9qw+o4vxAxXJjButOf0Yf0iMDl7usUzxAu8rw95uSGNZ0s2gZgRiippxB7etZ24wkxhe+XnOgLaQlY+m7oHrTLzwqxleDLOgaD+aE2nfQ/SJVlXtnSGUDQ60liNII4o0KnueYpqh1xNUa4ZdFM1qhIZJjG92TQ1rGJi+yVU8qOGL4XjKGwdrszLBMaz5KCrnAXZpw9ujEa/zNVPaZrgbASzH68hyYZNE1jO5371Kl0I5ywnVQbPUjMX05y8sG9Y/Op3TXOf2a2Yz8yFqbrogSYFMC7N5ipOHmfmx0wZA0920PVqATiWAFhXu7mds+xc4CqjJTghEVBfD68oeWECa/UiFvy1QHNbF6RZ+GSg8WWrsNpAXIApRLsalO5pp6tmuPfhfrzu8UfP/gDZT2hKV28Cce2z9ax9vXPVtUjMctw8U3jMUPadJ+xBd89f8PLx+fY05n/ZfWGoGW/dh3lyKi3Npsy0pvtfIhlqb6bt7BFRYKcrobKtGj0IdzmBOGwQAAAAAAAAAAAAAAAAAgKP8Bz+3Jsfri1pxAAAAAElFTkSuQmCC\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (21, 7))\n", + "closed = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)\n", + "\n", + "cv2_imshow(cv2.resize(closed,None, fx=1, fy=1, interpolation = cv2.INTER_CUBIC))\n", + "\n", + "closed = cv2.dilate(closed, None, iterations = 7)\n", + "cnts,hierarchy = cv2.findContours(closed.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)[-2:]\n", + "c = sorted(cnts, key = cv2.contourArea, reverse = True)[0]" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 124 + }, + "id": "rN2s_H_eNPZ8", + "outputId": "a818fb60-a07c-41bb-cbf9-0c719bc13e7b" + }, + "execution_count": 17, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYwAAABrCAAAAABBZOoYAAABw0lEQVR4nO3a226DMBQF0ZMq///L7kurEBXCpYHMPpr1FhUhR1MDMa6SJEmSWrg9fxyfGcWz2/ohPX19egB6MAaIMUCMAWIMEGOAGAPEGCDGADEGiDFAjAFiDBBjgBgDxBgg908P4DDEe7BDFl+e5cbIfR84lobuZep6i/9GxgAxBogxQIwBYgyQ3Efbs4ytT82bD9wsPMb0l1/uD49f4THOMUn8uvDfVYCl48fquSr+npE/G6bCY7zfePlx9S8Lx4/X5/oRvwsdMeKtVr6ZMwMkPkanu0Z8jE7yYzSaGvkxGjEGiDFAjAFiDJAGMfo8TnVYtW1To8HM6MMYIMYAMQaIMUCMAWIMEGOAGAPEGCAdlkOq1jeJHd+L+f5dnIu6xKgK27UzJz5GfIEJ7xkg6TF2TIxjc+jKmRe+vfPq8Z57K0+fGRc7N74x9jm1RniMNm9cqyo+Rq8a6TFaMQaIMUCMAWIMEGPsc+rTW/yqbadnW2cGiDFAjAFyRyyaq6qcGSjGADEGiDFAjAFiDJDMGPHP4/NfIHNt6hZfY1ZmjFbLgw+Zl6mmjAEys73zP5eAMXPO3SfoeQ2SJEmSJEmSJElHfQOOzCS9BzbU7wAAAABJRU5ErkJggg==\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "cv2_imshow(cv2.resize(closed,None, fx=1, fy=1, interpolation = cv2.INTER_CUBIC))" + ], + "metadata": { + "id": "PmpIoPgkiF3b", + "outputId": "81c7980d-fc72-4140-8dac-edd9d46756d7", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 124 + } + }, + "execution_count": 18, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYwAAABrCAAAAABBZOoYAAABnUlEQVR4nO3c0W7CMBQEUQfx/79cHlCFaAqCVMaz2znvIKPJNVES2MbV18DZVi/g406rF6AbY4AYA8QYIMYAMQaIMUCMAWIMEGOAGAPEGCDGADEGiDFAjAFyXr2A9wHvgx2yv3nmZCyzP6iMAWIMEGOAGAPEGCDGADEGiDFAjAFiDBBjgBgDxBgggZfQtzF6rqPfCYyR79HPgNymQIwBYgwQY4AYA8QYIMYAMQZIaozKv09IjVEpNkbjaMTGaJQbo3A0cmMUCo7RNxrBMfoYA8QYIMYAMQZI7gMJhc+H5MY46uUz4l3t6efSsdvU4cF49YULJu+7NnDonx6Ia9c7aUZiJ2OpSYeCMQ6ZU8MYIMYAMQaIMUCMAWIMEGOAGAPEGCDGADEGiDFAzsBr5/+WkwGSGqPvccKRG6OyRmyMRsYAMQZI2HNT8SfiPz7A/TdfWAyMKUeF2xSIMUCMAWIMEGOAGAPEGCDGADEGiDFAjAFiDBBjgITFaLzZepN2Cb26RthkdDMGyOMf5b+3Ifxy5+uvb1C9I0mSJEnSR1wAQVUU1p52LUcAAAAASUVORK5CYII=\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "rect = cv2.minAreaRect(c)\n", + "box = np.int0(cv2.boxPoints(rect))\n", + "\n", + "img = original.copy()" + ], + "metadata": { + "id": "LI9Tsuq3TcMj" + }, + "execution_count": 19, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "cv2.drawContours(img, [box], -1, (0, 0, 255), 3)\n", + "cv2_imshow(img)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 124 + }, + "id": "Xjy6rO6vS649", + "outputId": "48b9c4ff-620f-4754-dcd6-27b841df47ad" + }, + "execution_count": 20, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "def getSubImage(rect, src):\n", + " center, size, theta = rect \n", + " size = [size[1],size[0]]\n", + " center, size = tuple(map(int, center)), tuple(map(int, size))\n", + " M = cv2.getRotationMatrix2D( center, theta-90, 1)\n", + " print(src.shape)\n", + " dst = cv2.warpAffine(src, M, [src.shape[1],src.shape[0]])\n", + " out = cv2.getRectSubPix(dst, size, center)\n", + " return out" + ], + "metadata": { + "id": "7AwW1JEFsy18" + }, + "execution_count": 21, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "out = getSubImage(rect, image)\n", + "cv2_imshow(out)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 133 + }, + "id": "GDTBDLOegQlF", + "outputId": "b10717b8-4eeb-4ac2-bf30-a75d459e717b" + }, + "execution_count": 22, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(107, 396)\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "out = out.astype('uint8')\n", + "out = cv2.cvtColor(out,cv2.COLOR_GRAY2RGB)" + ], + "metadata": { + "id": "mfi-UWnC7-LL" + }, + "execution_count": 23, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "encoding_pattern ={\n", + " \"111111\":0,\n", + " \"110100\":1,\n", + " \"110010\":2,\n", + " \"110001\":3,\n", + " \"101100\":4,\n", + " \"100110\":5,\n", + " \"100011\":6,\n", + " \"101010\":7,\n", + " \"101001\":8,\n", + " \"100101\":9\n", + "}\n", + "left=[\n", + " {\n", + " \"0100111\":0,\n", + " \"0110011\":1,\n", + " \"0011011\":2,\n", + " \"0100001\":3,\n", + " \"0011101\":4,\n", + " \"0111001\":5,\n", + " \"0000101\":6,\n", + " \"0010001\":7,\n", + " \"0001001\":8,\n", + " \"0010111\":9 \n", + " },\n", + " {\n", + " \"0001101\":0,\n", + " \"0011001\":1,\n", + " \"0010011\":2,\n", + " \"0111101\":3,\n", + " \"0100011\":4,\n", + " \"0110001\":5,\n", + " \"0101111\":6,\n", + " \"0111011\":7,\n", + " \"0110111\":8,\n", + " \"0001011\":9 \n", + " }\n", + "]\n", + "right = {\n", + " \"1110010\":0,\n", + " \"1100110\":1,\n", + " \"1101100\":2,\n", + " \"1000010\":3,\n", + " \"1011100\":4,\n", + " \"1001110\":5,\n", + " \"1010000\":6,\n", + " \"1000100\":7,\n", + " \"1001000\":8,\n", + " \"1110100\":9 \n", + "}" + ], + "metadata": { + "id": "s_BvQxCyF15O" + }, + "execution_count": 24, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# def binarise(pic, thrs):\n", + "# img = cv2.cvtColor(pic, cv2.COLOR_BGR2GRAY)\n", + "# ret, threshimg = cv2.threshold(img, thrs, 255, cv2.THRESH_BINARY)\n", + "# return threshimg\n", + "\n", + "def rgb2gray(rgb):\n", + " r, g, b = rgb[:,:,0], rgb[:,:,1], rgb[:,:,2]\n", + " gray = 0.2989 * r + 0.5870 * g + 0.1140 * b\n", + " return gray\n", + "\n", + "def thresholding(img, thrs):\n", + " return np.where(img < thrs , 0, 255)\n", + "\n", + "def binarise(pic, thrs):\n", + " img = rgb2gray(pic)\n", + " threshimg = thresholding(img, thrs)\n", + " return threshimg" + ], + "metadata": { + "id": "ETOhXAF48Tgm" + }, + "execution_count": 25, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "def primitive_crop(row):\n", + " indices = np.where(row == 0)[0]\n", + " if indices.shape[0] == 0:\n", + " return None\n", + " return row[indices[0]:indices[-1]+1]" + ], + "metadata": { + "id": "42hTa9Jb8ZaJ" + }, + "execution_count": 26, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "def convert_binary(bars,nlb):\n", + " binstring = ''\n", + " d = 1\n", + " cnt = 0\n", + " np.append(bars,[-1])\n", + " for i in bars:\n", + " if i == (255 - d*255):\n", + " cnt = cnt + 1\n", + " else:\n", + " if d == 1:\n", + " d = 0\n", + " binstring = binstring + '1'*math.ceil(cnt/nlb)\n", + " else:\n", + " d = 1\n", + " binstring = binstring + '0'*math.floor(cnt/nlb)\n", + " cnt = 1\n", + " return binstring" + ], + "metadata": { + "id": "60J4ZN2-Csb5" + }, + "execution_count": 27, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "def find_num_bars(cropped_row):\n", + " num = 0\n", + " for i in cropped_row:\n", + " if i == 255:\n", + " break\n", + " else:\n", + " num += 1\n", + " return num" + ], + "metadata": { + "id": "EFRfFE73BllC" + }, + "execution_count": 28, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "def find_encoding(bs_list):\n", + " par_str = \"\"\n", + " for number in range(6):\n", + " parity = 0\n", + " for i in bs_list[number]:\n", + " parity ^= int(i)\n", + " par_str += str(parity)\n", + " return par_str" + ], + "metadata": { + "id": "vDkfCwK2D7_r" + }, + "execution_count": 29, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "def get_digits(binary_string,rep_length):\n", + " number_strings = []\n", + " start_pos = 3\n", + " end_pos = len(binary_string) - 3\n", + " i = start_pos\n", + " while(i < end_pos):\n", + " if i == start_pos + rep_length*6:\n", + " i+=5\n", + " continue\n", + " number_strings.append(str(binary_string[i:i+rep_length]))\n", + " i += rep_length\n", + " return number_strings" + ], + "metadata": { + "id": "Y8wGt3aKCNfc" + }, + "execution_count": 30, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "def decode(encoding_patter_number,bs_list):\n", + " info = \"\"\n", + " info += str(encoding_pattern[encoding_pattern_number]) + '-'\n", + " for i in range(6):\n", + " # print(info)\n", + " info += str(left[int(encoding_pattern_number[i])][bs_list[i]])\n", + " info += '-'\n", + " for i in range(6,12):\n", + " info += str(right[bs_list[i]])\n", + " return info" + ], + "metadata": { + "id": "YfWBbbN0E7XR" + }, + "execution_count": 31, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "histr = cv2.calcHist([out],[0],None,[256],[0,256])\n", + "plt.plot(histr)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 448 + }, + "id": "ST1dJbA1xPDK", + "outputId": "387047e2-46d2-47e4-dbc0-3df47da74aa7" + }, + "execution_count": 32, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[]" + ] + }, + "metadata": {}, + "execution_count": 32 + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "image_cropped = out\n", + "image_cropped = cv2.resize(image_cropped, (219, 100))" + ], + "metadata": { + "id": "Gr4Eby0s75cL" + }, + "execution_count": 33, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "bimg = binarise(image_cropped,150)\n", + "cv2_imshow(bimg)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 117 + }, + "id": "2xE3YWo2jLHb", + "outputId": "2c27c0f2-8f2c-4778-efbd-4fce18b7528b" + }, + "execution_count": 34, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAANsAAABkCAAAAAAqdBo8AAACYklEQVR4nO2c226EMAxEPdX+/y+7D+RmYrNbdVftoDnSqoE4tgcTQh8I3G7L118n8EGkjRNp4+Tx1AJmZhYfp3BDPwfLH7VxHNzaEPjo9zkeIQiG76MzHJ2jeN5T1A1Yfmumtp9rZtb/5ONgaE0YDDiO2g+L+z4Wc3AzbtYAhmX3MpMbyZTaGMHeuo22BGnjRNo4kTZOpI0TaeNE2jiRNk6kjRNp40TaOJE2TqSNE2njRNo4kTZOpI0TaeNE2jiRNk6kjRNp40TaOJE2TqSNE2njRNo4kTZOpI0TaeNE2jiRNk6kjRNp40TanvBP95v4WN3OejP9Ps57cq7yGm13DwNkfmBefpL+W2Dm+afm73C+fFN/7/k29xyIX/0H2tfgntiN8oYtBpaDbMuCLEIYObcqWCOtCYR24b7XDWNjgizwEqzZbVsR2ByPvg1Cy6jyGyNsoSwMw6nRtyFwt8r9rJubuSGZf4h9R/sc+jiPpT2kmTnyeb0rCKEyZc3ETpFS9485tl+EHQ8XaNghL0j0dVyP67r5LIan59dbyoPBFXG+FQ9HrHGnXYgCnAY0+16Bi8Klj2q/yny7VKnpI/SX987al9oht3dklX0v5Yoy14CLRdPXvtQOZu7zoZEsym9d0Nzn7Vovls/3nXk1nFk6r5aF4BX6/fDqpbh6DfgKrooc5iYwtV1h06fha7n6eBLVIG5Jc+H5tHZnlt4T3JfOaQOrbH463y7eIdJMa/uuzc/L5orPvs1u3EMzxt5+WjUf5Y2pLje5o8ig5A/elT/n+1hxfT26K3f+P0DaOJE2Tu6s7RuN9cH/+PjnFgAAAABJRU5ErkJggg==\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "ctr = defaultdict(int)\n", + "for row in bimg:\n", + " cropped_row = primitive_crop(row)\n", + " if cropped_row is None:\n", + " continue\n", + " try:\n", + " nlb = find_num_bars(cropped_row)\n", + " binary_string = convert_binary(cropped_row,nlb)\n", + " rep_length = 7\n", + " num_numbers = 13\n", + " bs_list = get_digits(binary_string,rep_length)\n", + " encoding_pattern_number = find_encoding(bs_list)\n", + " information = decode(encoding_pattern_number,bs_list)\n", + " ctr[information] +=1\n", + " except:\n", + " continue\n", + "\n", + "if len(list(ctr.keys())):\n", + " print('Decoded Barcode:',list(ctr.keys())[0])\n", + "else:\n", + " print('Barcode Detection Failed!!!')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "S6snlnDyWoft", + "outputId": "a24fcb19-bc16-4627-b8a9-06d377d17ebb" + }, + "execution_count": 35, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Decoded Barcode: 6-661869-101132\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "A5zXgvBkqXPd" + }, + "execution_count": 35, + "outputs": [] + } + ] +} \ No newline at end of file