npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

node-omron-hvc-p2

v0.1.2

Published

The node-omron-hvc-p2 is a Node.js module which allows you to communicate with the image sensing device "OMRON Human Vision Components (HVC-P2)" through a USB serial port.

Downloads

6

Readme

node-omron-hvc-p2

[Japanese (日本語)]

The node-omron-hvc-p2 is a Node.js module which allows you to communicate with the image sensing device "OMRON Human Vision Components (HVC-P2)" through a USB serial port.

OMRON Human Vision Components (HVC-P2)

The HVC-P2 supports:

  • Human Body Detection
  • Hand Detection
  • Face Detection
  • Face Direction Estimation
  • Age Estimation
  • Gender Estimation
  • Gaze Estimation
  • Blink Estimation
  • Expression Estimation
  • Face Recognition

The node-omron-hvc-p2 supports all functions supported by the HVC-P2. Besides, it allows you to save a camera view image as an image file such as GIF, JPEG, or PNG.

Dependencies

  • Node.js 6 +
  • serialport 5.0.0 +
    • If the serialport module has been already installed in you host computer, check the version. The node-omron-hvc-p2 now does not support older versions of the serialport module than 5.0.0 .
  • node-gd (Optional, for Linux, Mac)
  • lwip (Optional, for Windows)

Installation

$ cd ~
$ npm install serialport
$ npm install node-omron-hvc-p2

The node-omron-hvc-p2 requires an image processing module in order to create images captured by the HVC-P2. For Linux and Mac, the node-gd is required. For Windows, the lwip is required.

If you don't need to get images captured by the HVC-P2, the image processing modules are not required.

Debian/Ubuntu

It is recommended to install node-gd.

$ sudo apt-get install libgd2-dev # libgd
$ npm install node-gd

RHEL/CentOS

It is recommended to install node-gd.

$ sudo yum install gd-devel
$ npm install node-gd

Mac OS

It is recommended to install node-gd.

$ sudo port install pkgconfig gd2
$ npm install node-gd

Windows

It is recommended to install lwip.

$ npm install lwip

Table of Contents


Quick Start

Detecting faces

This sample code shows how to connect to the HVC-P2 and how to send a command to detect faces.

// Load the node-omron-hvc-p2 and get a `HvcP2` constructor object
const HvcP2 = require('node-omron-hvc-p2');
// Create a `HvcP2` object
const hvcp2 = new HvcP2();

// Connect to the HVC-P2
hvcp2.connect().then(() => {
  // Send a command for detecting
  return hvcp2.detect({
    face   : 1, // Enable face detection
    age    : 1, // Enable age estimation
    gender : 1  // Enable gender Estimation
  });
}).then((res) => {
  // Show the result
  console.log(JSON.stringify(res, null, '  '));
  // Disconnect the HVC-P2
  return hvcp2.disconnect();
}).then(() => {
  console.log('Disconnected.');
}).catch((error) => {
  console.error(error);
});

First of all, you have to create a HvcP2 object from the HvcP2 constructor object. In the code above, the variable hvcp2 is the HvcP2 object.

Calling the connect() method, the node-omron-hvc-p2 starts to find a USB serial port which the HVC-P2 is connected, then prepares for use.

Calling the detect() method, the node-omron-hvc-p2 sends a command to the HVC-P2 in order to detect faces in the camera view. The HVC-P2 supports a lot of detect options. In the code above, Face detection, age estimation, gender estimation are enabled.

The sample code above will output the result as follows:

{
  "face": [
    {
      "face": {
        "x": 930,
        "y": 497,
        "size": 390,
        "confidence": 579
      },
      "age": {
        "age": 41,
        "confidence": 500
      },
      "gender": {
        "gender": 1,
        "confidence": 1000
      }
    }
  ]
}
Disconnected.

The result says that a face was detected, the age is 41 years old, and the gender is male.

Finally, you can disconnect the device using disconnect() method.

Getting an image

The detect() method can return a image data as well. In the code blow, some parameters related the image option are passed to the method.

// Load the node-omron-hvc-p2 and get a `HvcP2` constructor object
const HvcP2 = require('node-omron-hvc-p2');
// Create a `HvcP2` object
const hvcp2 = new HvcP2();

