import gradio as gr from langchain_google_genai import ChatGoogleGenerativeAI from langchain_core.messages import HumanMessage, SystemMessage import tensorflow as tf from tensorflow import keras import json import numpy as np from PIL import Image bird_cnn = keras.models.load_model('bird_model.h5') with open('class_names.json', 'r') as class_name: class_names = json.load(class_name) llm = ChatGoogleGenerativeAI(model="gemini-1.5-flash-latest", convert_system_message_to_human=True) def get_info(language, img): img = img.resize((224, 224), resample=Image.NEAREST) img_array = keras.utils.img_to_array(img) img_array = tf.expand_dims(img_array, 0) predictions = bird_cnn.predict(img_array) score = tf.nn.softmax(predictions[0]) species = class_names[np.argmax(score)] result = llm( [ SystemMessage(content=f'Anda adalah sistem penulis ensiklopedia yang memberikan informasi teraktual dan ' f'bersifat fakta mengenai dunia aves.' f'Setiap kali memberikan informasi, berikan dengan struktur yang terformat layaknya ' f'buku ensiklopedia.' f'Informasi yang diberikan antara lain adalah taksonomi, habitat, populasi, tingkah ' f'laku, serta sebarannya diseluruh dunia.' f'Berikan Output yang detail mengenai Species Burungnya tambahkan Infomasi yang ' f'berkaitan dengan Informasi yang diinginkan sebelumnya' f'Jadikan Struktur output rapih dan bersih agar lebih mudah dibaca dan dipahami' f'Tampilkan Domain, Kingdom, Phylum, Class, Order, Family, Genus, dan Species dari ' f'Species Burung sebagai infomasi Taksonomi' f'Berikan output tanpa format teks dan hanya berupa raw string dengan garis baru dan ' f'pemaragrafan seperti docs' f'Output tidak perlu menggunakan markdown' f'Nama Species Burung (Nama Latin)' f'' f'Taksonomi' f'- Domain :' f'- Kingdom :' f'- Phylum :' f'- Class :' f'- Order :' f'- Family :' f'- Genus :' f'- Species :' f'' f'Habitat' f'' f'Populasi' f'' f'Tingkah Laku' f'' f'Penyebaran' f'Jadikan struktur diatas menjadi default untuk output dari species burung dan selalu ' f'gunakan struktur ini tanpa perlu markdown' f'Jika jenis burung bukan merupakan spesies spesifik, ' f'berikan informasi umum mengenai burung dan ' f'pada kolom species berikan setiap species yang termasuk dalam jenis burung tersebut' f'lalu pada nama spesies burung, ' f'berikan nama latin untuk genus saja. Kasuari (Casuarius). ' f'Nama burung disesuaikan dengan bahasa yang dipilih oleh pengguna, jika pengguna ' f'memilih bahasa indonesia, maka nama burung harus disesuaikan dengan bahasa indonesia' f'Jangan tambahkan simbol sebagain pembeda judul dan sub-judul dengan teks biasa' f'Tambahkan Referensi darimana informasi didapatkan dalam bentuk journal, website ' f'atau referensi manapun, gunakan formatting seperti mendeley untuk referensi'), HumanMessage(content=f'Berikan informasi taksonomi, habitat, Populasi, Tingkah Laku, dan Penyebaran ' f'mengenai burung {species} menggunakan bahasa {language}'), ] ) return result.content title = "Aviary Vision" description = """

Aviary Vision

By: A2 Si Paling Data

Aviary Vision is a system that can identify bird species from an image and provide information about the species in the selected language.

Note: The information provided is AI generated and may not be accurate. Use at your own risk. """ examples = [ ['English', 'bali_starling.png'], ['Bahasa Indonesia', 'cassowary.png'] ] demo = gr.Interface( fn=get_info, inputs=[ gr.Dropdown(choices=[ 'English', 'Bahasa Indonesia', '日本語', '中文', '한국어', 'Español', 'Français', 'Deutsch', 'Русский' ], label="Select Language", type="value", info="Select the language you want to use"), gr.Image(type="pil", label="Upload Image") ], outputs=['text'], allow_flagging="never", title=title, description=description, examples=examples, cache_examples=False ) demo.launch()