Spaces:
				
			
			
	
			
			
		Sleeping
		
	
	
	
			
			
	
	
	
	
		
		
		Sleeping
		
	File size: 6,249 Bytes
			
			| fc4a65c 55d18b1 3089ebb fc4a65c 613de29 fc4a65c 02e28ee fc4a65c 02e28ee 6430cbd 02e28ee 7dee860 fc4a65c 3089ebb fc4a65c 3089ebb 6430cbd fc4a65c 55d18b1 fc4a65c 55d18b1 fc4a65c 613de29 fc4a65c 55d18b1 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 | from typing import List
import streamlit as st
from streamlit.delta_generator import DeltaGenerator
from PIL import Image
import pandas as pd
import os
WHALE_CLASSES = [
        "beluga",
        "blue_whale",
        "bottlenose_dolphin",
        "brydes_whale",
        "commersons_dolphin",
        "common_dolphin",
        "cuviers_beaked_whale",
        "dusky_dolphin",
        "false_killer_whale",
        "fin_whale",
        "frasiers_dolphin",
        "gray_whale",
        "humpback_whale",
        "killer_whale",
        "long_finned_pilot_whale",
        "melon_headed_whale",
        "minke_whale",
        "pantropic_spotted_dolphin",
        "pygmy_killer_whale",        
        "rough_toothed_dolphin",
        "sei_whale",
        "short_finned_pilot_whale",
        "southern_right_whale",
        "spinner_dolphin",
        "spotted_dolphin",
        "white_sided_dolphin",
    ]
WHALE_IMAGES = [
        "beluga.webp",
        "blue-whale.webp",
        "bottlenose_dolphin.webp",
        "brydes.webp",
        "common_dolphin.webp",
        "common_dolphin.webp",
        "cuviers_beaked_whale.webp",
        "common_dolphin.webp",
        "false-killer-whale.webp",
        "fin-whale.webp",
        "fin-whale.webp",
        "gray-whale.webp",
        "Humpback.webp",
        "killer_whale.webp",
        "640x427-long-finned-pilot-whale.webp",
        "melon.webp",
        "minke-whale.webp",
        "pantropical-spotted-dolphin.webp",
        "pygmy-killer-whale.webp",
        "rough-toothed-dolphin.webp",
        "sei.webp",
        "Whale_Short-Finned_Pilot-markedDW.png",  ## Background
        "640x427-southern-right-whale.jpg",  ## background
        "spinner.webp",
        "pantropical-spotted-dolphin.webp",  ## duplicate also used for
        "640x427-atlantic-white-sided-dolphin.jpg",  ##background
    ]
WHALE_REFERENCES = [
        "https://www.fisheries.noaa.gov/species/beluga-whale",
        "https://www.fisheries.noaa.gov/species/blue-whale",
        "https://www.fisheries.noaa.gov/species/common-bottlenose-dolphin",
        "https://www.fisheries.noaa.gov/species/brydes-whale",
        "https://en.wikipedia.org/wiki/Commerson's_dolphin",
        #"commersons_dolphin - reference missing - classification to be verified",  ## class matching to be verified
        "https://www.fisheries.noaa.gov/species/short-beaked-common-dolphin",
        "https://www.fisheries.noaa.gov/species/cuviers-beaked-whale",
        "https://en.wikipedia.org/wiki/Dusky_dolphin",
        #"dusky_dolphin - reference missing - classification to be verified",  ## class matching to be verified
        "https://www.fisheries.noaa.gov/species/false-killer-whale",
        "https://www.fisheries.noaa.gov/species/fin-whale",
        "https://www.fisheries.noaa.gov/species/frasers-dolphin",
        #"frasiers_dolphin - reference missing - classification to be verified",  ## class matching to be verified
        "https://www.fisheries.noaa.gov/species/gray-whale",
        "https://www.fisheries.noaa.gov/species/humpback-whale",
        "https://www.fisheries.noaa.gov/species/killer-whale",
        "https://www.fisheries.noaa.gov/species/long-finned-pilot-whale",
        "https://www.fisheries.noaa.gov/species/melon-headed-whale",
        "https://www.fisheries.noaa.gov/species/minke-whale",
        "https://www.fisheries.noaa.gov/species/pantropical-spotted-dolphin",
        "https://www.fisheries.noaa.gov/species/pygmy-killer-whale",
        "https://www.fisheries.noaa.gov/species/rough-toothed-dolphin",
        "https://www.fisheries.noaa.gov/species/sei-whale",
        "https://www.fisheries.noaa.gov/species/short-finned-pilot-whale",
        "https://www.fisheries.noaa.gov/species/southern-right-whale",
        "https://www.fisheries.noaa.gov/species/spinner-dolphin",
        "https://www.fisheries.noaa.gov/species/pantropical-spotted-dolphin",
        "https://www.fisheries.noaa.gov/species/atlantic-white-sided-dolphin",
    ]
# Create a dataframe
df_whale_img_ref = pd.DataFrame(
    {
        "WHALE_CLASSES": WHALE_CLASSES,
        "WHALE_IMAGES": WHALE_IMAGES,
        "WHALE_REFERENCES": WHALE_REFERENCES,
    }
).set_index("WHALE_CLASSES")
def format_whale_name(whale_class:str) -> str:
    """
    Formats a whale class name for display 
    
    Args:
        whale_class (str): The class name of the whale, with words separated by underscores.
    Returns:
        str: The formatted whale name with spaces instead of underscores and each word capitalized.
    """
    if not isinstance(whale_class, str):
        raise TypeError("whale_class should be a string.")
    
    whale_name = whale_class.replace("_", " ").title()
    return whale_name
def display_whale(whale_classes:List[str], i:int, viewcontainer:DeltaGenerator=None) -> None:
    """
    Display whale image and reference to the provided viewcontainer.
    Args:
        whale_classes (List[str]): A list of whale class names.
        i (int): The index of the whale class to display.
        viewcontainer (streamlit.delta_generator.DeltaGenerator): The container
            to display the whale information. If not provided, use the current
            streamlit context (works via 'with `container`' syntax)
    Returns:
        None
    
    """
    
    if viewcontainer is None:
        viewcontainer = st
    # validate the input i should be within the range of the whale_classes
    if i >= len(whale_classes):
        raise ValueError(f"Index {i} is out of range. The whale_classes list has only {len(whale_classes)} elements.")
    
    # validate the existence of the whale class in the dataframe as a row key
    if whale_classes[i] not in df_whale_img_ref.index:
        raise ValueError(f"Whale class {whale_classes[i]} not found in the dataframe.")
    
    
    viewcontainer.markdown(
        ":whale:  #" + str(i + 1) + ": " + format_whale_name(whale_classes[i])
    )
    current_dir = os.getcwd()
    image_path = os.path.join(current_dir, "src/images/references/")
    image = Image.open(image_path + df_whale_img_ref.loc[whale_classes[i], "WHALE_IMAGES"])
    viewcontainer.image(image, caption=df_whale_img_ref.loc[whale_classes[i], "WHALE_REFERENCES"], use_column_width=True) |