diff --git a/.gitignore b/.gitignore index 485dee6..ac9438d 100755 --- a/.gitignore +++ b/.gitignore @@ -1 +1,123 @@ -.idea +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +.idea/* + +# C extensions +*.so + + +data/ +downloads/ +fortt/ +logs/ + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ diff --git a/ModelTraining/1 - ImageGatherer.py b/1 - ImageGatherer.py old mode 100755 new mode 100644 similarity index 100% rename from ModelTraining/1 - ImageGatherer.py rename to 1 - ImageGatherer.py diff --git a/ModelTraining/2 - FixFileTypes.py b/2 - FixFileTypes.py old mode 100755 new mode 100644 similarity index 100% rename from ModelTraining/2 - FixFileTypes.py rename to 2 - FixFileTypes.py diff --git a/ModelTraining/3 - TestTrainSplit.py b/3 - TestTrainSplit.py old mode 100755 new mode 100644 similarity index 100% rename from ModelTraining/3 - TestTrainSplit.py rename to 3 - TestTrainSplit.py diff --git a/ModelTraining/4 - TrainingModelKeras.py b/4 - TrainingModelKeras.py old mode 100755 new mode 100644 similarity index 100% rename from ModelTraining/4 - TrainingModelKeras.py rename to 4 - TrainingModelKeras.py diff --git a/ModelTraining/4 - TransferLearningKeras.py b/4 - TransferLearningKeras.py old mode 100755 new mode 100644 similarity index 100% rename from ModelTraining/4 - TransferLearningKeras.py rename to 4 - TransferLearningKeras.py diff --git a/ModelTraining/5 - KerasToTensorflow.py b/5 - KerasToTensorflow.py old mode 100755 new mode 100644 similarity index 100% rename from ModelTraining/5 - KerasToTensorflow.py rename to 5 - KerasToTensorflow.py diff --git a/ModelTraining/.gitignore b/ModelTraining/.gitignore deleted file mode 100755 index ac9438d..0000000 --- a/ModelTraining/.gitignore +++ /dev/null @@ -1,123 +0,0 @@ -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -.idea/* - -# C extensions -*.so - - -data/ -downloads/ -fortt/ -logs/ - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -share/python-wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.nox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -.hypothesis/ -.pytest_cache/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py -db.sqlite3 - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# IPython -profile_default/ -ipython_config.py - -# pyenv -.python-version - -# celery beat schedule file -celerybeat-schedule - -# SageMath parsed files -*.sage.py - -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ -.dmypy.json -dmypy.json - -# Pyre type checker -.pyre/ diff --git a/android-tflite/.gitignore b/android-tflite/.gitignore deleted file mode 100755 index c29df47..0000000 --- a/android-tflite/.gitignore +++ /dev/null @@ -1,81 +0,0 @@ -# Built application files -*.apk -*.ap_ -*.aab - -# Files for the ART/Dalvik VM -*.dex - -# Java class files -*.class - -# Generated files -bin/ -gen/ -out/ - -# Gradle files -.gradle/ -build/ -.idea/ - -# Local configuration file (sdk path, etc) -local.properties - -# Proguard folder generated by Eclipse -proguard/ - -# Log Files -*.log - -# Android Studio Navigation editor temp files -.navigation/ - -# Android Studio captures folder -captures/ - -# IntelliJ -*.iml -.idea/workspace.xml -.idea/tasks.xml -.idea/gradle.xml -.idea/assetWizardSettings.xml -.idea/dictionaries -.idea/libraries -.idea/caches -# Android Studio 3 in .gitignore file. -.idea/caches/build_file_checksums.ser -.idea/modules.xml - -# Keystore files -# Uncomment the following lines if you do not want to check your keystore files in. -#*.jks -#*.keystore - -# External native build folder generated in Android Studio 2.2 and later -.externalNativeBuild - -# Google Services (e.g. APIs or Firebase) -# google-services.json - -# Freeline -freeline.py -freeline/ -freeline_project_description.json - -# fastlane -fastlane/report.xml -fastlane/Preview.html -fastlane/screenshots -fastlane/test_output -fastlane/readme.md - -# Version control -vcs.xml - -# lint -lint/intermediates/ -lint/generated/ -lint/outputs/ -lint/tmp/ -# lint/reports/ \ No newline at end of file diff --git a/android-tflite/README.md b/android-tflite/README.md deleted file mode 100755 index 71b633c..0000000 --- a/android-tflite/README.md +++ /dev/null @@ -1,36 +0,0 @@ -# TF Lite Android App - -## Building from Source with Bazel - -1. Follow the [Bazel steps for the TF Demo App](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android#bazel): - - 1. [Install Bazel and Android Prerequisites](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android#install-bazel-and-android-prerequisites). - It's easiest with Android Studio. - - - You'll need at least SDK version 23. - - Bazel requires Android Build Tools `26.0.1` or higher. - - You also need to install the Android Support Repository, available - through Android Studio under `Android SDK Manager -> SDK Tools -> - Android Support Repository`. - - 2. [Edit your `WORKSPACE`](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android#edit-workspace) - to add SDK and NDK targets. - - - Make sure the `api_level` in `WORKSPACE` is set to an SDK version that - you have installed. - - By default, Android Studio will install the SDK to `~/Android/Sdk` and - the NDK to `~/Android/Sdk/ndk-bundle`. - -2. Build the app with Bazel. The demo needs C++11: - - ```shell - bazel build -c opt --cxxopt='--std=c++11' \ - //tensorflow/contrib/lite/java/demo/app/src/main:TfLiteCameraDemo - ``` - -3. Install the demo on a - [debug-enabled device](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android#install): - - ```shell - adb install bazel-bin/tensorflow/contrib/lite/java/demo/app/src/main/TfLiteCameraDemo.apk - ``` diff --git a/android-tflite/app/build.gradle b/android-tflite/app/build.gradle deleted file mode 100755 index 3ea9cca..0000000 --- a/android-tflite/app/build.gradle +++ /dev/null @@ -1,59 +0,0 @@ -apply plugin: 'com.android.application' - -project.ext.ASSET_DIR = projectDir.toString() + '/src/main/assets' - -assert file(project.ext.ASSET_DIR + "/inception.tflite").exists() -assert file(project.ext.ASSET_DIR + "/labels.txt").exists() - -android { - compileSdkVersion 26 - defaultConfig { - applicationId "android.example.com.tflitecamerademo" - minSdkVersion 21 - targetSdkVersion 26 - versionCode 1 - versionName "1.0" - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" - } - lintOptions { - abortOnError false - } - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } - } - aaptOptions { - noCompress "tflite" - noCompress "lite" - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } -} - -repositories { - maven { - url 'https://google.bintray.com/tensorflow' - } - google() -} - -dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', { - exclude group: 'com.android.support', module: 'support-annotations' - }) - implementation 'com.android.support:appcompat-v7:25.2.0' - implementation 'com.android.support.constraint:constraint-layout:1.1.0' - implementation 'com.android.support:design:25.2.0' - implementation 'com.android.support:support-annotations:25.3.1' - implementation 'com.android.support:support-v13:25.2.0' - - implementation 'org.tensorflow:tensorflow-lite:+' - - testImplementation 'junit:junit:4.12' -} diff --git a/android-tflite/app/src/main/AndroidManifest.xml b/android-tflite/app/src/main/AndroidManifest.xml deleted file mode 100755 index b127731..0000000 --- a/android-tflite/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/android-tflite/app/src/main/assets/BUILD b/android-tflite/app/src/main/assets/BUILD deleted file mode 100755 index dd0cd6c..0000000 --- a/android-tflite/app/src/main/assets/BUILD +++ /dev/null @@ -1,24 +0,0 @@ -package(default_visibility = ["//visibility:private"]) - -licenses(["notice"]) # Apache 2.0 - -exports_files( - glob( - ["**/*"], - exclude = [ - "BUILD", - ], - ), -) - -filegroup( - name = "all_files", - srcs = glob( - ["**/*"], - exclude = [ - "**/METADATA", - "**/OWNERS", - ], - ), - visibility = ["//tensorflow:__subpackages__"], -) diff --git a/android-tflite/app/src/main/assets/Ol/graph.lite b/android-tflite/app/src/main/assets/Ol/graph.lite deleted file mode 100755 index bd1c83a..0000000 Binary files a/android-tflite/app/src/main/assets/Ol/graph.lite and /dev/null differ diff --git a/android-tflite/app/src/main/assets/Ol/labels.txt b/android-tflite/app/src/main/assets/Ol/labels.txt deleted file mode 100755 index fe81123..0000000 --- a/android-tflite/app/src/main/assets/Ol/labels.txt +++ /dev/null @@ -1,1001 +0,0 @@ -background -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 -file -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 -meat loaf -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 diff --git a/android-tflite/app/src/main/assets/graph.lite b/android-tflite/app/src/main/assets/graph.lite deleted file mode 100755 index bd1c83a..0000000 Binary files a/android-tflite/app/src/main/assets/graph.lite and /dev/null differ diff --git a/android-tflite/app/src/main/assets/labels.txt b/android-tflite/app/src/main/assets/labels.txt deleted file mode 100755 index 79690b2..0000000 --- a/android-tflite/app/src/main/assets/labels.txt +++ /dev/null @@ -1,10 +0,0 @@ -abra -aerodactyl -aipom -alakazam -ampharos -arbok -arcanine -ariados -articuno -azumarill diff --git a/android-tflite/app/src/main/java/com/example/android/tflitecamerademo/AutoFitTextureView.java b/android-tflite/app/src/main/java/com/example/android/tflitecamerademo/AutoFitTextureView.java deleted file mode 100755 index f204590..0000000 --- a/android-tflite/app/src/main/java/com/example/android/tflitecamerademo/AutoFitTextureView.java +++ /dev/null @@ -1,72 +0,0 @@ -/* Copyright 2017 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -==============================================================================*/ - -package com.example.android.tflitecamerademo; - -import android.content.Context; -import android.util.AttributeSet; -import android.view.TextureView; - -/** A {@link TextureView} that can be adjusted to a specified aspect ratio. */ -public class AutoFitTextureView extends TextureView { - - private int mRatioWidth = 0; - private int mRatioHeight = 0; - - public AutoFitTextureView(Context context) { - this(context, null); - } - - public AutoFitTextureView(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public AutoFitTextureView(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - } - - /** - * Sets the aspect ratio for this view. The size of the view will be measured based on the ratio - * calculated from the parameters. Note that the actual sizes of parameters don't matter, that is, - * calling setAspectRatio(2, 3) and setAspectRatio(4, 6) make the same result. - * - * @param width Relative horizontal size - * @param height Relative vertical size - */ - public void setAspectRatio(int width, int height) { - if (width < 0 || height < 0) { - throw new IllegalArgumentException("Size cannot be negative."); - } - mRatioWidth = width; - mRatioHeight = height; - requestLayout(); - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - int width = MeasureSpec.getSize(widthMeasureSpec); - int height = MeasureSpec.getSize(heightMeasureSpec); - if (0 == mRatioWidth || 0 == mRatioHeight) { - setMeasuredDimension(width, height); - } else { - if (width < height * mRatioWidth / mRatioHeight) { - setMeasuredDimension(width, width * mRatioHeight / mRatioWidth); - } else { - setMeasuredDimension(height * mRatioWidth / mRatioHeight, height); - } - } - } -} diff --git a/android-tflite/app/src/main/java/com/example/android/tflitecamerademo/Camera2BasicFragment.java b/android-tflite/app/src/main/java/com/example/android/tflitecamerademo/Camera2BasicFragment.java deleted file mode 100755 index 74737a8..0000000 --- a/android-tflite/app/src/main/java/com/example/android/tflitecamerademo/Camera2BasicFragment.java +++ /dev/null @@ -1,708 +0,0 @@ -/* Copyright 2017 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -==============================================================================*/ - -package com.example.android.tflitecamerademo; - -import android.app.Activity; -import android.app.AlertDialog; -import android.app.Dialog; -import android.app.DialogFragment; -import android.app.Fragment; -import android.content.Context; -import android.content.DialogInterface; -import android.content.pm.PackageInfo; -import android.content.pm.PackageManager; -import android.content.res.Configuration; -import android.graphics.Bitmap; -import android.graphics.ImageFormat; -import android.graphics.Matrix; -import android.graphics.Point; -import android.graphics.RectF; -import android.graphics.SurfaceTexture; -import android.hardware.camera2.CameraAccessException; -import android.hardware.camera2.CameraCaptureSession; -import android.hardware.camera2.CameraCharacteristics; -import android.hardware.camera2.CameraDevice; -import android.hardware.camera2.CameraManager; -import android.hardware.camera2.CaptureRequest; -import android.hardware.camera2.CaptureResult; -import android.hardware.camera2.TotalCaptureResult; -import android.hardware.camera2.params.StreamConfigurationMap; -import android.media.ImageReader; -import android.os.Bundle; -import android.os.Handler; -import android.os.HandlerThread; -import android.support.annotation.NonNull; -import android.support.v13.app.FragmentCompat; -import android.support.v4.content.ContextCompat; -import android.util.Log; -import android.util.Size; -import android.view.LayoutInflater; -import android.view.Surface; -import android.view.TextureView; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; -import android.widget.Toast; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; -import java.util.concurrent.Semaphore; -import java.util.concurrent.TimeUnit; - -/** Basic fragments for the Camera. */ -public class Camera2BasicFragment extends Fragment - implements FragmentCompat.OnRequestPermissionsResultCallback { - - /** Tag for the {@link Log}. */ - private static final String TAG = "TfLiteCameraDemo"; - - private static final String FRAGMENT_DIALOG = "dialog"; - - private static final String HANDLE_THREAD_NAME = "CameraBackground"; - - private static final int PERMISSIONS_REQUEST_CODE = 1; - - private final Object lock = new Object(); - private boolean runClassifier = false; - private boolean checkedPermissions = false; - private TextView textView; - private ImageClassifier classifier; - - /** Max preview width that is guaranteed by Camera2 API */ - private static final int MAX_PREVIEW_WIDTH = 1920; - - /** Max preview height that is guaranteed by Camera2 API */ - private static final int MAX_PREVIEW_HEIGHT = 1080; - - /** - * {@link TextureView.SurfaceTextureListener} handles several lifecycle events on a {@link - * TextureView}. - */ - private final TextureView.SurfaceTextureListener surfaceTextureListener = - new TextureView.SurfaceTextureListener() { - - @Override - public void onSurfaceTextureAvailable(SurfaceTexture texture, int width, int height) { - openCamera(width, height); - } - - @Override - public void onSurfaceTextureSizeChanged(SurfaceTexture texture, int width, int height) { - configureTransform(width, height); - } - - @Override - public boolean onSurfaceTextureDestroyed(SurfaceTexture texture) { - return true; - } - - @Override - public void onSurfaceTextureUpdated(SurfaceTexture texture) {} - }; - - /** ID of the current {@link CameraDevice}. */ - private String cameraId; - - /** An {@link AutoFitTextureView} for camera preview. */ - private AutoFitTextureView textureView; - - /** A {@link CameraCaptureSession } for camera preview. */ - private CameraCaptureSession captureSession; - - /** A reference to the opened {@link CameraDevice}. */ - private CameraDevice cameraDevice; - - /** The {@link android.util.Size} of camera preview. */ - private Size previewSize; - - /** {@link CameraDevice.StateCallback} is called when {@link CameraDevice} changes its state. */ - private final CameraDevice.StateCallback stateCallback = - new CameraDevice.StateCallback() { - - @Override - public void onOpened(@NonNull CameraDevice currentCameraDevice) { - // This method is called when the camera is opened. We start camera preview here. - cameraOpenCloseLock.release(); - cameraDevice = currentCameraDevice; - createCameraPreviewSession(); - } - - @Override - public void onDisconnected(@NonNull CameraDevice currentCameraDevice) { - cameraOpenCloseLock.release(); - currentCameraDevice.close(); - cameraDevice = null; - } - - @Override - public void onError(@NonNull CameraDevice currentCameraDevice, int error) { - cameraOpenCloseLock.release(); - currentCameraDevice.close(); - cameraDevice = null; - Activity activity = getActivity(); - if (null != activity) { - activity.finish(); - } - } - }; - - /** An additional thread for running tasks that shouldn't block the UI. */ - private HandlerThread backgroundThread; - - /** A {@link Handler} for running tasks in the background. */ - private Handler backgroundHandler; - - /** An {@link ImageReader} that handles image capture. */ - private ImageReader imageReader; - - /** {@link CaptureRequest.Builder} for the camera preview */ - private CaptureRequest.Builder previewRequestBuilder; - - /** {@link CaptureRequest} generated by {@link #previewRequestBuilder} */ - private CaptureRequest previewRequest; - - /** A {@link Semaphore} to prevent the app from exiting before closing the camera. */ - private Semaphore cameraOpenCloseLock = new Semaphore(1); - - /** A {@link CameraCaptureSession.CaptureCallback} that handles events related to capture. */ - private CameraCaptureSession.CaptureCallback captureCallback = - new CameraCaptureSession.CaptureCallback() { - - @Override - public void onCaptureProgressed( - @NonNull CameraCaptureSession session, - @NonNull CaptureRequest request, - @NonNull CaptureResult partialResult) {} - - @Override - public void onCaptureCompleted( - @NonNull CameraCaptureSession session, - @NonNull CaptureRequest request, - @NonNull TotalCaptureResult result) {} - }; - - /** - * Shows a {@link Toast} on the UI thread for the classification results. - * - * @param text The message to show - */ - private void showToast(final String text) { - final Activity activity = getActivity(); - if (activity != null) { - activity.runOnUiThread( - new Runnable() { - @Override - public void run() { - textView.setText(text); - } - }); - } - } - - /** - * Resizes image. - * - * Attempting to use too large a preview size could exceed the camera bus' bandwidth limitation, - * resulting in gorgeous previews but the storage of garbage capture data. - * - * Given {@code choices} of {@code Size}s supported by a camera, choose the smallest one that is - * at least as large as the respective texture view size, and that is at most as large as the - * respective max size, and whose aspect ratio matches with the specified value. If such size - * doesn't exist, choose the largest one that is at most as large as the respective max size, and - * whose aspect ratio matches with the specified value. - * - * @param choices The list of sizes that the camera supports for the intended output class - * @param textureViewWidth The width of the texture view relative to sensor coordinate - * @param textureViewHeight The height of the texture view relative to sensor coordinate - * @param maxWidth The maximum width that can be chosen - * @param maxHeight The maximum height that can be chosen - * @param aspectRatio The aspect ratio - * @return The optimal {@code Size}, or an arbitrary one if none were big enough - */ - private static Size chooseOptimalSize( - Size[] choices, - int textureViewWidth, - int textureViewHeight, - int maxWidth, - int maxHeight, - Size aspectRatio) { - - // Collect the supported resolutions that are at least as big as the preview Surface - List bigEnough = new ArrayList<>(); - // Collect the supported resolutions that are smaller than the preview Surface - List notBigEnough = new ArrayList<>(); - int w = aspectRatio.getWidth(); - int h = aspectRatio.getHeight(); - for (Size option : choices) { - if (option.getWidth() <= maxWidth - && option.getHeight() <= maxHeight - && option.getHeight() == option.getWidth() * h / w) { - if (option.getWidth() >= textureViewWidth && option.getHeight() >= textureViewHeight) { - bigEnough.add(option); - } else { - notBigEnough.add(option); - } - } - } - - // Pick the smallest of those big enough. If there is no one big enough, pick the - // largest of those not big enough. - if (bigEnough.size() > 0) { - return Collections.min(bigEnough, new CompareSizesByArea()); - } else if (notBigEnough.size() > 0) { - return Collections.max(notBigEnough, new CompareSizesByArea()); - } else { - Log.e(TAG, "Couldn't find any suitable preview size"); - return choices[0]; - } - } - - public static Camera2BasicFragment newInstance() { - return new Camera2BasicFragment(); - } - - /** Layout the preview and buttons. */ - @Override - public View onCreateView( - LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - return inflater.inflate(R.layout.fragment_camera2_basic, container, false); - } - - /** Connect the buttons to their event handler. */ - @Override - public void onViewCreated(final View view, Bundle savedInstanceState) { - textureView = (AutoFitTextureView) view.findViewById(R.id.texture); - textView = (TextView) view.findViewById(R.id.text); - } - - /** Load the model and labels. */ - @Override - public void onActivityCreated(Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - try { - classifier = new ImageClassifier(getActivity()); - } catch (IOException e) { - Log.e(TAG, "Failed to initialize an image classifier."); - } - startBackgroundThread(); - } - - @Override - public void onResume() { - super.onResume(); - startBackgroundThread(); - - // When the screen is turned off and turned back on, the SurfaceTexture is already - // available, and "onSurfaceTextureAvailable" will not be called. In that case, we can open - // a camera and start preview from here (otherwise, we wait until the surface is ready in - // the SurfaceTextureListener). - if (textureView.isAvailable()) { - openCamera(textureView.getWidth(), textureView.getHeight()); - } else { - textureView.setSurfaceTextureListener(surfaceTextureListener); - } - } - - @Override - public void onPause() { - closeCamera(); - stopBackgroundThread(); - super.onPause(); - } - - @Override - public void onDestroy() { - classifier.close(); - super.onDestroy(); - } - - /** - * Sets up member variables related to camera. - * - * @param width The width of available size for camera preview - * @param height The height of available size for camera preview - */ - private void setUpCameraOutputs(int width, int height) { - Activity activity = getActivity(); - CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE); - try { - for (String cameraId : manager.getCameraIdList()) { - CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId); - - // We don't use a front facing camera in this sample. - Integer facing = characteristics.get(CameraCharacteristics.LENS_FACING); - if (facing != null && facing == CameraCharacteristics.LENS_FACING_FRONT) { - continue; - } - - StreamConfigurationMap map = - characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP); - if (map == null) { - continue; - } - - // // For still image captures, we use the largest available size. - Size largest = - Collections.max( - Arrays.asList(map.getOutputSizes(ImageFormat.JPEG)), new CompareSizesByArea()); - imageReader = - ImageReader.newInstance( - largest.getWidth(), largest.getHeight(), ImageFormat.JPEG, /*maxImages*/ 2); - - // Find out if we need to swap dimension to get the preview size relative to sensor - // coordinate. - int displayRotation = activity.getWindowManager().getDefaultDisplay().getRotation(); - // noinspection ConstantConditions - /* Orientation of the camera sensor */ - int sensorOrientation = characteristics.get(CameraCharacteristics.SENSOR_ORIENTATION); - boolean swappedDimensions = false; - switch (displayRotation) { - case Surface.ROTATION_0: - case Surface.ROTATION_180: - if (sensorOrientation == 90 || sensorOrientation == 270) { - swappedDimensions = true; - } - break; - case Surface.ROTATION_90: - case Surface.ROTATION_270: - if (sensorOrientation == 0 || sensorOrientation == 180) { - swappedDimensions = true; - } - break; - default: - Log.e(TAG, "Display rotation is invalid: " + displayRotation); - } - - Point displaySize = new Point(); - activity.getWindowManager().getDefaultDisplay().getSize(displaySize); - int rotatedPreviewWidth = width; - int rotatedPreviewHeight = height; - int maxPreviewWidth = displaySize.x; - int maxPreviewHeight = displaySize.y; - - if (swappedDimensions) { - rotatedPreviewWidth = height; - rotatedPreviewHeight = width; - maxPreviewWidth = displaySize.y; - maxPreviewHeight = displaySize.x; - } - - if (maxPreviewWidth > MAX_PREVIEW_WIDTH) { - maxPreviewWidth = MAX_PREVIEW_WIDTH; - } - - if (maxPreviewHeight > MAX_PREVIEW_HEIGHT) { - maxPreviewHeight = MAX_PREVIEW_HEIGHT; - } - - previewSize = - chooseOptimalSize( - map.getOutputSizes(SurfaceTexture.class), - rotatedPreviewWidth, - rotatedPreviewHeight, - maxPreviewWidth, - maxPreviewHeight, - largest); - - // We fit the aspect ratio of TextureView to the size of preview we picked. - int orientation = getResources().getConfiguration().orientation; - if (orientation == Configuration.ORIENTATION_LANDSCAPE) { - textureView.setAspectRatio(previewSize.getWidth(), previewSize.getHeight()); - } else { - textureView.setAspectRatio(previewSize.getHeight(), previewSize.getWidth()); - } - - this.cameraId = cameraId; - return; - } - } catch (CameraAccessException e) { - e.printStackTrace(); - } catch (NullPointerException e) { - // Currently an NPE is thrown when the Camera2API is used but not supported on the - // device this code runs. - ErrorDialog.newInstance(getString(R.string.camera_error)) - .show(getChildFragmentManager(), FRAGMENT_DIALOG); - } - } - - private String[] getRequiredPermissions() { - Activity activity = getActivity(); - try { - PackageInfo info = - activity - .getPackageManager() - .getPackageInfo(activity.getPackageName(), PackageManager.GET_PERMISSIONS); - String[] ps = info.requestedPermissions; - if (ps != null && ps.length > 0) { - return ps; - } else { - return new String[0]; - } - } catch (Exception e) { - return new String[0]; - } - } - - /** Opens the camera specified by {@link Camera2BasicFragment#cameraId}. */ - private void openCamera(int width, int height) { - if (!checkedPermissions && !allPermissionsGranted()) { - FragmentCompat.requestPermissions(this, getRequiredPermissions(), PERMISSIONS_REQUEST_CODE); - return; - } else { - checkedPermissions = true; - } - setUpCameraOutputs(width, height); - configureTransform(width, height); - Activity activity = getActivity(); - CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE); - try { - if (!cameraOpenCloseLock.tryAcquire(2500, TimeUnit.MILLISECONDS)) { - throw new RuntimeException("Time out waiting to lock camera opening."); - } - manager.openCamera(cameraId, stateCallback, backgroundHandler); - } catch (CameraAccessException e) { - e.printStackTrace(); - } catch (InterruptedException e) { - throw new RuntimeException("Interrupted while trying to lock camera opening.", e); - } - } - - private boolean allPermissionsGranted() { - for (String permission : getRequiredPermissions()) { - if (ContextCompat.checkSelfPermission(getActivity(), permission) - != PackageManager.PERMISSION_GRANTED) { - return false; - } - } - return true; - } - - @Override - public void onRequestPermissionsResult( - int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults); - } - - /** Closes the current {@link CameraDevice}. */ - private void closeCamera() { - try { - cameraOpenCloseLock.acquire(); - if (null != captureSession) { - captureSession.close(); - captureSession = null; - } - if (null != cameraDevice) { - cameraDevice.close(); - cameraDevice = null; - } - if (null != imageReader) { - imageReader.close(); - imageReader = null; - } - } catch (InterruptedException e) { - throw new RuntimeException("Interrupted while trying to lock camera closing.", e); - } finally { - cameraOpenCloseLock.release(); - } - } - - /** Starts a background thread and its {@link Handler}. */ - private void startBackgroundThread() { - backgroundThread = new HandlerThread(HANDLE_THREAD_NAME); - backgroundThread.start(); - backgroundHandler = new Handler(backgroundThread.getLooper()); - synchronized (lock) { - runClassifier = true; - } - backgroundHandler.post(periodicClassify); - } - - /** Stops the background thread and its {@link Handler}. */ - private void stopBackgroundThread() { - backgroundThread.quitSafely(); - try { - backgroundThread.join(); - backgroundThread = null; - backgroundHandler = null; - synchronized (lock) { - runClassifier = false; - } - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - - /** Takes photos and classify them periodically. */ - private Runnable periodicClassify = - new Runnable() { - @Override - public void run() { - synchronized (lock) { - if (runClassifier) { - classifyFrame(); - } - } - backgroundHandler.post(periodicClassify); - } - }; - - /** Creates a new {@link CameraCaptureSession} for camera preview. */ - private void createCameraPreviewSession() { - try { - SurfaceTexture texture = textureView.getSurfaceTexture(); - assert texture != null; - - // We configure the size of default buffer to be the size of camera preview we want. - texture.setDefaultBufferSize(previewSize.getWidth(), previewSize.getHeight()); - - // This is the output Surface we need to start preview. - Surface surface = new Surface(texture); - - // We set up a CaptureRequest.Builder with the output Surface. - previewRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); - previewRequestBuilder.addTarget(surface); - - // Here, we create a CameraCaptureSession for camera preview. - cameraDevice.createCaptureSession( - Arrays.asList(surface), - new CameraCaptureSession.StateCallback() { - - @Override - public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) { - // The camera is already closed - if (null == cameraDevice) { - return; - } - - // When the session is ready, we start displaying the preview. - captureSession = cameraCaptureSession; - try { - // Auto focus should be continuous for camera preview. - previewRequestBuilder.set( - CaptureRequest.CONTROL_AF_MODE, - CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE); - - // Finally, we start displaying the camera preview. - previewRequest = previewRequestBuilder.build(); - captureSession.setRepeatingRequest( - previewRequest, captureCallback, backgroundHandler); - } catch (CameraAccessException e) { - e.printStackTrace(); - } - } - - @Override - public void onConfigureFailed(@NonNull CameraCaptureSession cameraCaptureSession) { - showToast("Failed"); - } - }, - null); - } catch (CameraAccessException e) { - e.printStackTrace(); - } - } - - /** - * Configures the necessary {@link android.graphics.Matrix} transformation to `textureView`. This - * method should be called after the camera preview size is determined in setUpCameraOutputs and - * also the size of `textureView` is fixed. - * - * @param viewWidth The width of `textureView` - * @param viewHeight The height of `textureView` - */ - private void configureTransform(int viewWidth, int viewHeight) { - Activity activity = getActivity(); - if (null == textureView || null == previewSize || null == activity) { - return; - } - int rotation = activity.getWindowManager().getDefaultDisplay().getRotation(); - Matrix matrix = new Matrix(); - RectF viewRect = new RectF(0, 0, viewWidth, viewHeight); - RectF bufferRect = new RectF(0, 0, previewSize.getHeight(), previewSize.getWidth()); - float centerX = viewRect.centerX(); - float centerY = viewRect.centerY(); - if (Surface.ROTATION_90 == rotation || Surface.ROTATION_270 == rotation) { - bufferRect.offset(centerX - bufferRect.centerX(), centerY - bufferRect.centerY()); - matrix.setRectToRect(viewRect, bufferRect, Matrix.ScaleToFit.FILL); - float scale = - Math.max( - (float) viewHeight / previewSize.getHeight(), - (float) viewWidth / previewSize.getWidth()); - matrix.postScale(scale, scale, centerX, centerY); - matrix.postRotate(90 * (rotation - 2), centerX, centerY); - } else if (Surface.ROTATION_180 == rotation) { - matrix.postRotate(180, centerX, centerY); - } - textureView.setTransform(matrix); - } - - /** Classifies a frame from the preview stream. */ - private void classifyFrame() { - if (classifier == null || getActivity() == null || cameraDevice == null) { - showToast("Uninitialized Classifier or invalid context."); - return; - } - Bitmap bitmap = - textureView.getBitmap(ImageClassifier.DIM_IMG_SIZE_X, ImageClassifier.DIM_IMG_SIZE_Y); - String textToShow = classifier.classifyFrame(bitmap); - bitmap.recycle(); - showToast(textToShow); - } - - /** Compares two {@code Size}s based on their areas. */ - private static class CompareSizesByArea implements Comparator { - - @Override - public int compare(Size lhs, Size rhs) { - // We cast here to ensure the multiplications won't overflow - return Long.signum( - (long) lhs.getWidth() * lhs.getHeight() - (long) rhs.getWidth() * rhs.getHeight()); - } - } - - /** Shows an error message dialog. */ - public static class ErrorDialog extends DialogFragment { - - private static final String ARG_MESSAGE = "message"; - - public static ErrorDialog newInstance(String message) { - ErrorDialog dialog = new ErrorDialog(); - Bundle args = new Bundle(); - args.putString(ARG_MESSAGE, message); - dialog.setArguments(args); - return dialog; - } - - @Override - public Dialog onCreateDialog(Bundle savedInstanceState) { - final Activity activity = getActivity(); - return new AlertDialog.Builder(activity) - .setMessage(getArguments().getString(ARG_MESSAGE)) - .setPositiveButton( - android.R.string.ok, - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - activity.finish(); - } - }) - .create(); - } - } -} diff --git a/android-tflite/app/src/main/java/com/example/android/tflitecamerademo/CameraActivity.java b/android-tflite/app/src/main/java/com/example/android/tflitecamerademo/CameraActivity.java deleted file mode 100755 index e7161dd..0000000 --- a/android-tflite/app/src/main/java/com/example/android/tflitecamerademo/CameraActivity.java +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright 2017 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -==============================================================================*/ - -package com.example.android.tflitecamerademo; - -import android.app.Activity; -import android.os.Bundle; - -/** Main {@code Activity} class for the Camera app. */ -public class CameraActivity extends Activity { - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_camera); - if (null == savedInstanceState) { - getFragmentManager() - .beginTransaction() - .replace(R.id.container, Camera2BasicFragment.newInstance()) - .commit(); - } - } -} diff --git a/android-tflite/app/src/main/java/com/example/android/tflitecamerademo/ImageClassifier.java b/android-tflite/app/src/main/java/com/example/android/tflitecamerademo/ImageClassifier.java deleted file mode 100755 index e95b832..0000000 --- a/android-tflite/app/src/main/java/com/example/android/tflitecamerademo/ImageClassifier.java +++ /dev/null @@ -1,222 +0,0 @@ -/* Copyright 2017 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -==============================================================================*/ - -package com.example.android.tflitecamerademo; - -import android.app.Activity; -import android.content.res.AssetFileDescriptor; -import android.graphics.Bitmap; -import android.os.SystemClock; -import android.util.Log; -import java.io.BufferedReader; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; -import java.nio.MappedByteBuffer; -import java.nio.channels.FileChannel; -import java.util.AbstractMap; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.PriorityQueue; -import org.tensorflow.lite.Interpreter; - -/** Classifies images with Tensorflow Lite. */ -public class ImageClassifier { - - /** Tag for the {@link Log}. */ - private static final String TAG = "TfLiteCameraDemo"; - - /** Name of the model file stored in Assets. */ - private static final String MODEL_PATH = "inception.tflite"; - - /** Name of the label file stored in Assets. */ - private static final String LABEL_PATH = "labels.txt"; - - /** Number of results to show in the UI. */ - private static final int RESULTS_TO_SHOW = 3; - - /** Dimensions of inputs. */ - private static final int DIM_BATCH_SIZE = 1; - - private static final int DIM_PIXEL_SIZE = 3; - - static final int DIM_IMG_SIZE_X = 299; - static final int DIM_IMG_SIZE_Y = 299; - - private static final int IMAGE_MEAN = 128; - private static final float IMAGE_STD = 128.0f; - - - /* Preallocated buffers for storing image data in. */ - private int[] intValues = new int[DIM_IMG_SIZE_X * DIM_IMG_SIZE_Y]; - - /** An instance of the driver class to run model inference with Tensorflow Lite. */ - private Interpreter tflite; - - /** Labels corresponding to the output of the vision model. */ - private List labelList; - - /** A ByteBuffer to hold image data, to be feed into Tensorflow Lite as inputs. */ - private ByteBuffer imgData = null; - - /** An array to hold inference results, to be feed into Tensorflow Lite as outputs. */ - private float[][] labelProbArray = null; - /** multi-stage low pass filter **/ - private float[][] filterLabelProbArray = null; - private static final int FILTER_STAGES = 3; - private static final float FILTER_FACTOR = 0.4f; - - private PriorityQueue> sortedLabels = - new PriorityQueue<>( - RESULTS_TO_SHOW, - new Comparator>() { - @Override - public int compare(Map.Entry o1, Map.Entry o2) { - return (o1.getValue()).compareTo(o2.getValue()); - } - }); - - /** Initializes an {@code ImageClassifier}. */ - ImageClassifier(Activity activity) throws IOException { - tflite = new Interpreter(loadModelFile(activity)); - labelList = loadLabelList(activity); - imgData = - ByteBuffer.allocateDirect( - 4 * DIM_BATCH_SIZE * DIM_IMG_SIZE_X * DIM_IMG_SIZE_Y * DIM_PIXEL_SIZE); - imgData.order(ByteOrder.nativeOrder()); - labelProbArray = new float[1][labelList.size()]; - filterLabelProbArray = new float[FILTER_STAGES][labelList.size()]; - Log.d(TAG, "Created a Tensorflow Lite Image Classifier."); - } - - /** Classifies a frame from the preview stream. */ - String classifyFrame(Bitmap bitmap) { - if (tflite == null) { - Log.e(TAG, "Image classifier has not been initialized; Skipped."); - return "Uninitialized Classifier."; - } - convertBitmapToByteBuffer(bitmap); - // Here's where the magic happens!!! - long startTime = SystemClock.uptimeMillis(); - tflite.run(imgData, labelProbArray); - long endTime = SystemClock.uptimeMillis(); - Log.d(TAG, "Timecost to run model inference: " + Long.toString(endTime - startTime)); - - // smooth the results - applyFilter(); - - // print the results - String textToShow = printTopKLabels(); - textToShow = Long.toString(endTime - startTime) + "ms" + textToShow; - return textToShow; - } - - void applyFilter(){ - int num_labels = labelList.size(); - - // Low pass filter `labelProbArray` into the first stage of the filter. - for(int j=0; j loadLabelList(Activity activity) throws IOException { - List labelList = new ArrayList(); - BufferedReader reader = - new BufferedReader(new InputStreamReader(activity.getAssets().open(LABEL_PATH))); - String line; - while ((line = reader.readLine()) != null) { - labelList.add(line); - } - reader.close(); - return labelList; - } - - /** Memory-map the model file in Assets. */ - private MappedByteBuffer loadModelFile(Activity activity) throws IOException { - AssetFileDescriptor fileDescriptor = activity.getAssets().openFd(MODEL_PATH); - FileInputStream inputStream = new FileInputStream(fileDescriptor.getFileDescriptor()); - FileChannel fileChannel = inputStream.getChannel(); - long startOffset = fileDescriptor.getStartOffset(); - long declaredLength = fileDescriptor.getDeclaredLength(); - return fileChannel.map(FileChannel.MapMode.READ_ONLY, startOffset, declaredLength); - } - - /** Writes Image data into a {@code ByteBuffer}. */ - private void convertBitmapToByteBuffer(Bitmap bitmap) { - if (imgData == null) { - return; - } - imgData.rewind(); - bitmap.getPixels(intValues, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight()); - // Convert the image to floating point. - int pixel = 0; - long startTime = SystemClock.uptimeMillis(); - for (int i = 0; i < DIM_IMG_SIZE_X; ++i) { - for (int j = 0; j < DIM_IMG_SIZE_Y; ++j) { - final int val = intValues[pixel++]; - imgData.putFloat((((val >> 16) & 0xFF)-IMAGE_MEAN)/IMAGE_STD); - imgData.putFloat((((val >> 8) & 0xFF)-IMAGE_MEAN)/IMAGE_STD); - imgData.putFloat((((val) & 0xFF)-IMAGE_MEAN)/IMAGE_STD); - } - } - long endTime = SystemClock.uptimeMillis(); - Log.d(TAG, "Timecost to put values into ByteBuffer: " + Long.toString(endTime - startTime)); - } - - /** Prints top-K labels, to be shown in UI as the results. */ - private String printTopKLabels() { - for (int i = 0; i < labelList.size(); ++i) { - sortedLabels.add( - new AbstractMap.SimpleEntry<>(labelList.get(i), labelProbArray[0][i])); - if (sortedLabels.size() > RESULTS_TO_SHOW) { - sortedLabels.poll(); - } - } - String textToShow = ""; - final int size = sortedLabels.size(); - for (int i = 0; i < size; ++i) { - Map.Entry label = sortedLabels.poll(); - textToShow = String.format("\n%s: %4.2f",label.getKey(),label.getValue()) + textToShow; - } - return textToShow; - } -} diff --git a/android-tflite/app/src/main/res/drawable-hdpi/ic_action_info.png b/android-tflite/app/src/main/res/drawable-hdpi/ic_action_info.png deleted file mode 100755 index e0a7000..0000000 Binary files a/android-tflite/app/src/main/res/drawable-hdpi/ic_action_info.png and /dev/null differ diff --git a/android-tflite/app/src/main/res/drawable-hdpi/ic_launcher.png b/android-tflite/app/src/main/res/drawable-hdpi/ic_launcher.png deleted file mode 100755 index c22509d..0000000 Binary files a/android-tflite/app/src/main/res/drawable-hdpi/ic_launcher.png and /dev/null differ diff --git a/android-tflite/app/src/main/res/drawable-hdpi/tile.9.png b/android-tflite/app/src/main/res/drawable-hdpi/tile.9.png deleted file mode 100755 index a84e3ef..0000000 Binary files a/android-tflite/app/src/main/res/drawable-hdpi/tile.9.png and /dev/null differ diff --git a/android-tflite/app/src/main/res/drawable-mdpi/ic_action_info.png b/android-tflite/app/src/main/res/drawable-mdpi/ic_action_info.png deleted file mode 100755 index 520c2dd..0000000 Binary files a/android-tflite/app/src/main/res/drawable-mdpi/ic_action_info.png and /dev/null differ diff --git a/android-tflite/app/src/main/res/drawable-mdpi/ic_launcher.png b/android-tflite/app/src/main/res/drawable-mdpi/ic_launcher.png deleted file mode 100755 index d68af39..0000000 Binary files a/android-tflite/app/src/main/res/drawable-mdpi/ic_launcher.png and /dev/null differ diff --git a/android-tflite/app/src/main/res/drawable-xhdpi/ic_action_info.png b/android-tflite/app/src/main/res/drawable-xhdpi/ic_action_info.png deleted file mode 100755 index 1347b09..0000000 Binary files a/android-tflite/app/src/main/res/drawable-xhdpi/ic_action_info.png and /dev/null differ diff --git a/android-tflite/app/src/main/res/drawable-xhdpi/ic_launcher.png b/android-tflite/app/src/main/res/drawable-xhdpi/ic_launcher.png deleted file mode 100755 index 15e419b..0000000 Binary files a/android-tflite/app/src/main/res/drawable-xhdpi/ic_launcher.png and /dev/null differ diff --git a/android-tflite/app/src/main/res/drawable-xxhdpi/ic_action_info.png b/android-tflite/app/src/main/res/drawable-xxhdpi/ic_action_info.png deleted file mode 100755 index fd93333..0000000 Binary files a/android-tflite/app/src/main/res/drawable-xxhdpi/ic_action_info.png and /dev/null differ diff --git a/android-tflite/app/src/main/res/drawable-xxhdpi/ic_launcher.png b/android-tflite/app/src/main/res/drawable-xxhdpi/ic_launcher.png deleted file mode 100755 index 342ce34..0000000 Binary files a/android-tflite/app/src/main/res/drawable-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/android-tflite/app/src/main/res/layout-land/fragment_camera2_basic.xml b/android-tflite/app/src/main/res/layout-land/fragment_camera2_basic.xml deleted file mode 100755 index a84f1bb..0000000 --- a/android-tflite/app/src/main/res/layout-land/fragment_camera2_basic.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - diff --git a/android-tflite/app/src/main/res/layout/activity_camera.xml b/android-tflite/app/src/main/res/layout/activity_camera.xml deleted file mode 100755 index 286e549..0000000 --- a/android-tflite/app/src/main/res/layout/activity_camera.xml +++ /dev/null @@ -1,22 +0,0 @@ - - diff --git a/android-tflite/app/src/main/res/layout/fragment_camera2_basic.xml b/android-tflite/app/src/main/res/layout/fragment_camera2_basic.xml deleted file mode 100755 index 15305c4..0000000 --- a/android-tflite/app/src/main/res/layout/fragment_camera2_basic.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - diff --git a/android-tflite/app/src/main/res/values-sw600dp/template-dimens.xml b/android-tflite/app/src/main/res/values-sw600dp/template-dimens.xml deleted file mode 100755 index 22074a2..0000000 --- a/android-tflite/app/src/main/res/values-sw600dp/template-dimens.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - @dimen/margin_huge - @dimen/margin_medium - - diff --git a/android-tflite/app/src/main/res/values-sw600dp/template-styles.xml b/android-tflite/app/src/main/res/values-sw600dp/template-styles.xml deleted file mode 100755 index 03d1974..0000000 --- a/android-tflite/app/src/main/res/values-sw600dp/template-styles.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - diff --git a/android-tflite/app/src/main/res/values-v11/template-styles.xml b/android-tflite/app/src/main/res/values-v11/template-styles.xml deleted file mode 100755 index 8c1ea66..0000000 --- a/android-tflite/app/src/main/res/values-v11/template-styles.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - diff --git a/android-tflite/app/src/main/res/values/base-strings.xml b/android-tflite/app/src/main/res/values/base-strings.xml deleted file mode 100755 index 0564dfd..0000000 --- a/android-tflite/app/src/main/res/values/base-strings.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - TensorDex - - - - diff --git a/android-tflite/app/src/main/res/values/colors.xml b/android-tflite/app/src/main/res/values/colors.xml deleted file mode 100755 index 4b75d2b..0000000 --- a/android-tflite/app/src/main/res/values/colors.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - #cc4285f4 - diff --git a/android-tflite/app/src/main/res/values/strings.xml b/android-tflite/app/src/main/res/values/strings.xml deleted file mode 100755 index a08ec3e..0000000 --- a/android-tflite/app/src/main/res/values/strings.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - Picture - Info - This sample needs camera permission. - This device doesn\'t support Camera2 API. - NN:On - NN:Off - Use NNAPI - diff --git a/android-tflite/app/src/main/res/values/styles.xml b/android-tflite/app/src/main/res/values/styles.xml deleted file mode 100755 index 3f3bdfb..0000000 --- a/android-tflite/app/src/main/res/values/styles.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - diff --git a/android-tflite/build.gradle b/android-tflite/build.gradle deleted file mode 100755 index 151ee7f..0000000 --- a/android-tflite/build.gradle +++ /dev/null @@ -1,24 +0,0 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. - -buildscript { - repositories { - jcenter() - google() - } - dependencies { - classpath 'com.android.tools.build:gradle:3.3.2' - - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files - } -} - -allprojects { - repositories { - jcenter() - } -} - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/android-tflite/gradle.properties b/android-tflite/gradle.properties deleted file mode 100755 index aac7c9b..0000000 --- a/android-tflite/gradle.properties +++ /dev/null @@ -1,17 +0,0 @@ -# Project-wide Gradle settings. - -# IDE (e.g. Android Studio) users: -# Gradle settings configured through the IDE *will override* -# any settings specified in this file. - -# For more details on how to configure your build environment visit -# http://www.gradle.org/docs/current/userguide/build_environment.html - -# Specifies the JVM arguments used for the daemon process. -# The setting is particularly useful for tweaking memory settings. -org.gradle.jvmargs=-Xmx1536m - -# When configured, Gradle will run in incubating parallel mode. -# This option should only be used with decoupled projects. More details, visit -# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true diff --git a/android-tflite/gradle/wrapper/gradle-wrapper.jar b/android-tflite/gradle/wrapper/gradle-wrapper.jar deleted file mode 100755 index 13372ae..0000000 Binary files a/android-tflite/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/android-tflite/gradle/wrapper/gradle-wrapper.properties b/android-tflite/gradle/wrapper/gradle-wrapper.properties deleted file mode 100755 index e2bdfe9..0000000 --- a/android-tflite/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Sun Apr 14 18:55:46 CDT 2019 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip diff --git a/android-tflite/gradlew b/android-tflite/gradlew deleted file mode 100755 index 9d82f78..0000000 --- a/android-tflite/gradlew +++ /dev/null @@ -1,160 +0,0 @@ -#!/usr/bin/env bash - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn ( ) { - echo "$*" -} - -die ( ) { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; -esac - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") -} -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" - -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/android-tflite/gradlew.bat b/android-tflite/gradlew.bat deleted file mode 100755 index 8a0b282..0000000 --- a/android-tflite/gradlew.bat +++ /dev/null @@ -1,90 +0,0 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windowz variants - -if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/android-tflite/settings.gradle b/android-tflite/settings.gradle deleted file mode 100755 index e7b4def..0000000 --- a/android-tflite/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -include ':app' diff --git a/ModelTraining/graphResults.py b/graphResults.py old mode 100755 new mode 100644 similarity index 100% rename from ModelTraining/graphResults.py rename to graphResults.py diff --git a/iOS-tflite/.gitignore b/iOS-tflite/.gitignore deleted file mode 100755 index a21ec83..0000000 --- a/iOS-tflite/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/data/*.txt -/data/*lite diff --git a/iOS-tflite/AppIcon.xcassets/.gitignore b/iOS-tflite/AppIcon.xcassets/.gitignore deleted file mode 100755 index 7b0d62b..0000000 --- a/iOS-tflite/AppIcon.xcassets/.gitignore +++ /dev/null @@ -1,78 +0,0 @@ -# Xcode -# -# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore - -## Build generated -build/ -DerivedData/ - -## Various settings -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata/ - -## Other -*.moved-aside -*.xccheckout -*.xcscmblueprint - -## Obj-C/Swift specific -*.hmap -*.ipa -*.dSYM.zip -*.dSYM - -## Playgrounds -timeline.xctimeline -playground.xcworkspace - -# Swift Package Manager -# -# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. -# Packages/ -# Package.pins -# Package.resolved -.build/ - -# CocoaPods -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control -# -# Pods/ -# -# Add this line if you want to avoid checking in source code from the Xcode workspace -# *.xcworkspace - -# Carthage -# -# Add this line if you want to avoid checking in source code from Carthage dependencies. -# Carthage/Checkouts - -Carthage/Build - -# fastlane -# -# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the -# screenshots whenever they are needed. -# For more information about the recommended setup visit: -# https://docs.fastlane.tools/best-practices/source-control/#source-control - -fastlane/report.xml -fastlane/Preview.html -fastlane/screenshots/**/*.png -fastlane/test_output - -# Code Injection -# -# After new code Injection tools there's a generated folder /iOSInjectionProject -# https://github.com/johnno1962/injectionforxcode - -iOSInjectionProject/ diff --git a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/Contents.json b/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100755 index 1c25084..0000000 --- a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "images": [ - { - "size": "20x20", - "idiom": "iphone", - "filename": "logo-2.png", - "scale": "2x" - }, - { - "size": "20x20", - "idiom": "iphone", - "filename": "logo-3.png", - "scale": "3x" - }, - { - "size": "29x29", - "idiom": "iphone", - "filename": "logo-4.png", - "scale": "2x" - }, - { - "size": "29x29", - "idiom": "iphone", - "filename": "logo-5.png", - "scale": "3x" - }, - { - "size": "40x40", - "idiom": "iphone", - "filename": "logo-6.png", - "scale": "2x" - }, - { - "size": "40x40", - "idiom": "iphone", - "filename": "logo-7.png", - "scale": "3x" - }, - { - "size": "60x60", - "idiom": "iphone", - "filename": "logo-1.png", - "scale": "2x" - }, - { - "size": "60x60", - "idiom": "iphone", - "filename": "logo.png", - "scale": "3x" - }, - { - "size": "20x20", - "idiom": "ipad", - "filename": "logo-8.png", - "scale": "1x" - }, - { - "size": "20x20", - "idiom": "ipad", - "filename": "logo-9.png", - "scale": "2x" - }, - { - "size": "29x29", - "idiom": "ipad", - "filename": "logo-10.png", - "scale": "1x" - }, - { - "size": "29x29", - "idiom": "ipad", - "filename": "logo-11.png", - "scale": "2x" - }, - { - "size": "40x40", - "idiom": "ipad", - "filename": "logo-12.png", - "scale": "1x" - }, - { - "size": "40x40", - "idiom": "ipad", - "filename": "logo-13.png", - "scale": "2x" - }, - { - "size": "76x76", - "idiom": "ipad", - "filename": "logo-14.png", - "scale": "1x" - }, - { - "size": "76x76", - "idiom": "ipad", - "filename": "logo-15.png", - "scale": "2x" - }, - { - "size": "83.5x83.5", - "idiom": "ipad", - "filename": "logo-16.png", - "scale": "2x" - }, - { - "size": "1024x1024", - "idiom": "ios-marketing", - "filename": "logo-17.png", - "scale": "1x" - } - ], - "info": { - "version": 1, - "author": "xcode" - } -} \ No newline at end of file diff --git a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-1.png b/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-1.png deleted file mode 100755 index 7eee5db..0000000 Binary files a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-1.png and /dev/null differ diff --git a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-10.png b/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-10.png deleted file mode 100755 index 26e797d..0000000 Binary files a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-10.png and /dev/null differ diff --git a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-11.png b/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-11.png deleted file mode 100755 index 10b514b..0000000 Binary files a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-11.png and /dev/null differ diff --git a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-12.png b/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-12.png deleted file mode 100755 index a533018..0000000 Binary files a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-12.png and /dev/null differ diff --git a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-13.png b/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-13.png deleted file mode 100755 index 9f1e45e..0000000 Binary files a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-13.png and /dev/null differ diff --git a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-14.png b/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-14.png deleted file mode 100755 index 3db1736..0000000 Binary files a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-14.png and /dev/null differ diff --git a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-15.png b/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-15.png deleted file mode 100755 index 5a8e969..0000000 Binary files a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-15.png and /dev/null differ diff --git a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-16.png b/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-16.png deleted file mode 100755 index 4354bf8..0000000 Binary files a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-16.png and /dev/null differ diff --git a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-17.png b/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-17.png deleted file mode 100755 index 34cdf5d..0000000 Binary files a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-17.png and /dev/null differ diff --git a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-2.png b/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-2.png deleted file mode 100755 index a533018..0000000 Binary files a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-2.png and /dev/null differ diff --git a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-3.png b/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-3.png deleted file mode 100755 index 985cbcc..0000000 Binary files a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-3.png and /dev/null differ diff --git a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-4.png b/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-4.png deleted file mode 100755 index 10b514b..0000000 Binary files a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-4.png and /dev/null differ diff --git a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-5.png b/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-5.png deleted file mode 100755 index 65aa946..0000000 Binary files a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-5.png and /dev/null differ diff --git a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-6.png b/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-6.png deleted file mode 100755 index 9f1e45e..0000000 Binary files a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-6.png and /dev/null differ diff --git a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-7.png b/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-7.png deleted file mode 100755 index 7eee5db..0000000 Binary files a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-7.png and /dev/null differ diff --git a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-8.png b/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-8.png deleted file mode 100755 index b73b2bc..0000000 Binary files a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-8.png and /dev/null differ diff --git a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-9.png b/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-9.png deleted file mode 100755 index a533018..0000000 Binary files a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo-9.png and /dev/null differ diff --git a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo.png b/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo.png deleted file mode 100755 index 13a71eb..0000000 Binary files a/iOS-tflite/AppIcon.xcassets/AppIcon.appiconset/logo.png and /dev/null differ diff --git a/iOS-tflite/AppIcon.xcassets/Contents.json b/iOS-tflite/AppIcon.xcassets/Contents.json deleted file mode 100755 index 121dee6..0000000 --- a/iOS-tflite/AppIcon.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info": { - "version": 1, - "author": "xcode" - } -} \ No newline at end of file diff --git a/iOS-tflite/CameraExampleAppDelegate.h b/iOS-tflite/CameraExampleAppDelegate.h deleted file mode 100755 index 55891c3..0000000 --- a/iOS-tflite/CameraExampleAppDelegate.h +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2017 The TensorFlow Authors. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -@interface CameraExampleAppDelegate : UIResponder - -@property(strong, nonatomic) UIWindow* window; - -@end diff --git a/iOS-tflite/CameraExampleAppDelegate.m b/iOS-tflite/CameraExampleAppDelegate.m deleted file mode 100755 index 128266d..0000000 --- a/iOS-tflite/CameraExampleAppDelegate.m +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2017 The TensorFlow Authors. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "CameraExampleAppDelegate.h" - -@implementation CameraExampleAppDelegate - -@synthesize window = _window; - -- (BOOL)application:(UIApplication *)application - didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - [self.window makeKeyAndVisible]; - return YES; -} - -- (void)applicationWillResignActive:(UIApplication *)application { - [[UIApplication sharedApplication] setIdleTimerDisabled:NO]; -} - -- (void)applicationDidEnterBackground:(UIApplication *)application { -} - -- (void)applicationWillEnterForeground:(UIApplication *)application { -} - -- (void)applicationDidBecomeActive:(UIApplication *)application { - [[UIApplication sharedApplication] setIdleTimerDisabled:YES]; -} - -- (void)applicationWillTerminate:(UIApplication *)application { -} - -@end diff --git a/iOS-tflite/CameraExampleViewController.h b/iOS-tflite/CameraExampleViewController.h deleted file mode 100755 index a195d46..0000000 --- a/iOS-tflite/CameraExampleViewController.h +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2017 The TensorFlow Authors. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import -#import -#import - -#include - -#include "tensorflow/contrib/lite/kernels/register.h" -#include "tensorflow/contrib/lite/model.h" - -typedef struct { - int width; - int height; - int channels; - std::vector data; -} image_data; - - -@interface CameraExampleViewController - : UIViewController { - IBOutlet UIView* previewView; - CALayer* previewLayer; - UIView* flashView; - NSMutableArray* labelLayers; - - - std::vector labels; - std::unique_ptr model; - tflite::ops::builtin::BuiltinOpResolver resolver; - std::unique_ptr interpreter; - - double total_latency; - int total_count; - - int photos_index; - PHFetchResult *photos; - - UIImage* input_image; - UIImage* display_image; -} -@property(strong, nonatomic) CATextLayer* predictionTextLayer; - -- (IBAction)takePicture:(id)sender; -@end - diff --git a/iOS-tflite/CameraExampleViewController.mm b/iOS-tflite/CameraExampleViewController.mm deleted file mode 100755 index 3d3e17f..0000000 --- a/iOS-tflite/CameraExampleViewController.mm +++ /dev/null @@ -1,467 +0,0 @@ -// Copyright 2017 The TensorFlow Authors. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import "CameraExampleViewController.h" -#import -#import -#import -#import - -#include -#include -#include -#include - -#include "tensorflow/contrib/lite/kernels/register.h" -#include "tensorflow/contrib/lite/model.h" -#include "tensorflow/contrib/lite/string_util.h" -#include "tensorflow/contrib/lite/mutable_op_resolver.h" - -#define LOG(x) std::cerr - -// If you have your own model, modify this to the file name, and make sure -// you've added the file to your app resources too. -static NSString* model_file_name = @"graph"; -static NSString* model_file_type = @"lite"; - -// If you have your own model, point this to the labels file. -static NSString* labels_file_name = @"labels"; -static NSString* labels_file_type = @"txt"; - -// These dimensions need to match those the model was trained with. -static const int wanted_input_width = 224; -static const int wanted_input_height = 224; -static const int wanted_input_channels = 3; - -static NSString* FilePathForResourceName(NSString* name, NSString* extension) { - NSString* file_path = [[NSBundle mainBundle] pathForResource:name ofType:extension]; - if (file_path == NULL) { - LOG(FATAL) << "Couldn't find '" << [name UTF8String] << "." << [extension UTF8String] - << "' in bundle."; - } - return file_path; -} - -static void LoadLabels(NSString* file_name, NSString* file_type, - std::vector* label_strings) { - NSString* labels_path = FilePathForResourceName(file_name, file_type); - if (!labels_path) { - LOG(ERROR) << "Failed to find model proto at" << [file_name UTF8String] - << [file_type UTF8String]; - } - std::ifstream t; - t.open([labels_path UTF8String]); - std::string line; - while (t) { - std::getline(t, line); - if (line.length()){ - label_strings->push_back(line); - } - } - t.close(); -} - -// Returns the top N confidence values over threshold in the provided vector, -// sorted by confidence in descending order. -static void GetTopN(const float* prediction, const int prediction_size, const int num_results, - const float threshold, std::vector>* top_results) { - // Will contain top N results in ascending order. - std::priority_queue, std::vector>, - std::greater>> - top_result_pq; - - const long count = prediction_size; - for (int i = 0; i < count; ++i) { - const float value = prediction[i]; - // Only add it if it beats the threshold and has a chance at being in - // the top N. - if (value < threshold) { - continue; - } - - top_result_pq.push(std::pair(value, i)); - - // If at capacity, kick the smallest value out. - if (top_result_pq.size() > num_results) { - top_result_pq.pop(); - } - } - - // Copy to output vector and reverse into descending order. - while (!top_result_pq.empty()) { - top_results->push_back(top_result_pq.top()); - top_result_pq.pop(); - } - std::reverse(top_results->begin(), top_results->end()); -} - -@interface CameraExampleViewController (InternalMethods) -- (void)teardownAVCapture; -@end - -@implementation CameraExampleViewController - -- (void) attachPreviewLayer{ - photos_index = 0; - photos = nil; - previewLayer = [[CALayer alloc] init]; - - [previewLayer setBackgroundColor:[[UIColor blackColor] CGColor]]; - CALayer* rootLayer = [previewView layer]; - [rootLayer setMasksToBounds:YES]; - [previewLayer setFrame:[rootLayer bounds]]; - [rootLayer addSublayer:previewLayer]; - - [self UpdatePhoto]; -} - -- (void)UpdatePhoto{ - PHAsset* asset; - if (photos==nil || photos_index >= photos.count){ - [self updatePhotosLibrary]; - photos_index=0; - } - if (photos.count){ - asset = photos[photos_index]; - photos_index += 1; - input_image = [self convertImageFromAsset:asset - targetSize:CGSizeMake(wanted_input_width, wanted_input_height) - mode:PHImageContentModeAspectFill]; - display_image = [self convertImageFromAsset:asset - targetSize:CGSizeMake(asset.pixelWidth,asset.pixelHeight) - mode:PHImageContentModeAspectFit]; - [self DrawImage]; - } - - if (input_image != nil){ - image_data image = [self CGImageToPixels:input_image.CGImage]; - [self inputImageToModel:image]; - [self runModel]; - } -} - -- (void)DrawImage{ - CGFloat view_height = 800; - CGFloat view_width = 600; - - UIGraphicsBeginImageContextWithOptions(CGSizeMake(view_width, view_height), NO, 0.0); - CGContextRef context = UIGraphicsGetCurrentContext(); - UIGraphicsPushContext(context); - - float scale = view_width/display_image.size.width; - - if (display_image.size.height*scale > view_height){ - scale = view_height/display_image.size.height; - } - - CGPoint origin = CGPointMake((view_width - display_image.size.width*scale) / 2.0f, - (view_height - display_image.size.height*scale) / 2.0f); - [display_image drawInRect:CGRectMake(origin.x, origin.y, - display_image.size.width*scale, - display_image.size.height*scale)]; - UIGraphicsPopContext(); - display_image = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - previewLayer.contents = (id) display_image.CGImage; -} - -- (void)teardownAVCapture { - [previewLayer removeFromSuperlayer]; -} - -- (void) updatePhotosLibrary{ - PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init]; - fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]]; - photos = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:fetchOptions]; -} - -- (UIImage *) convertImageFromAsset:(PHAsset *)asset - targetSize:(CGSize) targetSize - mode:(PHImageContentMode) mode{ - PHImageManager * manager = [[PHImageManager alloc] init]; - PHImageRequestOptions * options = [[PHImageRequestOptions alloc] init]; - NSMutableArray * images = [[NSMutableArray alloc] init]; - NSMutableArray * infos = [[NSMutableArray alloc] init]; - - options.synchronous = TRUE; - - [manager requestImageForAsset:asset - targetSize:targetSize - contentMode:mode - options:options - resultHandler:^(UIImage *image, NSDictionary *info){ - [images addObject:image]; - [infos addObject:info]; - } - ]; - - UIImage *result = images[0]; - - return result; -} - -- (AVCaptureVideoOrientation)avOrientationForDeviceOrientation: - (UIDeviceOrientation)deviceOrientation { - AVCaptureVideoOrientation result = (AVCaptureVideoOrientation)(deviceOrientation); - if (deviceOrientation == UIDeviceOrientationLandscapeLeft) - result = AVCaptureVideoOrientationLandscapeRight; - else if (deviceOrientation == UIDeviceOrientationLandscapeRight) - result = AVCaptureVideoOrientationLandscapeLeft; - return result; -} - -- (image_data)CGImageToPixels:(CGImage *)image { - image_data result; - result.width = (int)CGImageGetWidth(image); - result.height = (int)CGImageGetHeight(image); - result.channels = 4; - - CGColorSpaceRef color_space = CGColorSpaceCreateDeviceRGB(); - const int bytes_per_row = (result.width * result.channels); - const int bytes_in_image = (bytes_per_row * result.height); - result.data = std::vector(bytes_in_image); - const int bits_per_component = 8; - - CGContextRef context = - CGBitmapContextCreate(result.data.data(), result.width, result.height, bits_per_component, bytes_per_row, - color_space, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); - CGColorSpaceRelease(color_space); - CGContextDrawImage(context, CGRectMake(0, 0, result.width, result.height), image); - CGContextRelease(context); - - return result; -} - - - -- (IBAction)takePicture:(id)sender { - [self UpdatePhoto]; -} - -- (void)inputImageToModel:(image_data)image{ - float* out = interpreter->typed_input_tensor(0); - - const float input_mean = 127.5f; - const float input_std = 127.5f; - assert(image.channels >= wanted_input_channels); - uint8_t* in = image.data.data(); - - for (int y = 0; y < wanted_input_height; ++y) { - const int in_y = (y * image.height) / wanted_input_height; - uint8_t* in_row = in + (in_y * image.width * image.channels); - float* out_row = out + (y * wanted_input_width * wanted_input_channels); - for (int x = 0; x < wanted_input_width; ++x) { - const int in_x = (x * image.width) / wanted_input_width; - uint8_t* in_pixel = in_row + (in_x * image.channels); - float* out_pixel = out_row + (x * wanted_input_channels); - for (int c = 0; c < wanted_input_channels; ++c) { - out_pixel[c] = (in_pixel[c] - input_mean) / input_std; - } - } - } -} - -- (void)runModel { - double startTimestamp = [[NSDate new] timeIntervalSince1970]; - if (interpreter->Invoke() != kTfLiteOk) { - LOG(FATAL) << "Failed to invoke!"; - } - double endTimestamp = [[NSDate new] timeIntervalSince1970]; - total_latency += (endTimestamp - startTimestamp); - total_count += 1; - NSLog(@"Time: %.4lf, avg: %.4lf, count: %d", endTimestamp - startTimestamp, - total_latency / total_count, total_count); - - const int output_size = (int)labels.size(); - const int kNumResults = 5; - const float kThreshold = 0.1f; - - std::vector> top_results; - - float* output = interpreter->typed_output_tensor(0); - GetTopN(output, output_size, kNumResults, kThreshold, &top_results); - - std::vector> newValues; - for (const auto& result : top_results) { - std::pair item; - item.first = result.first; - item.second = labels[result.second]; - - newValues.push_back(item); - } - dispatch_async(dispatch_get_main_queue(), ^(void) { - [self setPredictionValues:newValues]; - }); -} - -- (void)dealloc { - [self teardownAVCapture]; -} - -- (void)didReceiveMemoryWarning { - [super didReceiveMemoryWarning]; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - labelLayers = [[NSMutableArray alloc] init]; - - NSString* graph_path = FilePathForResourceName(model_file_name, model_file_type); - model = tflite::FlatBufferModel::BuildFromFile([graph_path UTF8String]); - if (!model) { - LOG(FATAL) << "Failed to mmap model " << graph_path; - } - LOG(INFO) << "Loaded model " << graph_path; - model->error_reporter(); - LOG(INFO) << "resolved reporter"; - - tflite::ops::builtin::BuiltinOpResolver resolver; - LoadLabels(labels_file_name, labels_file_type, &labels); - - tflite::InterpreterBuilder(*model, resolver)(&interpreter); - if (!interpreter) { - LOG(FATAL) << "Failed to construct interpreter"; - } - if (interpreter->AllocateTensors() != kTfLiteOk) { - LOG(FATAL) << "Failed to allocate tensors!"; - } - - [self attachPreviewLayer]; -} - -- (void)viewDidUnload { - [super viewDidUnload]; -} - -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; -} - -- (void)viewDidAppear:(BOOL)animated { - [super viewDidAppear:animated]; -} - -- (void)viewWillDisappear:(BOOL)animated { - [super viewWillDisappear:animated]; -} - -- (void)viewDidDisappear:(BOOL)animated { - [super viewDidDisappear:animated]; -} - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { - return (interfaceOrientation == UIInterfaceOrientationPortrait); -} - -- (BOOL)prefersStatusBarHidden { - return YES; -} - -- (void)setPredictionValues:(std::vector>)newValues { - - const float leftMargin = 10.0f; - const float topMargin = 10.0f; - - const float valueWidth = 48.0f; - const float valueHeight = 18.0f; - - const float labelWidth = 246.0f; - const float labelHeight = 18.0f; - - const float labelMarginX = 5.0f; - const float labelMarginY = 5.0f; - - [self removeAllLabelLayers]; - - int labelCount = 0; - for (const auto& item : newValues) { - std::string label = item.second; - const float value = item.first; - const float originY = topMargin + ((labelHeight + labelMarginY) * labelCount); - const int valuePercentage = (int)roundf(value * 100.0f); - - const float valueOriginX = leftMargin; - NSString* valueText = [NSString stringWithFormat:@"%d%%", valuePercentage]; - - [self addLabelLayerWithText:valueText - originX:valueOriginX - originY:originY - width:valueWidth - height:valueHeight - alignment:kCAAlignmentRight]; - - const float labelOriginX = (leftMargin + valueWidth + labelMarginX); - - NSString *nsLabel = [NSString stringWithCString:label.c_str() - encoding:[NSString defaultCStringEncoding]]; - [self addLabelLayerWithText:[nsLabel capitalizedString] - originX:labelOriginX - originY:originY - width:labelWidth - height:labelHeight - alignment:kCAAlignmentLeft]; - - labelCount += 1; - if (labelCount > 4) { - break; - } - } -} - -- (void)removeAllLabelLayers { - for (CATextLayer* layer in labelLayers) { - [layer removeFromSuperlayer]; - } - [labelLayers removeAllObjects]; -} - -- (void)addLabelLayerWithText:(NSString*)text - originX:(float)originX - originY:(float)originY - width:(float)width - height:(float)height - alignment:(NSString*)alignment { - CFTypeRef font = (CFTypeRef) @"Menlo-Regular"; - const float fontSize = 12.0; - const float marginSizeX = 5.0f; - const float marginSizeY = 2.0f; - - const CGRect backgroundBounds = CGRectMake(originX, originY, width, height); - const CGRect textBounds = CGRectMake((originX + marginSizeX), (originY + marginSizeY), - (width - (marginSizeX * 2)), (height - (marginSizeY * 2))); - - CATextLayer* background = [CATextLayer layer]; - [background setBackgroundColor:[UIColor blackColor].CGColor]; - [background setOpacity:0.5f]; - [background setFrame:backgroundBounds]; - background.cornerRadius = 5.0f; - - [[self.view layer] addSublayer:background]; - [labelLayers addObject:background]; - - CATextLayer* layer = [CATextLayer layer]; - [layer setForegroundColor:[UIColor whiteColor].CGColor]; - [layer setFrame:textBounds]; - [layer setAlignmentMode:alignment]; - [layer setWrapped:YES]; - [layer setFont:font]; - [layer setFontSize:fontSize]; - layer.contentsScale = [[UIScreen mainScreen] scale]; - [layer setString:text]; - - [[self.view layer] addSublayer:layer]; - [labelLayers addObject:layer]; -} - -@end diff --git a/iOS-tflite/Info.plist b/iOS-tflite/Info.plist deleted file mode 100755 index 068487f..0000000 --- a/iOS-tflite/Info.plist +++ /dev/null @@ -1,48 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - tflite_photos_example - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1.0 - LSRequiresIPhoneOS - - NSCameraUsageDescription - Capture images to detect object - NSPhotoLibraryAddUsageDescription - This app requires access to the photo library. - NSPhotoLibraryUsageDescription - This App classifies images from your photos library. - UIMainStoryboardFile - MainStoryboard_iPhone - UIRequiresFullScreen - - UIStatusBarHidden - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - - - diff --git a/iOS-tflite/MainStoryboard_iPhone.storyboard b/iOS-tflite/MainStoryboard_iPhone.storyboard deleted file mode 100755 index 1c829e6..0000000 --- a/iOS-tflite/MainStoryboard_iPhone.storyboard +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - Menlo-Regular - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/iOS-tflite/Podfile b/iOS-tflite/Podfile deleted file mode 100755 index 75323f3..0000000 --- a/iOS-tflite/Podfile +++ /dev/null @@ -1,5 +0,0 @@ -platform :ios, '8.0' -inhibit_all_warnings! - -target 'tflite_photos_example' - pod 'TensorFlowLite' diff --git a/iOS-tflite/data/.gitignore b/iOS-tflite/data/.gitignore deleted file mode 100755 index e69de29..0000000 diff --git a/iOS-tflite/main.mm b/iOS-tflite/main.mm deleted file mode 100755 index 1a9e542..0000000 --- a/iOS-tflite/main.mm +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2017 The TensorFlow Authors. All Rights Reserved. - -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -#import "CameraExampleAppDelegate.h" - -int main(int argc, char* argv[]) { - int retVal = 0; - - @autoreleasepool { - retVal = - UIApplicationMain(argc, argv, nil, NSStringFromClass([CameraExampleAppDelegate class])); - } - return retVal; -} diff --git a/iOS-tflite/tflite_photos_example.xcodeproj/project.pbxproj b/iOS-tflite/tflite_photos_example.xcodeproj/project.pbxproj deleted file mode 100755 index b122682..0000000 --- a/iOS-tflite/tflite_photos_example.xcodeproj/project.pbxproj +++ /dev/null @@ -1,395 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 1C3C9DCC1ED3AB4200B8B5FA /* main.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1C3C9DCA1ED3AB4200B8B5FA /* main.mm */; }; - 1C99111C1ED3B0E600A6BFB9 /* MainStoryboard_iPhone.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1C99111B1ED3B0E600A6BFB9 /* MainStoryboard_iPhone.storyboard */; }; - 1CA5EB931ED3ABFB00247A34 /* CoreMedia.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1CA5EB921ED3ABFB00247A34 /* CoreMedia.framework */; }; - 1CB47D491ED3AD1700DF7666 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1CB47D481ED3AD1700DF7666 /* AVFoundation.framework */; }; - 1CDB2D491ED3A9CD007929E9 /* CameraExampleAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CDB2D431ED3A9CD007929E9 /* CameraExampleAppDelegate.m */; }; - 1CDB2D4A1ED3A9CD007929E9 /* CameraExampleViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1CDB2D451ED3A9CD007929E9 /* CameraExampleViewController.mm */; }; - 1CDB2D4E1ED3AA35007929E9 /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 1CDB2D4D1ED3AA35007929E9 /* Info.plist */; }; - 2E12E3C82087CB8600FD9D4A /* graph.lite in Resources */ = {isa = PBXBuildFile; fileRef = 2E12E3C72087CB8600FD9D4A /* graph.lite */; }; - 2E92D8912088011F005F343A /* AppIcon.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2E92D8902088011F005F343A /* AppIcon.xcassets */; }; - 2ED6BE3A207C23E000D3BF6F /* Photos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2ED6BE39207C23E000D3BF6F /* Photos.framework */; }; - AB30E2C6AA6147C90F25FFD2 /* libPods-tflite_photos_example.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2FF33ED907C01C2D2EA78BBB /* libPods-tflite_photos_example.a */; }; - AC1F82661FBA3CBD0052BA77 /* labels.txt in Resources */ = {isa = PBXBuildFile; fileRef = AC1F82641FBA3CBD0052BA77 /* labels.txt */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 1C0D73481ECCC41B008C1DAB /* CoreImage.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreImage.framework; path = System/Library/Frameworks/CoreImage.framework; sourceTree = SDKROOT; }; - 1C0D734A1ECCC460008C1DAB /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; - 1C3C9DCA1ED3AB4200B8B5FA /* main.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = main.mm; sourceTree = ""; }; - 1C564C0D1ED3A92E00087306 /* tflite_photos_example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tflite_photos_example.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 1C99111B1ED3B0E600A6BFB9 /* MainStoryboard_iPhone.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = MainStoryboard_iPhone.storyboard; sourceTree = ""; }; - 1CA45FFE1ECCC356002FA6A4 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - 1CA5EB921ED3ABFB00247A34 /* CoreMedia.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = System/Library/Frameworks/CoreMedia.framework; sourceTree = SDKROOT; }; - 1CB47D481ED3AD1700DF7666 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; - 1CDB2D421ED3A9CD007929E9 /* CameraExampleAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CameraExampleAppDelegate.h; sourceTree = ""; }; - 1CDB2D431ED3A9CD007929E9 /* CameraExampleAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CameraExampleAppDelegate.m; sourceTree = ""; }; - 1CDB2D441ED3A9CD007929E9 /* CameraExampleViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CameraExampleViewController.h; sourceTree = ""; }; - 1CDB2D451ED3A9CD007929E9 /* CameraExampleViewController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = CameraExampleViewController.mm; sourceTree = ""; }; - 1CDB2D4D1ED3AA35007929E9 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 2E12E3C72087CB8600FD9D4A /* graph.lite */ = {isa = PBXFileReference; lastKnownFileType = file; path = graph.lite; sourceTree = ""; }; - 2E92D8902088011F005F343A /* AppIcon.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = AppIcon.xcassets; sourceTree = ""; }; - 2ED6BE39207C23E000D3BF6F /* Photos.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Photos.framework; path = System/Library/Frameworks/Photos.framework; sourceTree = SDKROOT; }; - 2FF33ED907C01C2D2EA78BBB /* libPods-tflite_photos_example.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-tflite_photos_example.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 3BA8BF92C84895BFE59D8236 /* libPods-tflite_camera_example.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-tflite_camera_example.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 3BC5BE4BBD09374D3E98F082 /* Pods-tflite_camera_example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-tflite_camera_example.debug.xcconfig"; path = "Pods/Target Support Files/Pods-tflite_camera_example/Pods-tflite_camera_example.debug.xcconfig"; sourceTree = ""; }; - 55ED318E8D29C8AFEF03DF1E /* Pods-tflite_camera_example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-tflite_camera_example.release.xcconfig"; path = "Pods/Target Support Files/Pods-tflite_camera_example/Pods-tflite_camera_example.release.xcconfig"; sourceTree = ""; }; - 7B75D9AAB5B7890D81174E26 /* Pods-tflite_photos_example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-tflite_photos_example.release.xcconfig"; path = "Pods/Target Support Files/Pods-tflite_photos_example/Pods-tflite_photos_example.release.xcconfig"; sourceTree = ""; }; - 92A36BF8A50AF5A52BB51EA5 /* Pods-tflite_photos_example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-tflite_photos_example.debug.xcconfig"; path = "Pods/Target Support Files/Pods-tflite_photos_example/Pods-tflite_photos_example.debug.xcconfig"; sourceTree = ""; }; - AC1F82641FBA3CBD0052BA77 /* labels.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = labels.txt; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 1C564C0A1ED3A92E00087306 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 2ED6BE3A207C23E000D3BF6F /* Photos.framework in Frameworks */, - 1CB47D491ED3AD1700DF7666 /* AVFoundation.framework in Frameworks */, - 1CA5EB931ED3ABFB00247A34 /* CoreMedia.framework in Frameworks */, - AB30E2C6AA6147C90F25FFD2 /* libPods-tflite_photos_example.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 24D7686C331131624F4454A0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 2ED6BE39207C23E000D3BF6F /* Photos.framework */, - 1CB47D481ED3AD1700DF7666 /* AVFoundation.framework */, - 1CA5EB921ED3ABFB00247A34 /* CoreMedia.framework */, - 1C0D734A1ECCC460008C1DAB /* CoreGraphics.framework */, - 1C0D73481ECCC41B008C1DAB /* CoreImage.framework */, - 1CA45FFE1ECCC356002FA6A4 /* UIKit.framework */, - 3BA8BF92C84895BFE59D8236 /* libPods-tflite_camera_example.a */, - 2FF33ED907C01C2D2EA78BBB /* libPods-tflite_photos_example.a */, - ); - name = Frameworks; - sourceTree = ""; - }; - 3E9FC355632FB928EA23BEED /* Pods */ = { - isa = PBXGroup; - children = ( - 3BC5BE4BBD09374D3E98F082 /* Pods-tflite_camera_example.debug.xcconfig */, - 55ED318E8D29C8AFEF03DF1E /* Pods-tflite_camera_example.release.xcconfig */, - 92A36BF8A50AF5A52BB51EA5 /* Pods-tflite_photos_example.debug.xcconfig */, - 7B75D9AAB5B7890D81174E26 /* Pods-tflite_photos_example.release.xcconfig */, - ); - name = Pods; - sourceTree = ""; - }; - 591157921CF4011C00C31E3A = { - isa = PBXGroup; - children = ( - 2E92D8902088011F005F343A /* AppIcon.xcassets */, - 1C99111B1ED3B0E600A6BFB9 /* MainStoryboard_iPhone.storyboard */, - 1C3C9DCA1ED3AB4200B8B5FA /* main.mm */, - 1CDB2D4D1ED3AA35007929E9 /* Info.plist */, - 1CDB2D421ED3A9CD007929E9 /* CameraExampleAppDelegate.h */, - 1CDB2D431ED3A9CD007929E9 /* CameraExampleAppDelegate.m */, - 1CDB2D441ED3A9CD007929E9 /* CameraExampleViewController.h */, - 1CDB2D451ED3A9CD007929E9 /* CameraExampleViewController.mm */, - 59A3CFF31CF4E68100C4259F /* data */, - 5911579C1CF4011C00C31E3A /* Products */, - 3E9FC355632FB928EA23BEED /* Pods */, - 24D7686C331131624F4454A0 /* Frameworks */, - ); - sourceTree = ""; - }; - 5911579C1CF4011C00C31E3A /* Products */ = { - isa = PBXGroup; - children = ( - 1C564C0D1ED3A92E00087306 /* tflite_photos_example.app */, - ); - name = Products; - sourceTree = ""; - }; - 59A3CFF31CF4E68100C4259F /* data */ = { - isa = PBXGroup; - children = ( - 2E12E3C72087CB8600FD9D4A /* graph.lite */, - AC1F82641FBA3CBD0052BA77 /* labels.txt */, - ); - path = data; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 1C564C0C1ED3A92E00087306 /* tflite_photos_example */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1C564C351ED3A92E00087306 /* Build configuration list for PBXNativeTarget "tflite_photos_example" */; - buildPhases = ( - 66DAEAAEE9EF6550C3A061E0 /* [CP] Check Pods Manifest.lock */, - 1C564C091ED3A92E00087306 /* Sources */, - 1C564C0A1ED3A92E00087306 /* Frameworks */, - 1C564C0B1ED3A92E00087306 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = tflite_photos_example; - productName = tflite_camera_example; - productReference = 1C564C0D1ED3A92E00087306 /* tflite_photos_example.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 591157931CF4011C00C31E3A /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 0830; - LastUpgradeCheck = 0830; - ORGANIZATIONNAME = Google; - TargetAttributes = { - 1C564C0C1ED3A92E00087306 = { - CreatedOnToolsVersion = 8.3.2; - DevelopmentTeam = EQHXZ8M8AV; - ProvisioningStyle = Manual; - }; - }; - }; - buildConfigurationList = 591157961CF4011C00C31E3A /* Build configuration list for PBXProject "tflite_photos_example" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 591157921CF4011C00C31E3A; - productRefGroup = 5911579C1CF4011C00C31E3A /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 1C564C0C1ED3A92E00087306 /* tflite_photos_example */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 1C564C0B1ED3A92E00087306 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 2E92D8912088011F005F343A /* AppIcon.xcassets in Resources */, - 2E12E3C82087CB8600FD9D4A /* graph.lite in Resources */, - 1C99111C1ED3B0E600A6BFB9 /* MainStoryboard_iPhone.storyboard in Resources */, - 1CDB2D4E1ED3AA35007929E9 /* Info.plist in Resources */, - AC1F82661FBA3CBD0052BA77 /* labels.txt in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 66DAEAAEE9EF6550C3A061E0 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-tflite_photos_example-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 1C564C091ED3A92E00087306 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 1CDB2D4A1ED3A9CD007929E9 /* CameraExampleViewController.mm in Sources */, - 1CDB2D491ED3A9CD007929E9 /* CameraExampleAppDelegate.m in Sources */, - 1C3C9DCC1ED3AB4200B8B5FA /* main.mm in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 1C564C361ED3A92E00087306 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 92A36BF8A50AF5A52BB51EA5 /* Pods-tflite_photos_example.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - DEVELOPMENT_TEAM = EQHXZ8M8AV; - INFOPLIST_FILE = Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 10.3; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "com.pf.tf-photos-example"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - }; - name = Debug; - }; - 1C564C371ED3A92E00087306 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7B75D9AAB5B7890D81174E26 /* Pods-tflite_photos_example.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - DEVELOPMENT_TEAM = EQHXZ8M8AV; - INFOPLIST_FILE = Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 10.3; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "com.pf.tf-photos-example"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 3.0; - }; - name = Release; - }; - 591157B01CF4011D00C31E3A /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - ../../../../../../, - ../../../downloads/flatbuffers/include/, - ../../../downloads/eigen/, - ../../../downloads/, - ); - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 591157B11CF4011D00C31E3A /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - ../../../../../../, - ../../../downloads/flatbuffers/include/, - ../../../downloads/eigen/, - ../../../downloads/, - ); - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 1C564C351ED3A92E00087306 /* Build configuration list for PBXNativeTarget "tflite_photos_example" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1C564C361ED3A92E00087306 /* Debug */, - 1C564C371ED3A92E00087306 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 591157961CF4011C00C31E3A /* Build configuration list for PBXProject "tflite_photos_example" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 591157B01CF4011D00C31E3A /* Debug */, - 591157B11CF4011D00C31E3A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 591157931CF4011C00C31E3A /* Project object */; -} diff --git a/ModelTraining/pokemon.csv b/pokemon.csv old mode 100755 new mode 100644 similarity index 100% rename from ModelTraining/pokemon.csv rename to pokemon.csv