| import matplotlib.pyplot as plt |
| import matplotlib.patches as patches |
| from matplotlib.patches import Patch |
|
|
| def visualize_detected_tables(img, det_tables): |
| plt.imshow(img, interpolation="lanczos") |
| fig = plt.gcf() |
| fig.set_size_inches(20, 20) |
| ax = plt.gca() |
|
|
| for det_table in det_tables: |
| bbox = det_table['bbox'] |
| if det_table['label'] == 'table': |
| facecolor = (1, 0, 0.45) |
| edgecolor = (1, 0, 0.45) |
| alpha = 0.3 |
| linewidth = 2 |
| hatch = '//////' |
| elif det_table['label'] == 'table rotated': |
| facecolor = (0.95, 0.6, 0.1) |
| edgecolor = (0.95, 0.6, 0.1) |
| alpha = 0.3 |
| linewidth = 2 |
| hatch = '//////' |
| else: |
| continue |
|
|
| rect = patches.Rectangle(bbox[:2], bbox[2] - bbox[0], bbox[3] - bbox[1], linewidth=linewidth, |
| edgecolor='none', facecolor=facecolor, alpha=0.1) |
| ax.add_patch(rect) |
| rect = patches.Rectangle(bbox[:2], bbox[2] - bbox[0], bbox[3] - bbox[1], linewidth=linewidth, |
| edgecolor=edgecolor, facecolor='none', linestyle='-', alpha=alpha) |
| ax.add_patch(rect) |
| rect = patches.Rectangle(bbox[:2], bbox[2] - bbox[0], bbox[3] - bbox[1], linewidth=0, |
| edgecolor=edgecolor, facecolor='none', linestyle='-', hatch=hatch, alpha=0.2) |
| ax.add_patch(rect) |
|
|
| plt.xticks([], []) |
| plt.yticks([], []) |
| legend_elements = [Patch(facecolor=(1, 0, 0.45), edgecolor=(1, 0, 0.45), label='Table', hatch='//////', alpha=0.3), |
| Patch(facecolor=(0.95, 0.6, 0.1), edgecolor=(0.95, 0.6, 0.1), label='Table (rotated)', hatch='//////', alpha=0.3)] |
| plt.legend(handles=legend_elements, bbox_to_anchor=(0.5, -0.02), loc='upper center', borderaxespad=0, |
| fontsize=10, ncol=2) |
| plt.gcf().set_size_inches(10, 10) |
| plt.axis('off') |
| return fig |
|
|
| def plot_results(cropped_table, cells, class_to_visualize): |
| plt.figure(figsize=(16, 10)) |
| plt.imshow(cropped_table) |
| ax = plt.gca() |
|
|
| for cell in cells: |
| score = cell["score"] |
| bbox = cell["bbox"] |
| label = cell["label"] |
| if label == class_to_visualize: |
| xmin, ymin, xmax, ymax = tuple(bbox) |
| ax.add_patch(plt.Rectangle((xmin, ymin), xmax - xmin, ymax - ymin, fill=False, color="red", linewidth=3)) |
| text = f'{cell["label"]}: {score:0.2f}' |
| ax.text(xmin, ymin, text, fontsize=15, bbox=dict(facecolor='yellow', alpha=0.5)) |
| plt.axis('off') |
| return plt.gcf() |
|
|