From 96e3aa4a69a51283e135470406e67b788f0ed900 Mon Sep 17 00:00:00 2001 From: Somyajain2004 <2004.somyajain@gmail.com> Date: Sun, 10 Nov 2024 17:23:49 +0530 Subject: [PATCH 1/2] Text Extraction from images --- .../EasyOCR/EasyOCR_output_pdf.pdf | Bin 0 -> 1000 bytes .../EasyOCR/EasyOCR_output_text.txt | 4 + .../EasyOCR/Easy_OCR_code.ipynb | 277 ++++++++++++++++++ .../Text_Extractor/EasyOCR/easyOCR_output.png | Bin 0 -> 13603 bytes .../EasyOCR/testimg_easyOCR.jfif | Bin 0 -> 4813 bytes .../Tesseract/Tesseract_output_pdf.pdf | Bin 0 -> 1017 bytes .../Tesseract/Tesseract_output_text.txt | 4 + .../Tesseract/Test_img_tessseract.png | Bin 0 -> 6907 bytes .../Tesseract/pyTesseract_code.ipynb | 204 +++++++++++++ .../Tesseract/tesseract_output.png | Bin 0 -> 15952 bytes 10 files changed, 489 insertions(+) create mode 100644 Computer Vision/Text_Extractor/EasyOCR/EasyOCR_output_pdf.pdf create mode 100644 Computer Vision/Text_Extractor/EasyOCR/EasyOCR_output_text.txt create mode 100644 Computer Vision/Text_Extractor/EasyOCR/Easy_OCR_code.ipynb create mode 100644 Computer Vision/Text_Extractor/EasyOCR/easyOCR_output.png create mode 100644 Computer Vision/Text_Extractor/EasyOCR/testimg_easyOCR.jfif create mode 100644 Computer Vision/Text_Extractor/Tesseract/Tesseract_output_pdf.pdf create mode 100644 Computer Vision/Text_Extractor/Tesseract/Tesseract_output_text.txt create mode 100644 Computer Vision/Text_Extractor/Tesseract/Test_img_tessseract.png create mode 100644 Computer Vision/Text_Extractor/Tesseract/pyTesseract_code.ipynb create mode 100644 Computer Vision/Text_Extractor/Tesseract/tesseract_output.png diff --git a/Computer Vision/Text_Extractor/EasyOCR/EasyOCR_output_pdf.pdf b/Computer Vision/Text_Extractor/EasyOCR/EasyOCR_output_pdf.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0d3d0a4054833dd74de982cd39932f6e439471ef GIT binary patch literal 1000 zcmZuw&ubGw6jl(?0gpnemv^v`R@~Vi*=MKO`5c6>l}7wzL|O7d*AnVyjCjTFf@x;po3W3 zAo)C9?sXW@n(H%y--vMu2AAte+e}0&Imc5ex6_LApkF8}r^TpC@7b;7g zOJ^^RUELphF!`eKa(`?4`sSPT`niuEHYPWluWxN{{oYDFfBP)|{boVGoNDZk&HjD* zb7Hgm(Ae3V-Tjt&zw^oX{B_sPrrw=D<6pUUPbE6w9i*&EJS9L(=86_jM;Kod?fG)7`5tD)E61tSE z$-ef=0i>Acs8+yzpeq5N<8d$qM&c_Y4$?-mBH=AD2@Q&_0$pZZj9+P^k%hrr9LyE0 zq)(sEy;Iip-pKftV`LMrnJ**b($^B z7s3zwc59w!(+QLgZI*%HC2Rypm!?hK%ov8D8-|s$oQV;#sS&b+ZY;Xe4TY~7(#Q52 z^kcQd_?)L=4jrQ9KrR4J!VoJ|cNg8BNKl3dI9y8a(5i-nwcYuVUJCorTug*gs7JG>_&HwamTKPNUx@PuK?v@V1M eB^3Ub72Xn{9O`=*OE;4J+NK=0.5 in /usr/local/lib/python3.10/dist-packages (from easyocr) (0.20.0+cu121)\n", + "Requirement already satisfied: opencv-python-headless in /usr/local/lib/python3.10/dist-packages (from easyocr) (4.10.0.84)\n", + "Requirement already satisfied: scipy in /usr/local/lib/python3.10/dist-packages (from easyocr) (1.13.1)\n", + "Requirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (from easyocr) (1.26.4)\n", + "Requirement already satisfied: Pillow in /usr/local/lib/python3.10/dist-packages (from easyocr) (10.4.0)\n", + "Requirement already satisfied: scikit-image in /usr/local/lib/python3.10/dist-packages (from easyocr) (0.24.0)\n", + "Collecting python-bidi (from easyocr)\n", + " Downloading python_bidi-0.6.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.9 kB)\n", + "Requirement already satisfied: PyYAML in /usr/local/lib/python3.10/dist-packages (from easyocr) (6.0.2)\n", + "Requirement already satisfied: Shapely in /usr/local/lib/python3.10/dist-packages (from easyocr) (2.0.6)\n", + "Collecting pyclipper (from easyocr)\n", + " Downloading pyclipper-1.3.0.post6-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.metadata (9.0 kB)\n", + "Collecting ninja (from easyocr)\n", + " Downloading ninja-1.11.1.1-py2.py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl.metadata (5.3 kB)\n", + "Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from torch->easyocr) (3.16.1)\n", + "Requirement already satisfied: typing-extensions>=4.8.0 in /usr/local/lib/python3.10/dist-packages (from torch->easyocr) (4.12.2)\n", + "Requirement already satisfied: networkx in /usr/local/lib/python3.10/dist-packages (from torch->easyocr) (3.4.2)\n", + "Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from torch->easyocr) (3.1.4)\n", + "Requirement already satisfied: fsspec in /usr/local/lib/python3.10/dist-packages (from torch->easyocr) (2024.10.0)\n", + "Requirement already satisfied: sympy==1.13.1 in /usr/local/lib/python3.10/dist-packages (from torch->easyocr) (1.13.1)\n", + "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.10/dist-packages (from sympy==1.13.1->torch->easyocr) (1.3.0)\n", + "Requirement already satisfied: imageio>=2.33 in /usr/local/lib/python3.10/dist-packages (from scikit-image->easyocr) (2.36.0)\n", + "Requirement already satisfied: tifffile>=2022.8.12 in /usr/local/lib/python3.10/dist-packages (from scikit-image->easyocr) (2024.9.20)\n", + "Requirement already satisfied: packaging>=21 in /usr/local/lib/python3.10/dist-packages (from scikit-image->easyocr) (24.1)\n", + "Requirement already satisfied: lazy-loader>=0.4 in /usr/local/lib/python3.10/dist-packages (from scikit-image->easyocr) (0.4)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->torch->easyocr) (3.0.2)\n", + "Downloading easyocr-1.7.2-py3-none-any.whl (2.9 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.9/2.9 MB\u001b[0m \u001b[31m48.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading ninja-1.11.1.1-py2.py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl (307 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m307.2/307.2 kB\u001b[0m \u001b[31m22.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading pyclipper-1.3.0.post6-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (912 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m912.2/912.2 kB\u001b[0m \u001b[31m44.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading python_bidi-0.6.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (286 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m286.8/286.8 kB\u001b[0m \u001b[31m19.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hInstalling collected packages: python-bidi, pyclipper, ninja, easyocr\n", + "Successfully installed easyocr-1.7.2 ninja-1.11.1.1 pyclipper-1.3.0.post6 python-bidi-0.6.3\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "!pip install fpdf" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "RzslMvBT3m8B", + "outputId": "42040908-5521-4b4e-e453-f29357b1017b" + }, + "execution_count": 10, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Collecting fpdf\n", + " Downloading fpdf-1.7.2.tar.gz (39 kB)\n", + " Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + "Building wheels for collected packages: fpdf\n", + " Building wheel for fpdf (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + " Created wheel for fpdf: filename=fpdf-1.7.2-py2.py3-none-any.whl size=40704 sha256=ba17c004c11322432e0424a6f6b30cf73adc4f92d3b4827fb4634d993ea06273\n", + " Stored in directory: /root/.cache/pip/wheels/f9/95/ba/f418094659025eb9611f17cbcaf2334236bf39a0c3453ea455\n", + "Successfully built fpdf\n", + "Installing collected packages: fpdf\n", + "Successfully installed fpdf-1.7.2\n" + ] + } + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "id": "vj6ee7edoVGP" + }, + "outputs": [], + "source": [ + "from easyocr import Reader\n", + "from PIL import Image\n", + "from io import BytesIO\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "uCLVTVS6oVGR", + "outputId": "8230340d-b821-40da-cc6e-cbeaca35f28b" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "WARNING:easyocr.easyocr:Downloading detection model, please wait. This may take several minutes depending upon your network connection.\n" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Progress: |██████████████████████████████████████████████████| 100.0% Complete" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "WARNING:easyocr.easyocr:Downloading recognition model, please wait. This may take several minutes depending upon your network connection.\n" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Progress: |██████████████████████████████████████████████████| 100.0% Complete" + ] + } + ], + "source": [ + "# Loading model for the English language\n", + "language_reader = Reader([\"en\"])" + ] + }, + { + "cell_type": "code", + "source": [ + "def extract_txt_from_img(file_path):\n", + "\n", + " image = Image.open(file_path)\n", + "\n", + " image_np = np.array(image)\n", + " text = language_reader.readtext(image_np)\n", + " extracted_text = \"\\n\".join([result[1] for result in text])\n", + "\n", + " return extracted_text" + ], + "metadata": { + "id": "RypAbeHmsmfc" + }, + "execution_count": 4, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "filepath = \"testimg6.jfif\"\n", + "img_to_text = extract_txt_from_img(filepath)\n", + "print(img_to_text)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "TJGr3qmvtLmJ", + "outputId": "6ebf19ca-1c31-41e3-8bb0-c458d3993ad7" + }, + "execution_count": 5, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "SEE\n", + "LIGHT\n", + "In THE\n", + "DARKNESS\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# making text file\n", + "def save_text_as_file(text, text_file_path):\n", + " with open(text_file_path, 'w') as file:\n", + " file.write(text)" + ], + "metadata": { + "id": "d7Cs1Hvw3Rfq" + }, + "execution_count": 6, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "save_text_as_file(img_to_text, \"/content/EasyOCR_output_text.txt\")" + ], + "metadata": { + "id": "k3VnYn-d3W67" + }, + "execution_count": 9, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# making pdf file\n", + "from fpdf import FPDF\n", + "def save_text_as_pdf(text, pdf_file_path):\n", + " pdf = FPDF()\n", + " pdf.set_auto_page_break(auto=True, margin=15)\n", + " pdf.add_page()\n", + "\n", + " pdf.set_font(\"Arial\", size=12)\n", + " pdf.multi_cell(0, 10, text)\n", + "\n", + " pdf.output(pdf_file_path)" + ], + "metadata": { + "id": "ifn93tls3r7Z" + }, + "execution_count": 11, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "save_text_as_pdf(img_to_text, \"/content/EasyOCR_output_pdf.pdf\")" + ], + "metadata": { + "id": "Cg6zo_Ew3v6l" + }, + "execution_count": 12, + "outputs": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + }, + "colab": { + "provenance": [], + "gpuType": "T4" + }, + "accelerator": "GPU", + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/Computer Vision/Text_Extractor/EasyOCR/easyOCR_output.png b/Computer Vision/Text_Extractor/EasyOCR/easyOCR_output.png new file mode 100644 index 0000000000000000000000000000000000000000..c06bc6c32bcd4799ddedfb8b7f92c537fa83c8fa GIT binary patch literal 13603 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 literal 0 HcmV?d00001 diff --git a/Computer Vision/Text_Extractor/EasyOCR/testimg_easyOCR.jfif b/Computer Vision/Text_Extractor/EasyOCR/testimg_easyOCR.jfif new file mode 100644 index 0000000000000000000000000000000000000000..70478498270b08146b3f601c7ff8ffcab45fef3b GIT binary patch literal 4813 zcmY*ccQ{;6_rJ>utCuJ%dKYb3qSqu?Wm9w_%CZO|Hb_B)gh;HmRxgQ~V3DX_z4z5a zl!!#MXbD1;#J)H0_x=6xJM)}-=FaCl=boAQ%z5TgrYWBRRue;%Apn5@00e9RWe#`> zz|PRJu&{7~$_gqA3lrGD9upH2CmRi-E9H2{IqoS~%y(JQPV3Q*C|!072= zG=H5SQ~))UjfP!V@y8hsOP54iPG$XT{z(#gHnOt`qYs#SJdH zy5a5yezCwjdD_ke2IPeR|Nm=$BT}ECfr1!<4NL<9fzr}KssEP@go=$CdM%fRokRG# z|Ja$coJvULc3gPkJ4O8n$}GT04TfW*W&?BqM_0Egk*j7;IT(_Ia^Hwr>gn?m@C3z6 zuF(v6}fdc-Xm~Qn9kPr4r+E^$e)=gdw7DuChK(feMKQ(t`km zj;@9d`c^!gkuF-ubbyt87cV2N6iIB#AElO7dPXGWkA@TTgqNkFtCjj5U-Dw5i{`rI zK({D_h=VhVq#3=9@s}mC5fh>bSFWyrIXy4emNXJk!6aOk#SJJS&l-~Kd!AcS+jg^Z z@g$F`u;pSaOupUvQIjc%iwIeA@$uSR z7n+QB@pS__(UIG8A(w(!+*&_3j_`$Lt~nO?baXJNe zX}!)NDm#W;dK{`m_ibkAT(|z@|FoFlZu|9;OLyp}{P+bIVQ9u=*W8KGyU@fz_t(d( zp#9Boe+M%%8uTuUixm}B=CPI2eP9GofZ9hDl_mkqJBz(9^R!8BG$~w|mCoRoHkJ0R zzvd>zH5mLrV5N;llM$#(Cj{FD-Xy9g&I_fGAIz}r4k znUtX;pB%@%{GiNQ4%yAhU-!J%QZ!M?qxn*uBCxEbHs>@fEK!L}&Ew2Nm3H}UtY>Xf z6#Dw|vRK+(&fWqOBe8F8MzXjr5^ey8v_@Pec@ighd+4ZmlE?i+$A0q-eM-iBI>Cvt zJqfZtN1u4pC43iOl+>X61l~FxlM~mtX#MB?hXA9w5!HC#z2)WgAKRxG4f9Wl1>d)k zg-+k>y`P;EkGo(_YklYL@rM}9!ls95*F%qk{)J6HuoJ9Z<(LXb^}gV@YisxmfAlcx zI^FT8WeHQvR^T}4Zkc&9x1LltDQJC%-@7||p~=a#>(P#1t<$4-p$cq&@d)I`KB}%_ zy|Yw}+kVI6-Uj#hj$o7HR#K~4d1}~q?qDp}r74s8Tj{ZSY@kE>tnnd6wdJrpIqY@goMh;Z<9P~T9#-qJ_2p@~4xdKV z(h(npG}uRwXY34acIemT7lk0*Nrbq}K`Rm=tkL z$~DkJuY+7yjCKX0!~@iZ*G?HdE*69tIqb+7{lKrD^c(y^Tt&gC`10hw*kJ56DYnVk@q@siYBwP*3UCQEH!ZZezCSoK zx&P`)$hPRQ?7oxVoTkU8kkzd$-8*}Kc*8!_ZDlv|pWZznS5!M02~HlC=WHE99=q@$ zMGoGyE0H-w^~|X0+7O6phl`$7k^mzCe%*yEhPxz&L+9x2$Js{4*`W<_J#>Y!>?Mq> zPa$+BYdHR~5YDEFdj++hZ-hnE$G@Tg=>^*{pUYN|fzj%pNfh9AYLR4CIGS?Kl1--$IKia(Xr zr@ivc%6?VpZH!L6G=oj{*E=>>XHzG9@{5Gi42mnRUuI6~SoA+M z7q*CW@GbLaaK2QVWIjNxQOcK^sq#4FVH7W|2qI-egZ^W){?Lmv*qSR*4t=!v-r5)4 z=SwdL?AsJq7~Yz(TD!_%3p-~?#T<$m)X>;4(^25`O?7cpS zez;*3+5AD=r%jNCs8p90MXOU^65uZGfUrz<7o+0gi_XqbMY+sxx!u~Z8CCu=UWjW~ z;2T+lVA5Smg7_OH&uT4LL(~opoCN7myPwV)F$E9*k}}pfITmGT_z)x|{(q!2zPfahdnoe&Kc^esdJ^~&H(@c) z(C$FSj#nL>`>lWarKlqJ^wWbThp?O@E$;ZU5&Av-YV*oy+~I;)xvFWn0JfW$!8`t<@WQ6b&ho|R=*hXbjO8^XmFnv z-`;&tevwtBSUlOPS8Z}NT^&LqU081LSbU&@FH5#Bn0hDBW!3d%6I&*80qIsAbgNkX zaCataXgMdTbFp~{%Lo0PKJ-5J{h||xZ;I5&al^3jx`^ACfEpOS-<}PhU{O+ef~O zXqay3l{wFt{8qQJoEq|8FX}P=_k7XK;qnOuUEN##=^Iyg@_d1%$> z{%!t_xQ9CPGmH*#v#B04njQDRlF*tqqPxw3wPnK6*WKXs7|Sl< zI1A|_TuZo++AtiLs^T zbRV&NBxgt_YsNPZd&#mO+AqJqSsu|{$85K89tG!jhTC##($Ox7xbFPGekC5GNv2bM zLw5^r%uhFZ+sk$9G;(4uOL|@}C7~qcTBM7hfk9~zZR^LCyX(h!%$U;ZK{7Z(TXm16 zN|uuXoEz!?L%3pKQMIbN2Va@*7L*mI0B`}nA=1x4O`W@;Mefb{#~k}t)*BouzQB^R z^4!gWXF-l4iDoXB+9d1{FhYW`qM3_gj09S*SZEczz|mn6$N`Fd9u`t?It-By6sDpdg-( zgZ<;et&M&CK|H=i2Ntg2=j53LYVs~ip8IkSiRxhgfRy?0{mU4+*Y1(`9AZf^04ysRZcSMSF7|1)@fEDmjYNEmltiE3gJo1 z95U(&W1Dse6nJnkqrwPSikY3#bts0b#}2_WC`LbQ4DXlBt$(Vxjy=!w6Io0&RI=r+9#b498orGrFc*sUim#z_a@(Mwbw_p*jzb9~=Q+wa+dPn42{J z%w)txpM=eSnfqh9w3FEL4V*lmPg3lJ!Ky<1*{u78{tZs&UUByvsV&IFjvvlbp;h~P zj+FKeOb18S@iIEdq}UZFzY??Gr*EL-J7(!ejb<$imgNhUFeJZYk$$R;H)?KH47_j( z36y^H+vBDHq*m$o9OG|veyu9+o-QdQ+faa#m;KtR^r5T6UTFtU)*kI0m*;>h(f=gt zY5TC7TQE1s4Gth(nrgaD!oWF6T(}r4T|TbU|1QN~(y01F@R5e)DRCX)A+QfWsx-WzBh7ZlzAofXU3!0mcEPi zDWU~dKjpH4Wi)Z^`Oi<+mgR}MB^CXc?(epTtD>7bKR)@gZo54AgRRK*5#M%<)+O1j zZD!^UFiDQtjB5!G@JoYshP(Oe*R1%e-p&Wr`SsS41y*ZYk%!VC(VF>-ZeNiKNMCsB zWa^yYwIx3KVZ!0R-p|~%R5Q_!MJg@_d{mH9PWXe;aVS^JCpKKk zeO*{7a1ztk=VttN)MwMkt2TSjEl zYL$?et4zgUS&8=JOFx-!*2WvA1y=VNX8Yu&+j)Yu#L{!gYjr>tpX@n_gqz)}F6nfW z##^VYkClvOGwg&F z?2XI3#Ex?ZttW(eQIZa7d!1wXi3NlQyD`E8VB#q00a-ulyO#uOIAe|wXff7$^yV*oQNnD}K{09Zp+;9K@ literal 0 HcmV?d00001 diff --git a/Computer Vision/Text_Extractor/Tesseract/Tesseract_output_pdf.pdf b/Computer Vision/Text_Extractor/Tesseract/Tesseract_output_pdf.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c0a676254a4b5afb829068f8149191aeff6b2d45 GIT binary patch literal 1017 zcmZuw&ubGw6jt$|10o0>id5zjO;elM+07=~5-M%d(9lX^608_{*zQiYTQ)OccUBWm z3jGT__*jywVa0%xT&ZzzDEMnYMENVMoEBS$B zAtt53maNDe;R5+G`I{UPB&6~6?|9-aXr#9WKlxh4l=$Xm*>xb%o z>f2QE&OTY1`qJ=&citoI$MuizYo8N0$Lnvl9>4uW?~Y$wzI5u()f-P#=7U5AHK>|T zC=wyE;#bZbqz&$c!l^Tfn*?me zq`|ttUv7i5^MkoCn9EQ}KYTt93yM{iHN{HqR@OF{BQYGn_PCDhzj55y0hg22UP*0DaJ>r!@R2%ma}w}NGw!J=r5}iBai?9 literal 0 HcmV?d00001 diff --git a/Computer Vision/Text_Extractor/Tesseract/Tesseract_output_text.txt b/Computer Vision/Text_Extractor/Tesseract/Tesseract_output_text.txt new file mode 100644 index 00000000..295f545d --- /dev/null +++ b/Computer Vision/Text_Extractor/Tesseract/Tesseract_output_text.txt @@ -0,0 +1,4 @@ +The Quick Brown +Fox Jumps Over +The Lazy Dog + \ No newline at end of file diff --git a/Computer Vision/Text_Extractor/Tesseract/Test_img_tessseract.png b/Computer Vision/Text_Extractor/Tesseract/Test_img_tessseract.png new file mode 100644 index 0000000000000000000000000000000000000000..504cadb9c556fe089dbf46642aadbe858ea66300 GIT binary patch literal 6907 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 BP7444 literal 0 HcmV?d00001 diff --git a/Computer Vision/Text_Extractor/Tesseract/pyTesseract_code.ipynb b/Computer Vision/Text_Extractor/Tesseract/pyTesseract_code.ipynb new file mode 100644 index 00000000..3d079480 --- /dev/null +++ b/Computer Vision/Text_Extractor/Tesseract/pyTesseract_code.ipynb @@ -0,0 +1,204 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "gpuType": "T4" + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + }, + "accelerator": "GPU" + }, + "cells": [ + { + "cell_type": "code", + "source": [ + "!apt update\n", + "!apt install -y tesseract-ocr\n", + "!pip install pytesseract" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "5gr0jxeKxBTH", + "outputId": "b4169741-3631-47b0-cb58-6ef999d07a0a" + }, + "execution_count": 14, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\u001b[33m\r0% [Working]\u001b[0m\r \rHit:1 https://cloud.r-project.org/bin/linux/ubuntu jammy-cran40/ InRelease\n", + "Hit:2 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64 InRelease\n", + "Hit:3 http://security.ubuntu.com/ubuntu jammy-security InRelease\n", + "Hit:4 http://archive.ubuntu.com/ubuntu jammy InRelease\n", + "Hit:5 http://archive.ubuntu.com/ubuntu jammy-updates InRelease\n", + "Hit:6 https://ppa.launchpadcontent.net/deadsnakes/ppa/ubuntu jammy InRelease\n", + "Hit:7 http://archive.ubuntu.com/ubuntu jammy-backports InRelease\n", + "Hit:8 https://ppa.launchpadcontent.net/graphics-drivers/ppa/ubuntu jammy InRelease\n", + "Hit:9 https://ppa.launchpadcontent.net/ubuntugis/ppa/ubuntu jammy InRelease\n", + "Hit:10 https://r2u.stat.illinois.edu/ubuntu jammy InRelease\n", + "Reading package lists... Done\n", + "Building dependency tree... Done\n", + "Reading state information... Done\n", + "52 packages can be upgraded. Run 'apt list --upgradable' to see them.\n", + "\u001b[1;33mW: \u001b[0mSkipping acquire of configured file 'main/source/Sources' as repository 'https://r2u.stat.illinois.edu/ubuntu jammy InRelease' does not seem to provide it (sources.list entry misspelt?)\u001b[0m\n", + "Reading package lists... Done\n", + "Building dependency tree... Done\n", + "Reading state information... Done\n", + "tesseract-ocr is already the newest version (4.1.1-2.1build1).\n", + "0 upgraded, 0 newly installed, 0 to remove and 52 not upgraded.\n", + "Requirement already satisfied: pytesseract in /usr/local/lib/python3.10/dist-packages (0.3.13)\n", + "Requirement already satisfied: packaging>=21.3 in /usr/local/lib/python3.10/dist-packages (from pytesseract) (24.1)\n", + "Requirement already satisfied: Pillow>=8.0.0 in /usr/local/lib/python3.10/dist-packages (from pytesseract) (10.4.0)\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "!pip install fpdf" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "mc-mJHTe1fZ7", + "outputId": "694a3e50-4fc8-449e-aed7-d5731fff9ba8" + }, + "execution_count": 27, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Collecting fpdf\n", + " Downloading fpdf-1.7.2.tar.gz (39 kB)\n", + " Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + "Building wheels for collected packages: fpdf\n", + " Building wheel for fpdf (setup.py) ... \u001b[?25l\u001b[?25hdone\n", + " Created wheel for fpdf: filename=fpdf-1.7.2-py2.py3-none-any.whl size=40704 sha256=c65af2b316c1958222f6599226e3149893b294e54f4676f444a06654e0838f9f\n", + " Stored in directory: /root/.cache/pip/wheels/f9/95/ba/f418094659025eb9611f17cbcaf2334236bf39a0c3453ea455\n", + "Successfully built fpdf\n", + "Installing collected packages: fpdf\n", + "Successfully installed fpdf-1.7.2\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "import pytesseract\n", + "from PIL import Image\n", + "\n", + "pytesseract.pytesseract.tesseract_cmd = r'/usr/bin/tesseract'\n", + "\n", + "def extract_text_with_pytesseract(filepath):\n", + " image = Image.open(filepath)\n", + " text = pytesseract.image_to_string(image)\n", + " return text" + ], + "metadata": { + "id": "TA_Nn1S4zAJh" + }, + "execution_count": 17, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Example usage\n", + "filepath = \"imgTest2.png\"\n", + "img_to_text = extract_text_with_pytesseract(filepath)\n", + "print(img_to_text)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "vfjdPeVmzIl7", + "outputId": "7e5e0afc-3f5b-447d-9097-f26a5ac40b3f" + }, + "execution_count": 20, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "The Quick Brown\n", + "Fox Jumps Over\n", + "The Lazy Dog\n", + "\f\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# making text file\n", + "def save_text_as_file(text, text_file_path):\n", + " with open(text_file_path, 'w') as file:\n", + " file.write(text)" + ], + "metadata": { + "id": "FjO67ZpTzqv_" + }, + "execution_count": 26, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "save_text_as_file(img_to_text, \"/Tesseract_output_text.txt\")" + ], + "metadata": { + "id": "1WnfddBA0J2W" + }, + "execution_count": 25, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# making pdf file\n", + "from fpdf import FPDF\n", + "def save_text_as_pdf(text, pdf_file_path):\n", + " pdf = FPDF()\n", + " pdf.set_auto_page_break(auto=True, margin=15)\n", + " pdf.add_page()\n", + "\n", + " pdf.set_font(\"Arial\", size=12)\n", + " pdf.multi_cell(0, 10, text)\n", + "\n", + " pdf.output(pdf_file_path)" + ], + "metadata": { + "id": "SotTZ6KC1Sqo" + }, + "execution_count": 30, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "save_text_as_pdf(img_to_text, \"/Tesseract_output_pdf.pdf\")" + ], + "metadata": { + "id": "KtZa-7581r3m" + }, + "execution_count": 32, + "outputs": [] + } + ] +} \ No newline at end of file diff --git a/Computer Vision/Text_Extractor/Tesseract/tesseract_output.png b/Computer Vision/Text_Extractor/Tesseract/tesseract_output.png new file mode 100644 index 0000000000000000000000000000000000000000..2d44c9ed0087740583e5e2d31c5020868ae85bc2 GIT binary patch literal 15952 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 Date: Sun, 10 Nov 2024 17:36:16 +0530 Subject: [PATCH 2/2] Create readme.md --- Computer Vision/Text_Extractor/readme.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Computer Vision/Text_Extractor/readme.md diff --git a/Computer Vision/Text_Extractor/readme.md b/Computer Vision/Text_Extractor/readme.md new file mode 100644 index 00000000..0555bc59 --- /dev/null +++ b/Computer Vision/Text_Extractor/readme.md @@ -0,0 +1,23 @@ +I have a text extractor, to extract texts from images of any extension(png, jpg, jpeg, etc). +I have done this using two different approaches : + +1. PyTesseract: It is a Python wrapper for Google's Tesseract-OCR Engine. + It's widely used for text extraction from clear, high-quality images. + PyTesseract works well with images where the text is easily distinguishable from the background. + + Key Features: + - Works best with clear, high-contrast images. + - Good for images with clean and well-spaced text. + - Simple and fast for high-quality documents. + +2. EasyOCR : It is a deep learning-based OCR library that supports over 80 languages. + It’s great for noisy, low-quality images where PyTesseract may struggle. + EasyOCR uses more advanced algorithms, making it better at handling blurry text, noisy backgrounds, and images with distorted or handwritten text. + + Key Features: + - Works better on noisy or complex images. + - Supports multiple languages and scripts. + - Handles skewed, rotated, and non-uniform text layout better. + - Can extract text from both printed and handwritten sources. + +