InSight Now
Search…
Contagem por Câmera
Para demonstrar como recuperar as câmeras e a contagem de pessoas, criamos um conveniente script para ser executado pelo NodeJS.
script.js
1
// importa a biblioteca de manipulação do sistema de arquivos
2
const fileSystem = require('fs')
3
// importa a biblioteca para requisições https
4
const https = require('https')
5
6
// algumas variáveis externas necessárias
7
// HOSTNAME do ambiente de produção
8
const hostname = 'api.cyberlabs.ai'
9
// credenciais que são cedidas pela cyberlabs
10
// explicado em Referências de Autorização
11
const clientId = '<your Client Id>'
12
const clientSecret = '<your Client Secret>'
13
// dados que são recuperados ao conseguir credenciais
14
// Conseguindo Credenciais
15
const token = '<your token>'
16
const customerId = '<your customer id>'
17
const username = '<your user>'
18
19
const secret = `${clientId}:${clientSecret}`
20
const authorization = Buffer.from(secret).toString('base64')
21
22
// executa o script para recuperar as cameras
23
// o primeiro argumento é o fator de agregação
24
// o segundo é o início do intervalo de tempo
25
// o terceiro é o término do intervalo
26
// '[1-60]', 'YYYY-MM-DD HH:MI:SS', 'YYYY-MM-DD HH:MI:SS')
27
run('1', '2020-01-20 08:00:00', '2020-01-20 10:00:00')
28
29
// função para recuperar os dados que precisamos
30
async function run (aggregation, startTime, endTime) {
31
const START = microTime()
32
// recupera as cameras
33
const response = await get('cameras')
34
if (!response.status) {
35
throw new Error('Invalid cameras answer')
36
}
37
const all = []
38
const cameras = response.data
39
40
// percorre a lista de cameras
41
for (let camera of cameras) {
42
let cameraId = camera.id
43
let cameraName = camera.name
44
45
console.log('~> cameraId [start]: ', cameraId)
46
47
const COUNTER_START = microTime()
48
// recupera a contagem
49
let counter = await get(
50
'charts/people/counter',
51
`camera=${cameraId}&customer=${customerId}&aggregation=${aggregation}&startTime=${startTime}&endTime=${endTime}`
52
)
53
54
const { chart } = counter
55
if (!Array.isArray(chart)) {
56
throw new Error('Invalid people counter answer')
57
}
58
59
// percorre a contagem agrupando os dados
60
const map = (item) => {
61
return {
62
...item,
63
username,
64
customerId,
65
cameraId,
66
cameraName
67
}
68
}
69
all.push(...chart.map(map))
70
71
const COUNTER_END = microTime()
72
console.log('###### TIME', (COUNTER_END - COUNTER_START) / 1000, 'seconds')
73
console.log('~> cameraId [finish]: ', cameraId, ' [', chart.length, ']')
74
}
75
// escreve um JSON com os dados recuperados
76
fileSystem.writeFileSync('script.json', JSON.stringify(all))
77
78
const END = microTime()
79
console.log('## TIME', (END - START) / 1000, 'seconds')
80
}
81
82
// pega o momento atual em milisegundos
83
function microTime () {
84
return new Date().getTime()
85
}
86
87
// função para executar os requests
88
function get (path, queryString = '') {
89
return new Promise((resolve, reject) => {
90
const options = {
91
method: 'GET',
92
hostname: hostname,
93
port: 443,
94
path: `/rest/api/v1/${path}?token=${token}&${encodeURI(queryString)}`,
95
headers: {
96
'Content-Type': 'application/json',
97
'Authorization': `insight ${authorization}`
98
}
99
}
100
let answer = ''
101
const request = https.request(options, function (response) {
102
response.setEncoding('utf8')
103
response.on('data', function (chunk) {
104
answer += chunk
105
})
106
response.on('end', () => {
107
resolve(JSON.parse(answer))
108
})
109
response.on('error', function (error) {
110
reject(error)
111
})
112
})
113
request.end()
114
})
115
}
116
Copied!
Last modified 1yr ago
Copy link