Skip to content

Commit

Permalink
chore: Host ML model with the rest of the site
Browse files Browse the repository at this point in the history
Contributes to: #351
Contributes to: #350

Signed-off-by: Dale Lane <[email protected]>
  • Loading branch information
dalelane committed Nov 15, 2020
1 parent 172f4d8 commit c8353b4
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 13 deletions.
29 changes: 20 additions & 9 deletions Gruntfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,25 @@ module.exports = function(grunt) {
}


// ----

const mlModelFilesToDownload = {
'./speech-commands/metadata.json' : 'https://storage.googleapis.com/tfjs-models/tfjs/speech-commands/v0.4/browser_fft/18w/metadata.json',
'./speech-commands/model.json' : 'https://storage.googleapis.com/tfjs-models/tfjs/speech-commands/v0.4/browser_fft/18w/model.json',
'./speech-commands/group1-shard1of2' : 'https://storage.googleapis.com/tfjs-models/tfjs/speech-commands/v0.4/browser_fft/18w/group1-shard1of2',
'./speech-commands/group1-shard2of2' : 'https://storage.googleapis.com/tfjs-models/tfjs/speech-commands/v0.4/browser_fft/18w/group1-shard2of2',
'./posenet/model-multiplier75-stride16.json' : 'https://storage.googleapis.com/tfjs-models/savedmodel/posenet/mobilenet/float/075/model-stride16.json',
'./posenet/group1-shard1of2.bin' : 'https://storage.googleapis.com/tfjs-models/savedmodel/posenet/mobilenet/float/075/group1-shard1of2.bin',
'./posenet/group1-shard2of2.bin' : 'https://storage.googleapis.com/tfjs-models/savedmodel/posenet/mobilenet/float/075/group1-shard2of2.bin',
'./image-recognition/model.json' : 'https://storage.googleapis.com/tfjs-models/tfjs/mobilenet_v1_0.25_224/model.json',
};
for (var x = 1; x <= 55; x++) {
const filename = 'group' + x + '-shard1of1';
mlModelFilesToDownload['./image-recognition/' + filename] = 'https://storage.googleapis.com/tfjs-models/tfjs/mobilenet_v1_0.25_224/' + filename;
}

// ----

grunt.initConfig({
clean : {
ts : ['./dist'],
Expand Down Expand Up @@ -209,15 +228,7 @@ module.exports = function(grunt) {
dest : './web/static/bower_components/tensorflow-models',
overwriteEverytime : false
},
files: {
'./speech-commands/metadata.json' : 'https://storage.googleapis.com/tfjs-models/tfjs/speech-commands/v0.4/browser_fft/18w/metadata.json',
'./speech-commands/model.json' : 'https://storage.googleapis.com/tfjs-models/tfjs/speech-commands/v0.4/browser_fft/18w/model.json',
'./speech-commands/group1-shard1of2' : 'https://storage.googleapis.com/tfjs-models/tfjs/speech-commands/v0.4/browser_fft/18w/group1-shard1of2',
'./speech-commands/group1-shard2of2' : 'https://storage.googleapis.com/tfjs-models/tfjs/speech-commands/v0.4/browser_fft/18w/group1-shard2of2',
'./posenet/model-multiplier75-stride16.json' : 'https://storage.googleapis.com/tfjs-models/savedmodel/posenet/mobilenet/float/075/model-stride16.json',
'./posenet/group1-shard1of2.bin' : 'https://storage.googleapis.com/tfjs-models/savedmodel/posenet/mobilenet/float/075/group1-shard1of2.bin',
'./posenet/group1-shard2of2.bin' : 'https://storage.googleapis.com/tfjs-models/savedmodel/posenet/mobilenet/float/075/group1-shard2of2.bin',
}
files: mlModelFilesToDownload
},
concat : {
jsapp : {
Expand Down
17 changes: 16 additions & 1 deletion gulpfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -98,11 +98,26 @@ gulp.task('tensorflowfacelandmarks', function() {
'node_modules/@tensorflow-models/face-landmarks-detection/dist/face-landmarks-detection.min.js'
]).pipe(gulp.dest('web/static/bower_components/tensorflow-models/face-landmarks-detection'));
});
gulp.task('imagerecognitionmodel', function() {
const files = [
{ url : 'https://storage.googleapis.com/tfjs-models/tfjs/mobilenet_v1_0.25_224/model.json', file : 'model.json' }
];
for (var x = 1; x <= 55; x++) {
const filename = 'group' + x + '-shard1of1';
files.push({
url : 'https://storage.googleapis.com/tfjs-models/tfjs/mobilenet_v1_0.25_224/' + filename,
file : filename
});
}
return download(files)
.pipe(gulp.dest('web/static/bower_components/tensorflow-models/image-recognition'));
});
gulp.task('tfjs',
gulp.parallel('tensorflowjs',
'tensorflowspeechcommands', 'speechcommandsmodel',
'tensorflowposenet', 'posenetmodel',
'tensorflowfacelandmarks'));
'tensorflowfacelandmarks',
'imagerecognitionmodel'));

gulp.task('scratchblocks', function() {
return gulp.src('public/third-party/scratchblocks-v3.1-min.js').pipe(gulp.dest('web/static'));
Expand Down
10 changes: 7 additions & 3 deletions public/components/imagetraining/imagetraining.service.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@
.service('imageTrainingService', imageTrainingService);

imageTrainingService.$inject = [
'$q',
'$q', '$location',
'trainingService', 'modelService',
'utilService', 'loggerService'
];

function imageTrainingService($q, trainingService, modelService, utilService, loggerService) {
function imageTrainingService($q, $location, trainingService, modelService, utilService, loggerService) {

var transferModel;
var baseModel;
Expand Down Expand Up @@ -44,7 +44,11 @@

function prepareMobilenet() {
loggerService.debug('[ml4kimages] preparing mobilenet for transfer learning');
var BASE_MODEL = 'https://storage.googleapis.com/tfjs-models/tfjs/mobilenet_v1_0.25_224/model.json';
var siteUrl = $location.protocol() + '://' + $location.host();
if ($location.port()) {
siteUrl = siteUrl + ':' + $location.port();
}
var BASE_MODEL = siteUrl + '/static/bower_components/tensorflow-models/image-recognition/model.json';
return tf.loadLayersModel(BASE_MODEL)
.then(function (pretrainedModel) {
var activationLayer = pretrainedModel.getLayer('conv_pw_13_relu');
Expand Down

0 comments on commit c8353b4

Please sign in to comment.