Spaces:
Runtime error
Runtime error
import os | |
from io import StringIO | |
import pandas as pd | |
import requests | |
from tabulate import tabulate | |
from requests.compat import urljoin as urlj | |
import json | |
from IPython.display import Image, display | |
import cv2 | |
import ast | |
import gradio as gr | |
from PIL import Image | |
import os | |
import requests | |
API_TOKEN_FROM_YOUR_PROFILE = '0953ed57513ab57a7dccbc6859472657383dd56b' | |
token = API_TOKEN_FROM_YOUR_PROFILE | |
def request_data(url): | |
auth_header = {"Authorization": f"Token {token}"} | |
r = requests.get(url, headers=auth_header) | |
req = json.loads(r.text) | |
return req | |
projects_url = "https://sweden.trapper-project.org/media_classification/api/projects" | |
projects = request_data(projects_url) | |
p13_df = pd.read_csv('observations_0_13.csv') | |
p6_df = pd.read_csv('observations_0_6.csv') | |
p2_df = pd.read_csv('observations_0_2.csv') | |
def display_image(file_path, width=1000, height=None): | |
print(file_path) | |
if os.path.exists(file_path): | |
display(Image(file_path, width=width, height=height)) | |
else: | |
print('File not in dir (yet)') | |
def draw_bboxs(img_path, coordinates, out_path=None, display_now=False): | |
image = cv2.imread(img_path) | |
height, width, channels = image.shape | |
for c in coordinates: | |
start_point = (int(c[0]*width), int(c[1]*height)) | |
#end_point = (int(c[2]*width), int(c[3]*height)) | |
end_point = (int(c[0]*width)+ int(c[2]*width), int(c[1]*height) + int(c[3]*height)) | |
cv2.rectangle(image, start_point, end_point, color=(0,255,0), thickness=2) | |
if not out_path: | |
out_path = img_path.replace('.', '_bboxes.') | |
cv2.imwrite(out_path, image) | |
if display_now: | |
display_image(out_path) | |
return out_path | |
def select_by_species(df, species): | |
return df[df['commonName'] == species] | |
def show_random_species(df, species): | |
display_now = True | |
sdf = select_by_species(df, species) | |
if sdf.empty: | |
print('Species not in available photo set') | |
row = sdf.sample(n=None) | |
print(row.to_markdown()) | |
row = row.squeeze() | |
photo_path = download_image_url(row.filePath, f'{row.fileName}.png', display_now=display_now) | |
row['local_path'] = photo_path | |
row['bboxes'] = ast.literal_eval(row['bboxes']) | |
return row | |
def download_image_url(url, file_name, file_path='photos', display_now=False): | |
photo_path = os.path.join(file_path, file_name) | |
auth_header = {"Authorization": f"Token {token}"} | |
r = requests.get(url, headers=auth_header) | |
if r.status_code == 200: | |
os.makedirs(file_path, exist_ok=True) | |
with open(photo_path, 'wb') as out_file: | |
out_file.write(r.content) | |
else: | |
print(f"ERROR code: {r.status_code} on URL: {url}") | |
return None | |
if display_now: | |
display_image(photo_path) | |
return photo_path | |
def display_image(photo_path): | |
image = Image.open(photo_path) | |
image.show() | |
return image | |
def outputImg(df_name, species): | |
print("Project Name", df_name) | |
if df_name == "[13] Scandcam-Västerbotten2122": | |
df = p13_df | |
elif df_name == "[6] Beyond Moose": | |
df = p6_df | |
elif df_name == "[2] Träffa dina vilda grannar": | |
df = p2_df | |
else: | |
print("Invalid DataFrame selected") | |
return None | |
image_info = show_random_species(df, species) | |
print(image_info['local_path'], image_info.to_string()) | |
details_table = tabulate(pd.DataFrame(image_info).transpose(), headers='keys', tablefmt='pipe') | |
print("details_table",details_table) | |
bbimg = draw_bboxs(image_info['local_path'], image_info.bboxes)#image_info['local_path'], image_info.to_string() | |
return display_image(bbimg), details_table#image_info.to_string() | |
iface = gr.Interface( | |
fn=outputImg, | |
inputs=[ | |
gr.inputs.Dropdown(label="project Name", choices=["[13] Scandcam-Västerbotten2122", "[6] Beyond Moose", "[2] Träffa dina vilda grannar"]), | |
gr.inputs.Dropdown(label="species", choices=list(pd.concat([p13_df['commonName'], p6_df['commonName'], p2_df['commonName']]).unique())), | |
#gr.inputs.Textbox(label="DataFrame") | |
], | |
outputs=[ | |
gr.outputs.Image(type="pil", label="Random Image"), | |
gr.outputs.Textbox(label="Details", type="text") | |
] | |
) | |
iface.launch() | |