Spaces:
Sleeping
Sleeping
| import cv2 as cv | |
| import numpy as np | |
| import requests | |
| from pathlib import Path | |
| import pandas as pd | |
| import matplotlib.pyplot as plt | |
| from sklearn.cluster import KMeans | |
| def get_iiif_image_urls(ie_pid: str): | |
| try: | |
| manifest_url = f"https://rosetta.slv.vic.gov.au/delivery/iiif/presentation/2.1/{ie_pid}/manifest" | |
| session = requests.Session() | |
| response = session.get(manifest_url) | |
| manifest = response.json() | |
| image_ids = [ | |
| canvas["images"][0]["resource"]["service"]["@id"] | |
| for canvas in manifest["sequences"][0]["canvases"] | |
| ] | |
| image_urls = [f"{image_id}/full/600,/0/default.jpg" for image_id in image_ids] | |
| except Exception as e: | |
| print(f"Could not get iiif image URLs for {ie_pid}, here's the error {e}") | |
| print(f"Manifest url {manifest_url}") | |
| image_urls = [] | |
| return image_urls | |
| # print(get_iiif_image_urls("IE1258179")) | |
| def show_img_compare(img_1, img_2): | |
| f, ax = plt.subplots(1, 2, figsize=(10, 10)) | |
| ax[0].imshow(img_1) | |
| ax[1].imshow(img_2) | |
| ax[0].axis("off") # hide the axis | |
| ax[1].axis("off") | |
| f.tight_layout() | |
| plt.show() | |
| def palette(clusters): | |
| width = 300 | |
| palette = np.zeros((50, width, 3), np.uint8) | |
| steps = width / clusters.cluster_centers_.shape[0] | |
| for idx, centers in enumerate(clusters.cluster_centers_): | |
| palette[:, int(idx * steps) : (int((idx + 1) * steps)), :] = centers | |
| return palette | |
| def get_palette_clusters(img, no_of_clusters=5): | |
| cluster = KMeans(n_clusters=no_of_clusters) | |
| cluster.fit(img.reshape(-1, 3)) | |
| clusters = cluster.fit(img.reshape(-1, 3)) | |
| return clusters | |
| def get_colour_palette_iiif_image(ie_pid="", dim=(500, 300), iiif_url=None): | |
| if not iiif_url: | |
| # get iiif image urls | |
| image_urls = get_iiif_image_urls(ie_pid) | |
| iiif_url = image_urls[0] | |
| if not image_urls: | |
| return False | |
| response = requests.get(iiif_url) | |
| # decode image | |
| img = cv.imdecode(np.frombuffer(response.content, np.uint8), -1) | |
| img = cv.cvtColor(img, cv.COLOR_BGR2RGB) | |
| img = cv.resize(img, dim, interpolation=cv.INTER_AREA) | |
| palette_clusters = get_palette_clusters(img) | |
| img_palette = palette(palette_clusters) | |
| return img_palette | |
| def get_palette_rgbs(ie_pid: str): | |
| print("Getting palette RGBs for", ie_pid) | |
| img_palette = get_colour_palette_iiif_image(ie_pid) | |
| if isinstance(img_palette, bool): | |
| return "" | |
| palette_rgbs = np.unique(img_palette[0], axis=0) | |
| palette_rgbs = palette_rgbs.tolist() | |
| return palette_rgbs | |
| # print(get_palette_rgbs("IE1391238")) | |
| # img, palette = get_colour_palette_iiif_image("IE1423319") | |
| # img, palette = get_colour_palette_iiif_image("IE1391238") | |
| # show_img_compare(img, palette) | |