// Connect to the HVC-P2
hvcp2.connect().then(() => {
  // Send a command for detecting
  return hvcp2.detect({
    face        : 1,            // Enable face detection
    age         : 1,            // Enable age estimation
    image       : 1,            // Enable capturing image
    imageType   : 3,            // Save the image as a file
    imageFormat : 'png',        // Image format
    imagePath   : './test.png', // File path
    imageMarker : true          // Draw markers in the image
  });
}).then((res) => {
  // Show the result
  console.log(JSON.stringify(res, null, '  '));
  // Disconnect the HVC-P2
  return hvcp2.disconnect();
}).then(() => {
  console.log('Disconnected.');
}).catch((error) => {
  console.error(error);
});

The sample code above will output the result as follows:

{
  "face": [
    {
      "face": {
        "x": 624,
        "y": 588,
        "size": 330,
        "confidence": 559
      },
      "age": {
        "age": 25,
        "confidence": 666
      }
    }
  ],
  "image": {
    "width": 320,
    "height": 240
  }
}
Disconnected.

Besides, an image file will be created in the current directory. If the script is run on Linux or Mac, the image will be like this:

The image created on Linux or Mac

If the detected face was recognized as a woman, the color of markers is red. If recognized as a man, the color is blue.

If the script is run on Windows, the image will be like this:

The image created on Windows

Note that, as you can see, the age is not supported for Windows.


HvcP2 object

In order to use the node-omron-hvc-p2, you have to load the node-omron-hvc-p2 module as follows:

const HvcP2 = require('node-omron-hvc-p2');

You can get a HvcP2 constructor from the code above. Then you have to create an HvcP2 object from the HvcP2 constructor as follows:

const hvcp2 = new HvcP2();

In the code snippet above, the variable hvcp2 is a HvcP2 object. The HvcP2 object has methods as described in sections below.

connect([params]) method

The connect() method finds the HVC-P2 connected to a USB port on your host PC, then prepares for use. This method returns a Promise object.

hvcp2.connect().then(() => {
  console.log('Connected.');
  // Do something.
}).catch((error) => {
  console.error(error);
});

Basically, you don't need to know which USB serial port your HVC-P2 is connected. This method try to find an appropriate USB serial port. Besides, you don't need to specify the baud rate. This probably works well on at least Debian-based Linux distro (e.g., Raspbian, Ubuntu), Mac, and Windows.

However, the node-omron-hvc-p2 does not necessarily find an appropriate USB serial port. You can specify the USB serial port and the baud rate.

hvcp2.connect({
  path: 'COM4',
  baudRate: 921600
}).then(() => {
  console.log('Connected.');
  // Do something.
}).catch((error) => {
  console.error(error);
});

The connect() method takes a hash object as an argument containing properties as follows:

Property | Required | Type | Description :----------|:---------|:-------|:----------- path | optional | String | The path representing the serial port which your HVC-P2 is connected. (e.g., "COM3", "/dev/ttyACM0", "/dev/tty-usbserial1") baudRate | optional | Number | 9600, 38400, 115200, 230400, 460800, or 921600 (Default)

If you want to finish the connection process as soon as possible, you should specify the property path because the auto scan mode (no path specified) takes a little more time depending on the environment of your host PC.

disconnect() method

The disconnect() method releases the connection with your HVC-P2 on the USB port. This method returns a Promise object.

hvcp2.disconnect().then(() => {
  console.log('Disconnected.');
}).catch((error) => {
  console.error(error);
});

getSerialPortPath() method

The getSerialPortPath() method returns the path representing the USB serial port assigned to your HVC-P2. Note that this method does not return a Promise object unlike other methods.

hvcp2.connect().then(() => {
  console.log('Serial Port Path: ' + hvcp2.getSerialPortPath());
}).catch((error) => {
  console.error(error);
});

The code above will output the result as follows if the code is run on Windows:

Serial Port Path: COM4

If the code is run on Raspbian, the result will be:

Serial Port Path: /dev/ttyACM0

Note that this method returns an empty string if any HVC-P2 is not connected using the connect() method.

getModelVersion([params]) method

The getModelVersion() method reports the model name and the version number of your HVC-P2. This method returns a Promise object. This method takes a hash object as an argument containing properties as follows:

Property | Type | Required | Description :--------|:--------|:---------|:------------ cache | Boolean | Optional | true (default) or false. If true is specified or this property is not specified, this method reports the data cached when the connect() method was called. If false is specified, this method requests to the HVC-P2.

