{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "e37d37b4-6c3a-4b97-a590-0914c914d128",
   "metadata": {},
   "outputs": [],
   "source": [
    "from preprocessing import *\n",
    "from pathlib import Path\n",
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "7119fb20-e86d-409f-a1a5-535266b95082",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "        <div style=\"display: flex; flex-flow: row wrap; text-align: center;\">\n",
       "        \n",
       "            <figure style=\"margin: 5px !important;\">\n",
       "              <img src=\"img/Laufon_009.jpg\" style=\"height: 600px\">\n",
       "              <figcaption style=\"font-size: 0.6em\">img/Laufon_009.jpg</figcaption>\n",
       "            </figure>\n",
       "        \n",
       "            <figure style=\"margin: 5px !important;\">\n",
       "              <img src=\"img/Laufon_009_preprocessed.jpg\" style=\"height: 600px\">\n",
       "              <figcaption style=\"font-size: 0.6em\">img/Laufon_009_preprocessed.jpg</figcaption>\n",
       "            </figure>\n",
       "        \n",
       "            <figure style=\"margin: 5px !important;\">\n",
       "              <img src=\"img/Zeitungsausschnitt.jpg\" style=\"height: 600px\">\n",
       "              <figcaption style=\"font-size: 0.6em\">img/Zeitungsausschnitt.jpg</figcaption>\n",
       "            </figure>\n",
       "        \n",
       "            <figure style=\"margin: 5px !important;\">\n",
       "              <img src=\"img/Zeitungsausschnitt_preprocessed.jpg\" style=\"height: 600px\">\n",
       "              <figcaption style=\"font-size: 0.6em\">img/Zeitungsausschnitt_preprocessed.jpg</figcaption>\n",
       "            </figure>\n",
       "        \n",
       "        </div>\n",
       "    "
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "paths = sorted(Path('img').glob('*.jpg'))\n",
    "gallery(paths, row_height='600px')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "cafe3bae-b78c-4a62-be12-d3811ca0f7f0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "#!/bin/bash\n",
      "\n",
      "for f in img/*.jpg\n",
      "do\n",
      "  out_path=${f/img/output}\n",
      "  out_file=${out_path/.jpg/}\n",
      "  echo \"Run tesseract on $f with output at $out_file\"\n",
      "  tesseract -l epo+fra --psm 4 $f  $out_file alto hocr txt\n",
      "done\n",
      "Run tesseract on img/Laufon_009.jpg with output at output/Laufon_009\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Detected 91 diacritics\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Run tesseract on img/Laufon_009_preprocessed.jpg with output at output/Laufon_009_preprocessed\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Estimating resolution as 190\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Run tesseract on img/Zeitungsausschnitt.jpg with output at output/Zeitungsausschnitt\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Estimating resolution as 404\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Run tesseract on img/Zeitungsausschnitt_preprocessed.jpg with output at output/Zeitungsausschnitt_preprocessed\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Estimating resolution as 441\n"
     ]
    }
   ],
   "source": [
    "%%sh\n",
    "cat run_tesseract.sh\n",
    "./run_tesseract.sh"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "68df8008-6fe3-4497-a4bf-3b16198e01a7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>output/Laufon_009.txt</th>\n",
       "      <th>output/Laufon_009_preprocessed.txt</th>\n",
       "      <th>output/Zeitungsausschnitt.txt</th>\n",
       "      <th>output/Zeitungsausschnitt_preprocessed.txt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Al la amikoj!<br><br>La eldono de detala raporto pri la oficialaj paroladoj,<br>diskutadoj kaj decidoj de l’Bulonja kongreso estas certe<br>sperantistoj, ĉar ĝi mon-<br>amenon de nia lingvo.<br><br>la plej valora memoraĵo por ĉiuj<br><br>tras la gloran venkon, la sukcesan e<br><br>| La verkisto uzis la alfaron de l'sistemo Stolze-Sehrey<br>al la helpa lingvo por fiksi la parolojn de l’reprezentantoj<br>aj popoloj, konvenintaj al la kongreso, kaj<br>stenografiaj notoj por<br>oj de la tuta landaro<br><br>de la plej div<br>prezentas nun la tradukon de si<br>provi al la publiko, ke la esperantis<br>facile interkompreniĝis kaj diskutadis per la lingvo Es-<br><br>ato<br><br>Legante la raporton la kongresanoj duafoje travivos<br>la impresplenajn horojn de Bulonjo-sur-Maro, kaj la nekon-<br>gresanoj ricevos la plej klaran bildon de la gravaj mo-<br>uj la „nova sento“ vere ekformiĝis en la<br><br>mentoj en |<br><br>mondo<br>Donacante la verketon al la tutmonda<br><br>la aŭtoro diras koran dankon al ĉiuj amikoj, kiuj per sendo<br>de resumoj aŭ de bonaj konsiloj faciligis la plenumon de<br>l’entreprenita tasko, kaj li esperas, ke la laboro farita<br>oj de la neforgesebla kongreso, ne<br><br>mideanaro,<br><br>inter la plej vi<br>estu senutila por<br>lingvo<br><br>ama progresado de nia mirinda<br><br>Laŭfon (Svisujo), en la Kristnaska tempo 1905.<br><br>Fr, Schneeberger.<br></td>\n",
       "      <td>Al la amikoj!<br><br>La eldono de detala raporto pri la oficialaj paroladoj,<br>diskutadoj kaj decidoj de Bulonja kongreso estas certe<br>la plej valora memoraĵo por ĉiuj Esperantistoj, ĉar ĝi mon-<br>tras la gloran venkon, la sukcesan ekzamenon de nia lingvo.<br><br>La verkisto uzis la alfaron de l'sistemo Stolze-Schrey<br>al la helpa lingvo por fiksi la parolojn de l'reprezentantoj<br>de la plej diversaj popoloj, konvenintaj al la kongreso, kaj<br>prezentas nun la tradukon de siaj stenografiaj notoj por<br>provi al la publiko, ke la esperantistoj de la tuta landaro<br>facile interkompreniĝis kaj diskutadis per la lingvo Es-<br>peranto.<br><br>Legante la raporton la kongresanoj duafoje travivos<br>la impresplenajn horojn de Bulonjo-sur-Maro, kaj la nekon-<br>gresanoj ricevos la plej klaran bildon de la gravaj mo-<br>mentoj en kiuj la „nova sento“ vere ekformiĝis en la<br>mondo.<br><br>Donacante la verketon al la tutmonda samideanaro,<br>la aŭtoro diras koran dankon al ĉiuj amikoj, kiuj per sendo<br>de resumoj aŭ de bonaj konsiloj faciligis la plenumon de<br>entreprenita tasko, kaj li esperas, ke la laboro farita<br>inter la plej vivaj impresoj de la neforgesebla kongreso, ne<br>estu senutila por la ĉiama progresado de nia mirinda<br>lingvo.<br><br>Laŭfon (Svisujo), en la Kristnaska tempo 1905.<br><br>Fr. Schneeberger.<br></td>\n",
       "      <td>Grou<br><br>pe Esperantiste<br><br>Spera ntiste<br>ias<br><br>aŭ depuis deux<br>CONsiderable : ]<br>8, ainsi qu’<br><br>avoir lieu<br>u mois d’août Prochain, et<br>plusieurs Membres<br><br></td>\n",
       "      <td>» : od mando dean cet<br>à Groupe Espérantiste<br><br>Le Groupe espérantiste qui s’est fondé<br><br>en, l'an dernier et dont les réunions ont<br>été suivies avec tant d’intérêt, recommence<br>ses cours à partir de lundi prochain, 15 octo-<br>bre, à 8 h. 112 du soir, au Pavilllon des So-<br>ciétés savantes, 2, rue Daniei Huet.<br><br>A ce propos, nous croyons devoir rappeler<br>que les congrès de Boulogne et de Genève<br>avant fait éclater publiquement la facilité<br>surprenante de la langue et son unité de pro-<br>nonciation, l’Esperanto a fait depuis deux<br>ans un progrès considerable: introduction<br>dans le commerce, ainsi qu’en témoignent,<br>Circulaires et prospectus, dont quelques<br><br>érhippées ont circulé à Caen, dépôt à la<br><br>Chambre des Députés d'un projet de loi ter-<br><br>dant à l’enseignement de l’espéranto dans les<br>écoles, institutions d'agences commerciales,<br><br>dans les centres de relations internationales,<br>fondation de Sociétés industrielle, etc<br><br>= Le 3° congrès d'Esperanto devant avoir lieu<br>~en Angleterre, au mois d'aoŭt prochain, et<br>devant être pour plusieurs membres du<br>. Groupe une occasion merveilteuse d'utiliser<br>| la langue, les cours seront surtout dirigés en<br>vue de la conversation.<br><br>Ŝ Les adhésions au groupe seront reçues à<br> louverture de la première réunion.<br><br></td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "txtpaths = sorted(Path('output').glob('*.txt'))\n",
    "txts = [open(txt).read() for txt in txtpaths]\n",
    "txt_df = pd.DataFrame([txts], columns=txtpaths)\n",
    "pd.set_option(\"display.max_colwidth\", None)\n",
    "display(HTML(txt_df.to_html().replace(\"\\\\n\",\"<br>\")))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "e094a868-4c3e-4658-9f9c-a381259d0849",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Weighted average angle is -0.53 degrees\n"
     ]
    },
    {
     "data": {
      "image/png": "[encoded data, 17068 characters]",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\tBorderRegion: upperleft_point=(40, 61) lowerright_point=(770, 1176) (total image size: (810, 1237))\n",
      "\tEliminated 6 contours, 247 surviving (total number contours: 253)\n",
      "\tBoundingBox of surviving contours: (141, 210, 601, 734) -> upperleft_point=(141, 210) lowerright_point(742, 944)\n",
      "Weighted average angle is 5.88 degrees\n"
     ]
    },
    {
     "data": {
      "image/png": "[encoded data, 34432 characters]",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\tBorderRegion: upperleft_point=(68, 95) lowerright_point=(1307, 1805) (total image size: (1375, 1900))\n",
      "\tEliminated 62 contours, 754 surviving (total number contours: 816)\n",
      "\tBoundingBox of surviving contours: (81, 132, 1177, 1673) -> upperleft_point=(81, 132) lowerright_point(1258, 1805)\n"
     ]
    }
   ],
   "source": [
    "img_paths = ['img/Laufon_009.jpg', 'img/Zeitungsausschnitt.jpg']\n",
    "for path in img_paths:\n",
    "    preprocess_pipeline(cv.imread(path), debug=True, debug_path=path)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "09d3f0f2-bc0b-45d6-a361-93f5ad1b24cd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "        <div style=\"display: flex; flex-flow: row wrap; text-align: center;\">\n",
       "        \n",
       "            <figure style=\"margin: 5px !important;\">\n",
       "              <img src=\"img/debug_img/Laufon_009_debug.jpg\" style=\"height: 600px\">\n",
       "              <figcaption style=\"font-size: 0.6em\">img/debug_img/Laufon_009_debug.jpg</figcaption>\n",
       "            </figure>\n",
       "        \n",
       "            <figure style=\"margin: 5px !important;\">\n",
       "              <img src=\"img/debug_img/Laufon_009_debug_crop.jpg\" style=\"height: 600px\">\n",
       "              <figcaption style=\"font-size: 0.6em\">img/debug_img/Laufon_009_debug_crop.jpg</figcaption>\n",
       "            </figure>\n",
       "        \n",
       "            <figure style=\"margin: 5px !important;\">\n",
       "              <img src=\"img/debug_img/Zeitungsausschnitt_debug.jpg\" style=\"height: 600px\">\n",
       "              <figcaption style=\"font-size: 0.6em\">img/debug_img/Zeitungsausschnitt_debug.jpg</figcaption>\n",
       "            </figure>\n",
       "        \n",
       "            <figure style=\"margin: 5px !important;\">\n",
       "              <img src=\"img/debug_img/Zeitungsausschnitt_debug_crop.jpg\" style=\"height: 600px\">\n",
       "              <figcaption style=\"font-size: 0.6em\">img/debug_img/Zeitungsausschnitt_debug_crop.jpg</figcaption>\n",
       "            </figure>\n",
       "        \n",
       "        </div>\n",
       "    "
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "debug_imgpaths = sorted(Path('img/debug_img').glob('*.jpg'))\n",
    "gallery(debug_imgpaths, row_height='600px')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "40a60755-b6a0-44ff-bbbe-7398f6d9417b",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
