Skip to content

Commit

Permalink
model
Browse files Browse the repository at this point in the history
  • Loading branch information
coderx31 committed Mar 10, 2021
1 parent 5a04ae1 commit 54b3c7b
Show file tree
Hide file tree
Showing 5 changed files with 132 additions and 68 deletions.
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
*.h5 filter=lfs diff=lfs merge=lfs -text
36 changes: 25 additions & 11 deletions clientside/screens/home.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import React, { useState, useEffect } from 'react';
import { StyleSheet, Text, View, Button, ImageBackground, Modal, Image, StatusBar, Dimensions } from 'react-native';
import { StyleSheet, Text, View, Button, ImageBackground, Modal, Image, StatusBar, Dimensions, ActivityIndicator } from 'react-native';
import { globalStyles } from '../styles/globalStyles';
import FlatButton from '../shared/button';
import { Ionicons } from '@expo/vector-icons';
Expand All @@ -22,10 +22,11 @@ export default function Home(){
setModalVisible(true);
}
// Bird Name
const[birdName, setBirdName] = useState("Testing..., Nothing from backend");
const[birdName, setBirdName] = useState("");

// for activityIndicator
const[isLoaded, setIsLoaded] = useState(false);
const[isAnimate, setIsAnimate] = useState(false);



Expand Down Expand Up @@ -54,11 +55,14 @@ export default function Home(){
});

console.log(result);
setIsAnimate(true);

if (!result.cancelled) {
uploadImage(result.uri); // sending the image to backend
uploadImage(result.base64); // sending the image to backend
setImage(result.uri);
getBirdDetails();
//console.log(result.uri);
//getBirdDetails();
setModalVisible(false);
}
};

Expand All @@ -72,20 +76,22 @@ export default function Home(){
base64: true,
});

setIsAnimate(true);
console.log(result);

if (!result.cancelled) {
uploadImage(result.uri);
uploadImage(result.base64);
setImage(result.uri);
getBirdDetails();
//getBirdDetails();
setModalVisible(false);
}

}

