'use strict'; const Service = require('egg').Service; const tf = require('@tensorflow/tfjs-node'); // const jpeg = require('jpeg-js'); const { Image } = require('image-js'); const contentBoundary = require('../util/contentBoundary'); const convert = async img => { // const image = await jpeg.decode(img, true); const image = await Image.load(img.filepath); // console.log('jpeg.decode:', image); const numChannels = 3; const numPixels = image.width * image.height; const values = new Int32Array(numPixels * numChannels); for (let i = 0; i < numPixels; i++) { for (let c = 0; c < numChannels; ++c) { values[i * numChannels + c] = image.data[i * 4 + c]; } } return tf.tensor3d(values, [ image.height, image.width, numChannels ], 'int32'); }; class ContentCheckService extends Service { async contentCheck(img) { try { const image = await convert(img); const predictions = await this.app.nsfwModel.classify(image); console.log('Predictions: ', predictions); const isSafeContent = contentBoundary(predictions); return isSafeContent; } catch (err) { throw new Error(err); } } } module.exports = ContentCheckService;