Node.js interface for Yolo/Darknet
npm install @vapi/node-yoloNote 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.
sh
npm i @vapi/node-yolo --save
`How To Use
`javascript
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 filethreshold, 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