UNPKG

@tensorflow-models/coco-ssd

Version:

Object detection model (coco-ssd) in TensorFlow.js

87 lines (76 loc) 2.93 kB
/** * @license * Copyright 2018 Google LLC. 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 * as fs from 'fs'; import * as Long from 'long'; import * as path from 'path'; import {tensorflow} from '../src/data/compiled_api'; function replacer(key: string, value: any) { if (value instanceof Long) { return (value as Long).toString(); } if (value instanceof Uint8Array) { return Array.from(value); } return value; } const PB_MODEL_FILENAME = 'tensorflowjs_model.pb'; const WEIGHT_FILENAME = 'weights_manifest.json'; const JSON_MODEL_FILENAME = 'model.json'; function convert(argv: string[]) { if (argv.length < 4) { console.log( 'Usage: ts-node pb2json.ts pb_model_directory json_model_directory'); return; } const sourcePath = process.argv[2]; console.log('reading pb model directory: ' + sourcePath); fs.readdir(sourcePath, (err, files) => { if (![PB_MODEL_FILENAME, WEIGHT_FILENAME].every( file => files.indexOf(file) !== -1)) { console.log( 'Please make sure the pb model directory contains ' + 'tensorflowjs_model.pb and weights_manifest.json files.'); return; } const modelFile = path.join(sourcePath, PB_MODEL_FILENAME); console.log('reading pb file: ' + modelFile); const buffer = fs.readFileSync(modelFile); const modelTopology = tensorflow.GraphDef.decode(new Uint8Array(buffer)); const manifestFile = path.join(sourcePath, WEIGHT_FILENAME); console.log('reading manifest file: ' + manifestFile); const weightsManifest = JSON.parse(fs.readFileSync(manifestFile, 'utf8')); const destPath = process.argv[3]; if (!fs.existsSync(destPath)) { fs.mkdirSync(destPath); } const destModelFile = path.join(destPath, JSON_MODEL_FILENAME); console.log('writing json file: ' + destModelFile); fs.writeFileSync( destModelFile, JSON.stringify({modelTopology, weightsManifest}, replacer)); files.forEach(file => { if (file !== PB_MODEL_FILENAME && file !== WEIGHT_FILENAME) { fs.copyFile( path.join(sourcePath, file), path.join(destPath, file), (err) => { if (err) throw err; console.log(`Weight file: ${file} copied.`); }); } }); }); } convert(process.argv);