/* creating the method for send the image uri as base64 */
async function uploadImage(str){
try{
await fetch('http://192.168.8.100:5000/classification',{
await fetch('http://192.168.8.101:5000/classification',{
method: 'POST',
headers: {
Accept: 'application/json',
Expand All @@ -95,6 +101,7 @@ export default function Home(){
image: str,
}),
});
getBirdDetails();
}catch(e){
console.log(e);
}
Expand All @@ -104,11 +111,13 @@ export default function Home(){
// getting bird's informations from backend
async function getBirdDetails(){
try {
let response = await fetch('http://192.168.8.101:5000/home'); // home must be change to current route
let response = await fetch('http://192.168.8.101:5000/bird'); // home must be change to current route
let responseJSON = await response.json();
setPlaceholder(responseJson.name); // name must be change to correct key
setBirdName(responseJSON.bird); // name must be change to correct key
setIsLoaded(true)
console.log(responseJson.name)
console.log(responseJSON.bird)
//isAnimate(false);
setIsAnimate(false);
} catch (error) {
console.log(error);
}
Expand Down Expand Up @@ -146,9 +155,14 @@ export default function Home(){
</Modal>

<View style={styles.imageContainer}>
<Image source={{ uri: result.uri }} style={{ width: 200, height: 200, justifyContent: 'center', alignItems: 'center' }}/>
<Image source={{ uri: image }} style={{ width: 300, height: 300, justifyContent: 'center', alignItems: 'center' }}/>
</View>
<View style={styles.birdDetailsContainer}>
<ActivityIndicator
size = "large"
color = "#E72D44"
animating = { isAnimate }
/>
<Text>Bird: { birdName }</Text>
</View>
<FlatButton text='Find Bird' onPress={handler} />
Expand Down
160 changes: 103 additions & 57 deletions serverside/app.py
Original file line number Diff line number Diff line change
@@ -1,88 +1,134 @@
# importing components
import os
from flask import Flask, request, render_template, send_from_directory
import base64
from flask import Flask, request, render_template, send_from_directory, jsonify

app = Flask(__name__)


# take the current working directory.
# get the current directory
current_directory = os.path.dirname(os.path.abspath(__file__))
prediction = "Shenal"

# all of the bird species names
bird_categories = ['AFRICAN CROWNED CRANE', 'AFRICAN FIREFINCH', 'ALBATROSS', 'ALEXANDRINE PARAKEET', 'AMERICAN AVOCET',
'AMERICAN BITTERN', 'AMERICAN COOT', 'AMERICAN GOLDFINCH', 'AMERICAN KESTREL', 'AMERICAN PIPIT',
'AMERICAN REDSTART', 'ANHINGA', 'ANNAS HUMMINGBIRD', 'ANTBIRD', 'ARARIPE MANAKIN',
'ASIAN CRESTED IBIS', 'BALD EAGLE', 'BALI STARLING', 'BALTIMORE ORIOLE', 'BANANAQUIT',
'BANDED BROADBILL', 'BAR-TAILED GODWIT', 'BARN OWL', 'BARN SWALLOW', 'BARRED PUFFBIRD',
'BAY-BREASTED WARBLER', 'BEARDED BARBET', 'BELTED KINGFISHER', 'BIRD OF PARADISE', 'BLACK FRANCOLIN',
'BLACK SKIMMER', 'BLACK SWAN', 'BLACK THROATED WARBLER', 'BLACK VULTURE', 'BLACK-CAPPED CHICKADEE',
'BLACK-NECKED GREBE', 'BLACK-THROATED SPARROW', 'BLACKBURNIAM WARBLER', 'BLUE GROUSE', 'BLUE HERON',
'BOBOLINK', 'BROWN NOODY', 'BROWN THRASHER', 'CACTUS WREN', 'CALIFORNIA CONDOR', 'CALIFORNIA GULL',
# getting all bird names
# here just to testing purposes
bird_categories = ['AFRICAN CROWNED CRANE', 'AFRICAN FIREFINCH', 'ALBATROSS', 'ALEXANDRINE PARAKEET',
'AMERICAN AVOCET', 'AMERICAN BITTERN', 'AMERICAN COOT', 'AMERICAN GOLDFINCH'
, 'AMERICAN KESTREL', 'AMERICAN PIPIT', 'AMERICAN REDSTART', 'ANHINGA', 'ANNAS HUMMINGBIRD',
'ANTBIRD', 'ARARIPE MANAKIN', 'ASIAN CRESTED IBIS', 'BALD EAGLE', 'BALI STARLING',
'BALTIMORE ORIOLE', 'BANANAQUIT', 'BANDED BROADBILL', 'BAR-TAILED GODWIT', 'BARN OWL',
'BARN SWALLOW', 'BARRED PUFFBIRD', 'BAY-BREASTED WARBLER', 'BEARDED BARBET',
'BELTED KINGFISHER', 'BIRD OF PARADISE', 'BLACK FRANCOLIN', 'BLACK SKIMMER', 'BLACK SWAN',
'BLACK THROATED WARBLER', 'BLACK VULTURE', 'BLACK-CAPPED CHICKADEE', 'BLACK-NECKED GREBE',
'BLACK-THROATED SPARROW', 'BLACKBURNIAM WARBLER', 'BLUE GROUSE', 'BLUE HERON', 'BOBOLINK',
'BROWN NOODY', 'BROWN THRASHER', 'CACTUS WREN', 'CALIFORNIA CONDOR', 'CALIFORNIA GULL',
'CALIFORNIA QUAIL', 'CANARY', 'CAPE MAY WARBLER', 'CAPUCHINBIRD', 'CARMINE BEE-EATER',
'CASPIAN TERN', 'CASSOWARY', 'CHARA DE COLLAR', 'CHIPPING SPARROW', 'CHUKAR PARTRIDGE',
'CINNAMON TEAL', 'COCK OF THE ROCK', 'COCKATOO', 'COMMON FIRECREST', 'COMMON GRACKLE',
'COMMON HOUSE MARTIN', 'COMMON LOON', 'COMMON POORWILL', 'COMMON STARLING', 'COUCHS KINGBIRD',
'CRESTED AUKLET', 'CRESTED CARACARA', 'CRESTED NUTHATCH', 'CROW', 'CROWNED PIGEON', 'CUBAN TODY',
'CURL CRESTED ARACURI', 'D-ARNAUDS BARBET', 'DARK EYED JUNCO', 'DOWNY WOODPECKER',
'EASTERN BLUEBIRD', 'EASTERN MEADOWLARK', 'EASTERN ROSELLA', 'EASTERN TOWEE', 'ELEGANT TROGON',
'ELLIOTS PHEASANT', 'EMPEROR PENGUIN', 'EMU', 'EURASIAN GOLDEN ORIOLE', 'EURASIAN MAGPIE',
'EVENING GROSBEAK', 'FIRE TAILLED MYZORNIS', 'FLAME TANAGER', 'FLAMINGO', 'FRIGATE', 'GAMBELS QUAIL',
'GILA WOODPECKER', 'GILDED FLICKER', 'GLOSSY IBIS', 'GO AWAY BIRD', 'GOLD WING WARBLER',
'GOLDEN CHEEKED WARBLER', 'GOLDEN CHLOROPHONIA', 'GOLDEN EAGLE', 'GOLDEN PHEASANT', 'GOLDEN PIPIT',
'GOULDIAN FINCH', 'GRAY CATBIRD', 'GRAY PARTRIDGE', 'GREAT POTOO', 'GREATOR SAGE GROUSE',
'GREEN JAY', 'GREY PLOVER', 'GUINEA TURACO', 'GUINEAFOWL', 'GYRFALCON', 'HARPY EAGLE',
'HAWAIIAN GOOSE', 'HELMET VANGA', 'HOATZIN', 'HOODED MERGANSER', 'HOOPOES', 'HORNBILL',
'HORNED GUAN', 'HORNED SUNGEM', 'HOUSE FINCH', 'HOUSE SPARROW', 'IMPERIAL SHAQ', 'INCA TERN',
'CRESTED AUKLET', 'CRESTED CARACARA', 'CRESTED NUTHATCH', 'CROW', 'CROWNED PIGEON',
'CUBAN TODY', 'CURL CRESTED ARACURI', 'D-ARNAUDS BARBET', 'DARK EYED JUNCO',
'DOWNY WOODPECKER', 'EASTERN BLUEBIRD', 'EASTERN MEADOWLARK', 'EASTERN ROSELLA',
'EASTERN TOWEE', 'ELEGANT TROGON', 'ELLIOTS PHEASANT', 'EMPEROR PENGUIN', 'EMU',
'EURASIAN GOLDEN ORIOLE', 'EURASIAN MAGPIE', 'EVENING GROSBEAK', 'FIRE TAILLED MYZORNIS',
'FLAME TANAGER', 'FLAMINGO', 'FRIGATE', 'GAMBELS QUAIL', 'GILA WOODPECKER', 'GILDED FLICKER',
'GLOSSY IBIS', 'GO AWAY BIRD', 'GOLD WING WARBLER', 'GOLDEN CHEEKED WARBLER',
'GOLDEN CHLOROPHONIA', 'GOLDEN EAGLE', 'GOLDEN PHEASANT', 'GOLDEN PIPIT', 'GOULDIAN FINCH',
'GRAY CATBIRD', 'GRAY PARTRIDGE', 'GREAT POTOO', 'GREATOR SAGE GROUSE', 'GREEN JAY',
'GREY PLOVER', 'GUINEA TURACO', 'GUINEAFOWL', 'GYRFALCON', 'HARPY EAGLE', 'HAWAIIAN GOOSE',
'HELMET VANGA', 'HOATZIN', 'HOODED MERGANSER', 'HOOPOES', 'HORNBILL', 'HORNED GUAN',
'HORNED SUNGEM', 'HOUSE FINCH', 'HOUSE SPARROW', 'IMPERIAL SHAQ', 'INCA TERN',
'INDIAN BUSTARD', 'INDIAN PITTA', 'INDIGO BUNTING', 'JABIRU', 'JAVA SPARROW', 'JAVAN MAGPIE',
'KAKAPO', 'KILLDEAR', 'KING VULTURE', 'KIWI', 'KOOKABURRA', 'LARK BUNTING', 'LEARS MACAW',
'LILAC ROLLER', 'LONG-EARED OWL', 'MALABAR HORNBILL', 'MALACHITE KINGFISHER', 'MALEO',
'MALLARD DUCK', 'MANDRIN DUCK', 'MARABOU STORK', 'MASKED BOOBY', 'MASKED LAPWING',
'MIKADO PHEASANT', 'MOURNING DOVE', 'MYNA', 'NICOBAR PIGEON', 'NORTHERN BALD IBIS',
'NORTHERN CARDINAL', 'NORTHERN FLICKER', 'NORTHERN GANNET', 'NORTHERN GOSHAWK', 'NORTHERN JACANA',
'NORTHERN MOCKINGBIRD', 'NORTHERN PARULA', 'NORTHERN RED BISHOP', 'OCELLATED TURKEY', 'OKINAWA RAIL',
'OSPREY', 'OSTRICH', 'OYSTER CATCHER', 'PAINTED BUNTIG', 'PALILA', 'PARADISE TANAGER', 'PARUS MAJOR',
'PEACOCK', 'PELICAN', 'PEREGRINE FALCON', 'PHILIPPINE EAGLE', 'PINK ROBIN', 'PUFFIN', 'PURPLE FINCH',
'PURPLE GALLINULE', 'PURPLE MARTIN', 'PURPLE SWAMPHEN', 'QUETZAL', 'RAINBOW LORIKEET', 'RAZORBILL',
'RED BEARDED BEE EATER', 'RED BELLIED PITTA', 'RED FACED CORMORANT', 'RED FACED WARBLER',
'RED HEADED DUCK', 'RED HEADED WOODPECKER', 'RED HONEY CREEPER', 'RED WINGED BLACKBIRD',
'RED WISKERED BULBUL', 'RING-NECKED PHEASANT', 'ROADRUNNER', 'ROBIN', 'ROCK DOVE',
'MIKADO PHEASANT',
'MOURNING DOVE', 'MYNA', 'NICOBAR PIGEON', 'NORTHERN BALD IBIS', 'NORTHERN CARDINAL',
'NORTHERN FLICKER',
'NORTHERN GANNET', 'NORTHERN GOSHAWK', 'NORTHERN JACANA', 'NORTHERN MOCKINGBIRD', 'NORTHERN PARULA',
'NORTHERN RED BISHOP', 'OCELLATED TURKEY', 'OKINAWA RAIL', 'OSPREY', 'OSTRICH', 'OYSTER CATCHER',
'PAINTED BUNTIG', 'PALILA', 'PARADISE TANAGER', 'PARUS MAJOR', 'PEACOCK', 'PELICAN',
'PEREGRINE FALCON',
'PHILIPPINE EAGLE', 'PINK ROBIN', 'PUFFIN', 'PURPLE FINCH', 'PURPLE GALLINULE', 'PURPLE MARTIN',
'PURPLE SWAMPHEN', 'QUETZAL', 'RAINBOW LORIKEET', 'RAZORBILL', 'RED BEARDED BEE EATER',
'RED BELLIED PITTA',
'RED FACED CORMORANT', 'RED FACED WARBLER', 'RED HEADED DUCK', 'RED HEADED WOODPECKER',
'RED HONEY CREEPER',
'RED WINGED BLACKBIRD', 'RED WISKERED BULBUL', 'RING-NECKED PHEASANT', 'ROADRUNNER', 'ROBIN',
'ROCK DOVE',
'ROSY FACED LOVEBIRD', 'ROUGH LEG BUZZARD', 'RUBY THROATED HUMMINGBIRD', 'RUFOUS KINGFISHER',
'RUFUOS MOTMOT', 'SAMATRAN THRUSH', 'SAND MARTIN', 'SCARLET IBIS', 'SCARLET MACAW', 'SHOEBILL',
'SHORT BILLED DOWITCHER', 'SMITHS LONGSPUR', 'SNOWY EGRET', 'SNOWY OWL', 'SORA', 'SPANGLED COTINGA',
'SPLENDID WREN', 'SPOON BILED SANDPIPER', 'SPOONBILL', 'SRI LANKA BLUE MAGPIE', 'STEAMER DUCK',
'STORK BILLED KINGFISHER', 'STRAWBERRY FINCH', 'STRIPPED SWALLOW', 'SUPERB STARLING',
'SWINHOES PHEASANT', 'TAIWAN MAGPIE', 'TAKAHE', 'TASMANIAN HEN', 'TEAL DUCK', 'TIT MOUSE', 'TOUCHAN',
'TOWNSENDS WARBLER', 'TREE SWALLOW', 'TRUMPTER SWAN', 'TURKEY VULTURE', 'TURQUOISE MOTMOT',
'UMBRELLA BIRD', 'VARIED THRUSH', 'VENEZUELIAN TROUPIAL', 'VERMILION FLYCATHER',
'VIOLET GREEN SWALLOW', 'VULTURINE GUINEAFOWL', 'WATTLED CURASSOW', 'WHIMBREL',
'WHITE CHEEKED TURACO', 'WHITE NECKED RAVEN', 'WHITE TAILED TROPIC', 'WILD TURKEY',
'WILSONS BIRD OF PARADISE', 'WOOD DUCK', 'YELLOW BELLIED FLOWERPECKER', 'YELLOW CACIQUE',
'SWINHOES PHEASANT',
'TAIWAN MAGPIE', 'TAKAHE', 'TASMANIAN HEN', 'TEAL DUCK', 'TIT MOUSE', 'TOUCHAN', 'TOWNSENDS WARBLER',
'TREE SWALLOW', 'TRUMPTER SWAN', 'TURKEY VULTURE', 'TURQUOISE MOTMOT', 'UMBRELLA BIRD',
'VARIED THRUSH',
'VENEZUELIAN TROUPIAL', 'VERMILION FLYCATHER', 'VIOLET GREEN SWALLOW', 'VULTURINE GUINEAFOWL',
'WATTLED CURASSOW', 'WHIMBREL', 'WHITE CHEEKED TURACO', 'WHITE NECKED RAVEN', 'WHITE TAILED TROPIC',
'WILD TURKEY', 'WILSONS BIRD OF PARADISE', 'WOOD DUCK', 'YELLOW BELLIED FLOWERPECKER',
'YELLOW CACIQUE',
'YELLOW HEADED BLACKBIRD']


@app.route("/")
@app.route('/')
def index():
return render_template('main.html')

return 'Hello World!'


@app.route("/classification", methods=["POST","GET"])
@app.route('/classification', methods=["POST", "GET"])
def classification():
#print('method works')
json_data = request.json
value = bytes(json_data['image'], 'utf-8')
#print(value)
#encoded_user_pass = base64.encodebytes(value)
# take the current working directory.
current_directory = os.path.dirname(os.path.abspath(__file__))
target = os.path.join(current_directory, 'images/')
print(target)
# create a images folder, if it is not already created.
if not os.path.isdir(target):
os.mkdir(target)
else:
print("couldn't create upload directory: {}".format(target))
print("file", request.files.getlist("file")) # upload multiple files
for upload in request.files.getlist("file"):
print("upload ",upload)
print("{} is the file name".format(upload.filename))
filename = upload.filename
destination = "/".join([target, filename])
print("Accepting income file:", filename)
print("Save it to: ", destination)
upload.save(destination)
return "Folder created."
image_path = os.path.join(target, 'saved_image.jpg')
with open(image_path, "wb") as file:
file.write(base64.decodebytes(value))
print('image saved.')
import numpy as np
from keras.preprocessing import image
from keras.models import load_model
new_model = load_model('birdo_model.h5')
new_model.summary()
print(new_model)
test_image = image.load_img("images\\" + 'saved_image.jpg', target_size=(224, 224))
test_image = image.img_to_array(test_image)
test_image = np.expand_dims(test_image, axis=0)
print("Test Image: ", test_image)
result = new_model.predict(test_image)
print("Result: ", result)
result1 = result[0]
print("Result 1: ", result1)
for k in range(250):
if result1[k] == 1:
break

global prediction
prediction = bird_categories[k]
print(prediction)
#return jsonify({"bird": prediction}
return 'Hey, Coderx!'


@app.route('/bird', methods=["GET"])
def bird():
global prediction
print(prediction)
return jsonify({"bird": prediction})


@app.route('/birdDes', methods=["POST"])
def search():
return "Search Method"


if __name__ == '__main__':
app.run(debug=True) # host must be changed to your default ip address
app.run(host='192.168.8.101', debug=True)
3 changes: 3 additions & 0 deletions serverside/birdo_model.h5
Git LFS file not shown
Binary file added serverside/images/saved_image.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 54b3c7b

Please sign in to comment.