saving-willy-dev / src /input /input_validator.py
vancauwe's picture
feat: refactor and multi image classification
55d18b1
raw
history blame
2.16 kB
import random
import string
import hashlib
import re
import streamlit as st
from PIL import Image
from PIL import ExifTags
def generate_random_md5():
# Generate a random string
random_string = ''.join(random.choices(string.ascii_letters + string.digits, k=16))
# Encode the string and compute its MD5 hash
md5_hash = hashlib.md5(random_string.encode()).hexdigest()
return md5_hash
def is_valid_number(number:str) -> bool:
"""
Check if the given string is a valid number (int or float, sign ok)
Args:
number (str): The string to be checked.
Returns:
bool: True if the string is a valid number, False otherwise.
"""
pattern = r'^[-+]?[0-9]*\.?[0-9]+$'
return re.match(pattern, number) is not None
# Function to validate email address
def is_valid_email(email:str) -> bool:
"""
Validates if the provided email address is in a correct format.
Args:
email (str): The email address to validate.
Returns:
bool: True if the email address is valid, False otherwise.
"""
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
return re.match(pattern, email) is not None
# Function to extract date and time from image metadata
def get_image_datetime(image_file):
"""
Extracts the original date and time from the EXIF metadata of an uploaded image file.
Args:
image_file (UploadedFile): The uploaded image file from which to extract the date and time.
Returns:
str: The original date and time as a string if available, otherwise None.
Raises:
Warning: If the date and time could not be extracted from the image metadata.
"""
try:
image = Image.open(image_file)
exif_data = image._getexif()
if exif_data is not None:
for tag, value in exif_data.items():
if ExifTags.TAGS.get(tag) == 'DateTimeOriginal':
return value
except Exception as e: # FIXME: what types of exception?
st.warning(f"Could not extract date from image metadata. (file: {image_file.name})")
# TODO: add to logger
return None