f.write(s) #%% Generate preview, sanity-check labels from visualization import visualize_db viz_options = visualize_db.DbVizOptions() viz_options.num_to_visualize = 5000 viz_options.trim_to_images_with_bboxes = False viz_options.add_search_links = True viz_options.sort_by_filename = False viz_options.parallelize_rendering = True viz_options.classes_to_exclude = ['test','empty'] # viz_options.classes_to_include = ['jackalblackbacked','bustardkori'] html_output_file, image_db = visualize_db.process_images(db_path=json_filename, output_dir=output_preview_folder, image_base_dir=output_public_folder, options=viz_options) os.startfile(html_output_file) #%% Scrap if False: pass #%% Find annotations for a particular image fn = missing_images[1000] id = fn.replace('.JPG','') im = im_id_to_image[id]
#%% Preview labels from visualization import visualize_db viz_options = visualize_db.DbVizOptions() viz_options.num_to_visualize = 100 viz_options.trim_to_images_with_bboxes = False viz_options.add_search_links = False viz_options.sort_by_filename = False viz_options.parallelize_rendering = True viz_options.include_filename_links = True # viz_options.classes_to_exclude = ['test'] html_output_file, _ = visualize_db.process_images(db_path=output_json, output_dir=os.path.join( base_folder,'preview'), image_base_dir=os.path.join(base_folder,'images'), options=viz_options) os.startfile(html_output_file) #%% ############ Take two, from pre-iWildCam .json files created from IDFG .csv files ############ #%% Imports and constants import json import os base_folder = r'h:\idaho-camera-traps' input_json_sl = os.path.join(base_folder,'iWildCam_IDFG.json') input_json = os.path.join(base_folder,'iWildCam_IDFG_ml.json')
options = sanity_check_json_db.SanityCheckOptions() options.baseDir = imageBaseDir options.bCheckImageSizes = False options.bFindUnusedImages = False sanity_check_json_db.sanity_check_json_db(outputFile, options) #%% Preview a few images to make sure labels were passed along sensibly db_path = outputFile output_dir = os.path.join(baseDir,'label_preview') image_base_dir = imageBaseDir options = visualize_db.DbVizOptions() options.num_to_visualize = 100 htmlOutputFile = visualize_db.process_images(db_path,output_dir,image_base_dir,options) #%% One-time processing step: copy images to a flat directory for annotation if False: #%% from shutil import copyfile os.makedirs(imageFlatDir,exist_ok=True) for sourcePath in tqdm.tqdm(imageFullPaths): fn = ntpath.basename(sourcePath) targetPath = os.path.join(imageFlatDir,fn) assert not os.path.isfile(targetPath)
sortedCategories, data = sanity_check_json_db.sanity_check_json_db(output_json_file,options) #%% Preview labels from visualization import visualize_db from data_management.databases import sanity_check_json_db viz_options = visualize_db.DbVizOptions() viz_options.num_to_visualize = 1000 viz_options.trim_to_images_with_bboxes = False viz_options.add_search_links = True viz_options.sort_by_filename = False viz_options.parallelize_rendering = True html_output_file,image_db = visualize_db.process_images(db_path=output_json_file, output_dir=os.path.join(output_base,'preview'), image_base_dir=image_directory, options=viz_options) os.startfile(html_output_file) #%% Scrap if False: pass #%% Find unique photo types annotations = image_db['annotations'] photo_types = set() for ann in tqdm(annotations):
print('Finished writing .json file with {} images, {} annotations, and {} categories'.format( len(images),len(annotations),len(categories))) #%% Validate output fn = output_file options = sanity_check_json_db.SanityCheckOptions() options.baseDir = image_directory options.bCheckImageSizes = False options.bCheckImageExistence = True options.bFindUnusedImages = True sortedCategories, data = sanity_check_json_db.sanity_check_json_db(fn, options) #%% Preview labels viz_options = visualize_db.DbVizOptions() viz_options.num_to_visualize = 1000 viz_options.trim_to_images_with_bboxes = False viz_options.add_search_links = True viz_options.sort_by_filename = False viz_options.parallelize_rendering = True html_output_file, image_db = visualize_db.process_images(db_path=output_file, output_dir='/home/gramener/previewB', image_base_dir=image_directory, options=viz_options) os.startfile(html_output_file)
options.bCheckImageSizes = False options.bCheckImageExistence = True options.bFindUnusedImages = False sortedCategories = sanity_check_json_db.sanity_check_json_db( indexedData.db, options) #%% Label previews viz_options = visualize_db.DbVizOptions() viz_options.num_to_visualize = 500 viz_options.trim_to_images_with_bboxes = False viz_options.add_search_links = True viz_options.sort_by_filename = False html_output_file, image_db = visualize_db.process_images( indexedData.db, os.path.join(output_base, 'preview'), image_base, viz_options) os.startfile(html_output_file) #%% Collect images to annotate images_to_annotate = [] annotation_list = set(annotation_list) n_humans = 0 for im in tqdm(indexedData.db['images']): class_names = indexedData.get_classes_for_image(im) b_human = False for cn in class_names:
_, _, _ = integrity_check_json_db.integrity_check_json_db( output_json_filename, options) #%% Preview labels viz_options = visualize_db.DbVizOptions() viz_options.num_to_visualize = 300 viz_options.trim_to_images_with_bboxes = False viz_options.add_search_links = True viz_options.sort_by_filename = False viz_options.parallelize_rendering = True viz_options.include_filename_links = True html_output_file, _ = visualize_db.process_images(db_path=output_json_filename, output_dir=preview_base, image_base_dir=image_base, options=viz_options) open_file(html_output_file) # open_file(os.path.join(image_base,'2100703/1141a545-88d2-498b-a684-7431f7aeb324.jpg')) #%% if create_ordered_dataset: pass #%% Create ordered dataset # Because WI filenames are GUIDs, it's not practical to page through sequences in an # image viewer. So we're going to create a copy of the data set where images are # ordered.
data['categories'] = categoriesSet2 json.dump(data, open(outputJsonFilenameSet2, 'w'), indent=4) print('Finished writing json to {}'.format(outputJsonFilenameSet2)) #%% Sanity-check final set 1 .json file from data_management.databases import sanity_check_json_db options = sanity_check_json_db.SanityCheckOptions() sortedCategories, data = sanity_check_json_db.sanity_check_json_db( outputJsonFilenameSet1, options) sortedCategories # python sanity_check_json_db.py --bCheckImageSizes --baseDir "E:\wildlife_data\missouri_camera_traps" "E:\wildlife_data\missouri_camera_traps\missouri_camera_traps_set1.json" #%% Generate previews from visualization import visualize_db output_dir = os.path.join(baseDir, 'preview') options = visualize_db.DbVizOptions() options.num_to_visualize = 1000 options.sort_by_filename = False options.classes_to_exclude = None htmlOutputFile, _ = visualize_db.process_images(outputJsonFilenameSet1, output_dir, baseDir, options) os.startfile(htmlOutputFile) # Generate previewse:\wildlife_data\missouri_camera_traps\missouri_camera_traps_set1.json" "e:\wildlife_data\missouri_camera_traps\preview" "e:\wildlife_data\missouri_camera_traps" --num_to_visualize 1000
# im = images[0] if n_threads == 1: for im in tqdm(data['images']): copy_image(im) else: pool = ThreadPool(n_threads) with tqdm(total=len(data['images'])) as pbar: for i, _ in enumerate(pool.imap_unordered(copy_image, data['images'])): pbar.update() #%% Preview labels from visualization import visualize_db viz_options = visualize_db.DbVizOptions() viz_options.num_to_visualize = 100 viz_options.trim_to_images_with_bboxes = False viz_options.add_search_links = False viz_options.sort_by_filename = False viz_options.parallelize_rendering = True viz_options.include_filename_links = True # viz_options.classes_to_exclude = ['test'] html_output_file, _ = visualize_db.process_images( db_path=output_json_filename, output_dir=os.path.join(output_base, 'preview'), image_base_dir=os.path.join(output_image_base, 'public'), options=viz_options) os.startfile(html_output_file)
print( 'Finished writing .json file with {} images, {} annotations, and {} categories' .format(len(images), len(annotations), len(categories))) #%% Sanity-check the database's integrity json_data = json.load(open(output_file)) options = sanity_check_json_db.SanityCheckOptions() sortedCategories, data = sanity_check_json_db.sanity_check_json_db( json_data, options) #%% Render a bunch of images to make sure the labels got carried along correctly output_dir = preview_base options = visualize_db.DbVizOptions() options.num_to_visualize = 100 options.sort_by_filename = False # options.classes_to_exclude = ['unlabeled'] options.classes_to_exclude = None htmlOutputFile, _ = visualize_db.process_images(json_data, output_dir, input_base, options) os.startfile(htmlOutputFile) #%% Write out a list of files to annotate _, file_list = cct_json_to_filename_json.convertJsonToStringList( output_file, prepend="20190715/") os.startfile(file_list)
options.bCheckImageExistence = False options.bFindUnusedImages = False sorted_categories, data, errors = sanity_check_json_db.sanity_check_json_db( fn, options) #%% Preview animal labels viz_options = visualize_db.DbVizOptions() viz_options.num_to_visualize = 3000 viz_options.trim_to_images_with_bboxes = False viz_options.add_search_links = False viz_options.sort_by_filename = False viz_options.parallelize_rendering = True html_output_file, image_db = visualize_db.process_images( db_path=output_json_file, output_dir=os.path.join(output_dir_base, 'preview_animals'), image_base_dir=image_base_folder, options=viz_options) os.startfile(html_output_file) #%% Preview empty labels viz_options = visualize_db.DbVizOptions() viz_options.num_to_visualize = 3000 viz_options.trim_to_images_with_bboxes = False # viz_options.classes_to_exclude = ['empty','human'] viz_options.classes_to_include = ['empty'] viz_options.add_search_links = False viz_options.sort_by_filename = False viz_options.parallelize_rendering = True html_output_file, image_db = visualize_db.process_images(
print('{} missing images in {} bounding boxes ({} found)'.format( len(missing_images), len(bbox_data['annotations']), len(found_images))) #%% Sanity-check a few files to make sure bounding boxes are still sensible # import sys; sys.path.append(r'C:\git\CameraTraps') from visualization import visualize_db output_base = r'E:\snapshot_temp' viz_options = visualize_db.DbVizOptions() viz_options.num_to_visualize = 500 viz_options.trim_to_images_with_bboxes = True viz_options.add_search_links = True viz_options.sort_by_filename = False html_output_file, bbox_db = visualize_db.process_images( bbox_json_fn, os.path.join(output_base, 'preview2'), image_base, viz_options) os.startfile(html_output_file) #%% Check categories json_fn_all = r"E:\snapshot_out\SnapshotSeregeti_v2.0.json" with open(json_fn_all, 'r') as f: data_all = json.load(f) data_by_season = [] data_10 = None i_season = 9 fn = r'e:\snapshot_out\SnapshotSerengetiS{:0>2d}.json'.format(i_season + 1) with open(fn, 'r') as f:
#%% Write output json_data = {} json_data['images'] = images json_data['annotations'] = annotations json_data['categories'] = categories json_data['info'] = info json.dump(json_data, open(output_file, 'w'), indent=1) print( 'Finished writing .json file with {} images, {} annotations, and {} categories' .format(len(images), len(annotations), len(categories))) #%% Sanity-check the database's integrity options = sanity_check_json_db.SanityCheckOptions() sortedCategories, data = sanity_check_json_db.sanity_check_json_db( output_file, options) #%% Render a bunch of images to make sure the labels got carried along correctly options = visualize_db.DbVizOptions() options.num_to_visualize = 1000 options.parallelize_rendering = True options.sort_by_filename = False options.classes_to_exclude = ['unlabeled', 'empty', 'ambiguous'] html_output_file, data = visualize_db.process_images(output_file, preview_base, file_base, options) os.startfile(html_output_file)