Skip to content

Commit c5420c6

Browse files
authored
Merge pull request #174 from moeiscool/dev
bug fix
2 parents 63a6d30 + 4c3b9b3 commit c5420c6

4 files changed

Lines changed: 31 additions & 50 deletions

File tree

README.md

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,15 +54,13 @@ http://shinobi.video/why
5454

5555
> "After trying zoneminder without success (heavy unstable and slow) I passed to Shinobi that despite being young spins a thousand times better (I have a setup with 16 cameras recording in FHD to ~ 10fps on a pentium of ~ 2009 and I turn with load below 1.5)."
5656
57-
> A Reddit user
58-
> - /r/ItalyInformatica
57+
> *A Reddit user, /r/ItalyInformatica*
5958
6059
 
6160

6261
> "I would suggest Shinobi as a NVR. It's still in the early days but works a lot better than ZoneMinder for me. I'm able to record 16 cams at 1080p 15fps continously whith no load on server (Pentium E5500 3GB RAM) where zm crashed with 6 cams at 720p. Not to mention the better interface."
6362
64-
> A Reddit user
65-
> /r/HomeNetworking
63+
> *A Reddit user, /r/HomeNetworking*
6664
6765
# How to Install and Run
6866

camera.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -427,9 +427,13 @@ s.video=function(x,e){
427427
if(!e.filename&&e.time){e.filename=s.moment(e.time)}
428428
if(!e.status){e.status=0}
429429
e.save=[e.id,e.ke,s.nameToTime(e.filename)];
430-
sql.query('DELETE FROM Videos WHERE `mid`=? AND `ke`=? AND `time`=?',e.save,function(err,r){
431-
s.tx({f:'video_delete',filename:e.filename+'.'+e.ext,mid:e.mid,ke:e.ke,time:s.nameToTime(e.filename),end:s.moment(new Date,'YYYY-MM-DD HH:mm:ss')},'GRP_'+e.ke);
432-
s.file('delete',e.dir+e.filename+'.'+e.ext)
430+
fs.stat(e.dir+e.filename+'.'+e.ext,function(err,file){
431+
sql.query('DELETE FROM Videos WHERE `mid`=? AND `ke`=? AND `time`=?',e.save,function(err,r){
432+
s.group[e.ke].init.used_space=s.group[e.ke].init.used_space-(file.size/1000000)
433+
s.init('diskUsed',e)
434+
s.tx({f:'video_delete',filename:e.filename+'.'+e.ext,mid:e.mid,ke:e.ke,time:s.nameToTime(e.filename),end:s.moment(new Date,'YYYY-MM-DD HH:mm:ss')},'GRP_'+e.ke);
435+
s.file('delete',e.dir+e.filename+'.'+e.ext)
436+
})
433437
})
434438
break;
435439
case'open':

plugins/motion/README.md

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
# Shinobi stemkoski Motion Detector
2-
Based on <a href="https://stemkoski.github.io/Three.js/Webcam-Motion-Detection.html">stemkoski JS Motion Detection</a>
1+
# Shinobi Motion Detector
32

43
Install required libraries.
54

@@ -49,6 +48,3 @@ pm2 start shinobi-motion.js
4948

5049
Doing this will reveal options in the monitor configuration. Shinobi does not need to be restarted when a plugin is initiated or stopped.
5150

52-
*Thanks to Cairo and others for these dependencies. Thanks to stemkoski as the JS image comparing is based on their research. I or Shinobi are not affiliated with stemkoski or Cairo.*
53-
54-
Shinobi Plugin by : Moe Alam

plugins/motion/shinobi-motion.js

Lines changed: 21 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ s={
3838
globalCoordsObject:{}
3939
}
4040
s.blenderRegion=function(d,cord){
41-
d.width = s.img[d.id].width;
42-
d.height = s.img[d.id].height;
41+
d.width = d.image.width;
42+
d.height = d.image.height;
4343
if(!s.canvas[d.id+'_'+cord.name]){
4444
if(!cord.sensitivity||isNaN(cord.sensitivity)){
4545
cord.sensitivity=d.mon.detector_sensitivity;
@@ -65,7 +65,7 @@ s.blenderRegion=function(d,cord){
6565
if(!s.canvasContext[d.id+'_'+cord.name]){
6666
return
6767
}
68-
s.canvasContext[d.id+'_'+cord.name].drawImage(s.img[d.id], 0, 0, d.width, d.height);
68+
s.canvasContext[d.id+'_'+cord.name].drawImage(d.image, 0, 0, d.width, d.height);
6969
if(!s.blendRegion[d.id+'_'+cord.name]){
7070
s.blendRegion[d.id+'_'+cord.name] = new Canvas(d.width, d.height);
7171
s.blendRegionContext[d.id+'_'+cord.name] = s.blendRegion[d.id+'_'+cord.name].getContext('2d');
@@ -132,23 +132,19 @@ s.differenceAccuracy=function(target, data1, data2) {
132132
}
133133

134134
s.checkAreas=function(d){
135-
try{
136-
if(!s.globalCoords[d.id]){
137-
if(!d.mon.cords){d.mon.cords={}}
138-
s.globalCoords[d.id]=Object.values(d.mon.cords);
139-
s.globalCoordsObject[d.id]=d.mon.cords;
140-
}
141-
if(d.mon.detector_frame==='1'&&!s.globalCoordsObject[d.id].frame){
142-
s.globalCoordsObject[d.id].frame={name:'frame',s:d.mon.detector_sensitivity,points:[[0,0],[0,s.img[d.id].height],[s.img[d.id].width,s.img[d.id].height],[s.img[d.id].width,0]]};
143-
s.globalCoords[d.id].push(s.globalCoordsObject[d.id].frame);
144-
}
145-
for (var b = 0; b < s.globalCoords[d.id].length; b++){
146-
if(!s.globalCoords[d.id][b]){return}
147-
s.blenderRegion(d,s.globalCoords[d.id][b])
148-
}
149-
}catch(err){
150-
console.log(err)
135+
if(!s.globalCoords[d.id]){
136+
if(!d.mon.cords){d.mon.cords={}}
137+
s.globalCoords[d.id]=Object.values(d.mon.cords);
138+
}
139+
if(d.mon.detector_frame==='1'&&!d.mon.cords.frame){
140+
d.mon.cords.frame={name:'frame',s:d.mon.detector_sensitivity,points:[[0,0],[0,d.image.height],[d.image.width,d.image.height],[d.image.width,0]]};
141+
s.globalCoords[d.id].push(d.mon.cords.frame);
142+
}
143+
for (var b = 0; b < s.globalCoords[d.id].length; b++){
144+
if(!s.globalCoords[d.id][b]){return}
145+
s.blenderRegion(d,s.globalCoords[d.id][b])
151146
}
147+
delete(d.image)
152148
}
153149

154150
io = require('socket.io-client')('ws://'+config.host+':'+config.port);//connect to master
@@ -170,16 +166,9 @@ io.on('f',function(d){
170166
delete(s.blendRegionContext[d.id+'_'+v.name])
171167
})
172168
delete(s.globalCoords[d.id])
173-
delete(s.globalCoordsObject[d.id])
174169
}
175170
break;
176171
case'frame':
177-
if(typeof d.mon ==='string'){
178-
try{d.mon=JSON.parse(d.mon)}catch(er){d.mon={}}
179-
}
180-
if(typeof d.mon.cords ==='string'){
181-
try{d.mon.cords=JSON.parse(d.mon.cords)}catch(er){d.mon.cords={}}
182-
}
183172
if(!s.buffer[d.id]){
184173
s.buffer[d.id]=[d.frame];
185174
}else{
@@ -188,25 +177,19 @@ io.on('f',function(d){
188177
if(d.frame[d.frame.length-2] === 0xFF && d.frame[d.frame.length-1] === 0xD9){
189178
s.buffer[d.id]=Buffer.concat(s.buffer[d.id]);
190179
s.globalCoords[d.id]=Object.values(d.mon.cords);
191-
s.globalCoordsObject[d.id]=d.mon.cords;
192-
if(!s.img[d.id]){
193-
s.img[d.id] = new Canvas.Image;
194-
}
180+
d.mon.cords=d.mon.cords;
181+
d.image = new Canvas.Image;
195182
if(d.mon.detector_scale_x===''||d.mon.detector_scale_y===''){
196183
console.log('Must set detector image size')
197184
return
198185
}else{
199-
s.img[d.id].width=d.mon.detector_scale_x;
200-
s.img[d.id].height=d.mon.detector_scale_y;
201-
}
202-
if(s.img[d.id].width===0||s.img[d.id].height===0){
203-
s.img[d.id].width=d.mon.detector_scale_x;
204-
s.img[d.id].height=d.mon.detector_scale_y;
186+
d.image.width=d.mon.detector_scale_x;
187+
d.image.height=d.mon.detector_scale_y;
205188
}
206-
s.img[d.id].src = s.buffer[d.id];
207-
s.img[d.id].onload = function() {
189+
d.image.onload = function() {
208190
s.checkAreas(d);
209191
}
192+
d.image.src = s.buffer[d.id];
210193
s.buffer[d.id]=null;
211194
}
212195
break;

0 commit comments

Comments
 (0)