The node-omron-hvc-p2 cashes the model name and version number when the connect() method is called. This method reports the cashed information by default because the model name and the version number never change. But if you want to make a query again, specify the property cache and set it to false.

The code blow calls this method and show the cached information.

hvcp2.getModelVersion().then(() => {
  console.log(JSON.stringify(res, null, '  '));
}).catch((error) => {
  console.error(error);
});

The code below calls this method and show the newly queried information.

hvcp2.getModelVersion({cache: false}).then(() => {
  console.log(JSON.stringify(res, null, '  '));
}).catch((error) => {
  console.error(error);
});

The codes above will output the result as follows:

{
  "model": "B5T-007001",
  "major": 1,
  "minor": 0,
  "release": 1,
  "revision": 9372
}

detect(params) method

The detect() method makes your HVC-P2 detect objects in the camera view. This method returns a Promise object. This method takes a hash object as an argument containing properties as follows:

Property | Type | Required | Description :-------------|:--------|:------------|:------------ body | Number | optional | Human Body Detection (0: disable (default), 1: enable) hand | Number | optional | Hand Detection (0: disable (default), 1: enable) face | Number | optional | Face Detection (0: disable (default), 1: enable) direction | Number | optional | Face Direction Estimation (0: disable (default), 1: enable) age | Number | optional | Age Estimation (0: disable (default), 1: enable) gender | Number | optional | Gender Estimation (0: disable (default), 1: enable) gaze | Number | optional | Gaze Estimation (0: disable (default), 1: enable) blink | Number | optional | Blink Estimation (0: disable (default), 1: enable) expression | Number | optional | Expression Estimation (0: disable (default), 1: enable) recognition | Number | optional | Face Recognition (0: disable (default), 1: enable) image | Number | optional | Image output (0: disable (default), 1: 320x240 pixel, 2: 160x120 pixel) imageType | Number | optional | 0: Array (default), 1: Buffer, 2: Data URL, 3: File imageFormat | String | optional | "gif" (default), "jpg", or "png" imagePath | String | conditional | File path with file name (e.g., "/tmp/image.png") imageMarker | Boolean | optional | true or false (default)

Though all properties are optional, at least one among body, hand, face, direction, age, gender, gaze, blink, expression, recogunition, and image must be set to 1.

The imagePath is required if the image is 1 or 2 and the imageType is 3 (File).

The result of the detection will be pass to the resolve() function, which is a hash object containing the properties as follows:

Property | Type | Description :--------|:-------|:----------- body | Array | The result of body detection. This property exists only when the request parameter body is 1. Otherwise, this property does not exists. See the section "Body detection" for details. hand | Array | The result of hand detection. This property exists only when the request parameter hand is 1. Otherwise, this property does not exists. See the section "Hand detection" for details. face | Array | The result of face detection. This property exists only when at least one of request parameters among face, direction, age, gender, gaze, blink, expression, and recognition is 1. Otherwise, this property does not exists. See the section "Face detection" for details. image | Object | The image data. This property exists only when the request parameter image is 1 or 2. Otherwise, this property does not exists. +width | Number | The width of the image (pixel). +height | Number | The height of the image (pixel). +pixels | Array | The pixcel data of the image. This property exists only if the request parameter imageType is 0. +buffer | Buffer | The Buffer object representing the image. This property exists only if the request parameter imageType is 1. +dataUrl | String | The data URL representing the image. This property exists only if the request parameter imageType is 2.

The pixel data in the pixels property represents a gray-scaled image captured by the camera of the HVC-P2. Each element in the Array represents a pixel in the image. The value is an integer between 0 and 255 representing the gray-scale level. The first element in the Array corresponds to the pixel of the top-left corner. The last element in the Array corresponds to the pixel of the bottom-right corner. If the image size is 320x240, the number of the elements in the Array is 76800.

The value of the buffer property is a Buffer object representing the binary data of the image. The image format depends on the parameter imageFormat.

The value of the dataUrl property is a data URL of the image like this:

data:image/png;base64,iVBORw0KGgoAAAANSU...AElFTkSuQmCC

Face detection

The code below sets all face detection options to '1' (enable) and creates an PNG file with markers in the current directory.

hvcp2.detect({
    face: 1,
    direction: 1,
    age: 1,
    gender: 1,
    gaze: 1,
    blink: 1,
    expression: 1,
    recognition: 1,
    image: 1,
    imageType: 3,
    imageFormat: 'png',
    imagePath: './capture.png',
    imageMarker: true
  });
}).then((res) => {
  console.log(JSON.stringify(res, null, '  '));
}).catch((error) => {
  console.error(error);
});

