megadetector 5.0.10__py3-none-any.whl → 5.0.12__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of megadetector might be problematic. Click here for more details.
- {api → megadetector/api}/batch_processing/api_core/batch_service/score.py +2 -2
- {api → megadetector/api}/synchronous/api_core/animal_detection_api/api_backend.py +1 -1
- {api → megadetector/api}/synchronous/api_core/animal_detection_api/api_frontend.py +1 -1
- {classification → megadetector/classification}/analyze_failed_images.py +3 -3
- {classification → megadetector/classification}/cache_batchapi_outputs.py +1 -1
- {classification → megadetector/classification}/create_classification_dataset.py +1 -1
- {classification → megadetector/classification}/crop_detections.py +1 -1
- {classification → megadetector/classification}/detect_and_crop.py +5 -5
- {classification → megadetector/classification}/evaluate_model.py +1 -1
- {classification → megadetector/classification}/json_to_azcopy_list.py +2 -2
- {classification → megadetector/classification}/json_validator.py +13 -9
- {classification → megadetector/classification}/map_classification_categories.py +1 -1
- {classification → megadetector/classification}/merge_classification_detection_output.py +1 -1
- {classification → megadetector/classification}/run_classifier.py +2 -1
- {classification → megadetector/classification}/train_classifier.py +8 -6
- {classification → megadetector/classification}/train_classifier_tf.py +10 -9
- {classification → megadetector/classification}/train_utils.py +3 -2
- {data_management → megadetector/data_management}/camtrap_dp_to_coco.py +4 -3
- {data_management → megadetector/data_management}/cct_json_utils.py +2 -2
- {data_management → megadetector/data_management}/cct_to_md.py +1 -1
- {data_management → megadetector/data_management}/coco_to_labelme.py +1 -1
- {data_management → megadetector/data_management}/coco_to_yolo.py +1 -1
- {data_management → megadetector/data_management}/databases/integrity_check_json_db.py +2 -2
- {data_management → megadetector/data_management}/get_image_sizes.py +4 -3
- {data_management → megadetector/data_management}/importers/auckland_doc_test_to_json.py +6 -5
- {data_management → megadetector/data_management}/importers/auckland_doc_to_json.py +4 -3
- {data_management → megadetector/data_management}/importers/awc_to_json.py +6 -4
- {data_management → megadetector/data_management}/importers/bellevue_to_json.py +3 -3
- {data_management → megadetector/data_management}/importers/cacophony-thermal-importer.py +4 -4
- {data_management → megadetector/data_management}/importers/carrizo_shrubfree_2018.py +5 -4
- {data_management → megadetector/data_management}/importers/carrizo_trail_cam_2017.py +8 -6
- {data_management → megadetector/data_management}/importers/cct_field_adjustments.py +2 -1
- {data_management → megadetector/data_management}/importers/channel_islands_to_cct.py +2 -2
- {data_management → megadetector/data_management}/importers/ena24_to_json.py +6 -5
- {data_management → megadetector/data_management}/importers/filenames_to_json.py +2 -1
- {data_management → megadetector/data_management}/importers/helena_to_cct.py +7 -6
- {data_management → megadetector/data_management}/importers/idaho-camera-traps.py +6 -6
- {data_management → megadetector/data_management}/importers/idfg_iwildcam_lila_prep.py +4 -4
- {data_management → megadetector/data_management}/importers/jb_csv_to_json.py +1 -1
- {data_management → megadetector/data_management}/importers/missouri_to_json.py +4 -3
- {data_management → megadetector/data_management}/importers/noaa_seals_2019.py +2 -2
- {data_management → megadetector/data_management}/importers/pc_to_json.py +5 -5
- {data_management → megadetector/data_management}/importers/prepare-noaa-fish-data-for-lila.py +3 -3
- {data_management → megadetector/data_management}/importers/prepare_zsl_imerit.py +3 -3
- {data_management → megadetector/data_management}/importers/rspb_to_json.py +2 -2
- {data_management → megadetector/data_management}/importers/save_the_elephants_survey_A.py +4 -4
- {data_management → megadetector/data_management}/importers/save_the_elephants_survey_B.py +6 -9
- {data_management → megadetector/data_management}/importers/snapshot_safari_importer.py +4 -4
- {data_management → megadetector/data_management}/importers/snapshot_safari_importer_reprise.py +2 -2
- {data_management → megadetector/data_management}/importers/snapshot_serengeti_lila.py +4 -4
- {data_management → megadetector/data_management}/importers/timelapse_csv_set_to_json.py +3 -3
- {data_management → megadetector/data_management}/importers/ubc_to_json.py +3 -3
- {data_management → megadetector/data_management}/importers/umn_to_json.py +2 -2
- {data_management → megadetector/data_management}/importers/wellington_to_json.py +3 -3
- {data_management → megadetector/data_management}/importers/wi_to_json.py +3 -2
- {data_management → megadetector/data_management}/labelme_to_coco.py +6 -7
- {data_management → megadetector/data_management}/labelme_to_yolo.py +2 -2
- {data_management → megadetector/data_management}/lila/add_locations_to_island_camera_traps.py +4 -4
- {data_management → megadetector/data_management}/lila/create_lila_blank_set.py +10 -9
- {data_management → megadetector/data_management}/lila/create_lila_test_set.py +3 -2
- {data_management → megadetector/data_management}/lila/create_links_to_md_results_files.py +1 -1
- {data_management → megadetector/data_management}/lila/download_lila_subset.py +5 -4
- {data_management → megadetector/data_management}/lila/generate_lila_per_image_labels.py +6 -5
- {data_management → megadetector/data_management}/lila/get_lila_annotation_counts.py +2 -2
- {data_management → megadetector/data_management}/lila/get_lila_image_counts.py +2 -1
- {data_management → megadetector/data_management}/lila/lila_common.py +5 -5
- {data_management → megadetector/data_management}/lila/test_lila_metadata_urls.py +2 -2
- {data_management → megadetector/data_management}/ocr_tools.py +6 -6
- {data_management → megadetector/data_management}/read_exif.py +2 -2
- {data_management → megadetector/data_management}/remap_coco_categories.py +1 -1
- {data_management → megadetector/data_management}/remove_exif.py +1 -1
- {data_management → megadetector/data_management}/resize_coco_dataset.py +4 -4
- {data_management → megadetector/data_management}/wi_download_csv_to_coco.py +3 -3
- {data_management → megadetector/data_management}/yolo_output_to_md_output.py +5 -5
- {data_management → megadetector/data_management}/yolo_to_coco.py +9 -9
- {detection → megadetector/detection}/process_video.py +9 -10
- {detection → megadetector/detection}/pytorch_detector.py +12 -8
- {detection → megadetector/detection}/run_detector.py +6 -6
- {detection → megadetector/detection}/run_detector_batch.py +12 -12
- {detection → megadetector/detection}/run_inference_with_yolov5_val.py +12 -12
- {detection → megadetector/detection}/run_tiled_inference.py +8 -9
- {detection → megadetector/detection}/tf_detector.py +3 -2
- {detection → megadetector/detection}/video_utils.py +2 -2
- {api/batch_processing → megadetector}/postprocessing/add_max_conf.py +1 -1
- {api/batch_processing → megadetector}/postprocessing/categorize_detections_by_size.py +1 -1
- {api/batch_processing → megadetector}/postprocessing/combine_api_outputs.py +1 -1
- {api/batch_processing → megadetector}/postprocessing/compare_batch_results.py +5 -5
- {api/batch_processing → megadetector}/postprocessing/convert_output_format.py +4 -5
- {api/batch_processing → megadetector}/postprocessing/load_api_results.py +1 -1
- {api/batch_processing → megadetector}/postprocessing/md_to_coco.py +3 -3
- {api/batch_processing → megadetector}/postprocessing/md_to_labelme.py +3 -3
- {api/batch_processing → megadetector}/postprocessing/merge_detections.py +1 -1
- {api/batch_processing → megadetector}/postprocessing/postprocess_batch_results.py +19 -21
- {api/batch_processing → megadetector}/postprocessing/remap_detection_categories.py +1 -1
- {api/batch_processing → megadetector}/postprocessing/render_detection_confusion_matrix.py +5 -6
- {api/batch_processing → megadetector}/postprocessing/repeat_detection_elimination/find_repeat_detections.py +3 -3
- {api/batch_processing → megadetector}/postprocessing/repeat_detection_elimination/remove_repeat_detections.py +3 -2
- {api/batch_processing → megadetector}/postprocessing/repeat_detection_elimination/repeat_detections_core.py +11 -11
- {api/batch_processing → megadetector}/postprocessing/separate_detections_into_folders.py +3 -4
- {api/batch_processing → megadetector}/postprocessing/subset_json_detector_output.py +2 -2
- {api/batch_processing → megadetector}/postprocessing/top_folders_to_bottom.py +1 -1
- {taxonomy_mapping → megadetector/taxonomy_mapping}/map_lila_taxonomy_to_wi_taxonomy.py +2 -2
- {taxonomy_mapping → megadetector/taxonomy_mapping}/map_new_lila_datasets.py +2 -6
- {taxonomy_mapping → megadetector/taxonomy_mapping}/preview_lila_taxonomy.py +6 -7
- {taxonomy_mapping → megadetector/taxonomy_mapping}/retrieve_sample_image.py +1 -1
- {taxonomy_mapping → megadetector/taxonomy_mapping}/simple_image_download.py +2 -1
- {taxonomy_mapping → megadetector/taxonomy_mapping}/species_lookup.py +1 -1
- {taxonomy_mapping → megadetector/taxonomy_mapping}/taxonomy_csv_checker.py +1 -1
- {taxonomy_mapping → megadetector/taxonomy_mapping}/validate_lila_category_mappings.py +1 -1
- {md_utils → megadetector/utils}/azure_utils.py +7 -3
- {md_utils → megadetector/utils}/directory_listing.py +1 -1
- {md_utils → megadetector/utils}/md_tests.py +29 -29
- {md_utils → megadetector/utils}/split_locations_into_train_val.py +1 -1
- {md_utils → megadetector/utils}/write_html_image_list.py +1 -1
- {md_visualization → megadetector/visualization}/render_images_with_thumbnails.py +3 -3
- {md_visualization → megadetector/visualization}/visualization_utils.py +6 -7
- {md_visualization → megadetector/visualization}/visualize_db.py +3 -4
- {md_visualization → megadetector/visualization}/visualize_detector_output.py +9 -10
- {megadetector-5.0.10.dist-info → megadetector-5.0.12.dist-info}/LICENSE +0 -0
- {megadetector-5.0.10.dist-info → megadetector-5.0.12.dist-info}/METADATA +12 -11
- megadetector-5.0.12.dist-info/RECORD +199 -0
- megadetector-5.0.12.dist-info/top_level.txt +1 -0
- api/batch_processing/data_preparation/manage_local_batch.py +0 -2391
- api/batch_processing/data_preparation/manage_video_batch.py +0 -327
- api/synchronous/api_core/animal_detection_api/data_management/annotations/annotation_constants.py +0 -47
- api/synchronous/api_core/animal_detection_api/detection/detector_training/copy_checkpoints.py +0 -43
- api/synchronous/api_core/animal_detection_api/detection/process_video.py +0 -543
- api/synchronous/api_core/animal_detection_api/detection/pytorch_detector.py +0 -304
- api/synchronous/api_core/animal_detection_api/detection/run_detector.py +0 -627
- api/synchronous/api_core/animal_detection_api/detection/run_detector_batch.py +0 -1029
- api/synchronous/api_core/animal_detection_api/detection/run_inference_with_yolov5_val.py +0 -581
- api/synchronous/api_core/animal_detection_api/detection/run_tiled_inference.py +0 -754
- api/synchronous/api_core/animal_detection_api/detection/tf_detector.py +0 -165
- api/synchronous/api_core/animal_detection_api/detection/video_utils.py +0 -495
- api/synchronous/api_core/animal_detection_api/md_utils/azure_utils.py +0 -174
- api/synchronous/api_core/animal_detection_api/md_utils/ct_utils.py +0 -262
- api/synchronous/api_core/animal_detection_api/md_utils/directory_listing.py +0 -251
- api/synchronous/api_core/animal_detection_api/md_utils/matlab_porting_tools.py +0 -97
- api/synchronous/api_core/animal_detection_api/md_utils/path_utils.py +0 -416
- api/synchronous/api_core/animal_detection_api/md_utils/process_utils.py +0 -110
- api/synchronous/api_core/animal_detection_api/md_utils/sas_blob_utils.py +0 -509
- api/synchronous/api_core/animal_detection_api/md_utils/string_utils.py +0 -59
- api/synchronous/api_core/animal_detection_api/md_utils/url_utils.py +0 -144
- api/synchronous/api_core/animal_detection_api/md_utils/write_html_image_list.py +0 -226
- api/synchronous/api_core/animal_detection_api/md_visualization/visualization_utils.py +0 -841
- detection/detector_training/model_main_tf2.py +0 -114
- docs/source/conf.py +0 -43
- megadetector-5.0.10.dist-info/RECORD +0 -224
- megadetector-5.0.10.dist-info/top_level.txt +0 -8
- {api → megadetector/api}/__init__.py +0 -0
- {api → megadetector/api}/batch_processing/__init__.py +0 -0
- {api → megadetector/api}/batch_processing/api_core/__init__.py +0 -0
- {api → megadetector/api}/batch_processing/api_core/batch_service/__init__.py +0 -0
- {api → megadetector/api}/batch_processing/api_core/server.py +0 -0
- {api → megadetector/api}/batch_processing/api_core/server_api_config.py +0 -0
- {api → megadetector/api}/batch_processing/api_core/server_app_config.py +0 -0
- {api → megadetector/api}/batch_processing/api_core/server_batch_job_manager.py +0 -0
- {api → megadetector/api}/batch_processing/api_core/server_job_status_table.py +0 -0
- {api → megadetector/api}/batch_processing/api_core/server_orchestration.py +0 -0
- {api → megadetector/api}/batch_processing/api_core/server_utils.py +0 -0
- {api → megadetector/api}/batch_processing/api_core_support/__init__.py +0 -0
- {api → megadetector/api}/batch_processing/api_core_support/aggregate_results_manually.py +0 -0
- {api → megadetector/api}/batch_processing/api_support/__init__.py +0 -0
- {api → megadetector/api}/batch_processing/api_support/summarize_daily_activity.py +0 -0
- {api → megadetector/api}/batch_processing/data_preparation/__init__.py +0 -0
- {api → megadetector/api}/batch_processing/integration/digiKam/setup.py +0 -0
- {api → megadetector/api}/batch_processing/integration/digiKam/xmp_integration.py +0 -0
- {api → megadetector/api}/batch_processing/integration/eMammal/test_scripts/config_template.py +0 -0
- {api → megadetector/api}/batch_processing/integration/eMammal/test_scripts/push_annotations_to_emammal.py +0 -0
- {api → megadetector/api}/batch_processing/integration/eMammal/test_scripts/select_images_for_testing.py +0 -0
- {api/batch_processing/postprocessing → megadetector/api/synchronous}/__init__.py +0 -0
- {api/synchronous → megadetector/api/synchronous/api_core/animal_detection_api}/__init__.py +0 -0
- {api → megadetector/api}/synchronous/api_core/animal_detection_api/config.py +0 -0
- {api/synchronous/api_core/animal_detection_api → megadetector/api/synchronous/api_core/tests}/__init__.py +0 -0
- {api → megadetector/api}/synchronous/api_core/tests/load_test.py +0 -0
- {api/synchronous/api_core/tests → megadetector/classification}/__init__.py +0 -0
- {classification → megadetector/classification}/aggregate_classifier_probs.py +0 -0
- {classification → megadetector/classification}/csv_to_json.py +0 -0
- {classification → megadetector/classification}/efficientnet/__init__.py +0 -0
- {classification → megadetector/classification}/efficientnet/model.py +0 -0
- {classification → megadetector/classification}/efficientnet/utils.py +0 -0
- {classification → megadetector/classification}/identify_mislabeled_candidates.py +0 -0
- {classification → megadetector/classification}/prepare_classification_script.py +0 -0
- {classification → megadetector/classification}/prepare_classification_script_mc.py +0 -0
- {classification → megadetector/classification}/save_mislabeled.py +0 -0
- {classification → megadetector/data_management}/__init__.py +0 -0
- {data_management → megadetector/data_management/annotations}/__init__.py +0 -0
- {data_management → megadetector/data_management}/annotations/annotation_constants.py +0 -0
- {data_management → megadetector/data_management}/cct_to_wi.py +0 -0
- {data_management/annotations → megadetector/data_management/databases}/__init__.py +0 -0
- {data_management → megadetector/data_management}/databases/add_width_and_height_to_db.py +0 -0
- {data_management → megadetector/data_management}/databases/combine_coco_camera_traps_files.py +0 -0
- {data_management → megadetector/data_management}/databases/subset_json_db.py +0 -0
- {data_management → megadetector/data_management}/generate_crops_from_cct.py +0 -0
- {data_management → megadetector/data_management}/importers/add_nacti_sizes.py +0 -0
- {data_management → megadetector/data_management}/importers/add_timestamps_to_icct.py +0 -0
- {data_management → megadetector/data_management}/importers/animl_results_to_md_results.py +0 -0
- {data_management → megadetector/data_management}/importers/eMammal/copy_and_unzip_emammal.py +0 -0
- {data_management → megadetector/data_management}/importers/eMammal/eMammal_helpers.py +0 -0
- {data_management → megadetector/data_management}/importers/eMammal/make_eMammal_json.py +0 -0
- {data_management → megadetector/data_management}/importers/mcgill_to_json.py +0 -0
- {data_management → megadetector/data_management}/importers/nacti_fieldname_adjustments.py +0 -0
- {data_management → megadetector/data_management}/importers/plot_wni_giraffes.py +0 -0
- {data_management → megadetector/data_management}/importers/snapshotserengeti/make_full_SS_json.py +0 -0
- {data_management → megadetector/data_management}/importers/snapshotserengeti/make_per_season_SS_json.py +0 -0
- {data_management → megadetector/data_management}/importers/sulross_get_exif.py +0 -0
- {data_management → megadetector/data_management}/importers/zamba_results_to_md_results.py +0 -0
- {data_management/databases → megadetector/data_management/lila}/__init__.py +0 -0
- {data_management → megadetector/data_management}/lila/add_locations_to_nacti.py +0 -0
- {data_management/lila → megadetector/detection}/__init__.py +0 -0
- {detection → megadetector/detection/detector_training}/__init__.py +0 -0
- {api/synchronous/api_core/animal_detection_api → megadetector}/detection/detector_training/model_main_tf2.py +0 -0
- {detection/detector_training → megadetector/postprocessing}/__init__.py +0 -0
- {md_utils → megadetector/taxonomy_mapping}/__init__.py +0 -0
- {taxonomy_mapping → megadetector/taxonomy_mapping}/prepare_lila_taxonomy_release.py +0 -0
- {taxonomy_mapping → megadetector/taxonomy_mapping}/taxonomy_graph.py +0 -0
- {md_visualization → megadetector/utils}/__init__.py +0 -0
- {md_utils → megadetector/utils}/ct_utils.py +0 -0
- {md_utils → megadetector/utils}/path_utils.py +0 -0
- {md_utils → megadetector/utils}/process_utils.py +0 -0
- {md_utils → megadetector/utils}/sas_blob_utils.py +0 -0
- {md_utils → megadetector/utils}/string_utils.py +0 -0
- {md_utils → megadetector/utils}/url_utils.py +0 -0
- {taxonomy_mapping → megadetector/visualization}/__init__.py +0 -0
- {md_visualization → megadetector/visualization}/plot_utils.py +0 -0
- {megadetector-5.0.10.dist-info → megadetector-5.0.12.dist-info}/WHEEL +0 -0
|
@@ -1,226 +0,0 @@
|
|
|
1
|
-
########
|
|
2
|
-
#
|
|
3
|
-
# write_html_image_list.py
|
|
4
|
-
#
|
|
5
|
-
# Given a list of image file names, writes an HTML file that
|
|
6
|
-
# shows all those images, with optional one-line headers above each.
|
|
7
|
-
#
|
|
8
|
-
# Each "filename" can also be a dict with elements 'filename','title',
|
|
9
|
-
# 'imageStyle','textStyle', 'linkTarget'
|
|
10
|
-
#
|
|
11
|
-
# Strips directory information away if options.makeRelative == 1.
|
|
12
|
-
#
|
|
13
|
-
# Tries to convert absolute to relative paths if options.makeRelative == 2.
|
|
14
|
-
#
|
|
15
|
-
########
|
|
16
|
-
|
|
17
|
-
#%% Constants and imports
|
|
18
|
-
|
|
19
|
-
import os
|
|
20
|
-
import math
|
|
21
|
-
|
|
22
|
-
from md_utils import path_utils
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
#%% write_html_image_list
|
|
26
|
-
|
|
27
|
-
def write_html_image_list(filename=None,images=None,options=None):
|
|
28
|
-
"""
|
|
29
|
-
filename: the output file
|
|
30
|
-
|
|
31
|
-
image: a list of image filenames or dictionaries with one or more of the following fields:
|
|
32
|
-
|
|
33
|
-
filename
|
|
34
|
-
imageStyle
|
|
35
|
-
textStyle
|
|
36
|
-
title
|
|
37
|
-
linkTarget
|
|
38
|
-
|
|
39
|
-
options: a dict with one or more of the following fields:
|
|
40
|
-
|
|
41
|
-
fHtml
|
|
42
|
-
makeRelative
|
|
43
|
-
headerHtml
|
|
44
|
-
trailerHtml
|
|
45
|
-
defaultTextStyle
|
|
46
|
-
defaultImageStyle
|
|
47
|
-
maxFiguresPerHtmlFile
|
|
48
|
-
|
|
49
|
-
"""
|
|
50
|
-
|
|
51
|
-
# returns an options struct
|
|
52
|
-
if options is None:
|
|
53
|
-
options = {}
|
|
54
|
-
|
|
55
|
-
if 'fHtml' not in options:
|
|
56
|
-
options['fHtml'] = -1
|
|
57
|
-
|
|
58
|
-
if 'makeRelative' not in options:
|
|
59
|
-
options['makeRelative'] = 0
|
|
60
|
-
|
|
61
|
-
if 'headerHtml' not in options or options['headerHtml'] is None:
|
|
62
|
-
options['headerHtml'] = ''
|
|
63
|
-
|
|
64
|
-
if 'trailerHtml' not in options or options['trailerHtml'] is None:
|
|
65
|
-
options['trailerHtml'] = ''
|
|
66
|
-
|
|
67
|
-
if 'defaultTextStyle' not in options or options['defaultTextStyle'] is None:
|
|
68
|
-
options['defaultTextStyle'] = \
|
|
69
|
-
"font-family:calibri,verdana,arial;font-weight:bold;font-size:150%;text-align:left;margin:0px;"
|
|
70
|
-
|
|
71
|
-
if 'defaultImageStyle' not in options or options['defaultImageStyle'] is None:
|
|
72
|
-
options['defaultImageStyle'] = \
|
|
73
|
-
"margin:0px;margin-top:5px;margin-bottom:5px;"
|
|
74
|
-
|
|
75
|
-
# Possibly split the html output for figures into multiple files; Chrome gets sad with
|
|
76
|
-
# thousands of images in a single tab.
|
|
77
|
-
if 'maxFiguresPerHtmlFile' not in options or options['maxFiguresPerHtmlFile'] is None:
|
|
78
|
-
options['maxFiguresPerHtmlFile'] = math.inf
|
|
79
|
-
|
|
80
|
-
if filename is None:
|
|
81
|
-
return options
|
|
82
|
-
|
|
83
|
-
# images may be a list of images or a list of image/style/title dictionaries,
|
|
84
|
-
# enforce that it's the latter to simplify downstream code
|
|
85
|
-
for iImage,imageInfo in enumerate(images):
|
|
86
|
-
if isinstance(imageInfo,str):
|
|
87
|
-
imageInfo = {'filename':imageInfo}
|
|
88
|
-
if 'filename' not in imageInfo:
|
|
89
|
-
imageInfo['filename'] = ''
|
|
90
|
-
if 'imageStyle' not in imageInfo:
|
|
91
|
-
imageInfo['imageStyle'] = options['defaultImageStyle']
|
|
92
|
-
if 'title' not in imageInfo:
|
|
93
|
-
imageInfo['title'] = ''
|
|
94
|
-
if 'linkTarget' not in imageInfo:
|
|
95
|
-
imageInfo['linkTarget'] = ''
|
|
96
|
-
if 'textStyle' not in imageInfo:
|
|
97
|
-
textStyle = options['defaultTextStyle']
|
|
98
|
-
imageInfo['textStyle'] = options['defaultTextStyle']
|
|
99
|
-
images[iImage] = imageInfo
|
|
100
|
-
|
|
101
|
-
# Remove leading directory information from filenames if requested
|
|
102
|
-
if options['makeRelative'] == 1:
|
|
103
|
-
|
|
104
|
-
for iImage in range(0,len(images)):
|
|
105
|
-
_,n,e = path_utils.fileparts(images[iImage]['filename'])
|
|
106
|
-
images[iImage]['filename'] = n + e
|
|
107
|
-
|
|
108
|
-
elif options['makeRelative'] == 2:
|
|
109
|
-
|
|
110
|
-
baseDir,_,_ = path_utils.fileparts(filename)
|
|
111
|
-
if len(baseDir) > 1 and baseDir[-1] != '\\':
|
|
112
|
-
baseDir = baseDir + '\\'
|
|
113
|
-
|
|
114
|
-
for iImage in range(0,len(images)):
|
|
115
|
-
fn = images[iImage]['filename']
|
|
116
|
-
fn = fn.replace(baseDir,'')
|
|
117
|
-
images[iImage]['filename'] = fn
|
|
118
|
-
|
|
119
|
-
nImages = len(images)
|
|
120
|
-
|
|
121
|
-
# If we need to break this up into multiple files...
|
|
122
|
-
if nImages > options['maxFiguresPerHtmlFile']:
|
|
123
|
-
|
|
124
|
-
# You can't supply your own file handle in this case
|
|
125
|
-
if options['fHtml'] != -1:
|
|
126
|
-
raise ValueError(
|
|
127
|
-
'You can''t supply your own file handle if we have to page the image set')
|
|
128
|
-
|
|
129
|
-
figureFileStartingIndices = list(range(0,nImages,options['maxFiguresPerHtmlFile']))
|
|
130
|
-
|
|
131
|
-
assert len(figureFileStartingIndices) > 1
|
|
132
|
-
|
|
133
|
-
# Open the meta-output file
|
|
134
|
-
fMeta = open(filename,'w')
|
|
135
|
-
|
|
136
|
-
# Write header stuff
|
|
137
|
-
fMeta.write('<html><body>\n')
|
|
138
|
-
fMeta.write(options['headerHtml'])
|
|
139
|
-
fMeta.write('<table border = 0 cellpadding = 2>\n')
|
|
140
|
-
|
|
141
|
-
for startingIndex in figureFileStartingIndices:
|
|
142
|
-
|
|
143
|
-
iStart = startingIndex
|
|
144
|
-
iEnd = startingIndex+options['maxFiguresPerHtmlFile']-1;
|
|
145
|
-
if iEnd >= nImages:
|
|
146
|
-
iEnd = nImages-1
|
|
147
|
-
|
|
148
|
-
trailer = 'image_{:05d}_{:05d}'.format(iStart,iEnd)
|
|
149
|
-
localFiguresHtmlFilename = path_utils.insert_before_extension(filename,trailer)
|
|
150
|
-
fMeta.write('<tr><td>\n')
|
|
151
|
-
fMeta.write('<p style="padding-bottom:0px;margin-bottom:0px;text-align:left;font-family:''segoe ui'',calibri,arial;font-size:100%;text-decoration:none;font-weight:bold;">')
|
|
152
|
-
fMeta.write('<a href="{}">Figures for images {} through {}</a></p></td></tr>\n'.format(
|
|
153
|
-
os.path.basename(localFiguresHtmlFilename),iStart,iEnd))
|
|
154
|
-
|
|
155
|
-
localImages = images[iStart:iEnd+1]
|
|
156
|
-
|
|
157
|
-
localOptions = options.copy();
|
|
158
|
-
localOptions['headerHtml'] = '';
|
|
159
|
-
localOptions['trailerHtml'] = '';
|
|
160
|
-
|
|
161
|
-
# Make a recursive call for this image set
|
|
162
|
-
write_html_image_list(localFiguresHtmlFilename,localImages,localOptions)
|
|
163
|
-
|
|
164
|
-
# ...for each page of images
|
|
165
|
-
|
|
166
|
-
fMeta.write('</table></body>\n')
|
|
167
|
-
fMeta.write(options['trailerHtml'])
|
|
168
|
-
fMeta.write('</html>\n')
|
|
169
|
-
fMeta.close()
|
|
170
|
-
|
|
171
|
-
return options
|
|
172
|
-
|
|
173
|
-
# ...if we have to make multiple sub-pages
|
|
174
|
-
|
|
175
|
-
bCleanupFile = False
|
|
176
|
-
|
|
177
|
-
if options['fHtml'] == -1:
|
|
178
|
-
bCleanupFile = True;
|
|
179
|
-
fHtml = open(filename,'w')
|
|
180
|
-
else:
|
|
181
|
-
fHtml = options['fHtml']
|
|
182
|
-
|
|
183
|
-
fHtml.write('<html><body>\n')
|
|
184
|
-
|
|
185
|
-
fHtml.write(options['headerHtml'])
|
|
186
|
-
|
|
187
|
-
# Write out images
|
|
188
|
-
for iImage,image in enumerate(images):
|
|
189
|
-
|
|
190
|
-
title = image['title']
|
|
191
|
-
imageStyle = image['imageStyle']
|
|
192
|
-
textStyle = image['textStyle']
|
|
193
|
-
filename = image['filename']
|
|
194
|
-
linkTarget = image['linkTarget']
|
|
195
|
-
|
|
196
|
-
# Remove unicode characters
|
|
197
|
-
title = title.encode('ascii','ignore').decode('ascii')
|
|
198
|
-
filename = filename.encode('ascii','ignore').decode('ascii')
|
|
199
|
-
|
|
200
|
-
if len(title) > 0:
|
|
201
|
-
fHtml.write(
|
|
202
|
-
'<p style="{}">{}</p>\n'\
|
|
203
|
-
.format(textStyle,title))
|
|
204
|
-
|
|
205
|
-
if len(linkTarget) > 0:
|
|
206
|
-
fHtml.write('<a href="{}">'.format(linkTarget))
|
|
207
|
-
# imageStyle.append(';border:0px;')
|
|
208
|
-
|
|
209
|
-
fHtml.write('<img src="{}" style="{}">\n'.format(filename,imageStyle))
|
|
210
|
-
|
|
211
|
-
if len(linkTarget) > 0:
|
|
212
|
-
fHtml.write('</a>')
|
|
213
|
-
|
|
214
|
-
if iImage != len(images)-1:
|
|
215
|
-
fHtml.write('<br/>')
|
|
216
|
-
|
|
217
|
-
# ...for each image we need to write
|
|
218
|
-
|
|
219
|
-
fHtml.write(options['trailerHtml'])
|
|
220
|
-
|
|
221
|
-
fHtml.write('</body></html>\n')
|
|
222
|
-
|
|
223
|
-
if bCleanupFile:
|
|
224
|
-
fHtml.close()
|
|
225
|
-
|
|
226
|
-
# ...function
|