Skip to content

Instantly share code, notes, and snippets.

@adash333
Last active October 29, 2017 07:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save adash333/14e36f356cedb7219ef7693893252185 to your computer and use it in GitHub Desktop.
Save adash333/14e36f356cedb7219ef7693893252185 to your computer and use it in GitHub Desktop.
# coding:utf-8
# original code from https://github.com/aidiary/keras-examples/blob/master/vgg16/test_vgg16/test_vgg16
# and http://blog.apitore.com/2017/09/27/python-webapi-falcon/
# falcon_vgg16.py
import falcon
import json
import io
import os
import sys
from keras.applications.vgg16 import VGG16
from keras.models import Sequential, Model
from keras.layers import Input, Activation, Dropout, Flatten, Dense
import numpy as np
from datetime import date
from PIL import Image
from falcon_multipart.middleware import MultipartMiddleware
from keras.applications.vgg16 import VGG16, preprocess_input, decode_predictions
from keras.preprocessing import image
import numpy as np
import sys
import codecs, json
class DebugResource:
def on_post(self, req, res):
"""Handles POST requests"""
data = req.get_param('file').file.read()
pilimg = Image.open(io.BytesIO(data))
# x = np.asarray(pilimg)
# 学習済みのVGG16をロード
# 構造とともに学習済みの重みも読み込まれる
model = VGG16(weights='imagenet')
# model.summary()
# 引数で指定した画像ファイルを読み込む
# サイズはVGG16のデフォルトである224x224にリサイズされる
# img = image.load_img(filename, target_size=(224, 224))
img = pilimg.resize((224, 224))
# 読み込んだPIL形式の画像をarrayに変換
x = image.img_to_array(img)
# 3次元テンソル(rows, cols, channels) を
# 4次元テンソル (samples, rows, cols, channels) に変換
# 入力画像は1枚なのでsamples=1でよい
x = np.expand_dims(x, axis=0)
# Top-5のクラスを予測する
# VGG16の1000クラスはdecode_predictions()で文字列に変換される
# preds = model.predict(preprocess_input(x))
# results = decode_predictions(preds, top=5)[0]
# 画像を読み込んで4次元テンソルへ変換
# x = np.expand_dims(x, axis=0)
# 学習時にImageDataGeneratorのrescaleで正規化したので同じ処理が必要!
# これを忘れると結果がおかしくなるので注意
# x = x / 255.0
# クラスを予測
# 入力は1枚の画像なので[0]のみ
pred = model.predict(x)[0]
# 予測確率が高いトップ5を出力
top = 5
top_indices = pred.argsort()[-top:][::-1]
result = classes[top_indices[0]]
# 予測確率が高いトップ1を出力
res.status = falcon.HTTP_200
res.body = json.dumps({'result':result})
# 画像認識のイニシャライズ
result_dir = 'results'
classes = ['kit fox' , 'English setter', 'Australian terrier', 'grey whale, lesser panda, Egyptian cat', 'ibex, Persian cat', 'cougar, gazelle', 'porcupine, sea lion', 'badger', 'Great Dane', 'Scottish deerhound, killer whale, mink', 'African elephant, red wolf, jaguar, hyena, titi, three-toed sloth, sorrel', 'black-footed ferret, dalmatian, Staffordshire bullterrier, Bouvier des Flandres, weasel', 'miniature poodle', 'bighorn, fox squirrel, colobus, tiger cat', 'impala, coyote, Yorkshire terrier', 'Newfoundland, red fox, hartebeest', 'grey fox, Pekinese, guenon, mongoose', 'indri, tiger, wild boar, zebra', 'ram, orangutan, basenji', 'leopard, vizsla, squirrel monkey, Siamese cat, chimpanzee, komondor', 'proboscis monkey, guinea pig, white wolf, ice bear, gorilla, ox', 'Tibetan mastiff', 'spider monkey, Doberman, warthog', 'Arabian camel, siamang, golden retriever', 'Border collie', 'hare', 'boxer', 'patas, baboon', 'macaque', 'capuchin, flat-coated retriever', 'hog, Eskimo dog, Brittany spaniel', 'dial telephone, maze, Gordon setter', 'dingo, hamster', 'Arctic fox, water buffalo, American black bear, Angora, bison', 'howler monkey, hippopotamus, giant panda, tabby, marmoset', 'Saint Bernard, armadillo', 'redbone', 'polecat, marmot', 'gibbon, llama', 'wood rabbit, lion, Irish setter, dugong, Indian elephant, beaver', 'Madagascar cat, Rhodesian ridgeback', 'lynx, African hunting dog, langur', 'timber wolf, cheetah, sloth bear, German shepherd, otter', 'koala, tusker', 'echidna, wallaby, platypus, wombat', 'revolver, umbrella', 'schooner', 'soccer ball', 'accordion, ant, starfish, chambered nautilus, grand piano, laptop', 'strawberry', 'airliner', 'warplane, airship, balloon', 'space shuttle', 'fireboat', 'gondola', 'speedboat', 'lifeboat', 'canoe', 'yawl', 'catamaran', 'trimaran', 'container ship, liner, pirate, aircraft carrier, submarine, wreck', 'half track', 'tank, missile', 'bobsled, dogsled, bicycle-built-for-two, mountain bike, freight car', 'passenger car, barrow, shopping cart', 'motor scooter, forklift', 'electric locomotive', 'steam locomotive', 'amphibian, ambulance', 'beach wagon, cab, convertible', 'jeep, limousine, minivan', 'Model T', 'racer, sports car, go-kart', 'golfcart, moped', 'snowplow, fire engine, garbage truck, pickup, tow truck, trailer truck, moving van', 'police van, recreational vehicle, streetcar, snowmobile', 'tractor', 'mobile home, tricycle, unicycle, horse cart, mosquito net', 'oxcart', 'bassinet', 'cradle', 'crib, four-poster', 'bookcase', 'china cabinet, medicine chest, chiffonier, table lamp', 'file, pay-phone, park bench', 'barber chair', 'throne', 'folding chair', 'rocking chair, studio couch, toilet seat', 'desk', 'pool table, dining table, entertainment center', 'wardrobe, Granny Smith', 'orange', 'lemon', 'fig', 'pineapple, banana', 'jackfruit, custard apple', 'pomegranate', 'acorn', 'hip, ear, rapeseed', 'corn', 'buckeye, organ, upright, chime, drum, gong, maraca', 'marimba, steel drum', 'banjo', 'cello, lampshade, harp', 'acoustic guitar', 'electric guitar', 'cornet, French horn, trombone', 'harmonica, ocarina, panpipe, bassoon', 'sax, flute, daisy', 'yellow lady\'s slipper, cliff, valley, alp', 'volcano', 'promontory, sandbar, coral reef', 'lakeside, seashore, geyser', 'hatchet', 'cleaver, letter opener, plane, power drill', 'lawn mower, hammer', 'corkscrew, can opener, plunger, screwdriver', 'shovel', 'plow, chain saw, cock', 'hen', 'ostrich, brambling, goldfinch, house finch, junco, indigo bunting, robin, bulbul', 'jay', 'magpie', 'chickadee', 'water ouzel, kite', 'bald eagle, vulture', 'great grey owl, black grouse', 'ptarmigan', 'ruffed grouse, prairie chicken, peacock', 'quail', 'partridge', 'African grey, macaw', 'sulphur-crested cockatoo, lorikeet', 'coucal', 'bee eater', 'hornbill', 'hummingbird', 'jacamar', 'toucan', 'drake', 'red-breasted merganser, goose', 'black swan, white stork, black stork, spoonbill', 'flamingo', 'American egret, little blue heron, bittern', 'crane', 'limpkin, American coot, bustard', 'ruddy turnstone, red-backed sandpiper, redshank, dowitcher', 'oystercatcher, European gallinule, pelican', 'king penguin, albatross, great white shark, tiger shark, hammerhead, electric ray, stingray', 'barracouta, coho, tench, goldfish, eel', 'rock beauty, anemone fish', 'lionfish', 'puffer, sturgeon', 'gar, loggerhead, mud turtle', 'terrapin', 'box turtle, banded gecko', 'common iguana, American chameleon, whiptail, agama', 'frilled lizard, alligator lizard', 'Gila monster, green lizard, African chameleon, Komodo dragon, triceratops', 'African crocodile, American alligator, thunder snake, ringneck snake, hognose snake, green snake, king snake, garter snake, water snake', 'vine snake', 'night snake, boa constrictor, rock python, Indian cobra, green mamba', 'sea snake', 'horned viper, stone wall', 'sidewinder, European fire salamander, common newt, eft', 'spotted salamander, axolotl, bullfrog, tree frog, tailed frog, whistle', 'wing', 'paintbrush', 'oxygen mask', 'snorkel', 'loudspeaker, microphone, screen, mouse, electric fan, oil filter', 'strainer', 'space heater', 'stove', 'guillotine', 'barometer', 'rule, odometer, scale, analog clock', 'digital clock', 'wall clock', 'hourglass', 'sundial', 'parking meter', 'stopwatch, digital watch', 'stethoscope', 'syringe', 'magnetic compass', 'binoculars, projector', 'sunglasses, loupe, radio telescope, bow', 'cannon', 'assault rifle, rifle', 'projectile, computer keyboard, typewriter keyboard', 'crane', 'lighter, abacus', 'cash machine, slide rule, desktop computer', 'hand-held computer, notebook, padlock', 'harvester, thresher, printer', 'slot, vending machine', 'sewing machine', 'joystick', 'switch, hook, car wheel', 'paddlewheel, pinwheel', 'potter\'s wheel', 'gas pump, carousel, swing', 'reel', 'radiator', 'puck, hard disc, sunglass', 'pick, car mirror', 'solar dish, remote control, disk brake, buckle', 'hair slide', 'knot', 'combination lock', 'web site, nail', 'safety pin', 'screw', 'muzzle', 'seat belt, ski', 'candle, jack-o\'-lantern', 'spotlight, torch', 'neck brace', 'pier', 'tripod', 'maypole', 'hand blower, mousetrap', 'spider web, trilobite', 'harvestman, scorpion', 'black and gold garden spider, barn spider, garden spider, black widow, tarantula', 'wolf spider, tick', 'centipede', 'isopod', 'Dungeness crab, rock crab, fiddler crab', 'king crab, American lobster, spiny lobster, crayfish, hermit crab', 'tiger beetle', 'ladybug, ground beetle, long-horned beetle, leaf beetle, dung beetle', 'rhinoceros beetle', 'weevil', 'fly', 'bee', 'grasshopper, cricket', 'walking stick, cockroach, mantis, cicada, leafhopper', 'lacewing, dragonfly, damselfly', 'admiral', 'ringlet, monarch, cabbage butterfly', 'sulphur butterfly, lycaenid, jellyfish', 'sea anemone, brain coral', 'flatworm, nematode, conch', 'snail', 'slug', 'sea slug, chiton, sea urchin', 'sea cucumber, iron, espresso maker', 'microwave, Dutch oven', 'rotisserie', 'toaster', 'waffle iron', 'vacuum, dishwasher, refrigerator, washer, Crock Pot', 'frying pan, wok', 'caldron, coffeepot', 'teapot', 'spatula', 'altar', 'triumphal arch', 'patio, steel arch bridge', 'suspension bridge', 'viaduct', 'barn', 'greenhouse, palace', 'monastery', 'library', 'apiary, boathouse', 'church, mosque', 'stupa, planetarium', 'restaurant, cinema, home theater, lumbermill, coil, obelisk', 'totem pole', 'castle', 'prison, grocery store, bakery, barbershop', 'bookshop, butcher shop, confectionery, shoe shop, tobacco shop, toyshop', 'fountain', 'cliff dwelling', 'yurt', 'dock, brass, megalith, bannister, breakwater, dam, chainlink fence', 'picket fence, worm fence, diamondback, grille, sliding door', 'turnstile', 'mountain tent', 'scoreboard', 'honeycomb', 'plate rack', 'pedestal, beacon, leatherback turtle, mashed potato', 'bell pepper', 'head cabbage', 'broccoli', 'cauliflower', 'zucchini, spaghetti squash', 'acorn squash', 'butternut squash', 'cucumber, artichoke, cardoon', 'mushroom', 'shower curtain', 'jean, carton', 'handkerchief, sandal', 'ashcan, trash bin safe', 'plate', 'necklace', 'croquet ball', 'fur coat', 'thimble', 'pajama, running shoe', 'oboe, cocktail shaker', 'chest', 'manhole cover', 'modem', 'tub, tray', 'balance beam, bagel, violin, prayer rug, kimono', 'hot pot, whiskey jug', 'knee pad', 'book jacket, spindle', 'ski mask', 'beer bottle', 'crash helmet', 'bottlecap', 'tile roof', 'mask', 'maillot', 'Petri dish', 'football helmet', 'bathing cap, teddy, holster', 'pop bottle, photocopier', 'vestment', 'crossword puzzle, golf ball', 'trifle', 'suit, water tower', 'feather boa, cloak', 'red wine', 'drumstick', 'shield, Christmas stocking', 'hoopskirt, menu', 'stage', 'bonnet, meat loaf, baseball', 'face powder', 'scabbard', 'sunscreen, beer glass', 'hen-of-the-woods, guacamole', 'wool, hay', 'bow tie, mailbag, water jug', 'bucket, dishrag, soup bowl', 'eggnog', 'mortar', 'trench coat', 'paddle, chain', 'swab, mixing bowl', 'potpie', 'wine bottle', 'shoji', 'bulletproof vest', 'drilling platform, binder, cardigan', 'sweatshirt', 'pot, birdhouse', 'jinrikisha, hamper', 'ping-pong ball', 'pencil box, consomme', 'apron', 'punching bag, backpack, groom, bearskin, pencil sharpener', 'broom', 'abaya', 'mortarboard', 'poncho', 'crutch', 'Polaroid camera, space bar', 'cup', 'racket, traffic light, quill, radio, snow leopard, dough', 'cuirass', 'military uniform', 'lipstick, shower cap', 'monitor', 'oscilloscope, mitten', 'brassiere, French loaf', 'vase', 'milk can', 'rugby ball', 'paper towel', 'earthstar', 'envelope', 'miniskirt, cowboy hat, trolleybus, perfume, bathtub, hotdog, coral fungus', 'bullet train, pillow', 'toilet tissue, cassette', 'carpenter\'s kit, ladle', 'stinkhorn, lotion', 'hair spray', 'academic gown, dome', 'crate', 'wig', 'burrito', 'pill bottle', 'chain mail, theater curtain, window shade', 'barrel, washbasin, ballpoint, basketball', 'bath towel', 'cowboy boot', 'gown', 'window screen', 'agaric', 'standard poodle', 'cellular telephone, nipple', 'barbell', 'mailbox, lab coat, fire screen, minibus', 'packet', 'brown bear, pole', 'horizontal bar, sombrero', 'pickelhaube', 'rain barrel', 'wallet, cassette player', 'comic book', 'piggy bank, street sign', 'bell cote, fountain pen', 'Windsor tie', 'volleyball', 'overskirt', 'sarong', 'purse', 'bolo tie, bib', 'parachute, sleeping bag', 'television, swimming trunks, measuring cup', 'espresso', 'pizza, breastplate, shopping basket', 'wooden spoon', 'saltshaker, chocolate sauce, ballplayer, goblet', 'gyromitra', 'stretcher', 'water bottle', 'skunk, soap dispenser', 'jersey, school bus', 'jigsaw puzzle', 'plastic bag', 'reflex camera', 'diaper, Band Aid', 'ice lolly, velvet', 'tennis ball', 'gasmask, doormat, Loafer', 'ice cream, pretzel', 'quilt, maillot, tape player', 'clog, iPod', 'bolete', 'meerkat, scuba diver', 'pitcher, matchstick', 'bikini, sock', 'CD player', 'lens cap, thatch, vault', 'beaker', 'bubble', 'cheeseburger', 'parallel bars, flagpole, coffee mug', 'rubber eraser, stole', 'carbonara', 'dumbbell, Siberian husky', 'English springer, malamute, Walker hound, Welsh springer spaniel', 'whippet', 'Weimaraner', 'soft-coated wheaten terrier', 'Dandie Dinmont, Old English sheepdog, otterhound, bloodhound, Airedale, giant schnauzer', 'black-and-tan coonhound', 'papillon', 'Mexican hairless', 'Cardigan, malinois', 'Lhasa, Norwegian elkhound, Rottweiler', 'Saluki, schipperke', 'Brabancon griffon', 'West Highland white terrier', 'Sealyham terrier, Irish wolfhound', 'EntleBucher', 'French bulldog', 'Bernese mountain dog', 'Maltese dog, Norfolk terrier', 'toy terrier', 'cairn, groenendael', 'clumber, Afghan hound, Japanese spaniel', 'borzoi, toy poodle', 'Kerry blue terrier', 'Scotch terrier, Boston bull, Greater Swiss Mountain dog', 'Appenzeller', 'Shih-Tzu', 'Irish water spaniel', 'Pomeranian', 'Bedlington terrier', 'miniature schnauzer', 'collie', 'Irish terrier', 'affenpinscher, silky terrier, beagle', 'Leonberg', 'German short-haired pointer', 'dhole, Chesapeake Bay retriever', 'bull mastiff', 'kuvasz', 'pug, curly-coated retriever', 'Norwich terrier', 'keeshond', 'Lakeland terrier', 'standard schnauzer', 'Tibetan terrier, wire-haired fox terrier', 'basset, chow, American Staffordshire terrier, Shetland sheepdog, Great Pyrenees', 'Chihuahua', 'Labrador retriever', 'Samoyed, bluetick', 'kelpie', 'miniature pinscher', 'Italian greyhound', 'cocker spaniel, Sussex spaniel', 'Pembroke, Blenheim spaniel', 'Ibizan hound, English foxhound', 'briard', 'Border terrier']
"""
classes = ['Tulip', 'Snowdrop', 'LilyValley', 'Bluebell', 'Crocus',
'Iris', 'Tigerlily', 'Daffodil', 'Fritillary', 'Sunflower',
'Daisy', 'ColtsFoot', 'Dandelion', 'Cowslip', 'Buttercup',
'Windflower', 'Pansy']
nb_classes = len(classes)
img_height, img_width = 150, 150
channels = 3
# VGG16
input_tensor = Input(shape=(img_height, img_width, channels))
vgg16 = VGG16(include_top=False, weights='imagenet', input_tensor=input_tensor)
# FC
fc = Sequential()
fc.add(Flatten(input_shape=vgg16.output_shape[1:]))
fc.add(Dense(256, activation='relu'))
fc.add(Dropout(0.5))
fc.add(Dense(nb_classes, activation='softmax'))
# VGG16とFCを接続
model = Model(input=vgg16.input, output=fc(vgg16.output))
# 学習済みの重みをロード
model.load_weights(os.path.join(result_dir, 'finetuning.h5'))
model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy'])
"""
# WebAPIの起動
api = falcon.API(middleware=[MultipartMiddleware()])
api.add_route('/debug', DebugResource())
# 起動する
if __name__ == "__main__":
from wsgiref import simple_server
httpd = simple_server.make_server("127.0.0.1", 8000, api)
httpd.serve_forever()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment