diff --git a/demos/src/index.js b/demos/src/index.js
index 449bf1b..a10b16b 100644
--- a/demos/src/index.js
+++ b/demos/src/index.js
@@ -1,4 +1,4 @@
-/* global Vue, VueMdl */
+/* global Vue, VueMdl, WebGLRenderingContext */
import './index.css'
@@ -18,8 +18,23 @@ Vue.use(VueMdl.default)
const app = new Vue({
el: '#app',
- data: {
- currentView: 'home'
+
+ data: function () {
+ return {
+ currentView: 'home',
+ hasWebgl: true
+ }
+ },
+
+ created: function () {
+ const canvas = document.createElement('canvas')
+ const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl')
+ // Report the result.
+ if (gl && gl instanceof WebGLRenderingContext) {
+ this.hasWebgl = true
+ } else {
+ this.hasWebgl = false
+ }
}
})
diff --git a/demos/src/mnist-cnn.js b/demos/src/mnist-cnn.js
index 486ba7c..f283e34 100644
--- a/demos/src/mnist-cnn.js
+++ b/demos/src/mnist-cnn.js
@@ -5,23 +5,20 @@ import debounce from 'lodash/debounce'
import range from 'lodash/range'
import * as utils from './utils'
-const MODEL_CONFIG = {
- filepaths: {
- model: '/demos/data/mnist_cnn/mnist_cnn.json',
- weights: '/demos/data/mnist_cnn/mnist_cnn_weights.buf',
- metadata: '/demos/data/mnist_cnn/mnist_cnn_metadata.json'
- },
- gpu: false
+const MODEL_FILEPATHS_DEV = {
+ model: '/demos/data/mnist_cnn/mnist_cnn.json',
+ weights: '/demos/data/mnist_cnn/mnist_cnn_weights.buf',
+ metadata: '/demos/data/mnist_cnn/mnist_cnn_metadata.json'
}
-if (process.env.NODE_ENV === 'production') {
- Object.assign(MODEL_CONFIG, {
- filepaths: {
- model: 'demos/data/mnist_cnn/mnist_cnn.json',
- weights: 'https://transcranial.github.io/keras-js-demos-data/mnist_cnn/mnist_cnn_weights.buf',
- metadata: 'demos/data/mnist_cnn/mnist_cnn_metadata.json'
- }
- })
+const MODEL_FILEPATHS_PROD = {
+ model: 'demos/data/mnist_cnn/mnist_cnn.json',
+ weights: 'https://transcranial.github.io/keras-js-demos-data/mnist_cnn/mnist_cnn_weights.buf',
+ metadata: 'demos/data/mnist_cnn/mnist_cnn_metadata.json'
+}
+
+const MODEL_CONFIG = {
+ filepaths: (process.env.NODE_ENV === 'production') ? MODEL_FILEPATHS_PROD : MODEL_FILEPATHS_DEV
}
const LAYER_DISPLAY_CONFIG = {
@@ -81,11 +78,13 @@ const LAYER_DISPLAY_CONFIG = {
*
*/
export const MnistCnn = Vue.extend({
+ props: ['hasWebgl'],
+
template: require('raw!./mnist-cnn.template.html'),
data: function () {
return {
- model: new KerasJS.Model(MODEL_CONFIG),
+ model: new KerasJS.Model(Object.assign({ gpu: this.hasWebgl }, MODEL_CONFIG)),
modelLoading: true,
input: new Float32Array(784),
output: new Float32Array(10),
@@ -94,7 +93,7 @@ export const MnistCnn = Vue.extend({
layerDisplayConfig: LAYER_DISPLAY_CONFIG,
drawing: false,
strokes: [],
- useGpu: MODEL_CONFIG.gpu
+ useGpu: this.hasWebgl
}
},
diff --git a/demos/src/mnist-cnn.template.html b/demos/src/mnist-cnn.template.html
index 2d4b1e7..c44c38b 100644
--- a/demos/src/mnist-cnn.template.html
+++ b/demos/src/mnist-cnn.template.html
@@ -30,7 +30,11 @@
- Use GPU
+ Use GPU
diff --git a/demos/src/mnist-vae.js b/demos/src/mnist-vae.js
index 85ed37a..d6999db 100644
--- a/demos/src/mnist-vae.js
+++ b/demos/src/mnist-vae.js
@@ -3,23 +3,20 @@ import './mnist-vae.css'
import * as utils from './utils'
-const MODEL_CONFIG = {
- filepaths: {
- model: '/demos/data/mnist_vae/mnist_vae.json',
- weights: '/demos/data/mnist_vae/mnist_vae_weights.buf',
- metadata: '/demos/data/mnist_vae/mnist_vae_metadata.json'
- },
- gpu: false
+const MODEL_FILEPATHS_DEV = {
+ model: '/demos/data/mnist_vae/mnist_vae.json',
+ weights: '/demos/data/mnist_vae/mnist_vae_weights.buf',
+ metadata: '/demos/data/mnist_vae/mnist_vae_metadata.json'
}
-if (process.env.NODE_ENV === 'production') {
- Object.assign(MODEL_CONFIG, {
- filepaths: {
- model: 'demos/data/mnist_vae/mnist_vae.json',
- weights: 'https://transcranial.github.io/keras-js-demos-data/mnist_vae/mnist_vae_weights.buf',
- metadata: 'demos/data/mnist_vae/mnist_vae_metadata.json'
- }
- })
+const MODEL_FILEPATHS_PROD = {
+ model: 'demos/data/mnist_vae/mnist_vae.json',
+ weights: 'https://transcranial.github.io/keras-js-demos-data/mnist_vae/mnist_vae_weights.buf',
+ metadata: 'demos/data/mnist_vae/mnist_vae_metadata.json'
+}
+
+const MODEL_CONFIG = {
+ filepaths: (process.env.NODE_ENV === 'production') ? MODEL_FILEPATHS_PROD : MODEL_FILEPATHS_DEV
}
const LAYER_DISPLAY_CONFIG = {
@@ -59,11 +56,13 @@ const LAYER_DISPLAY_CONFIG = {
*
*/
export const MnistVae = Vue.extend({
+ props: ['hasWebgl'],
+
template: require('raw!./mnist-vae.template.html'),
data: function () {
return {
- model: new KerasJS.Model(MODEL_CONFIG),
+ model: new KerasJS.Model(Object.assign({ gpu: this.hasWebgl }, MODEL_CONFIG)),
modelLoading: true,
output: new Float32Array(27 * 27),
crosshairsActivated: false,
@@ -71,7 +70,7 @@ export const MnistVae = Vue.extend({
position: [60, 20],
layerResultImages: [],
layerDisplayConfig: LAYER_DISPLAY_CONFIG,
- useGpu: MODEL_CONFIG.gpu
+ useGpu: this.hasWebgl
}
},
diff --git a/demos/src/mnist-vae.template.html b/demos/src/mnist-vae.template.html
index efcd7e7..0341f21 100644
--- a/demos/src/mnist-vae.template.html
+++ b/demos/src/mnist-vae.template.html
@@ -33,7 +33,11 @@
-
Use GPU
+
Use GPU
x: {{ inputCoordinates[0] < 0 ? inputCoordinates[0].toFixed(2) : inputCoordinates[0].toFixed(3) }}
y: {{ inputCoordinates[1] < 0 ? inputCoordinates[1].toFixed(2) : inputCoordinates[1].toFixed(3) }}
diff --git a/demos/src/resnet50.js b/demos/src/resnet50.js
index 92d56d7..e11da06 100644
--- a/demos/src/resnet50.js
+++ b/demos/src/resnet50.js
@@ -5,25 +5,27 @@ import ndarray from 'ndarray'
import ops from 'ndarray-ops'
import * as utils from './utils'
-const MODEL_CONFIG = {
- filepaths: {
- model: '/demos/data/resnet50/resnet50.json',
- weights: '/demos/data/resnet50/resnet50_weights.buf',
- metadata: '/demos/data/resnet50/resnet50_metadata.json'
- },
- gpu: false
+const MODEL_FILEPATHS_DEV = {
+ model: '/demos/data/resnet50/resnet50.json',
+ weights: '/demos/data/resnet50/resnet50_weights.buf',
+ metadata: '/demos/data/resnet50/resnet50_metadata.json'
}
-if (process.env.NODE_ENV === 'production') {
- Object.assign(MODEL_CONFIG, {
- filepaths: {
- model: 'demos/data/resnet50/resnet50.json',
- weights: 'https://transcranial.github.io/keras-js-demos-data/resnet50/resnet50_weights.buf',
- metadata: 'demos/data/resnet50/resnet50_metadata.json'
- }
- })
+const MODEL_FILEPATHS_PROD = {
+ model: 'demos/data/resnet50/resnet50.json',
+ weights: 'https://transcranial.github.io/keras-js-demos-data/resnet50/resnet50_weights.buf',
+ metadata: 'demos/data/resnet50/resnet50_metadata.json'
}
+const MODEL_CONFIG = {
+ filepaths: (process.env.NODE_ENV === 'production') ? MODEL_FILEPATHS_PROD : MODEL_FILEPATHS_DEV
+}
+
+const IMAGE_URL_LIST = [
+ { name: 'cat', value: 'http://i.imgur.com/CzXTtJV.jpg' },
+ { name: 'dog', value: 'URL2' }
+]
+
const LAYER_DISPLAY_CONFIG = {
}
@@ -33,24 +35,23 @@ const LAYER_DISPLAY_CONFIG = {
*
*/
export const ResNet50 = Vue.extend({
+ props: ['hasWebgl'],
+
template: require('raw!./resnet50.template.html'),
data: function () {
return {
- model: new KerasJS.Model(MODEL_CONFIG),
+ model: new KerasJS.Model(Object.assign({ gpu: this.hasWebgl }, MODEL_CONFIG)),
modelLoading: true,
imageURLInput: null,
imageURLSelect: null,
- imageURLSelectList: [
- { name: 'cat', value: 'http://i.imgur.com/CzXTtJV.jpg' },
- { name: 'dog', value: 'URL2' }
- ],
+ imageURLSelectList: IMAGE_URL_LIST,
imageLoading: false,
imageLoadingError: false,
output: new Float32Array(1000),
layerResultImages: [],
layerDisplayConfig: LAYER_DISPLAY_CONFIG,
- useGpu: MODEL_CONFIG.gpu
+ useGpu: this.hasWebgl
}
},
diff --git a/demos/src/resnet50.template.html b/demos/src/resnet50.template.html
index 48ae353..7b112d2 100644
--- a/demos/src/resnet50.template.html
+++ b/demos/src/resnet50.template.html
@@ -37,7 +37,11 @@
- Use GPU
+ Use GPU
diff --git a/index.html b/index.html
index 699606b..a650379 100644
--- a/index.html
+++ b/index.html
@@ -19,7 +19,7 @@
-
+