The image below is the result of the detection. 3 faces are detected (2 human faces and 1 dog face). Note that the HVC-P2 is arranged to detect human faces, not dogs.

Face detection (The original picture)

The result is as follows:

{
  "face": [
    {
      "face": {
        "x": 1062,
        "y": 389,
        "size": 252,
        "confidence": 533
      },
      "direction": {
        "yaw": 2,
        "pitch": -15,
        "roll": -2,
        "confidence": 19
      },
      "age": {
        "age": 67,
        "confidence": 333
      },
      "gender": {
        "gender": 1,
        "confidence": 767
      },
      "gaze": {
        "yaw": 3,
        "pitch": -9
      },
      "blink": {
        "left": 432,
        "right": 407
      },
      "expression": {
        "neutral": 1,
        "happiness": 73,
        "surprise": 0,
        "anger": 8,
        "sadness": 18,
        "positive": 47
      },
      "recognition": {
        "user": -127,
        "score": -127
      }
    },
    {
      "face": {
        "x": 728,
        "y": 870,
        "size": 240,
        "confidence": 566
      },
      "direction": {
        "yaw": 6,
        "pitch": -13,
        "roll": -12,
        "confidence": 1
      },
      "age": {
        "age": 45,
        "confidence": 153
      },
      "gender": {
        "gender": 1,
        "confidence": 713
      },
      "gaze": {
        "yaw": -4,
        "pitch": 3
      },
      "blink": {
        "left": 418,
        "right": 465
      },
      "expression": {
        "neutral": 44,
        "happiness": 1,
        "surprise": 15,
        "anger": 39,
        "sadness": 1,
        "positive": -50
      },
      "recognition": {
        "user": -127,
        "score": -127
      }
    },
    {
      "face": {
        "x": 618,
        "y": 417,
        "size": 216,
        "confidence": 671
      },
      "direction": {
        "yaw": 3,
        "pitch": -20,
        "roll": 1,
        "confidence": 1
      },
      "age": {
        "age": 68,
        "confidence": 400
      },
      "gender": {
        "gender": 0,
        "confidence": 538
      },
      "gaze": {
        "yaw": 4,
        "pitch": -2
      },
      "blink": {
        "left": 366,
        "right": 455
      },
      "expression": {
        "neutral": 0,
        "happiness": 100,
        "surprise": 0,
        "anger": 0,
        "sadness": 0,
        "positive": 100
      },
      "recognition": {
        "user": -127,
        "score": -127
      }
    }
  ],
  "image": {
    "width": 320,
    "height": 240
  }
}

The meanings of the properties above is as follows:

Property | Type | Description :--------------|:-------|:----------- face | Object | The result of the face detection. +x | Number | The x-coordinate of the center point of the detected face in the camera view port (1920 x 1080) +y | Number | The y-coordinate of the center point of the detected face in the camera view port (1920 x 1080) +size | Number | The size of the square representing the detected face. +confidence | Number | The confidence in the face detection (0 - 1000). direction | Object | The result of the face direction estimation. +yaw | Number | The yaw angle of the detected face. The unit is degree. If the face looks to the left, this value is positive. If the face looks to the right, this value is negative. +pitch | Number | The pitch angle of the detected face. The unit is degree. If the face looks to the top, this value is positive. If the face looks to the bottom, this value is negative. +roll | Number | The roll angle of the detected face. The unit is degree. If the face leans to the left, this value is positive. If the face leans to the right, the value is negative. +confidence | Number | The confidence in the face direction estimation (0 - 1000). age | Object | The result of the age estimation. +age | Number | The age estimated from the detected face. The maximum value is 75. +confidence | Number | The confidence in the age estimation (0 - 1000). gender | Object | The result of the gender estimation. +gender | Number | The gender estimated from the detected face. If the value is 0, it means female. If the value is 1, it means male. +confidence | Number | The confidence in the gender estimation (0 - 1000). gaze | Object | The result of the gaze estimation. +yaw | Number | The yaw angle of the gaze of the detected face. The unit is degree. If the eyes on the detected face look to the left, this value is positive. If the eyes on the detected face look to the right, this value is negative. +pitch | Number | The pitch angle of the gaze of the detected face. The unit is degree. If the eyes on the detected face look to the top, this value is positive. If the eyes on the detected face look to the bottom, this value is negative. blink | Object | The result of the blink estimation. +left | Number | The blink degree of the left eye on the detected face. If the eye is fully opened, this value is 1. If the eye is fully shut, this value is 1000. +right | Number | The blink degree of the right eye on the detected face. If the eye is fully opened, this value is 1. If the eye is fully shut, this value is 1000. expression | Object | The result of the expression estimation. +neutral | Number | The degree of the neutral estimated from the detected face. The range of value is from 0 to 100. +happiness | Number | The degree of the happiness estimated from the detected face. The range of value is from 0 to 100. +surprise | Number | The degree of the surprise estimated from the detected face. The range of value is from 0 to 100. +anger | Number | The degree of the anger estimated from the detected face. The range of value is from 0 to 100. +sadness | Number | The degree of the sadness estimated from the detected face. The range of value is from 0 to 100. +positive | Number | The degree of the positiveness estimated from the detected face. The range of value is from -100 to 100. If the value is positive, the detected face looks like happy. If the value is negative, the detected face looks like sad or angry. recognition | Object | The result of the face recognition. +userId | Number | The user ID recognized from the detected face. If no user is recognized, this value will be -127. +score | Number | The score of the recognition. The range of the value is from 0 to 1000. If no user is recognized, this value will be -127.

Body detection

The code below sets the body detection option to '1' (enable) and creates an PNG file with markers in the current directory.

hvcp2.detect({
    body: 1,
    image: 1,
    imageType: 3,
    imageFormat: 'png',
    imagePath: './capture.png',
    imageMarker: true
  });
}).then((res) => {
  console.log(JSON.stringify(res, null, '  '));
}).catch((error) => {
  console.error(error);
});

The image below is the result of the detection. 3 bodies are detected.

Body detection (The original picture)

The result is as follows:

{
  "body": [
    {
      "x": 1252,
      "y": 674,
      "size": 488,
      "confidence": 889
    },
    {
      "x": 780,
      "y": 560,
      "size": 480,
      "confidence": 552
    },
    {
      "x": 390,
      "y": 656,
      "size": 304,
      "confidence": 642
    }
  ],
  "image": {
    "width": 320,
    "height": 240
  }
}

The meanings of the properties above is as follows:

Property | Type | Description :------------|:-------|:----------- x | Number | The x-coordinate of the center point of the detected body in the camera view port (1920 x 1080) y | Number | The y-coordinate of the center point of the detected body in the camera view port (1920 x 1080) size | Number | The size of the square representing the detected body. confidence | Number | The confidence in the body detection (0 - 1000).

Hand detection

The code below sets the hand detection option to '1' (enable) and creates an PNG file with markers in the current directory.

hvcp2.detect({
    hand: 1,
    image: 1,
    imageType: 3,
    imageFormat: 'png',
    imagePath: './capture.png',
    imageMarker: true
  });
}).then((res) => {
  console.log(JSON.stringify(res, null, '  '));
}).catch((error) => {
  console.error(error);
});

The image below is the result of the detection. 2 hands are detected.

Hand detection (The original picture)

The result is as follows:

{
  "hand": [
    {
      "x": 1168,
      "y": 699,
      "size": 661,
      "confidence": 1000
    },
    {
      "x": 550,
      "y": 675,
      "size": 608,
      "confidence": 972
    }
  ],
  "image": {
    "width": 320,
    "height": 240
  }
}

The meanings of the properties above is as follows:

Property | Type | Description :------------|:-------|:----------- x | Number | The x-coordinate of the center point of the detected hand in the camera view port (1920 x 1080) y | Number | The y-coordinate of the center point of the detected hand in the camera view port (1920 x 1080) size | Number | The size of the square representing the detected hand. confidence | Number | The confidence in the hand detection (0 - 1000).

getConfigurations([params]) method

The getConfigurations() method reports the configurations of your HVC-P2. This method returns a Promise object. This method takes a hash object as an argument containing properties as follows:

Property | Type | Required | Description :--------|:--------|:---------|:------------ cache | Boolean | Optional | true (default) or false. If true is specified or this property is not specified, this method reports the data cached when the connect() method was called. If false is specified, this method requests to the HVC-P2.

The node-omron-hvc-p2 cashes the configurations when the connect() method is called. This method reports the cashed configurations by default. If you want to make a query again, specify the cache property and set it to false.

The code blow calls this method and show the cached configurations.

hvcp2.getConfigurations().then((res) => {
  console.log(JSON.stringify(res, null, '  '));
}).catch((error) => {
  console.error(error);
});

The code below calls this method and show the newly queried configurations.

hvcp2.getConfigurations({cache: false}).then((res) => {
  console.log(JSON.stringify(res, null, '  '));
}).catch((error) => {
  console.error(error);
});

The codes above will output the result as follows:

{
  "cameraAngle": {
    "angle": 0
  },
  "threshold": {
    "body": 500,
    "hand": 500,
    "face": 500,
    "recognition": 500
  },
  "detectionSize": {
    "bodyMin": 30,
    "bodyMax": 8192,
    "handMin": 40,
    "handMax": 8192,
    "faceMin": 64,
    "faceMax": 8192
  },
  "faceAngle": {
    "yaw": 0,
    "roll": 0
  }
}

The meanings of the properties above are described in the next section "setConfigurations() method".

setConfigurations(configrations) method

The setConfigurations() method sets the configurations. This method returns a Promise object. This method takes a hash object as an argument containing properties as follows:

Property | Type | Required | Description :---------------|:-------|:---------|:------------ cameraAngle | Object | optional | Camera Angle +angle | Number | optional | 0: 0º, 1: 90º, 2: 180º, 3: 270º threshold | Object | optional | Threshold Values +body | Number | optional | Human Body Detection threshold (1 - 1000) +hand | Number | optional | Hand Detection threshold (1 - 1000) +face | Number | optional | Face Detection threshold (1 - 1000) +recognition | Number | optional | Face Recognition threshold (0 - 1000) detectionSize | Object | optional | Detection Size +bodyMin | Number | optional | Human Body Detection minimum size (20 - 8192) +bodyMax | Number | optional | Human Body Detection maximum size (20 - 8192) +handMin | Number | optional | Hand Detection minimum size (20 - 8192) +handMax | Number | optional | Hand Detection maximum size (20 - 8192) +faceMin | Number | optional | Face Detection minimum size (20 - 8192) +faceMax | Number | optional | Face Detection maximum size (20 - 8192) faceAngle | Object | optional | Face Angle Range +yaw | Number | optional | Yaw angle range (0: ±30º, 1: ±60º, 2: ±90º) +roll | Number | optional | Roll angle range (0: ±15º, 1: ±45º)

Though all properties are optional, at least one property must be specified.

See the "Human Vision Components (HVC-P2) B5T-007001 Command Manual (PDF)" for the details of the configurations.

The updated configurations will be pass to the resolve() function, which is a hash object containing the all properties as same as the properties described above.

The code below set the camera angle to 270º.

hvcp2.setConfigurations({
  cameraAngle: {
    angle: 3 // Camera angle: 270º
  }
}).then((res) => {
  console.log(JSON.stringify(res, null, '  '));
}).catch((error) => {
  console.error(error);
});

The code above will output the result as follows:

{
  "cameraAngle": {
    "angle": 3
  },
  "threshold": {
    "body": 500,
    "hand": 500,
    "face": 500,
    "recognition": 500
  },
  "detectionSize": {
    "bodyMin": 30,
    "bodyMax": 8192,
    "handMin": 40,
    "handMax": 8192,
    "faceMin": 64,
    "faceMax": 8192
  },
  "faceAngle": {
    "yaw": 0,
    "roll": 0
  }
}

resetConfigurations() method

The resetConfigurations() method restore the default settings. This method returns a Promise object.

The updated configurations will be pass to the resolve() function, which is a hash object containing the all properties as same as the properties described above.

hvcp2.resetConfigurations().then((res) => {
  console.log(JSON.stringify(res, null, '  '));
}).catch((error) => {
  console.error(error);
});

The code above will output the result as follows:

{
  "cameraAngle": {
    "angle": 0
  },
  "threshold": {
    "body": 500,
    "hand": 500,
    "face": 500,
    "recognition": 500
  },
  "detectionSize": {
    "bodyMin": 30,
    "bodyMax": 8192,
    "handMin": 40,
    "handMax": 8192,
    "faceMin": 64,
    "faceMax": 8192
  },
  "faceAngle": {
    "yaw": 0,
    "roll": 0
  }
}

getFaceRecognitionUsers([params]) method

The getFaceRecognitionUsers() method reports a list of the user ID registered in the album. This method returns a Promise object. This method takes a hash object as an argument containing properties as :

