Tensorflow.js y otros servicios API de inteligencia artificial

Tensorflow y los servicios API de Inteligencia Artificial

En esta nueva entrada vamos a crear algún ejemplo usando Tensorflow.js y algunos de los servicios de Inteligencia Artificial que nos ofrecen algunas de las empresas mas punteras y potentes actualmente.

Para realizar las pruebas usaremos los siguientes servicios y librerías:

  • Tensorflow.js: Librería para Javascript que se ejecuta en nuestro navegador.
  • IBM Watson: Usando una parte de sus servicios enfocados a la Inteligencia Artificial.

En principio solo estoy añadiendo las librerías y/o servicios que he usado para realizar alguna POC.

El resto de los servicios que me gustaría probar como son Microsoft Azure, Google Cloud y Amazon, de momento no los vamos a usar, ya que o bien no tienen versiones de prueba o requieren pasar por caja previamente, cosa que de momento no vamos hacer.

Bien, como existen mas servicios y librerías vamos a continuar nuestras pruebas con otros servicios y/o librerías.

Tensorflow.js

Vamos a comenzar por Tensorflow.js, ya que no requiere de ningún registro previo para utilizar la librería permitiendo realizar todas las pruebas que queramos sin ningún límite.

Como en el tutorial anterior sentamos las bases para usar Tensorflow.js, ahora iremos al grano mostrando el código con el resultado para realizar las comparativas.

En cada sección mostrare solo el código correspondiente usado para cada librería y/o servicio, y al final del articulo mostrare el código completo de la aplicación y su enlace al repositorio en Github.

const tensorflowObjectDetection = msn => {
  ...
  const img = document.getElementById('imgPreview');
  mobilenet.load().then(model => {
    ...
    model.classify(img, totalClasses).then(predictions => {
      ...
      predictions.forEach((data, index) => {
        ...
      });
      container.appendChild(ul);
    });
  });
};

Como había comentado, en este trozo de código solo quiero mostrar lo simple que resulta usar los modelos pre-entrenados de Tensorflow, ya que al final esta el enlace a todo el código.

IBM Watson

Con este servicio podemos hacer entre otras muchas cosas, la clasificación de una imagen como hicimos en el ejemplo anterior.

El servicio ofrecido por IBM nos permite usar todas las características en su plan LITE pero con ciertas limitaciones.

Para realizar nuestra prueba, esas limitaciones no nos influyen.

El siguiente ejemplo lo voy a realizar en NodeJS, para lo cual tendremos que instalar la siguiente librería:

npm install ibm-watson@^5.2.1

Una vez instalada la dependencia, procederemos a usarla en nuestro código.

A continuación el código necesario en la parte de NodeJS para que funcione nuestro servicio:

...
const visualRecognition = new VisualRecognitionV3({
  version: '2018-03-19',
  authenticator: new IamAuthenticator({
    apikey: '{apiKey}',
  }),
  url: '{url}',
});
...
const classifyParams = {
  imagesFile: 'filename.jpg',
  owners: ['IBM', 'me'],
  threshold: 0.1,
};
...
visualRecognition.classify(classifyParams)
.then(response => {
  const classifiedImages = response.result;
  res.status(200).json(classifiedImages);
})
.catch(err => {
  res.status(400).json({ message: err });
  console.log('error:', err);
});
...

Y ahora el código para la parte de Javascript:

const IBMWatsonObjectDetection = () => {
  ...
  // Donde hemos levantado el servidor de NodeJS
  const url = new URL('https://localhost:3000/ibm-watson');
  ...
  fetch(url).then(response => response.json()).then(responseJson => {
    ...
    const { images } = responseJson;
    ...
  });
};

Es algo más de código pero realmente estamos dividiendo el trabajo, ya que en Javascript únicamente estamos pintado el resultado que nos devuelve el script de NodeJS.

Ahora el encargado de todo el trabajo es NodeJS mediante la librería de IBM Watson y su servicio.

En principio estas son las dos opciones que conozco y que puedo probar sin ningún coste directo asociado.

El resto de los servicios los he intentado probar, pero no he podido ver el resultado ya que me solicitan amablemente que realice el abono.

No obstante la cantidad de código necesario para ejecutar cualquiera de los otros servicios no llega a poco mas de 20 lineas.

Como había comentado al principio del artículo, voy a mostrar un pequeño vídeo ya que el servicio de IBM Watson tiene límites y una vez superados deja de funcionar.

Para finalizar el código lo puedes descargar desde su repositorio en Github.