ShellBanner
System:Linux MiraNet 3.0.0-14-generic-pae #23-Ubuntu SMP Mon Nov 21 22:07:10 UTC 2011 i686
Software:Apache. PHP/5.3.6-13ubuntu3.10
ID:uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)
Safe Mode:OFF
Open_Basedir:OFF
Freespace:24.88 GB of 70.42 GB (35.34%)
MySQL: ON MSSQL: OFF Oracle: OFF PostgreSQL: OFF Curl: OFF Sockets: ON Fetch: OFF Wget: ON Perl: ON
Disabled Functions: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,

/ distr/ Shinobi/ plugins/ platerecognizer/ - drwxr-xr-x

Directory:
Viewing file:     shinobi-platerecognizer.js (4.87 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
//
// Shinobi - Tensorflow Plugin
// Copyright (C) 2016-2025 Elad Bar, Moe Alam
//
// Base Init >>
const fs = require('fs');
const config = require('./conf.json')
const fetch = require('node-fetch');
const FormData = require('form-data');
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.')
		}
	}
	try{
		s = require('../pluginBase.js')(__dirname,config)
	}catch(err){
		console.log(err)
		try{
			const {
				haltMessage,
				checkStartTime,
				setStartTime,
			} = require('../pluginCheck.js')

			if(!checkStartTime()){
				console.log(haltMessage,new Date())
				s.disconnectWebSocket()
				return
			}
			setStartTime()
		}catch(err){
			console.log(`pluginCheck failed`)
		}
	}

}
// Base Init />>

const licensePlateRegion = config.licensePlateRegion || 'us'
const platerecognizerApiKey = config.platerecognizerApiKey || '111111111111111111'
if(!config.platerecognizerApiKey){
	console.log('No Plate Recognizer API Key set.')
	console.log('set conf.json value for `platerecognizerApiKey`')
	return process.exit()
}
const baseUrl = config.platerecognizerEndpoint || "https://api.platerecognizer.com/v1/plate-reader/"

function platerecognizerRequest(d,frameBuffer){
	return new Promise((resolve,reject) => {
		try{
			let body = new FormData();
			frameBufferToPath(d,frameBuffer).then((filePath) => {
				body.append('upload', fs.createReadStream(filePath));
				// Or body.append('upload', base64Image);
				body.append('regions', licensePlateRegion); // Change to your country
				fetch(baseUrl, {
			        method: 'POST',
			        headers: {
						"Authorization": `Token ${platerecognizerApiKey}`
			        },
			        body: body
			    }).then(res => res.json())
			    .then((json) => {
					let predictions = []
					try{
						const response = json || {results: []}
						predictions = response["results"] || []
					}catch(err){
						console.log(json)
						console.log(err)
						console.log(body)
					}
					resolve(predictions);
					fs.unlink(filePath,function(){

					})
				})
			    .catch((err) => {
			        console.log(err);
			    });
			})
		}catch(err){
			resolve([])
			console.log(err)
		}
	})
}
function addVehicleMatrix(v,mats){
	const label = v.vehicle["type"]
	const confidence = v.vehicle["score"]
	const y_min = v.vehicle["ymin"]
	const x_min = v.vehicle["xmin"]
	const y_max = v.vehicle["ymax"]
	const x_max = v.vehicle["xmax"]
	const vehicleWidth = x_max - x_min
	const vehicleHeight = y_max - y_min
	mats.push({
		x: x_min,
		y: y_min,
		width: vehicleWidth,
		height: vehicleHeight,
		tag: label,
		confidence: confidence,
	})
}
function frameBufferToPath(d,buffer){
	return new Promise((resolve,reject) => {
		const tmpFile = s.gid(5)+'.jpg'
		if(!fs.existsSync(s.dir.streams)){
			fs.mkdirSync(s.dir.streams);
		}
		frameDirectory = s.dir.streams+d.ke+'/'+d.id+'/'
		fs.writeFile(frameDirectory+tmpFile,buffer,function(err){
			if(err) return s.systemLog(err);
			try{
				resolve(frameDirectory+tmpFile)
			}catch(error){
				console.error('Catch: ' + error);
			}
		})
	})
}
s.detectObject = async function(frameBuffer,d,tx,frameLocation,callback){
	const timeStart = new Date()
	const predictions = await platerecognizerRequest(d,frameBuffer)
	if(predictions.length > 0) {
		const mats = []
		predictions.forEach(function(v){
			const label = v["plate"]
			const confidence = v["score"]
			const y_min = v.box["ymin"]
			const x_min = v.box["xmin"]
			const y_max = v.box["ymax"]
			const x_max = v.box["xmax"]
			const width = x_max - x_min
			const height = y_max - y_min
			mats.push({
				x: x_min,
				y: y_min,
				width: width,
				height: height,
				tag: label,
				confidence: confidence,
			})
			addVehicleMatrix(v,mats)
		})
		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: `PlateRecognizer`,
				reason: 'object',
				matrices: mats,
				imgHeight: width,
				imgWidth: height,
			},
			frame: frameBuffer
		})
	}
	callback()
}
Command:
Quick Commands:
Upload:
[Read-Only] Max size: 100MB
PHP Filesystem: <@ Ú
Search File:
regexp
Create File:
Overwrite [Read-Only]
View File:
Mass Defacement:
[+] Main Directory: [+] Defacement Url:
LmfaoX Shell - Private Build [BETA] - v0.1 -; Generated: 0.1522 seconds