Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Hertz-Lab
Research
Intelligent Museum
ofxTensorFlow2
Commits
30a79d1d
Commit
30a79d1d
authored
Sep 16, 2021
by
pbethge
Browse files
add frozen graph example
parent
7a3c3b40
Changes
10
Hide whitespace changes
Inline
Side-by-side
example_basics_frozen_graph/Makefile
0 → 100644
View file @
30a79d1d
# Attempt to load a config.make file.
# If none is found, project defaults in config.project.make will be used.
ifneq
($(wildcard config.make),)
include
config.make
endif
# make sure the the OF_ROOT location is defined
ifndef
OF_ROOT
OF_ROOT
=
$(
realpath
../../..
)
endif
# call the project makefile!
include
$(OF_ROOT)/libs/openFrameworksCompiled/project/makefileCommon/compile.project.mk
# ofxTensorFlow2
include
$(OF_ROOT)/addons/ofxTensorFlow2/addon_targets.mk
example_basics_frozen_graph/README.md
0 → 100644
View file @
30a79d1d
# Basic example
This is an example for openFrameworks which demonstrates how to load and evaluate a _Frozen Graph_ created using TensorFlow.
### TensorFlow2
### openFrameworks
\ No newline at end of file
example_basics_frozen_graph/addons.make
0 → 100644
View file @
30a79d1d
ofxTensorFlow2
example_basics_frozen_graph/bin/data/.gitkeep
0 → 100644
View file @
30a79d1d
example_basics_frozen_graph/config.make
0 → 100644
View file @
30a79d1d
################################################################################
# CONFIGURE PROJECT MAKEFILE (optional)
# This file is where we make project specific configurations.
################################################################################
################################################################################
# OF ROOT
# The location of your root openFrameworks installation
# (default) OF_ROOT = ../../..
################################################################################
# OF_ROOT = ../../..
################################################################################
# PROJECT ROOT
# The location of the project - a starting place for searching for files
# (default) PROJECT_ROOT = . (this directory)
#
################################################################################
# PROJECT_ROOT = .
################################################################################
# PROJECT SPECIFIC CHECKS
# This is a project defined section to create internal makefile flags to
# conditionally enable or disable the addition of various features within
# this makefile. For instance, if you want to make changes based on whether
# GTK is installed, one might test that here and create a variable to check.
################################################################################
# None
################################################################################
# PROJECT EXTERNAL SOURCE PATHS
# These are fully qualified paths that are not within the PROJECT_ROOT folder.
# Like source folders in the PROJECT_ROOT, these paths are subject to
# exlclusion via the PROJECT_EXLCUSIONS list.
#
# (default) PROJECT_EXTERNAL_SOURCE_PATHS = (blank)
#
# Note: Leave a leading space when adding list items with the += operator
################################################################################
# PROJECT_EXTERNAL_SOURCE_PATHS =
################################################################################
# PROJECT EXCLUSIONS
# These makefiles assume that all folders in your current project directory
# and any listed in the PROJECT_EXTERNAL_SOURCH_PATHS are are valid locations
# to look for source code. The any folders or files that match any of the
# items in the PROJECT_EXCLUSIONS list below will be ignored.
#
# Each item in the PROJECT_EXCLUSIONS list will be treated as a complete
# string unless teh user adds a wildcard (%) operator to match subdirectories.
# GNU make only allows one wildcard for matching. The second wildcard (%) is
# treated literally.
#
# (default) PROJECT_EXCLUSIONS = (blank)
#
# Will automatically exclude the following:
#
# $(PROJECT_ROOT)/bin%
# $(PROJECT_ROOT)/obj%
# $(PROJECT_ROOT)/%.xcodeproj
#
# Note: Leave a leading space when adding list items with the += operator
################################################################################
# PROJECT_EXCLUSIONS =
################################################################################
# PROJECT LINKER FLAGS
# These flags will be sent to the linker when compiling the executable.
#
# (default) PROJECT_LDFLAGS = -Wl,-rpath=./libs
#
# Note: Leave a leading space when adding list items with the += operator
#
# Currently, shared libraries that are needed are copied to the
# $(PROJECT_ROOT)/bin/libs directory. The following LDFLAGS tell the linker to
# add a runtime path to search for those shared libraries, since they aren't
# incorporated directly into the final executable application binary.
################################################################################
# PROJECT_LDFLAGS=-Wl,-rpath=./libs
################################################################################
# PROJECT DEFINES
# Create a space-delimited list of DEFINES. The list will be converted into
# CFLAGS with the "-D" flag later in the makefile.
#
# (default) PROJECT_DEFINES = (blank)
#
# Note: Leave a leading space when adding list items with the += operator
################################################################################
# PROJECT_DEFINES =
################################################################################
# PROJECT CFLAGS
# This is a list of fully qualified CFLAGS required when compiling for this
# project. These CFLAGS will be used IN ADDITION TO the PLATFORM_CFLAGS
# defined in your platform specific core configuration files. These flags are
# presented to the compiler BEFORE the PROJECT_OPTIMIZATION_CFLAGS below.
#
# (default) PROJECT_CFLAGS = (blank)
#
# Note: Before adding PROJECT_CFLAGS, note that the PLATFORM_CFLAGS defined in
# your platform specific configuration file will be applied by default and
# further flags here may not be needed.
#
# Note: Leave a leading space when adding list items with the += operator
################################################################################
# PROJECT_CFLAGS =
################################################################################
# PROJECT OPTIMIZATION CFLAGS
# These are lists of CFLAGS that are target-specific. While any flags could
# be conditionally added, they are usually limited to optimization flags.
# These flags are added BEFORE the PROJECT_CFLAGS.
#
# PROJECT_OPTIMIZATION_CFLAGS_RELEASE flags are only applied to RELEASE targets.
#
# (default) PROJECT_OPTIMIZATION_CFLAGS_RELEASE = (blank)
#
# PROJECT_OPTIMIZATION_CFLAGS_DEBUG flags are only applied to DEBUG targets.
#
# (default) PROJECT_OPTIMIZATION_CFLAGS_DEBUG = (blank)
#
# Note: Before adding PROJECT_OPTIMIZATION_CFLAGS, please note that the
# PLATFORM_OPTIMIZATION_CFLAGS defined in your platform specific configuration
# file will be applied by default and further optimization flags here may not
# be needed.
#
# Note: Leave a leading space when adding list items with the += operator
################################################################################
# PROJECT_OPTIMIZATION_CFLAGS_RELEASE =
# PROJECT_OPTIMIZATION_CFLAGS_DEBUG =
################################################################################
# PROJECT COMPILERS
# Custom compilers can be set for CC and CXX
# (default) PROJECT_CXX = (blank)
# (default) PROJECT_CC = (blank)
# Note: Leave a leading space when adding list items with the += operator
################################################################################
# PROJECT_CXX =
# PROJECT_CC =
example_basics_frozen_graph/python/main.py
0 → 100644
View file @
30a79d1d
import
tensorflow
as
tf
from
tensorflow.python.framework.convert_to_constants
import
(
convert_variables_to_constants_v2
,
)
input
=
tf
.
keras
.
Input
(
shape
=
(
5
,))
output
=
tf
.
keras
.
layers
.
Dense
(
5
,
activation
=
tf
.
nn
.
relu
)(
input
)
output
=
tf
.
keras
.
layers
.
Dense
(
1
,
activation
=
tf
.
nn
.
sigmoid
)(
output
)
model
=
tf
.
keras
.
Model
(
inputs
=
input
,
outputs
=
output
)
# Create frozen graph
x
=
tf
.
TensorSpec
(
model
.
input_shape
,
tf
.
float32
,
name
=
"x"
)
concrete_function
=
tf
.
function
(
lambda
x
:
model
(
x
)).
get_concrete_function
(
x
)
frozen_model
=
convert_variables_to_constants_v2
(
concrete_function
)
# Check input/output node name
print
(
f
"
{
frozen_model
.
inputs
=
}
"
)
print
(
f
"
{
frozen_model
.
outputs
=
}
"
)
# Save the graph as protobuf format
directory
=
"."
tf
.
io
.
write_graph
(
frozen_model
.
graph
,
directory
,
"model.pb"
,
as_text
=
False
)
\ No newline at end of file
example_basics_frozen_graph/python/requirements.txt
0 → 100644
View file @
30a79d1d
tensorflow==1.14
\ No newline at end of file
example_basics_frozen_graph/src/main.cpp
0 → 100644
View file @
30a79d1d
#include
"ofMain.h"
#include
"ofApp.h"
//========================================================================
int
main
()
{
ofSetupOpenGL
(
1024
,
768
,
OF_WINDOW
);
// <-------- setup the GL context
// this kicks off the running of my app
// can be OF_WINDOW or OF_FULLSCREEN
// pass in width and height too:
ofRunApp
(
new
ofApp
());
}
example_basics_frozen_graph/src/ofApp.cpp
0 → 100644
View file @
30a79d1d
/*
* ofxTensorFlow2
*
* Copyright (c) 2021 ZKM | Hertz-Lab
* Paul Bethge <bethge@zkm.de>
* Dan Wilcox <dan.wilcox@zkm.de>
*
* BSD Simplified License.
* For information on usage and redistribution, and for a DISCLAIMER OF ALL
* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
*
* This code has been developed at ZKM | Hertz-Lab as part of „The Intelligent
* Museum“ generously funded by the German Federal Cultural Foundation.
*/
#include
"ofApp.h"
//--------------------------------------------------------------
void
ofApp
::
setup
()
{
ofSetFrameRate
(
60
);
ofSetVerticalSync
(
true
);
ofSetWindowTitle
(
"example_basics_frozen_graph"
);
// create an input tensor of an arbitrary shape and fill it
auto
input
=
cppflow
::
fill
({
10
,
5
},
1.0
f
);
// set model type and i/o names
model
.
setModelType
(
cppflow
::
model
::
TYPE
::
FROZEN_GRAPH
);
model
.
setup
({{
"x:0"
}},
{{
"Identity:0"
}});
// load the model, bail out on error
if
(
!
model
.
load
(
"model.pb"
))
{
std
::
exit
(
EXIT_FAILURE
);
}
// inference
auto
output
=
model
.
runModel
(
input
);
// use the ofxTF2 namespace for some useful functions like conversion
ofxTF2
::
tensorToVector
(
output
,
outputVector
);
ofxTF2
::
tensorToVector
(
input
,
inputVector
);
// print summary to console
ofLog
()
<<
"Flattened Input:"
;
ofLog
()
<<
ofxTF2
::
vectorToString
(
inputVector
);
ofLog
()
<<
"Flattened Output:"
;
ofLog
()
<<
ofxTF2
::
vectorToString
(
outputVector
);
// load a font for displaying strings
font
.
load
(
OF_TTF_SANS
,
14
);
}
//--------------------------------------------------------------
void
ofApp
::
update
()
{
}
//--------------------------------------------------------------
void
ofApp
::
draw
()
{
// draw summary to screen
font
.
drawString
(
"Flattened Input:"
,
20
,
20
);
font
.
drawString
(
ofxTF2
::
vectorToString
(
inputVector
),
40
,
40
);
font
.
drawString
(
"Flattened Output:"
,
20
,
60
);
font
.
drawString
(
ofxTF2
::
vectorToString
(
outputVector
),
40
,
80
);
}
//--------------------------------------------------------------
void
ofApp
::
keyPressed
(
int
key
)
{
}
//--------------------------------------------------------------
void
ofApp
::
keyReleased
(
int
key
)
{
}
//--------------------------------------------------------------
void
ofApp
::
mouseMoved
(
int
x
,
int
y
)
{
}
//--------------------------------------------------------------
void
ofApp
::
mouseDragged
(
int
x
,
int
y
,
int
button
)
{
}
//--------------------------------------------------------------
void
ofApp
::
mousePressed
(
int
x
,
int
y
,
int
button
)
{
}
//--------------------------------------------------------------
void
ofApp
::
mouseReleased
(
int
x
,
int
y
,
int
button
)
{
}
//--------------------------------------------------------------
void
ofApp
::
mouseEntered
(
int
x
,
int
y
)
{
}
//--------------------------------------------------------------
void
ofApp
::
mouseExited
(
int
x
,
int
y
)
{
}
//--------------------------------------------------------------
void
ofApp
::
windowResized
(
int
w
,
int
h
)
{
}
//--------------------------------------------------------------
void
ofApp
::
gotMessage
(
ofMessage
msg
)
{
}
//--------------------------------------------------------------
void
ofApp
::
dragEvent
(
ofDragInfo
dragInfo
)
{
}
example_basics_frozen_graph/src/ofApp.h
0 → 100644
View file @
30a79d1d
/*
* ofxTensorFlow2
*
* Copyright (c) 2021 ZKM | Hertz-Lab
* Paul Bethge <bethge@zkm.de>
* Dan Wilcox <dan.wilcox@zkm.de>
*
* BSD Simplified License.
* For information on usage and redistribution, and for a DISCLAIMER OF ALL
* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
*
* This code has been developed at ZKM | Hertz-Lab as part of „The Intelligent
* Museum“ generously funded by the German Federal Cultural Foundation.
*/
#pragma once
#include
"ofMain.h"
#include
"ofxTensorFlow2.h"
class
ofApp
:
public
ofBaseApp
{
public:
void
setup
();
void
update
();
void
draw
();
void
keyPressed
(
int
key
);
void
keyReleased
(
int
key
);
void
mouseMoved
(
int
x
,
int
y
);
void
mouseDragged
(
int
x
,
int
y
,
int
button
);
void
mousePressed
(
int
x
,
int
y
,
int
button
);
void
mouseReleased
(
int
x
,
int
y
,
int
button
);
void
mouseEntered
(
int
x
,
int
y
);
void
mouseExited
(
int
x
,
int
y
);
void
windowResized
(
int
w
,
int
h
);
void
dragEvent
(
ofDragInfo
dragInfo
);
void
gotMessage
(
ofMessage
msg
);
ofxTF2
::
Model
model
;
std
::
vector
<
float
>
inputVector
;
std
::
vector
<
float
>
outputVector
;
ofTrueTypeFont
font
;
};
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment