@xavier.seignard/node-yolo
v2.1.3
Published
Node.js interface for Yolo/Darknet
Downloads
10
Maintainers
Readme
node-yolo
This Node.js C++ addon allow you to use a state-of-the-art, real-time object detection system called Yolo. This addon came out from a computer engineering final project, VAPi, guided by Patrício Domingues at Institute Polytechnic of Leiria. The version 1.x.x was developed by Rúben Caceiro and Ricardo Maltez during the final project. The version 2.x.x was sponsored by Instituto de Telecomunicações developed by Rúben Caceiro and guided by Patrício Domingues.
Pre-requirements
- C/C++ Compiler (tested with gcc & g++)
- nVidia graphic card (Only if you want to use GPU acceleration):
- Node.js (tested on node.js>= 8)
- node-gyp
- OpenCV
Note 1: Before any update please see the changelog. Note 2: The versions prior 2.0.0 of the module has the ImageMagick as a dependency, but with OpenCV we can archive the desired goal. And by this we remove one dependency of the project.
Recommended* hardware requirements
- Quad-core processor**
- 10 GB to run node-yolo
- At least 4GB of GPU memory***, if you want use GPU acceleration
Minimum* hardware requirements
- Dual-core processor**
- 8 GB to run node-yolo
- At least 4GB of GPU memory***, if you want use GPU acceleration
Installation
npm i @vapi/node-yolo --save
How To Use
const Yolo = require('@vapi/node-yolo');
const detector = new Yolo("darknet_configs", "cfg/coco.data", "cfg/yolov3.cfg", "yolov3.weights");
detector.detectImage(path,threshold,frames_to_process)
.then(detections =>
{
// here you receive the detections
})
.catch(error =>
{
// here you can handle the errors. Ex: Out of memory
});
detector.detectVideo(path,threshold,frames_to_process)
.then(detections =>
{
// here you receive the detections
})
.catch(error =>
{
// here you can handle the errors. Ex: Out of memory
});
path, required, represents the path to the file
threshold, not required, default behaviour is 0.5, represents the threshold to yolo filter the detections
frames_to_process, not required, default behaviour is 1/1, represents the number of frames that developer wants to process, this means 1/3 process 1 frame for each 3.
darknet_configs is a folder where you should put the Yolo weights, cfg and data files. You need to create two folder, cfg and data and put the files for each one. Like this:
.
├── darknet-configs # The folder for the Yolo weight, cfg and data files
│ ├── cfg # cfg folder
| |── coco.data
| |── yolov3.cfg
│ ├── data # data folder
| | |── coco.names
│ └── yolov3.weights # YoloV3 weights file
└── ...
Note 1: Our suggestion for better accuracy use coco.data, coco.names, yolov3-spp.cfg and yolov3-spp.weights. Note 2: Our suggestion for faster detection use coco.data, coco.names, yolov3-tiny.cfg and yolov3-tiny.weights. Note 3: Our suggestion for best of two worlds use coco.data, coco.names, yolov3.cfg and yolov3.weights.
video detection object
| Field | Type | Description
|:----------|:---------|:-----------------------------------------------------
| frame
| long/int64
| number of the frame
| millisecond
| double
| the millisecond that frame appear on video
| timeSpentForClassification
| double
| time used to classifies one frame
| detections
| array
| array of detection
object, containing all detections
image detection object
| Field | Type | Description
|:----------|:---------|:-----------------------------------------------------
| timeSpentForClassification
| double
| time used to classifies one image
| detections
| array
| array of detection
object, containing all detections
detection object
| Field | Type | Description
|:----------|:---------|:-----------------------------------------------------
| className
| string
| name of the class of the object detected
| probability
| double
| the probability that this className is correct
| box
| box
| object that contains box info of the object
box object
| Field | Type | Description
|:----------|:---------|:-----------------------------------------------------
| x
| double
| x coordinate in pixels of the picture
| y
| double
| y coordinate in pixels of the picture
| w
| double
| width from x point in pixels
| h
| double
| height from y point in pixels
* To get that metrics we calculate the usage for video with 3 hours at 60fps. **If you do not use gpu, may should consider a processor with higher number of cores. ***The weaker graphics card used was a nVidia GTX960M