Property | Type | Required | Description :--------|:--------|:---------|:------------ cache | Boolean | Optional | true (default) or false. If true is specified or this property is not specified, this method reports the data cached when the connect() method was called. If false is specified, this method requests to the HVC-P2.

The node-omron-hvc-p2 cashes the user ID registered in the album when the connect() method is called. This method reports the cashed list. But if you want to make a query again, specify the cache property and set it to false.

The result will be pass to the resolve() function, which is a hash object containing the properties as follows:

Property | Type | Description :------------|:------|:----------- userIdList | Array | The list containing the user IDs registered in the album.

The code blow calls this method and show the cached information.

hvcp2.getFaceRecognitionUsers().then((res) => {
  console.log(JSON.stringify(res, null, '  '));
}).catch((error) => {
  console.error(error);
});

The code below calls this method and show the newly queried information.

hvcp2.getFaceRecognitionUsers({cache: true}).then((res) => {
  console.log(JSON.stringify(res, null, '  '));
}).catch((error) => {
  console.error(error);
});

The codes above will output the result as follows:

{
  "userIdList": [
    1,
    3
  ]
}

getFaceRecognitionData(params) method

The getFaceRecognitionData() method reports a list of the data ID associated with the specified user ID. This method returns a Promise object. This method takes a hash object as an argument containing properties as follows:

Property | Type | Required | Description :-------------|:-------|:------------|:------------ userId | Number | required | The user ID. The value must be an integer between 0 and 99.

If no data associated with the specified userId is registered in the HVC-P2, the reject() function will be called.

The code below get a list of data ID associated with the user ID 1.

hvcp2.getFaceRecognitionData({
  userId: 1
}).then((res) => {
  console.log(JSON.stringify(res, null, '  '));
}).catch((error) => {
  console.error(error);
});

The code above will output the result as follows:

{
  "dataIdList": [
    2
  ]
}

addFaceRecognitionData(params) method

The addFaceRecognitionData() method adds a face recognition data to the album in the HVC-P2. This method returns a Promise object. This method takes a hash object as an argument containing properties as follows:

Property | Type | Required | Description :-------------|:-------|:------------|:------------ userId | Number | required | The user ID. The value must be an integer between 0 and 99. dataId | Number | required | The data ID. The value must be an integer between 0 and 9. imageType | Number | optional | 0: Array (default), 1: Buffer, 2: Data URL, 3: File imageFormat | String | optional | "gif" (default), "jpg", or "png" imagePath | String | conditional | File path with file name (e.g., "/tmp/image.png")

If a face is recognized, the result will be pass to the resolve() function, which is a hash object containing the properties as follows:

Property | Type | Description :---------|:-------|:----------- width | Number | The width of the registered face image. The value is always 64. height | Number | The height of the registered face image. The value is always 64. pixels | Array | The pixel data of the recognized face. This property exists only if the parameter imageType is 0. buffer | Buffer | The Buffer object representing the recognized face image. This property exists only if the parameter imageType is 1. dataUrl | String | The data URL representing the recognized face image. This property exists only if the parameter imageType is 2.

Note that the target face has to be in the scope of the camera when this method is executed. If no face is recognized or 2 or more faces are recognized, the reject() function will be called.

The code below adds a user with user ID 1 and data ID 2 and save the recognized face image as a file "face.png".

hvcp2.addFaceRecognitionData({
  userId: 1,
  dataId: 2,
  imageType: 3,
  imageFormat: 'png',
  imagePath: 'face.png'
}).then((res) => {
  console.dir(res);
}).catch((error) => {
  console.error(error);
});

The code above will output the result as follows:

{ width: 64, height: 64 }

The created PNG file is as follows:

Face recognition image (The original picture)

In order to accurize the face recognition, it is recommended to call this method some times for a face. The HVC-P2 can register up to 9 data per user.

After adding face recognition data, try the detect() method with the parameter recognition as follows:

hvcp2.detect({
  recognition: 1,
}).then((res) => {
  console.log(JSON.stringify(res, null, '  '));
}).catch((error) => {
  console.error(error);
});

If the registered user face is recognized, the result will be as follows:

{
  "face": [
    {
      "recognition": {
        "userId": 1,
        "score": 988
      }
    }
  ]
}

deleteFaceRecognitionData(params) method

