File size: 5,888 Bytes
da78f82
 
693649c
 
da78f82
693649c
 
 
 
 
 
 
 
 
 
 
 
 
 
ac7f87d
693649c
 
da78f82
693649c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
da78f82
 
 
 
 
 
 
693649c
 
 
 
da78f82
693649c
 
 
 
 
da78f82
 
 
 
 
 
 
 
 
 
 
 
 
 
 
693649c
 
da78f82
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
693649c
da78f82
 
 
 
9a6ed49
693649c
 
 
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
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 = """
<div style="display: flex; flex-direction: column; align-items: center;">
    <h1 style="margin: 0; font-size: 60px;">Aviary Vision</h1>
    <p style="margin: 0; font-size: 20px;">By: A2 Si Paling Data</p>
</div>
<p>Aviary Vision is a system that can identify bird species from an image and provide 
information about the species in the selected language.</p>
<i>Note: The information provided is AI generated and may not be accurate. Use at your own risk.</i>
"""
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()