Aucune description

extract.py 3.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. from django.core.management.base import BaseCommand
  2. from ...xword import extract_crossword_grid, grid_to_png
  3. class Command(BaseCommand):
  4. help = "Extracts a clean crossword image from a photograph."
  5. def add_arguments(self, parser):
  6. parser.add_argument('input_file_name')
  7. parser.add_argument('output_file_name')
  8. parser.add_argument('--filter-colours', action='store_true')
  9. parser.add_argument('--colour-filter-threshold', type=int, default=48)
  10. parser.add_argument('--gaussian-blur-size', type=int, default=11)
  11. parser.add_argument('--adaptive-threshold-block-size', type=int, default=11)
  12. parser.add_argument('--adaptive-threshold-mean-adjustment', type=int, default=2)
  13. parser.add_argument('--not-square', action='store_true')
  14. parser.add_argument('--num-dilations', type=int, default=1)
  15. parser.add_argument('--contour-erosion-kernel-size', type=int, default=5)
  16. parser.add_argument('--contour-erosion-iterations', type=int, default=5)
  17. parser.add_argument('--line-detector-element-size', type=int, default=51)
  18. parser.add_argument('--sampling-block-size-ratio', type=float, default=0.25)
  19. parser.add_argument('--sampling-threshold-quantile', type=float, default=0.3)
  20. parser.add_argument('--sampling-threshold', type=int)
  21. parser.add_argument('--grid-line-thickness', type=int, default=4)
  22. parser.add_argument('--grid-square-size', type=int, default=64)
  23. parser.add_argument('--grid-border-size', type=int, default=20)
  24. group = parser.add_mutually_exclusive_group()
  25. group.add_argument('--out')
  26. group.add_argument('--html')
  27. def handle(self, *args, **options):
  28. warnings, grid, num_rows, num_cols, block_img = extract_crossword_grid(
  29. options['input_file_name'],
  30. gaussian_blur_size=options['gaussian_blur_size'],
  31. adaptive_threshold_block_size=options['adaptive_threshold_block_size'],
  32. adaptive_threshold_mean_adjustment=options['adaptive_threshold_mean_adjustment'],
  33. square=not options['not_square'],
  34. num_dilations=options['num_dilations'],
  35. contour_erosion_kernel_size=options['contour_erosion_kernel_size'],
  36. contour_erosion_iterations=options['contour_erosion_iterations'],
  37. line_detector_element_size=options['line_detector_element_size'],
  38. sampling_block_size_ratio=options['sampling_block_size_ratio'],
  39. sampling_threshold_quantile=options['sampling_threshold_quantile'],
  40. sampling_threshold=options['sampling_threshold']
  41. )
  42. image = grid_to_png(
  43. grid,
  44. num_rows,
  45. num_cols,
  46. grid_line_thickness=options['grid_line_thickness'],
  47. grid_square_size=options['grid_square_size'],
  48. grid_border_size=options['grid_border_size']
  49. )
  50. for warning in warnings:
  51. print('WARNING: ' + warning)
  52. with open(options['output_file_name'], 'wb') as f:
  53. f.write(image)