The deleteFaceRecognitionData() method deletes a face recognition data from the album in the HVC-P2. This method returns a Promise object. This method takes a hash object as an argument containing properties as follows:

Property | Type | Required | Description :-------------|:-------|:------------|:------------ userId | Number | required | The user ID. The value must be an integer between 0 and 99. dataId | Number | required | The data ID. The value must be an integer between 0 and 9.

If no data corresponding to the specified userId and dataId is registered in the album, the reject() function will be called.

The code below deletes a face recognition data corresponding to the user ID 1 and the data ID 2.

hvcp2.deleteFaceRecognitionData({
  userId: 1,
  dataId: 2
}).then(() => {
  console.log('Deleted.');
}).catch((error) => {
  console.error(error);
});

deleteFaceRecognitionUser(params) method

The deleteFaceRecognitionUser() method deletes all face recognition data associated with the specified user ID in the album. This method returns a Promise object. This method takes a hash object as an argument containing properties as follows:

Property | Type | Required | Description :-------------|:-------|:------------|:------------ userId | Number | required | The user ID. The value must be an integer between 0 and 99.

If no data associated with the specified userId is registered in the album, the reject() function will be called.

The code below deletes all face recognition data associated with the user ID 1.

hvcp2.deleteFaceRecognitionUser({
  userId: 1
}).then(() => {
  console.log('Deleted.');
}).catch((error) => {
  console.error(error);
});

clearFaceRecognitionData() method

The clearFaceRecognitionData() method deletes all face recognition data in the album. This method returns a Promise object.

hvcp2.clearFaceRecognitionData().then(() => {
  console.log('Deleted.');
}).catch((error) => {
  console.error(error);
});

saveAlbum(params) method

The saveAlbum() method reports the album data set in the HVC-P2. It also can save the album data as a binary file. This method returns a Promise object. This method takes a hash object as an argument containing properties as follow:

Property | Type | Required | Description :--------|:-------|:---------|:------------ path | String | optional | File path with the file name.

If the path property is specified, this method will create a album file.

The result will be pass to the resolve() function, which is a hash object containing the properties as follows:

Property | Type | Description :--------|:-------|:----------- album | Buffer | A Buffer object representing the album data.

The code below saves the album data as a file "HVCAlbum.hac" in the current directory.

hvcp2.saveAlbum({
  path: 'HVCAlbum.hac'
}).then((res) => {
  console.log(res);
}).catch((error) => {
  console.error(error);
});

The code above will output the result as follows:

{ album: <Buffer 20 00 ...> }

The album property, whether or not the parameter path was passed to the saveAlbum() method, will be set.

loadAlbum(params) method

The loadAlbum() method load the album data to the HVC-P2. This method returns a Promise object. This method takes a hash object as an argument containing properties as follows:

Property | Type | Required | Description :--------|:-------|:---------|:------------ buffer | Buffer | optional | A Buffer object representing the album data. path | String | optional | A File path of the album data.

Though both the buffer and path are optional, one or the other must be specified.

The code below loads the album data saved in a album file "HVCAlbum.hac" which was saved by the saveAlbum() method.

hvcp2.loadAlbum({
  path: 'HVCAlbum.hac'
}).then(() => {
  console.log('Loaded.');
}).catch((error) => {
  console.error(error);
});

saveAlbumOnFlashROM() method

The album data is saved in the volatile memory. Therefore, the album data will be gone if the HVC-P2 is turned off. If you want to save the album data permanently (that is, save in the non-volatile memory), you can use the saveAlbumOnFlashROM() method. This method returns a Promise object.

hvcp2.saveAlbumOnFlashROM();
}).then(() => {
  console.log('Saved.');
}).catch((error) => {
  console.error(error);
});

reformatFlashROM() method

The reformatFlashROM() method formats the non-volatile memory in the HVC-P2. This method returns a Promise object.

hvcp2.reformatFlashROM();
}).then(() => {
  console.log('Saved.');
}).catch((error) => {
  console.error(error);
});

Release Note

  • v0.1.2 (2017-11-04)
    • Improved the auto-detection of USB port on Linux.
  • v0.1.1 (2017-09-23)
    • Fixed a bug that an error was thrown when no device was found depending on a condition.
  • v0.1.0 (2017-08-06)
    • The auto detection of a USB serial port was Improved with more efficient way.
  • v0.0.1 (2017-06-24)
    • First public release

References


License

The MIT License (MIT)

Copyright (c) 2017 Futomi Hatano

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.