| | #include <opencv2/opencv.hpp> |
| | #include <opencv2/dnn.hpp> |
| | #include <iostream> |
| | #include <algorithm> |
| |
|
| | using namespace std; |
| | using namespace cv; |
| | using namespace dnn; |
| |
|
| | extern vector<string> LABELS_IMAGENET_1K; |
| |
|
| | class PPResNet { |
| | public: |
| | PPResNet(const string& modelPath, int topK, int backendId, int targetId) |
| | : _topK(topK) { |
| | _model = readNet(modelPath); |
| | _model.setPreferableBackend(backendId); |
| | _model.setPreferableTarget(targetId); |
| | } |
| |
|
| | Mat preprocess(const Mat& image) |
| | { |
| | Mat floatImage; |
| | image.convertTo(floatImage, CV_32F, 1.0 / 255.0); |
| | subtract(floatImage, _mean, floatImage); |
| | divide(floatImage, _std, floatImage); |
| | return blobFromImage(floatImage); |
| | } |
| |
|
| | vector<string> infer(const Mat& image) |
| | { |
| | assert(image.rows == _inputSize.height && image.cols == _inputSize.width); |
| | Mat inputBlob = preprocess(image); |
| | _model.setInput(inputBlob, _inputName); |
| | Mat outputBlob = _model.forward(_outputName); |
| | vector<string> results = postprocess(outputBlob); |
| | return results; |
| | } |
| |
|
| | vector<string> postprocess(const Mat& outputBlob) |
| | { |
| | vector<int> class_id_list; |
| | sortIdx(outputBlob, class_id_list, SORT_EVERY_ROW | SORT_DESCENDING); |
| | class_id_list.resize(min(_topK, static_cast<int>(outputBlob.cols))); |
| | vector<string> predicted_labels; |
| | for (int class_id : class_id_list) |
| | { |
| | predicted_labels.push_back(LABELS_IMAGENET_1K[class_id]); |
| | } |
| | return predicted_labels; |
| | } |
| |
|
| | private: |
| | Net _model; |
| | int _topK; |
| | const Size _inputSize = Size(224, 224); |
| | const Scalar _mean = Scalar(0.485, 0.456, 0.406); |
| | const Scalar _std = Scalar(0.229, 0.224, 0.225); |
| | string _inputName = ""; |
| | string _outputName = "save_infer_model/scale_0.tmp_0"; |
| | }; |
| |
|
| | const vector<vector<int>> backend_target_pairs = |
| | { |
| | {DNN_BACKEND_OPENCV, DNN_TARGET_CPU}, |
| | {DNN_BACKEND_CUDA, DNN_TARGET_CUDA}, |
| | {DNN_BACKEND_CUDA, DNN_TARGET_CUDA_FP16}, |
| | {DNN_BACKEND_TIMVX, DNN_TARGET_NPU}, |
| | {DNN_BACKEND_CANN, DNN_TARGET_NPU} |
| | }; |
| |
|
| | int main(int argc, char** argv) |
| | { |
| | CommandLineParser parser(argc, argv, |
| | "{ input i | | Set input path to a certain image, omit if using camera.}" |
| | "{ model m | image_classification_ppresnet50_2022jan.onnx | Set model path.}" |
| | "{ top_k k | 1 | Get top k predictions.}" |
| | "{ backend_target bt | 0 | Choose one of computation backends: " |
| | "0: (default) OpenCV implementation + CPU, " |
| | "1: CUDA + GPU (CUDA), " |
| | "2: CUDA + GPU (CUDA FP16), " |
| | "3: TIM-VX + NPU, " |
| | "4: CANN + NPU}"); |
| |
|
| | string inputPath = parser.get<string>("input"); |
| | string modelPath = parser.get<string>("model"); |
| | int backendTarget = parser.get<int>("backend_target"); |
| | int topK = parser.get<int>("top_k"); |
| |
|
| | int backendId = backend_target_pairs[backendTarget][0]; |
| | int targetId = backend_target_pairs[backendTarget][1]; |
| |
|
| | PPResNet model(modelPath, topK, backendId, targetId); |
| |
|
| | |
| | Mat image = imread(inputPath); |
| | cvtColor(image, image, COLOR_BGR2RGB); |
| | resize(image, image, Size(256, 256)); |
| | image = image(Rect(16, 16, 224, 224)); |
| |
|
| | |
| | auto predictions = model.infer(image); |
| |
|
| | |
| | if (topK == 1) |
| | { |
| | cout << "Predicted Label: " << predictions[0] << endl; |
| | } |
| | else |
| | { |
| | cout << "Predicted Top-K Labels (in decreasing confidence): " << endl; |
| | for (size_t i = 0; i < predictions.size(); ++i) |
| | { |
| | cout << "(" << i+1 << ") " << predictions[i] << endl; |
| | } |
| | } |
| |
|
| | return 0; |
| | } |
| |
|
| | vector<string> LABELS_IMAGENET_1K = |
| | { |
| | "tench", |
| | "goldfish", |
| | "great white shark", |
| | "tiger shark", |
| | "hammerhead", |
| | "electric ray", |
| | "stingray", |
| | "cock", |
| | "hen", |
| | "ostrich", |
| | "brambling", |
| | "goldfinch", |
| | "house finch", |
| | "junco", |
| | "indigo bunting", |
| | "robin", |
| | "bulbul", |
| | "jay", |
| | "magpie", |
| | "chickadee", |
| | "water ouzel", |
| | "kite", |
| | "bald eagle", |
| | "vulture", |
| | "great grey owl", |
| | "European fire salamander", |
| | "common newt", |
| | "eft", |
| | "spotted salamander", |
| | "axolotl", |
| | "bullfrog", |
| | "tree frog", |
| | "tailed frog", |
| | "loggerhead", |
| | "leatherback turtle", |
| | "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", |
| | "African crocodile", |
| | "American alligator", |
| | "triceratops", |
| | "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", |
| | "diamondback", |
| | "sidewinder", |
| | "trilobite", |
| | "harvestman", |
| | "scorpion", |
| | "black and gold garden spider", |
| | "barn spider", |
| | "garden spider", |
| | "black widow", |
| | "tarantula", |
| | "wolf spider", |
| | "tick", |
| | "centipede", |
| | "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", |
| | "tusker", |
| | "echidna", |
| | "platypus", |
| | "wallaby", |
| | "koala", |
| | "wombat", |
| | "jellyfish", |
| | "sea anemone", |
| | "brain coral", |
| | "flatworm", |
| | "nematode", |
| | "conch", |
| | "snail", |
| | "slug", |
| | "sea slug", |
| | "chiton", |
| | "chambered nautilus", |
| | "Dungeness crab", |
| | "rock crab", |
| | "fiddler crab", |
| | "king crab", |
| | "American lobster", |
| | "spiny lobster", |
| | "crayfish", |
| | "hermit crab", |
| | "isopod", |
| | "white stork", |
| | "black stork", |
| | "spoonbill", |
| | "flamingo", |
| | "little blue heron", |
| | "American egret", |
| | "bittern", |
| | "crane", |
| | "limpkin", |
| | "European gallinule", |
| | "American coot", |
| | "bustard", |
| | "ruddy turnstone", |
| | "red-backed sandpiper", |
| | "redshank", |
| | "dowitcher", |
| | "oystercatcher", |
| | "pelican", |
| | "king penguin", |
| | "albatross", |
| | "grey whale", |
| | "killer whale", |
| | "dugong", |
| | "sea lion", |
| | "Chihuahua", |
| | "Japanese spaniel", |
| | "Maltese dog", |
| | "Pekinese", |
| | "Shih-Tzu", |
| | "Blenheim spaniel", |
| | "papillon", |
| | "toy terrier", |
| | "Rhodesian ridgeback", |
| | "Afghan hound", |
| | "basset", |
| | "beagle", |
| | "bloodhound", |
| | "bluetick", |
| | "black-and-tan coonhound", |
| | "Walker hound", |
| | "English foxhound", |
| | "redbone", |
| | "borzoi", |
| | "Irish wolfhound", |
| | "Italian greyhound", |
| | "whippet", |
| | "Ibizan hound", |
| | "Norwegian elkhound", |
| | "otterhound", |
| | "Saluki", |
| | "Scottish deerhound", |
| | "Weimaraner", |
| | "Staffordshire bullterrier", |
| | "American Staffordshire terrier", |
| | "Bedlington terrier", |
| | "Border terrier", |
| | "Kerry blue terrier", |
| | "Irish terrier", |
| | "Norfolk terrier", |
| | "Norwich terrier", |
| | "Yorkshire terrier", |
| | "wire-haired fox terrier", |
| | "Lakeland terrier", |
| | "Sealyham terrier", |
| | "Airedale", |
| | "cairn", |
| | "Australian terrier", |
| | "Dandie Dinmont", |
| | "Boston bull", |
| | "miniature schnauzer", |
| | "giant schnauzer", |
| | "standard schnauzer", |
| | "Scotch terrier", |
| | "Tibetan terrier", |
| | "silky terrier", |
| | "soft-coated wheaten terrier", |
| | "West Highland white terrier", |
| | "Lhasa", |
| | "flat-coated retriever", |
| | "curly-coated retriever", |
| | "golden retriever", |
| | "Labrador retriever", |
| | "Chesapeake Bay retriever", |
| | "German short-haired pointer", |
| | "vizsla", |
| | "English setter", |
| | "Irish setter", |
| | "Gordon setter", |
| | "Brittany spaniel", |
| | "clumber", |
| | "English springer", |
| | "Welsh springer spaniel", |
| | "cocker spaniel", |
| | "Sussex spaniel", |
| | "Irish water spaniel", |
| | "kuvasz", |
| | "schipperke", |
| | "groenendael", |
| | "malinois", |
| | "briard", |
| | "kelpie", |
| | "komondor", |
| | "Old English sheepdog", |
| | "Shetland sheepdog", |
| | "collie", |
| | "Border collie", |
| | "Bouvier des Flandres", |
| | "Rottweiler", |
| | "German shepherd", |
| | "Doberman", |
| | "miniature pinscher", |
| | "Greater Swiss Mountain dog", |
| | "Bernese mountain dog", |
| | "Appenzeller", |
| | "EntleBucher", |
| | "boxer", |
| | "bull mastiff", |
| | "Tibetan mastiff", |
| | "French bulldog", |
| | "Great Dane", |
| | "Saint Bernard", |
| | "Eskimo dog", |
| | "malamute", |
| | "Siberian husky", |
| | "dalmatian", |
| | "affenpinscher", |
| | "basenji", |
| | "pug", |
| | "Leonberg", |
| | "Newfoundland", |
| | "Great Pyrenees", |
| | "Samoyed", |
| | "Pomeranian", |
| | "chow", |
| | "keeshond", |
| | "Brabancon griffon", |
| | "Pembroke", |
| | "Cardigan", |
| | "toy poodle", |
| | "miniature poodle", |
| | "standard poodle", |
| | "Mexican hairless", |
| | "timber wolf", |
| | "white wolf", |
| | "red wolf", |
| | "coyote", |
| | "dingo", |
| | "dhole", |
| | "African hunting dog", |
| | "hyena", |
| | "red fox", |
| | "kit fox", |
| | "Arctic fox", |
| | "grey fox", |
| | "tabby", |
| | "tiger cat", |
| | "Persian cat", |
| | "Siamese cat", |
| | "Egyptian cat", |
| | "cougar", |
| | "lynx", |
| | "leopard", |
| | "snow leopard", |
| | "jaguar", |
| | "lion", |
| | "tiger", |
| | "cheetah", |
| | "brown bear", |
| | "American black bear", |
| | "ice bear", |
| | "sloth bear", |
| | "mongoose", |
| | "meerkat", |
| | "tiger beetle", |
| | "ladybug", |
| | "ground beetle", |
| | "long-horned beetle", |
| | "leaf beetle", |
| | "dung beetle", |
| | "rhinoceros beetle", |
| | "weevil", |
| | "fly", |
| | "bee", |
| | "ant", |
| | "grasshopper", |
| | "cricket", |
| | "walking stick", |
| | "cockroach", |
| | "mantis", |
| | "cicada", |
| | "leafhopper", |
| | "lacewing", |
| | "dragonfly", |
| | "damselfly", |
| | "admiral", |
| | "ringlet", |
| | "monarch", |
| | "cabbage butterfly", |
| | "sulphur butterfly", |
| | "lycaenid", |
| | "starfish", |
| | "sea urchin", |
| | "sea cucumber", |
| | "wood rabbit", |
| | "hare", |
| | "Angora", |
| | "hamster", |
| | "porcupine", |
| | "fox squirrel", |
| | "marmot", |
| | "beaver", |
| | "guinea pig", |
| | "sorrel", |
| | "zebra", |
| | "hog", |
| | "wild boar", |
| | "warthog", |
| | "hippopotamus", |
| | "ox", |
| | "water buffalo", |
| | "bison", |
| | "ram", |
| | "bighorn", |
| | "ibex", |
| | "hartebeest", |
| | "impala", |
| | "gazelle", |
| | "Arabian camel", |
| | "llama", |
| | "weasel", |
| | "mink", |
| | "polecat", |
| | "black-footed ferret", |
| | "otter", |
| | "skunk", |
| | "badger", |
| | "armadillo", |
| | "three-toed sloth", |
| | "orangutan", |
| | "gorilla", |
| | "chimpanzee", |
| | "gibbon", |
| | "siamang", |
| | "guenon", |
| | "patas", |
| | "baboon", |
| | "macaque", |
| | "langur", |
| | "colobus", |
| | "proboscis monkey", |
| | "marmoset", |
| | "capuchin", |
| | "howler monkey", |
| | "titi", |
| | "spider monkey", |
| | "squirrel monkey", |
| | "Madagascar cat", |
| | "indri", |
| | "Indian elephant", |
| | "African elephant", |
| | "lesser panda", |
| | "giant panda", |
| | "barracouta", |
| | "eel", |
| | "coho", |
| | "rock beauty", |
| | "anemone fish", |
| | "sturgeon", |
| | "gar", |
| | "lionfish", |
| | "puffer", |
| | "abacus", |
| | "abaya", |
| | "academic gown", |
| | "accordion", |
| | "acoustic guitar", |
| | "aircraft carrier", |
| | "airliner", |
| | "airship", |
| | "altar", |
| | "ambulance", |
| | "amphibian", |
| | "analog clock", |
| | "apiary", |
| | "apron", |
| | "ashcan", |
| | "assault rifle", |
| | "backpack", |
| | "bakery", |
| | "balance beam", |
| | "balloon", |
| | "ballpoint", |
| | "Band Aid", |
| | "banjo", |
| | "bannister", |
| | "barbell", |
| | "barber chair", |
| | "barbershop", |
| | "barn", |
| | "barometer", |
| | "barrel", |
| | "barrow", |
| | "baseball", |
| | "basketball", |
| | "bassinet", |
| | "bassoon", |
| | "bathing cap", |
| | "bath towel", |
| | "bathtub", |
| | "beach wagon", |
| | "beacon", |
| | "beaker", |
| | "bearskin", |
| | "beer bottle", |
| | "beer glass", |
| | "bell cote", |
| | "bib", |
| | "bicycle-built-for-two", |
| | "bikini", |
| | "binder", |
| | "binoculars", |
| | "birdhouse", |
| | "boathouse", |
| | "bobsled", |
| | "bolo tie", |
| | "bonnet", |
| | "bookcase", |
| | "bookshop", |
| | "bottlecap", |
| | "bow", |
| | "bow tie", |
| | "brass", |
| | "brassiere", |
| | "breakwater", |
| | "breastplate", |
| | "broom", |
| | "bucket", |
| | "buckle", |
| | "bulletproof vest", |
| | "bullet train", |
| | "butcher shop", |
| | "cab", |
| | "caldron", |
| | "candle", |
| | "cannon", |
| | "canoe", |
| | "can opener", |
| | "cardigan", |
| | "car mirror", |
| | "carousel", |
| | "carpenter's kit", |
| | "carton", |
| | "car wheel", |
| | "cash machine", |
| | "cassette", |
| | "cassette player", |
| | "castle", |
| | "catamaran", |
| | "CD player", |
| | "cello", |
| | "cellular telephone", |
| | "chain", |
| | "chainlink fence", |
| | "chain mail", |
| | "chain saw", |
| | "chest", |
| | "chiffonier", |
| | "chime", |
| | "china cabinet", |
| | "Christmas stocking", |
| | "church", |
| | "cinema", |
| | "cleaver", |
| | "cliff dwelling", |
| | "cloak", |
| | "clog", |
| | "cocktail shaker", |
| | "coffee mug", |
| | "coffeepot", |
| | "coil", |
| | "combination lock", |
| | "computer keyboard", |
| | "confectionery", |
| | "container ship", |
| | "convertible", |
| | "corkscrew", |
| | "cornet", |
| | "cowboy boot", |
| | "cowboy hat", |
| | "cradle", |
| | "crane", |
| | "crash helmet", |
| | "crate", |
| | "crib", |
| | "Crock Pot", |
| | "croquet ball", |
| | "crutch", |
| | "cuirass", |
| | "dam", |
| | "desk", |
| | "desktop computer", |
| | "dial telephone", |
| | "diaper", |
| | "digital clock", |
| | "digital watch", |
| | "dining table", |
| | "dishrag", |
| | "dishwasher", |
| | "disk brake", |
| | "dock", |
| | "dogsled", |
| | "dome", |
| | "doormat", |
| | "drilling platform", |
| | "drum", |
| | "drumstick", |
| | "dumbbell", |
| | "Dutch oven", |
| | "electric fan", |
| | "electric guitar", |
| | "electric locomotive", |
| | "entertainment center", |
| | "envelope", |
| | "espresso maker", |
| | "face powder", |
| | "feather boa", |
| | "filing cabinet", |
| | "fireboat", |
| | "fire engine", |
| | "fire screen", |
| | "flagpole", |
| | "flute", |
| | "folding chair", |
| | "football helmet", |
| | "forklift", |
| | "fountain", |
| | "fountain pen", |
| | "four-poster", |
| | "freight car", |
| | "French horn", |
| | "frying pan", |
| | "fur coat", |
| | "garbage truck", |
| | "gasmask", |
| | "gas pump", |
| | "goblet", |
| | "go-kart", |
| | "golf ball", |
| | "golfcart", |
| | "gondola", |
| | "gong", |
| | "gown", |
| | "grand piano", |
| | "greenhouse", |
| | "grille", |
| | "grocery store", |
| | "guillotine", |
| | "hair slide", |
| | "hair spray", |
| | "half track", |
| | "hammer", |
| | "hamper", |
| | "hand blower", |
| | "hand-held computer", |
| | "handkerchief", |
| | "hard disc", |
| | "harmonica", |
| | "harp", |
| | "harvester", |
| | "hatchet", |
| | "holster", |
| | "home theater", |
| | "honeycomb", |
| | "hook", |
| | "hoopskirt", |
| | "horizontal bar", |
| | "horse cart", |
| | "hourglass", |
| | "iPod", |
| | "iron", |
| | "jack-o'-lantern", |
| | "jean", |
| | "jeep", |
| | "jersey", |
| | "jigsaw puzzle", |
| | "jinrikisha", |
| | "joystick", |
| | "kimono", |
| | "knee pad", |
| | "knot", |
| | "lab coat", |
| | "ladle", |
| | "lampshade", |
| | "laptop", |
| | "lawn mower", |
| | "lens cap", |
| | "letter opener", |
| | "library", |
| | "lifeboat", |
| | "lighter", |
| | "limousine", |
| | "liner", |
| | "lipstick", |
| | "Loafer", |
| | "lotion", |
| | "loudspeaker", |
| | "loupe", |
| | "lumbermill", |
| | "magnetic compass", |
| | "mailbag", |
| | "mailbox", |
| | "maillot", |
| | "maillot", |
| | "manhole cover", |
| | "maraca", |
| | "marimba", |
| | "mask", |
| | "matchstick", |
| | "maypole", |
| | "maze", |
| | "measuring cup", |
| | "medicine chest", |
| | "megalith", |
| | "microphone", |
| | "microwave", |
| | "military uniform", |
| | "milk can", |
| | "minibus", |
| | "miniskirt", |
| | "minivan", |
| | "missile", |
| | "mitten", |
| | "mixing bowl", |
| | "mobile home", |
| | "Model T", |
| | "modem", |
| | "monastery", |
| | "monitor", |
| | "moped", |
| | "mortar", |
| | "mortarboard", |
| | "mosque", |
| | "mosquito net", |
| | "motor scooter", |
| | "mountain bike", |
| | "mountain tent", |
| | "mouse", |
| | "mousetrap", |
| | "moving van", |
| | "muzzle", |
| | "nail", |
| | "neck brace", |
| | "necklace", |
| | "nipple", |
| | "notebook", |
| | "obelisk", |
| | "oboe", |
| | "ocarina", |
| | "odometer", |
| | "oil filter", |
| | "organ", |
| | "oscilloscope", |
| | "overskirt", |
| | "oxcart", |
| | "oxygen mask", |
| | "packet", |
| | "paddle", |
| | "paddlewheel", |
| | "padlock", |
| | "paintbrush", |
| | "pajama", |
| | "palace", |
| | "panpipe", |
| | "paper towel", |
| | "parachute", |
| | "parallel bars", |
| | "park bench", |
| | "parking meter", |
| | "passenger car", |
| | "patio", |
| | "pay-phone", |
| | "pedestal", |
| | "pencil box", |
| | "pencil sharpener", |
| | "perfume", |
| | "Petri dish", |
| | "photocopier", |
| | "pick", |
| | "pickelhaube", |
| | "picket fence", |
| | "pickup", |
| | "pier", |
| | "piggy bank", |
| | "pill bottle", |
| | "pillow", |
| | "ping-pong ball", |
| | "pinwheel", |
| | "pirate", |
| | "pitcher", |
| | "plane", |
| | "planetarium", |
| | "plastic bag", |
| | "plate rack", |
| | "plow", |
| | "plunger", |
| | "Polaroid camera", |
| | "pole", |
| | "police van", |
| | "poncho", |
| | "pool table", |
| | "pop bottle", |
| | "pot", |
| | "potter's wheel", |
| | "power drill", |
| | "prayer rug", |
| | "printer", |
| | "prison", |
| | "projectile", |
| | "projector", |
| | "puck", |
| | "punching bag", |
| | "purse", |
| | "quill", |
| | "quilt", |
| | "racer", |
| | "racket", |
| | "radiator", |
| | "radio", |
| | "radio telescope", |
| | "rain barrel", |
| | "recreational vehicle", |
| | "reel", |
| | "reflex camera", |
| | "refrigerator", |
| | "remote control", |
| | "restaurant", |
| | "revolver", |
| | "rifle", |
| | "rocking chair", |
| | "rotisserie", |
| | "rubber eraser", |
| | "rugby ball", |
| | "rule", |
| | "running shoe", |
| | "safe", |
| | "safety pin", |
| | "saltshaker", |
| | "sandal", |
| | "sarong", |
| | "sax", |
| | "scabbard", |
| | "scale", |
| | "school bus", |
| | "schooner", |
| | "scoreboard", |
| | "screen", |
| | "screw", |
| | "screwdriver", |
| | "seat belt", |
| | "sewing machine", |
| | "shield", |
| | "shoe shop", |
| | "shoji", |
| | "shopping basket", |
| | "shopping cart", |
| | "shovel", |
| | "shower cap", |
| | "shower curtain", |
| | "ski", |
| | "ski mask", |
| | "sleeping bag", |
| | "slide rule", |
| | "sliding door", |
| | "slot", |
| | "snorkel", |
| | "snowmobile", |
| | "snowplow", |
| | "soap dispenser", |
| | "soccer ball", |
| | "sock", |
| | "solar dish", |
| | "sombrero", |
| | "soup bowl", |
| | "space bar", |
| | "space heater", |
| | "space shuttle", |
| | "spatula", |
| | "speedboat", |
| | "spider web", |
| | "spindle", |
| | "sports car", |
| | "spotlight", |
| | "stage", |
| | "steam locomotive", |
| | "steel arch bridge", |
| | "steel drum", |
| | "stethoscope", |
| | "stole", |
| | "stone wall", |
| | "stopwatch", |
| | "stove", |
| | "strainer", |
| | "streetcar", |
| | "stretcher", |
| | "studio couch", |
| | "stupa", |
| | "submarine", |
| | "suit", |
| | "sundial", |
| | "sunglass", |
| | "sunglasses", |
| | "sunscreen", |
| | "suspension bridge", |
| | "swab", |
| | "sweatshirt", |
| | "swimming trunks", |
| | "swing", |
| | "switch", |
| | "syringe", |
| | "table lamp", |
| | "tank", |
| | "tape player", |
| | "teapot", |
| | "teddy", |
| | "television", |
| | "tennis ball", |
| | "thatch", |
| | "theater curtain", |
| | "thimble", |
| | "thresher", |
| | "throne", |
| | "tile roof", |
| | "toaster", |
| | "tobacco shop", |
| | "toilet seat", |
| | "torch", |
| | "totem pole", |
| | "tow truck", |
| | "toyshop", |
| | "tractor", |
| | "trailer truck", |
| | "tray", |
| | "trench coat", |
| | "tricycle", |
| | "trimaran", |
| | "tripod", |
| | "triumphal arch", |
| | "trolleybus", |
| | "trombone", |
| | "tub", |
| | "turnstile", |
| | "typewriter keyboard", |
| | "umbrella", |
| | "unicycle", |
| | "upright", |
| | "vacuum", |
| | "vase", |
| | "vault", |
| | "velvet", |
| | "vending machine", |
| | "vestment", |
| | "viaduct", |
| | "violin", |
| | "volleyball", |
| | "waffle iron", |
| | "wall clock", |
| | "wallet", |
| | "wardrobe", |
| | "warplane", |
| | "washbasin", |
| | "washer", |
| | "water bottle", |
| | "water jug", |
| | "water tower", |
| | "whiskey jug", |
| | "whistle", |
| | "wig", |
| | "window screen", |
| | "window shade", |
| | "Windsor tie", |
| | "wine bottle", |
| | "wing", |
| | "wok", |
| | "wooden spoon", |
| | "wool", |
| | "worm fence", |
| | "wreck", |
| | "yawl", |
| | "yurt", |
| | "web site", |
| | "comic book", |
| | "crossword puzzle", |
| | "street sign", |
| | "traffic light", |
| | "book jacket", |
| | "menu", |
| | "plate", |
| | "guacamole", |
| | "consomme", |
| | "hot pot", |
| | "trifle", |
| | "ice cream", |
| | "ice lolly", |
| | "French loaf", |
| | "bagel", |
| | "pretzel", |
| | "cheeseburger", |
| | "hotdog", |
| | "mashed potato", |
| | "head cabbage", |
| | "broccoli", |
| | "cauliflower", |
| | "zucchini", |
| | "spaghetti squash", |
| | "acorn squash", |
| | "butternut squash", |
| | "cucumber", |
| | "artichoke", |
| | "bell pepper", |
| | "cardoon", |
| | "mushroom", |
| | "Granny Smith", |
| | "strawberry", |
| | "orange", |
| | "lemon", |
| | "fig", |
| | "pineapple", |
| | "banana", |
| | "jackfruit", |
| | "custard apple", |
| | "pomegranate", |
| | "hay", |
| | "carbonara", |
| | "chocolate sauce", |
| | "dough", |
| | "meatloaf", |
| | "pizza", |
| | "potpie", |
| | "burrito", |
| | "red wine", |
| | "espresso", |
| | "cup", |
| | "eggnog", |
| | "alp", |
| | "bubble", |
| | "cliff", |
| | "coral reef", |
| | "geyser", |
| | "lakeside", |
| | "promontory", |
| | "sandbar", |
| | "seashore", |
| | "valley", |
| | "volcano", |
| | "ballplayer", |
| | "groom", |
| | "scuba diver", |
| | "rapeseed", |
| | "daisy", |
| | "yellow lady's slipper", |
| | "corn", |
| | "acorn", |
| | "hip", |
| | "buckeye", |
| | "coral fungus", |
| | "agaric", |
| | "gyromitra", |
| | "stinkhorn", |
| | "earthstar", |
| | "hen-of-the-woods", |
| | "bolete", |
| | "ear", |
| | "toilet tissue" |
| | }; |
| |
|