{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Checkbox Detection and Text Extraction Workflow\n", "\n", "![Checkbox Detection and corresponding text extraction](images/checkbox_detection_workflow.png \"Checkbox Detection and Text Extraction Workflow\")" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Neither CUDA nor MPS are available - defaulting to CPU. Note: This module is much faster with a GPU.\n" ] } ], "source": [ "import easyocr\n", "import cv2\n", "from ultralytics import YOLO \n", "\n", "# Load OCR model into memory\n", "reader = easyocr.Reader(['en']) # this needs to run only once to load the model into memory\n", "\n", "# Define constants\n", "BOX_COLORS = {\n", " \"unchecked\": (242, 48, 48),\n", " \"checked\": (38, 115, 101),\n", " \"block\": (242, 159, 5)\n", "}\n", "BOX_PADDING = 2\n", "\n", "# Load models\n", "DETECTION_MODEL = YOLO(\"models/detector-model.pt\") \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Helper function to detect checkboxes" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "def detect_checkbox(image_path):\n", " \"\"\"\n", " Output inference image with bounding box\n", " Args:\n", " - image: to check for checkboxes\n", " Return: image with bounding boxes drawn \n", " \"\"\"\n", " image = cv2.imread(image_path)\n", " if image is None:\n", " return image\n", " \n", " # Predict on image\n", " results = DETECTION_MODEL.predict(source=image, conf=0.1, iou=0.8) # Predict on image\n", " boxes = results[0].boxes # Get bounding boxes\n", "\n", " if len(boxes) == 0:\n", " return image\n", " \n", " box_coordinates = []\n", "\n", " print('detection_class_conf', 'start_box', 'end_box')\n", " # Get bounding boxes\n", " for box in boxes:\n", " detection_class_conf = round(box.conf.item(), 2)\n", " detection_class = list(BOX_COLORS)[int(box.cls)]\n", " # Get start and end points of the current box\n", " start_box = (int(box.xyxy[0][0]), int(box.xyxy[0][1]))\n", " end_box = (int(box.xyxy[0][2]), int(box.xyxy[0][3]))\n", " box = image[start_box[1]:end_box[1], start_box[0]: end_box[0], :]\n", " \n", " if detection_class == 'checked':\n", " box_coordinates.append((start_box, end_box))\n", " \n", " # Display the start and end coordinates of bbox\n", " print(detection_class_conf, start_box, end_box)\n", " \n", " # 01. DRAW BOUNDING BOX OF OBJECT\n", " line_thickness = round(0.002 * (image.shape[0] + image.shape[1]) / 2) + 1\n", " image = cv2.rectangle(img=image, \n", " pt1=start_box, \n", " pt2=end_box,\n", " color=BOX_COLORS['checked'], \n", " thickness = line_thickness) # Draw the box with predefined colors\n", " \n", " image = cv2.putText(img=image, org=start_box, text=detection_class, fontFace=0, color=(0,0,0), fontScale=line_thickness/3)\n", "\n", " # 02. DRAW LABEL\n", " text = str(detection_class_conf)\n", " # Get text dimensions to draw wrapping box\n", " font_thickness = max(line_thickness - 1, 1)\n", " (text_w, text_h), _ = cv2.getTextSize(text=text, fontFace=2, fontScale=line_thickness/3, thickness=font_thickness)\n", " # Draw wrapping box for text\n", " image = cv2.rectangle(img=image,\n", " pt1=(start_box[0], start_box[1] - text_h - BOX_PADDING*2),\n", " pt2=(start_box[0] + text_w + BOX_PADDING * 2, start_box[1]),\n", " color=BOX_COLORS['checked'],\n", " thickness=-1)\n", " # Put class name on image\n", " start_text = (start_box[0] + BOX_PADDING, start_box[1] - BOX_PADDING)\n", " image = cv2.putText(img=image, text=text, org=start_text, fontFace=0, color=(255,255,255), fontScale=line_thickness/3, thickness=font_thickness)\n", " \n", " return image, box_coordinates" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Detect checkbox\n", "\n", "Takes around ~ 3-6 seconds for each image" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "0: 640x544 5 uncheckeds, 7 checkeds, 820.2ms\n", "Speed: 3.9ms preprocess, 820.2ms inference, 1.3ms postprocess per image at shape (1, 3, 640, 544)\n", "detection_class_conf start_box end_box\n", "0.83 (520, 1162) (551, 1193)\n", "0.83 (522, 1106) (553, 1137)\n", "0.83 (522, 1052) (552, 1082)\n", "0.79 (522, 998) (552, 1029)\n", "0.64 (190, 1003) (212, 1024)\n", "0.29 (186, 1281) (210, 1303)\n", "0.14 (188, 1336) (207, 1355)\n" ] } ], "source": [ "image_filename = f'images/sample.png'\n", "checkbox_img, checkbox_coordinates = detect_checkbox(image_filename)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Display detected checkbox" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXEAAAGiCAYAAAARLfYlAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAAChbElEQVR4nOzdd3hc1Z34//f0GY2mqo16sSTbsmTZsrEtY0yxsQEnhECWkBCWJCxkE8iGsN8U0n6bbBISkk0nIcmmkF0ICRs6GDAuGHCTqyTLalYvM5JG03u5vz+MbiwwYAcbSea8nmcemHvPvffcq/Fn7px7zucoJEmSEARBEOYk5UxXQBAEQfjHiSAuCIIwh4kgLgiCMIeJIC4IgjCHiSAuCIIwh4kgLgiCMIeJIC4IgjCHiSAuCIIwh4kgLgiCMIeJIC4IgjCHzeogft9991FWVoZer2flypXs27dvpqskCIIwq8zaIP6Xv/yFu+66i//v//v/OHjwIPX19WzcuJGxsbGZrpogCMKsoZitCbBWrlzJBRdcwC9+8QsA0uk0xcXFfPazn+XLX/7yDNdOEARhdlDPdAVOJR6Pc+DAAe6++255mVKpZP369ezevfuU28RiMWKxmPw+nU4zOTlJVlYWCoXinNdZEAThbJEkiUAgQEFBAUrlWzeYzMogPjExQSqVIi8vb9ryvLw82tvbT7nNPffcwze/+c13o3qCIAjvisHBQYqKit6yzKwM4v+Iu+++m7vuukt+7/P5KCkpYXBwELPZPIM1EwRBODN+v5/i4mJMJtPblp2VQTw7OxuVSoXL5Zq23OVy4XA4TrmNTqdDp9O9YbnZbBZBXBCEOel0moJnZe8UrVbLsmXL2Lp1q7wsnU6zdetWGhsbZ7BmgiAIs8usvBMHuOuuu7j55ptZvnw5K1as4Cc/+QmhUIhPfOITM101QRCEWWPWBvEPf/jDjI+P841vfAOn08mSJUt47rnn3vCwUxAE4b1s1vYTf6f8fj8WiwWfzyfaxAVBmFPOJH7NyjZxQRAE4fSIIC4IgjCHiSAuCIIwh4kgLgiCMIeJIC4IgjCHiSAuCIIwh4kgLgiCMIeJIC4IgjCHiSAuCIIwh4kgLgiCMIeJIC4IgjCHiSAuCIIwh4kgLgiCMIeJIC4IgjCHiSAuCIIwh4kgLgiCMIeJIC4IgjCHiSAuCIIwh4kgLgiCMIeJIC4IgjCHiSAuCIIwh4kgLgiCMIeJIC4IgjCHiSA+i0mSRCAQwOVyMT4+jiRJb1o2HA7j8/ne8fH8fj9OpxOPx/OWxwPwer1EIhFisRgej+e0jpFOp0kmk7hcrlPuX5IkkskkTqfzTY+fSqWIx+OMj4+f1jGnhMNhXC4X0WhUPs7Jx0gmk0xMTEx7fzrHeP1+ThaPx5mcnCSdTuPz+ZAkiWg0elrXa3x8HI/HQyqVkpdJkkQikSAUCpFIJN5ye0mS3vQ6RiIRfD6ffM6xWIzJycm3rdPJdXj9fv1+P+Fw+LT28Vb7nrpOY2Nj085dODX1TFdAeHOSJPHCCy8wOjrKlVdeidfrRafT4fP5GB8fp7i4GJPJRDKZJB6Ps23bNi655BI8Hg8ajQar1UokEsHj8ZCTk0N5eTkHDx4kOzuboqIiXn31VVKpFJmZmeTm5uJyuVCr1fT19eFwONDr9UQiERwOBz09Paxdu5bx8XGGh4fJzs5mx44dNDQ00NfXh06nw2g0YrfbiUajGAwGMjIyGB8fp76+nkAgQGtrKyaTiZ6eHtxuN8uWLSM3N5fR0VHMZjNKpRKLxcKOHTsIh8MsWLCA0tJShoaGsNlsOJ1OVq5cybFjxxgeHmZ4eJjGxkb0ej2BQIDly5fT3d3N6Ogo2dnZuFwuFi5cSGdnJzU1NQQCAVpaWigrKyOZTNLS0sKKFSsYHx+ntLSUo0ePkkgk2LRpE/v378dms7Ft2zYaGxuBE4HPZrOh1+sJBoOEw2GWLVvGww8/zNKlS3G5XFRVVWEymXC73cRiMQKBAIcPH6axsZFYLIYkSaTTaVpbW1m7di2VlZUcPHgQk8nE2NgYBoMBhUJBKBRicnKS3NxcbDYb4XAYvV5PNBrl4MGD1NbWYrfbGRoaori4mMHBQUpLS+XrPT4+TiAQ4JVXXqG+vp68vDz6+/spLCzEYrHQ29tLOBwmEomQSCRYvXo1TzzxBKtWrZID5+LFizl48CB5eXn09fWRl5fH8PAwWVlZ7Nq1i4997GOYTCba29sZHh5GpVKRmZlJMBikvLycvr4+ioqKcLvd2Gw2XC4XK1as4Pjx44yOjpKfn4/X60WpVCJJElarFaVSyfj4OFqtlr1793LppZfi8XgoLy8nKysLvV4/k/8kZyURxGe5VCqFw+EgLy+PQ4cO0dzcTGZmJoWFhbz00kuUl5ejUCgoKyujsLCQAwcOkE6nCQQCJJNJ+R/6kiVLKCgooKuri87OTq655homJiYIh8NkZmYyOTlJa2srJSUlSJLEwMAAACaTiebmZnQ6HSqVit7eXvbt20dubi7Z2dm0tLRQWFjI2NgYKpWKHTt24HA4MJlMSJKE2+2muLiYlpYWOYCbzWbS6TRDQ0Ps27eP7Oxs0uk0V155JQBmsxmVSoXf76e5uZmOjg7y8vIoKipiaGgIg8GAxWIhmUzS3t7OyMgIxcXFLF68mKamJrKysti5cyfV1dU8++yzJBIJbDYbRqMRj8eDVqvF7Xaj0+no6elheHiYwcFBcnNzSSaThEIh2tvb0Wq1mM1mDh48iE6nQ6fT0d/fL9/FFhQUUF9fj9FoZGhoiIyMDA4cOMBll13G3/72NyKRCIsXL6agoICWlhYkSUKr1VJXV0dhYSEtLS2UlJTQ3d2N3++Xr3E0GiU7Oxu3200ikaC9vZ2NGzdy4MABenp6yM3NJRwO09bWxsKFC3nxxReprq7myJEjhEIhSktL8Xq9dHZ2YjKZcDqddHR0UFxczNatW5k/fz5OpxO/309FRQXJZBIAq9XKvn37cLvdVFdXU1tby+DgIF1dXfIXnVqtZnx8HJPJhEKhIJVK0dbWhsFgYGRkRP4CiEajdHV14fF48Hg8+Hw+cnJyqKur4+jRoxiNRnbs2CEH9ak7+3Q6jUqlQqFQYDQa2bJlC7m5uRQVFaFUioaDUxFBfBZTKBQsX74cpVKJXq+nvLwct9vNkiVLGBoaYtOmTXR0dFBZWYnFYsFgMBAKhRgbG8Nut5NMJsnPz6e7u5v8/HzUajVlZWXk5OSg0+lYsWIFqVQKlUqFz+fDZrORm5sLnPgVoFQq0Wq1TExMEI/HCYVC5OXlcdFFF5GVlcXo6CgNDQ309/ezYsUKTCYTlZWVhEIhdDodqVSK7OxsTCYTy5Yto729ncsuu4yhoSEWLFiAWq0mkUjg8XjIzs7GYrEAUFRUhMViQa/XMzk5SXZ2Nrm5uZhMJrRaLWq1mng8TkVFBalUilgsRjweR6vVsmLFCtxuN1deeSUGg4Hq6moGBwcpLi5GrVZz4YUXolQq5btDALvdTmlpKT09PVRWVqLT6aiqqiIvLw+Xy4XNZiOZTJJOpykqKsLj8ch3y1qtliVLlpBIJHA6nTQ2NmI2m7n88stRq9Xk5uaSSqWIRCIolUomJiZQKpUsWbKEWCyGSqWitLSUjIwM9u7dy8qVKzl8+DB5eXnU19cDyM1PBQUFFBcXYzAYkCSJyspK+vv72bRpk/zrYGJigszMTNLpNJWVlVitVvl6OZ1Orr76arq7u1mxYgUqlYqhoSEqKysxm804HA4WL15MLBZDq9WiVCopLy+XfyUUFBSg0WiIx+MEAgF2795NY2MjKpUKtVrN+vXrUSgUDA4OUlBQgMFgID8/n8nJSbKysvB6vRiNRlQqFRqNhiuuuILs7GwA1Go12dnZxGIx4ERTXTweJzs7G6/Xi1qtFk0rb0IhvV3D5xzl9/uxWCz4fD7MZvNMV+esiMfjSJKETqd714451S4/dXc4m+6G+vv7GRoaQq2e+/cikiQRDocxGo0Eg0GMRiMKhWKmq/WWEokEGo1Gbup5q8+GQqHgggsukL/8DAbDrPoszTZnEr/m/qf/PUSr1b7rx1QoFJjN5ln5Rej3+1m8eDGZmZkzXRXhbezdu1f+f6PROIM1Of+IIC7MWQqFQn4JwnuV+D0jCIIwh4kgLgiCMIed9SB+zz33cMEFF2AymcjNzeWaa66ho6NjWploNMrtt99OVlYWmZmZXHfddbhcrmllBgYG2LRpExkZGeTm5vKFL3xB7golCIIgnHDWg/hLL73E7bffzp49e9iyZQuJRIINGzYQCoXkMp///Od56qmneOSRR3jppZcYGRnh2muvldenUik2bdpEPB5n165dPPDAA/zxj3/kG9/4xtmuriAIwtwmnWNjY2MSIL300kuSJEmS1+uVNBqN9Mgjj8hljh07JgHS7t27JUmSpGeffVZSKpWS0+mUy/zqV7+SzGazFIvFTuu4Pp9PAiSfz3cWz0aYTVpaWqRAIDDT1RBOw+7du6V0Oj3T1ZgzziR+nfM28al8Hna7HYADBw6QSCRYv369XGbBggWUlJSwe/duAHbv3k1dXR15eXlymY0bN+L3+zl69OgpjxOLxfD7/dNegiAI57tzGsTT6TR33nknF154IbW1tQA4nU60Wi1Wq3Va2by8PJxOp1zm5AA+tX5q3ancc889WCwW+VVcXHyWz0YQBGH2OadB/Pbbb6e1tZWHH374XB4GgLvvvhufzye/BgcHz/kxBUEQZto5G+xzxx138PTTT7Nz506Kiork5Q6Hg3g8jtfrnXY37nK5cDgccpl9+/ZN299U75WpMq83laBIEAThveSs34lLksQdd9zBY489xrZt2ygvL5+2ftmyZWg0GrZu3Sov6+joYGBgQE752djYSEtLC2NjY3KZLVu2YDabqampOdtVFgRBmLPO+p347bffzkMPPcQTTzwhp8EE5Cx7FouFW265hbvuugu73Y7ZbOazn/0sjY2NrFq1CoANGzZQU1PDTTfdxL333ovT6eRrX/sat99+u7jbFgRBOMlZD+K/+tWvALjkkkumLf/DH/7Axz/+cQB+/OMfo1Qque6664jFYmzcuJFf/vKXclmVSsXTTz/Npz/9aRobGzEajdx8881861vfOtvVFQRBmNNEKlphzmptbaWsrExkMZwD9uzZw8qVK0WystMkUtEK7wmRSITHHntsRlL0CmcmlUqxcuXKma7GeUkEcWHOqquro6io6G0ndBZmnsFgmOkqnLdEEBfmLL1eT35+/kxXQxBmlEhFKwiCMIeJIC4IgjCHiSAuCIIwh4kgfhZIkoTT6cTn85FOpxkYGGBkZER+4CZJEqFQiCNHjjA6OnrWHsQFg0Ha29tJpVKMj48TDodPWS6VShGLxRgeHiYejxOPx6fVPRqNEg6HGR8ff9u6xWIxXC4XkiSRTqfp7++nra2NRCJxyvJT+0+n029YFwgE8Hg805al02k8Hg+SJCFJEj6fD6/XSywWk/c3OTk57dpGo9HTuqahUIhIJPKmdZQkiUQiQXd39xlNQBIMBuX6vRlJkvB6vaRSqbct5/F4Tnm9BOFUxIPNsyAej/O5z32OmpoaPvGJT3D//fczNDTEj370I7KzswG477775OBz991309nZicViwW63I0kSfr+fzMxMBgcHyc/PZ2BggMLCQnQ6HT09PdTX15ORkSF/GRQXF/N///d/uFwuvv3tb/Pf//3frFq1CrvdTjQapaamhtbWVmw2Gy0tLbjdbrm+mZmZrFixQs4c+Ytf/IIPfehDTE5OsmLFCnp7e6mrq2NoaAi/38+CBQsYHR2V8908/PDDfPOb32Tfvn387//+L1lZWTQ2NlJbW0tfXx+LFy9maGgIn89HYWEh9957L5/5zGcIhUI4HA6cTicmk4njx4/jdrtpbGykoqICpVJJc3MzyWQSg8GA0WjkpZdeoqqqipKSEsbGxsjPz+e5555j3bp1FBQU0N/f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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "plt.imshow(checkbox_img)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## EasyOCR to get the coordinates of the detected text\n", "\n", "Extract all of the text from the given image along with their coordinates\n", "\n", "It takes ~12 seconds for each image" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# canvas_size = 1400\n", "# image_filename = f'output/{pdf_filename}_output_{curr_image}.png'\n", "# image_filename = f'output/{pdf_filename}_output_1.png'\n", "\n", "# canvas_size = 1400, mag_ratio = 1.5, -> 1371\n", "# canvas_size = 900, mag_ratio = 1.8 -> 3785\n", "\n", "result = reader.readtext(image_filename, decoder = 'beamsearch',\n", " text_threshold = 0.8, low_text = 0.2, link_threshold = 0.4,\n", " canvas_size = 1500, mag_ratio = 1.5,\n", " slope_ths = 0.1, ycenter_ths = 0.8, height_ths = 0.8,\n", " width_ths = 1.0, y_ths = 0.8, x_ths = 1.0, add_margin = 0.1)\n", "\n", "# for each in result:\n", "# print(each)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Extract the coordinates of the CHECKED checkbox and all the texts detected in the given image" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The bottom right coordinate of all the CHECKED checkboxes\n", "[(552, 998), (212, 1003), (552, 1052), (553, 1106), (551, 1162), (210, 1281), (207, 1336)]\n", "\n", "The bottom left coordinate of all the detected text\n", "(233, 137) you have a mailing address other than the one listed above to which applications should be sentplease provide:\n", "(112, 257) A2. Source of Institutional Control: (click to select from dropdown)\n", "(702, 288) Private (Nonprofit)\n", "(114, 332) A3. Classify your undergraduate institution: (click to select\n", "(788, 336) dropdown)\n", "(730, 367) Coeducational\n", "(115, 415) A4. Academic year calendar: (click to select from dropdown)\n", "(759, 446) Quarter\n", "(113, 494) A4A. Describe if calendar differs by program or other:\n", "(114, 911) As. Degrees offered by your institution (select all that apply).\n", "(220, 999) Certificate\n", "(553, 999) Master's\n", "(220, 1056) Diploma\n", "(553, 1054) Post-Master's certificate\n", "(220, 1113) Associate\n", "(552, 1109) Doctoral degree - research/scholarship\n", "(220, 1167) Terminal\n", "(552, 1162) Doctoral degree - professional practice\n", "(220, 1224) Transfer\n", "(552, 1220) Doctoral degree - other\n", "(220, 1278) Bachelor's\n", "(220, 1333) Post-Bachelor's certificate\n", "(112, 1438) A6. Diversity, Equity, and Inclusion\n", "(113, 1464) Ifyou have a diversity, equity, and inclusion office or department; please provide the URL of the corresponding Web page:\n", "(812, 1499) https LLWWW duedulequity\n", "(542, 1543) END OF SECTION A\n", "(737, 332) from\n" ] } ], "source": [ "# Get the bottom right coordinates of the CHECKED checkbox\n", "checkbox_bottom_right_coord = []\n", "\n", "for each in checkbox_coordinates:\n", " checkbox_bottom_right_coord.append((each[1][0], each[0][1]))\n", "\n", "# Sort based on the coordinates\n", "checkbox_bottom_right_coord = sorted(checkbox_bottom_right_coord, key=lambda point: point[1])\n", "\n", "print(\"The bottom right coordinate of all the CHECKED checkboxes\")\n", "print(checkbox_bottom_right_coord)\n", "\n", "\n", "# Get the bottom left coordinate of all the detected text\n", "print(\"\\nThe bottom left coordinate of all the detected text\")\n", "detected_text = {}\n", "\n", "for index, each in enumerate(result):\n", " x_coord = int(each[0][0][0])\n", " y_coord = int(each[0][0][1])\n", " detected_text[(x_coord, y_coord)] = each[1]\n", "\n", "for k, v in detected_text.items():\n", " print(k, v)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Helper function to calculate Euclidean distance between two coordinates" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "import math\n", "\n", "def euclidean_distance(coord1, coord2):\n", " return math.sqrt((coord1[0] - coord2[0])**2 + (coord1[1] - coord2[1])**2)\n", "\n", "def nearest_coordinate(target_coord, coordinates):\n", " min_distance = float('inf')\n", " nearest_coord = None\n", " \n", " for coord in coordinates:\n", " distance = euclidean_distance(target_coord, coord)\n", " if distance < min_distance:\n", " min_distance = distance\n", " nearest_coord = coord\n", " \n", " \n", " return nearest_coord, euclidean_distance(target_coord, nearest_coord)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Extract the text corresponding to the CHECKED checkboxes based on the Euclidean distance\n", "\n", "" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Master's\n", "Certificate\n", "Post-Master's certificate\n", "Doctoral degree - research/scholarship\n", "Doctoral degree - professional practice\n", "Bachelor's\n", "Post-Bachelor's certificate\n" ] } ], "source": [ "# TODO Text cleanup, lowercase to match with the desired word_list for a particular section\n", "\n", "for each_checkbox_coord in checkbox_bottom_right_coord:\n", " nearest, distance = nearest_coordinate(each_checkbox_coord, list(detected_text.keys()))\n", " if distance <= 15:\n", " print(detected_text[nearest])\n", " \n" ] } ], "metadata": { "kernelspec": { "display_name": ".venv", "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.11.2" } }, "nbformat": 4, "nbformat_minor": 2 }