Нема описа

extract.py 2.9KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. from django.core.management.base import BaseCommand
  2. from ...xword import extract_crossword
  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. image, warnings = extract_crossword(
  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. grid_line_thickness=options['grid_line_thickness'],
  42. grid_square_size=options['grid_square_size'],
  43. grid_border_size=options['grid_border_size']
  44. )
  45. for warning in warnings:
  46. print('WARNING: ' + warning)
  47. with open(options['output_file_name'], 'wb') as f:
  48. f.write(image)