172 lines
4.0 KiB
JavaScript
172 lines
4.0 KiB
JavaScript
//
|
|
// Shinobi - Tensorflow Plugin
|
|
// Copyright (C) 2016-2025 Elad Bar, Moe Alam
|
|
//
|
|
// Base Init >>
|
|
var fs = require('fs');
|
|
var config = require('./conf.json')
|
|
const request = require("request")
|
|
var s
|
|
const {
|
|
workerData
|
|
} = require('worker_threads');
|
|
|
|
if(workerData && workerData.ok === true){
|
|
try{
|
|
s = require('../pluginWorkerBase.js')(__dirname,config)
|
|
}catch(err){
|
|
console.log(err)
|
|
try{
|
|
s = require('./pluginWorkerBase.js')(__dirname,config)
|
|
}catch(err){
|
|
console.log(err)
|
|
return console.log(config.plug,'WORKER : Plugin start has failed. pluginBase.js was not found.')
|
|
}
|
|
}
|
|
}else{
|
|
try{
|
|
s = require('../pluginBase.js')(__dirname,config)
|
|
}catch(err){
|
|
console.log(err)
|
|
try{
|
|
s = require('./pluginBase.js')(__dirname,config)
|
|
}catch(err){
|
|
console.log(err)
|
|
return console.log(config.plug,'Plugin start has failed. pluginBase.js was not found.')
|
|
}
|
|
}
|
|
|
|
const {
|
|
haltMessage,
|
|
checkStartTime,
|
|
setStartTime,
|
|
} = require('../pluginCheck.js')
|
|
|
|
if(!checkStartTime()){
|
|
console.log(haltMessage,new Date())
|
|
s.disconnectWebSocket()
|
|
return
|
|
}
|
|
setStartTime()
|
|
}
|
|
// Base Init />>
|
|
|
|
var deepStackHost = config.deepStack["host"]
|
|
var deepStackPort = config.deepStack["port"]
|
|
var deepStackIsSSL = config.deepStack["isSSL"]
|
|
var deepStackApiKey = config.deepStack["apiKey"]
|
|
var deepStackProtocol = deepStackIsSSL ? "https" : "http"
|
|
|
|
var baseUrl = `${deepStackProtocol}://${deepStackHost}:${deepStackPort}/v1`
|
|
var objectDetectionUrl = `${baseUrl}/vision/detection`
|
|
|
|
s.detectObject = function(buffer,d,tx,frameLocation,callback){
|
|
var timeStart = new Date()
|
|
var detectStuff = async function(frame){
|
|
try{
|
|
image_stream = fs.createReadStream(frame)
|
|
|
|
const form = {
|
|
"image":image_stream
|
|
}
|
|
|
|
if(deepStackApiKey) {
|
|
form["api_key"] = deepStackApiKey
|
|
}
|
|
|
|
request.post({url:objectDetectionUrl, formData:form}, function(err,res,body){
|
|
const responseDate = new Date()
|
|
|
|
const responseTime = (responseDate.getTime() - timeStart.getTime());
|
|
|
|
const response = JSON.parse(body)
|
|
|
|
const success = response["success"]
|
|
const predictions = response["predictions"]
|
|
const mats = []
|
|
|
|
const detected = []
|
|
|
|
if(success) {
|
|
predictions.forEach(function(v){
|
|
const label = v["label"]
|
|
const confidence = v["confidence"]
|
|
const y_min = v["y_min"]
|
|
const x_min = v["x_min"]
|
|
const y_max = v["y_max"]
|
|
const x_max = v["x_max"]
|
|
const width = x_max - x_min
|
|
const height = y_max - y_min
|
|
|
|
detected.push(`${label}: ${confidence}`)
|
|
|
|
mats.push({
|
|
x: x_min,
|
|
y: y_min,
|
|
width: width,
|
|
height: height,
|
|
tag: label,
|
|
confidence: confidence,
|
|
})
|
|
})
|
|
}
|
|
|
|
if(detected.length > 0) {
|
|
detectedStr = detected.join(",")
|
|
}
|
|
|
|
const isObjectDetectionSeparate = d.mon.detector_pam === '1' && d.mon.detector_use_detect_object === '1'
|
|
const width = parseFloat(isObjectDetectionSeparate && d.mon.detector_scale_y_object ? d.mon.detector_scale_y_object : d.mon.detector_scale_y)
|
|
const height = parseFloat(isObjectDetectionSeparate && d.mon.detector_scale_x_object ? d.mon.detector_scale_x_object : d.mon.detector_scale_x)
|
|
|
|
tx({
|
|
f:'trigger',
|
|
id:d.id,
|
|
ke:d.ke,
|
|
details:{
|
|
plug:config.plug,
|
|
name: `DeepStack-Object`,
|
|
reason:'object',
|
|
matrices:mats,
|
|
imgHeight:width,
|
|
imgWidth:height,
|
|
time: responseTime
|
|
}
|
|
})
|
|
})
|
|
}catch(err){
|
|
console.log(err)
|
|
}
|
|
callback()
|
|
}
|
|
|
|
if(frameLocation){
|
|
detectStuff(frameLocation)
|
|
}else{
|
|
d.tmpFile=s.gid(5)+'.jpg'
|
|
if(!fs.existsSync(s.dir.streams)){
|
|
fs.mkdirSync(s.dir.streams);
|
|
}
|
|
|
|
d.dir=s.dir.streams+d.ke+'/'
|
|
if(!fs.existsSync(d.dir)){
|
|
fs.mkdirSync(d.dir);
|
|
}
|
|
|
|
d.dir=s.dir.streams+d.ke+'/'+d.id+'/'
|
|
if(!fs.existsSync(d.dir)){
|
|
fs.mkdirSync(d.dir);
|
|
}
|
|
|
|
fs.writeFile(d.dir+d.tmpFile,buffer,function(err){
|
|
if(err) return s.systemLog(err);
|
|
|
|
try{
|
|
detectStuff(d.dir+d.tmpFile)
|
|
}catch(error){
|
|
console.error('Catch: ' + error);
|
|
}
|
|
})
|
|
}
|
|
}
|