Spaces:
Runtime error
Runtime error
File size: 7,879 Bytes
6aaedd6 8423bb2 6aaedd6 8423bb2 6aaedd6 8423bb2 6aaedd6 8423bb2 6aaedd6 8423bb2 6aaedd6 8423bb2 6aaedd6 8423bb2 6aaedd6 8423bb2 6aaedd6 8423bb2 6aaedd6 8423bb2 6aaedd6 8423bb2 6aaedd6 4b70e94 74dd4a8 6aaedd6 8423bb2 6aaedd6 |
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 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 |
from keras.models import load_model
from PIL import Image, ImageOps
import numpy as np
import gradio as gr
import pandas as pd
data = pd.read_csv('species_info.csv')
def format_label(label):
"""
From '0 rùa khác\n' to 'rùa khác'
"""
return label[label.find(" ")+1:-1]
def info(species_name):
status = check_species_status(species_name)
if status == '':
info = ''
return info
def get_name(en_name, lan):
"""
Return name in Vietnamese
"""
return data[data[f'name_en'] == en_name][f'name_{lan}'].to_list()[0]
def get_fun_fact(en_name, lan):
"""
Return fun fact of the species
"""
return data[data[f'name_en'] == en_name][f'fun_fact_{lan}'].to_list()[0]
def get_law(en_name):
cites = data[data['name_en'] == en_name]['CITES'].to_list()[0]
nd06 = data[data['name_en'] == en_name]['ND06'].to_list()[0]
return cites, nd06
def get_habitat(en_name, lan):
return data[data['name_en'] == en_name][f'habitat_{lan}'].to_list()[0]
def get_conservation_status(en_name, lan):
status = data[data['name_en'] == en_name]['conservation_status'].to_list()[0]
status_dict = {
'NE': {
'vi': "Không được đánh giá",
'en': "Not Evaluated"
},
'DD': {
'vi': "Thiếu dữ liệu",
'en': "Data Deficient"
},
'LC': {
'vi': "Ít quan tâm",
'en': "Least Concern"
},
'NT': {
'vi': "Sắp bị đe dọa",
'en': "Near Threatened"
},
'VU': {
'vi': "Sắp nguy cấp",
'en': "Vulnerable"
},
'EN': {
'vi': "Nguy cấp",
'en': "Endangered"
},
'CR': {
'vi': "Cực kỳ nguy cấp",
'en': "Critically Endangered"
},
'EW': {
'vi': "Tuyệt chủng trong tự nhiên",
'en': "Extinct in the Wild"
},
'EX': {
'vi': "Tuyệt chủng",
'en': "Extinct"
},
}
return status_dict[status][lan]
def predict(image, language):
# Load the model
model = load_model('keras_model.h5')
# Create the array of the right shape to feed into the keras model
# The 'length' or number of images you can put into the array is
# determined by the first position in the shape tuple, in this case 1.
data = np.ndarray(shape=(1, 224, 224, 3), dtype=np.float32)
#resize the image to a 224x224 with the same strategy as in TM2:
#resizing the image to be at least 224x224 and then cropping from the center
size = (224, 224)
image = ImageOps.fit(image, size, Image.ANTIALIAS)
#turn the image into a numpy array
image_array = np.asarray(image)
# Normalize the image
normalized_image_array = (image_array.astype(np.float32) / 127.0) - 1
# Load the image into the array
data[0] = normalized_image_array
# run the inference
pred = model.predict(data)
pred = pred.tolist()
sorted_index = np.argsort(pred).tolist()[0]
print(sorted_index)
display_index = []
for i in sorted_index[::-1]:
if pred[0][i] > 0.01:
display_index.append(i)
with open('labels.txt','r') as f:
labels = f.readlines()
en_name = format_label(labels[sorted_index[-1]]).strip()
lan = ''
if language == "Tiếng Việt":
lan = 'vi'
else:
lan = 'en'
result = {get_name(format_label(labels[i]), lan): round(pred[0][i],2) for i in display_index}
cites, nd06 = get_law(en_name)
info = ""
fun_fact = ""
if lan == 'vi':
fun_fact += "💡 **Thông tin lý thú** \n\n"
if lan == 'en':
fun_fact += "💡 **Fun fact** \n\n"
fun_fact += f"{get_fun_fact(en_name, lan)}."
status = ""
if lan == 'vi':
status += "**🐢 Tình trạng bảo tồn** \n\n"
if lan == 'en':
status += "**🐢 Conservation status** \n\n"
status += f"{get_conservation_status(en_name, lan)}"
law = ""
if lan == 'vi':
law += "**👮♀️ Luật** \n\n"
if lan == 'en':
law += "**👮♀️ Law** \n\n"
law += f'CITES: {cites}, NĐ06: {nd06}'
if lan == 'vi' and str(nd06) != "":
info += "Đây là loài được pháp luật bảo vệ. Mọi hành vi buôn bán, nuôi nhốt không có \
[giấy phép](https://thuvienphapluat.vn/van-ban/Tai-nguyen-Moi-truong/Nghi-dinh-06-2019-ND-CP-quan-ly-thuc-vat-rung-dong-vat-rung-nguy-cap-quy-hiem-405883.aspx) đều vi phạm pháp luật \n"
info += "- Nếu bạn vô tình bắt gặp loài này bị buôn bán mà không có giấy phép, \
tuyệt đối không mua nhằm bất kỳ mục đích gì (ví dụ để phóng sinh) \
mà nên báo cáo vi phạm tại đường dây nóng bảo vệ DVHD của ENV **1800-1522**. \n"
info += "- Nếu bạn đang nuôi thì nên giao nộp cho cơ quan chức năng để trả về tự nhiên. Tham khảo đơn vị tiếp nhận DVHD ở địa phương \
bạn tại [đây](https://drive.google.com/file/d/1K2ZWcHKGEsNudh_LtHgHJOXlVw-GQ6AZ/view). \n"
info += f"- Nếu bạn bắt gặp trong vườn nhà thì có thể xem xét thả chúng về môi trường sống. Hãy đảm bảo nơi bạn thả là\
**{get_habitat(en_name, lan)}**. \n\n"
info += f"Liên hệ Chương trình Bảo tồn Rùa châu Á ([ATP](https://asianturtleprogram.org/vi/)) qua email: info@asianturtleprogram.org hoặc [Facebook](https://www.facebook.com/search/top?q=asian%20turtle%20program) để được hướng dẫn trong các trường hợp cụ thể"
if lan == 'en' and str(nd06) != "":
info += f'CITES: {cites}, NĐ06: {nd06} \n \n'
info += "This species is protected by law. All acts of trafficking and captive breeding without \
[authority permisison](https://thuvienphapluat.vn/van-ban/Tai-nguyen-Moi-truong/Nghi-dinh-06-2019-ND-CP-quan-ly-thuc-vat-rung-dong-vat-rung-nguy-cap-quy-hiem-405883.aspx) are illegal \n"
info += "- If you happen to come across this species being traded without a license, \
do not buy for any purpose (e.g., to release). \
Instead, you should report the suspicious act to ENV via their hotline **1800-1522**. \n"
info += "- If you are raising them, you should hand them over to the authorities to return to the wild. Find your local wild-animal receiver \
[here](https://drive.google.com/file/d/1K2ZWcHKGEsNudh_LtHgHJOXlVw-GQ6AZ/view). \n"
info += f"- If you find them in your garden, consider releasing them back into their habitat. Please make sure the place you release is \
**{get_habitat(en_name, lan)}**. \n\n"
info += f"Contact Asian Turtle Program ([ATP](https://asianturtleprogram.org/)) via email (info@asianturtleprogram.org) or [Facebook](https://www.facebook.com/search/top?q=asian%20turtle%20program) for instructions in specific cases."
return result, fun_fact, status, law, info
description="""
VNTurtle nhận diện các loài rùa Việt Nam. Mô hình mẫu này có thể nhận diện 10 loại rùa thường xuất hiện ở VN gồm **5** loài bản địa \n\n
**(1) Rùa núi viền**, **(2) Rùa núi vàng**, **(3) Rùa ba gờ**, **(4) Rùa răng**, và **(5) Rùa Trung Bộ** \n\n
và **5** loài ngoại lai \n\n
**(1) Rùa Sulcata**, **(2) Rùa bản đồ**, **(3) Rùa cá sấu**, **(4) Rùa tai đỏ**, và **(5) Rùa ninja**
"""
article = "© Hình ảnh minh hoạ được cung cấp bởi ATP"
examples = [ ['test1.jpg'], ['test2.jpg'], ['test3.jpg'] ]
gr.Interface(fn=predict,
inputs=[gr.Image(type="pil", label="Input Image"), gr.Radio(value="Tiếng Việt", choices=["Tiếng Việt", "English"], label="Language")],
outputs=[gr.Label(label="Predictions"), gr.Markdown(), gr.Markdown(), gr.Markdown(), gr.Markdown()],
live=True,
title='VNTurtle - Toy Model',
description=description,
examples=examples,
article=article).launch() |