12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- import { Injectable, Logger } from '@nestjs/common';
- import * as mobilenet from '@tensorflow-models/mobilenet';
- import * as cocoSsd from '@tensorflow-models/coco-ssd';
- import * as tf from '@tensorflow/tfjs-node';
- import * as fs from 'fs';
- @Injectable()
- export class ImageClassifierService {
- private readonly MOBILENET_VERSION = 2;
- private readonly MOBILENET_ALPHA = 1.0;
- private mobileNetModel: mobilenet.MobileNet;
- constructor() {
- Logger.log(
- `Running Node TensorFlow Version : ${tf.version['tfjs']}`,
- 'ImageClassifier',
- );
- mobilenet
- .load({
- version: this.MOBILENET_VERSION,
- alpha: this.MOBILENET_ALPHA,
- })
- .then((mobilenetModel) => (this.mobileNetModel = mobilenetModel));
- }
- async tagImage(thumbnailPath: string) {
- try {
- const isExist = fs.existsSync(thumbnailPath);
- if (isExist) {
- const tags = [];
- const image = fs.readFileSync(thumbnailPath);
- const decodedImage = tf.node.decodeImage(image, 3) as tf.Tensor3D;
- const predictions = await this.mobileNetModel.classify(decodedImage);
- for (const prediction of predictions) {
- if (prediction.probability >= 0.1) {
- tags.push(...prediction.className.split(',').map((e) => e.trim()));
- }
- }
- tf.dispose(decodedImage);
- return tags;
- }
- } catch (e) {
- console.log('Error reading file ', e);
- }
- }
- }
|