# This notebook loads and runs a model from https://www.kaggle.com/uysimty/keras-cnn-dog-or-cat-classification,
import numpy as np
import pandas as pd
from keras.preprocessing.image import ImageDataGenerator, load_img, img_to_array
from keras.utils import to_categorical
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
import random
import PIL
import os
FAST_RUN = True
IMAGE_WIDTH=128
IMAGE_HEIGHT=128
IMAGE_SIZE=(IMAGE_WIDTH, IMAGE_HEIGHT)
IMAGE_CHANNELS=3 # RGB color
# Show an example of our data
sample = random.choice(os.listdir("testdata"))
print(sample)
image = load_img("testdata/"+sample)
plt.imshow(image)
# Create a model, load its weights from file
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Dropout, Flatten, Dense, Activation, BatchNormalization
model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(IMAGE_WIDTH, IMAGE_HEIGHT, IMAGE_CHANNELS)))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Conv2D(128, (3, 3), activation='relu'))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(512, activation='relu'))
model.add(BatchNormalization())
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='rmsprop', metrics=['accuracy'])
model.load_weights('model.h5')
def get_prediction(test_img):
"""Evaluate the model on a PIL image"""
test_img = test_img.resize((128,128), resample=PIL.Image.BICUBIC)
test_arr = img_to_array(test_img)
test_arr = np.expand_dims(test_arr, axis=0)
test_arr /= 255.0
return float(model.predict(test_arr))
test_img = load_img('testdata/cat.3.jpg')
plt.imshow(test_img)
score = get_prediction(test_img)
if score < 0.5:
print("It's a dog!")
else:
print("It's a cat!")
It's a cat!
!pip install anvil-uplink
Requirement already satisfied: anvil-uplink in /opt/venv/lib/python3.7/site-packages (0.3.34)
Requirement already satisfied: ws4py in /opt/venv/lib/python3.7/site-packages (from anvil-uplink) (0.5.1)
Requirement already satisfied: six in /opt/venv/lib/python3.7/site-packages (from anvil-uplink) (1.15.0)
Requirement already satisfied: argparse in /opt/venv/lib/python3.7/site-packages (from anvil-uplink) (1.4.0)
Requirement already satisfied: future in /opt/venv/lib/python3.7/site-packages (from anvil-uplink) (0.18.2)
WARNING: You are using pip version 20.2.3; however, version 20.2.4 is available.
You should consider upgrading via the '/opt/venv/bin/python -m pip install --upgrade pip' command.
import anvil.server
anvil.server.connect("[UPLINK KEY HERE]")
Connecting to wss://anvil.works/uplink
Anvil websocket open
Connected to "Default environment (dev)" as SERVER
import anvil.media
@anvil.server.callable
def classify_image(file):
with anvil.media.TempFile(file) as f:
img = load_img(f)
score = get_prediction(img)
return score, 'dog' if score < 0.5 else 'cat'