NEWS
Получение картинки с камеры и отправка в телеграм
-
Пример скриптов для получения картинки с камер.
Для камер, которые могут отдавать готовую картинку по url:
! ````
var request = require('request');
var fs = require('fs');
! // получение картинки с камеры
function getCamera(url, params, callback) {
/*
url - адрес с картинкой
params - доп параметры, которые надо передать в callback
callback - функция, вызываемая после получения картинки
*/
var tmpfile = "/tmp/snap.jpg";
// дергаем адрес с картинкой
request.get({url: url, encoding: 'binary'}, function (err, response, body) {
if (err) {
console.error(err);
callback('Ошибка: ' + err, params);
}
// запишем результат в файл
fs.writeFile(tmpfile, body, 'binary', function(err) {
if (err) {
console.error(err);
callback('Ошибка: ' + err, params);
} else {
callback(tmpfile, params);
}
});
});
}
! // вызов получения картинки с камеры и отправка в телеграм
getCamera('http://192.168.1.45/image.jpg', {name: 'Камера 1'}, function(filename, params){
sendTo('telegram.0', {
user: params['user'],
text: filename,
caption: params['name']
});
});Для камер, которые отдают rtsp-поток. ![3371_822f0f4f-b801-4fb0-99f7-88aaca8f9651.jpg](/assets/uploads/files/3371_822f0f4f-b801-4fb0-99f7-88aaca8f9651.jpg) ****Но нужен установленный ffmpeg !!!**** >! ```` var spawn = require('child_process').spawn; >! // получение картинки с камеры с rtsp-потоком function getCameraSnap(url, params, callback) { /* url - адрес rtsp-потока камеры params - доп параметры, которые надо передать в callback callback - функция, вызываемая после получения картинки */ var tmpfile = "/tmp/snap.jpg"; // выполняем команду ffmpeg чтобы сделать картинку с потока let ffmpegCommand = '-y -i ' + url + ' -vframes 1 -s 1280:720 -f image2 ' + tmpfile; let ffmpeg = spawn('ffmpeg', (ffmpegCommand).split(' '), {}); ffmpeg.stderr.on('data', function(data){ console.error(data.toString()); }); ffmpeg.on('close', function(code) { callback(tmpfile, params); }); } >! getCameraSnap('rtsp://admin:admin@10.0.0.229/unicast', {name: 'Камера 2'}, function(filename, params){ sendTo('telegram.0', { user: params['user'], text: filename, caption: params['name'] }); });
Еще можно печатать на картинку текст, например температуру или какие-то другие сообщения.
Нужен установленный graphicsmagick !!!sudo apt-get install graphicsmagick
и еще в настройках драйвера JS надо указать модуль gm
! ````
//var gm = require('gm').subClass({imageMagick: true});
var gm = require('gm');
! function writeText(filename, params, callback) {
/*
filename - файл с картинкой
params - доп параметры, которые надо передать в callback
callback - функция, вызываемая после
*/
var tmpfile = "/tmp/snapwithtext.jpg";
gm(filename)
.stroke("#000000", 1)
.fill("#ffffff")
.font("Helvetica.ttf", 32)
//.font("/home/pi/11102.ttf", 58)
.drawText(30, 60, "Надоело получать скучные текстовые сообщения!")
//.stroke("#FF0000", 2)
//.fill("#ffff00")
//.font("/home/pi/11068.ttf", 32)
//.drawText(30, 100, "Температура на улице: "+getState('zont.0.T102_31739.therm_59facf9105b60500659fe39d').val)
.write(tmpfile, function (err) {
if (err) {
console.error(err);
} else {
callback(tmpfile, params);
}
});
}
! getCameraSnap('rtsp://admin:admin@10.0.0.229/unicast', {name: 'Камера 3'}, function(filename, params){
writeText(filename, params, function (filename, params) {
sendTo('telegram.0', {
user: params['user'],
text: filename,
caption: params['name']
});
});
}); -
Продолжу примеры с камерами и телеграмом.
Для примеров нужен установленный ffmpeg и graphicsmagick из предыдущего сообщения!!!
-
отправка 5 секунд с камеры с rtsp-потоком в телеграм в виде GIF-анимации (сразу загружается и показывается)
-
отправка такого же видео, но с наложением текста на картинку
!
var spawn = require('child_process').spawn; var gm = require('gm'); ! function getCameraVideo(url, extcmd, tmpfile, callback) { /* url - адрес rtsp-потока камеры extcmd - дополнительный код в команде ffmpeg filename - имя файла для формирования callback - функция, вызываемая после получения видео */ var time = 5, // длина записи fps = 10, // частота кадров потока codec = 'libx264', // h264_omx для Raspberry Pi size = '1280:720'; // результирующий размер видео // выполняем команду ffmpeg чтобы сделать запись с потока var ffmpegCommand = '-y -i ' + url + extcmd + ' -t ' + time + ' -f mp4 -vcodec ' + codec + ' -pix_fmt yuv420p -s ' + size + ' -b:v 1500k -vsync vfr -an -r ' + fps + ' ' + tmpfile; var ffmpeg = spawn('ffmpeg', (ffmpegCommand).split(' '), {}); ffmpeg.stderr.on('data', function(data){ console.error(data.toString()); }); ffmpeg.on('close', function(code) { callback(tmpfile); }); } ! function writeText4Video(callback) { /* callback - функция, вызываемая после формирования картинки */ var tmpfile = "/tmp/blankwithtext.png"; gm(1280, 720, "#000000") // размера картики и черный цвет фона .transparent('#000000') // прозрачность .stroke("#000000", 1) .fill("#ffffff") .font("Helvetica.ttf", 32) //.font("/home/pi/11102.ttf", 58) .drawText(30, 60, "Надоело получать скучные текстовые сообщения!") .stroke("#000000", 1) .fill("#ffff00") //.font("/home/pi/11068.ttf", 32) .drawText(30, 100, "Температура на улице: "+getState('zont.0.T102_31739.therm_59facf9105b60500659fe39d').val) .write(tmpfile, function (err) { if (err) { console.error(err); } else { callback(tmpfile); } }); } ! // получение 5 сек видео с камеры getCameraVideo('rtsp://10.0.0.229/unicast', '', '/tmp/video1.mp4', function(filename){ sendTo('telegram.0', { text: filename, caption: 'Камера 1' }); }); ! // получение 5 сек видео с камеры и с информацией writeText4Video(function(imgfile){ // дополнительно укажем, что видео объединяем с полученной картинкой var cmd = ' -i ' + imgfile + ' -filter_complex [1]lut=a=val*0.7[a];[0][a]overlay=0:0'; // получение 5 сек видео с камеры getCameraVideo('rtsp://10.0.0.229/unicast', cmd, '/tmp/video2.mp4', function(filename){ sendTo('telegram.0', { text: filename, caption: 'Камера 2' }); }); }); !
-
-
В лог сыпятся ошибки которые совсем вроде и не ошибки. Как убрать?
! javascript.0 2018-01-10 11:07:14.674 error [libx264 @ 0xb701db40] kb/s:1444.89
! javascript.0 2018-01-10 11:07:14.674 error [libx264 @ 0xb701db40] ref B L1: 92.4% 7.6%
! javascript.0 2018-01-10 11:07:14.674 error [libx264 @ 0xb701db40] ref B L0: 96.1% 3.9%
! javascript.0 2018-01-10 11:07:14.674 error [libx264 @ 0xb701db40] ref P L0: 86.2% 4.9% 5.0% 3.9%
! javascript.0 2018-01-10 11:07:14.674 error [libx264 @ 0xb701db40] Weighted P-Frames: Y:0.0% UV:0.0%
! javascript.0 2018-01-10 11:07:14.674 error [libx264 @ 0xb701db40] i8c dc,h,v,p: 39% 23% 23% 14%
! javascript.0 2018-01-10 11:07:14.674 error [libx264 @ 0xb701db40] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 23% 19% 11% 7% 8% 7% 8% 8% 8%
! javascript.0 2018-01-10 11:07:14.674 error [libx264 @ 0xb701db40] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 32% 24% 19% 2% 3% 4% 5% 6% 5%
! javascript.0 2018-01-10 11:07:14.674 error [libx264 @ 0xb701db40] i16 v,h,dc,p: 15% 14% 27% 44%
! javascript.0 2018-01-10 11:07:14.674 error [libx264 @ 0xb701db40] coded y,uvDC,uvAC intra: 89.6% 53.0% 39.1% inter: 16.9% 8.9% 0.7%
! javascript.0 2018-01-10 11:07:14.674 error [libx264 @ 0xb701db40] 8x8 transform intra:23.5% inter:12.7%
! javascript.0 2018-01-10 11:07:14.674 error [libx264 @ 0xb701db40] final ratefactor: 20.87
! javascript.0 2018-01-10 11:07:14.674 error [libx264 @ 0xb701db40] mb B I16..4: 0.0% 0.0% 0.0% B16..8: 33.0% 2.1% 0.3% direct: 0.3% skip:64.2% L0:53.8% L1:45.7% BI: 0.5%
! javascript.0 2018-01-10 11:07:14.674 error [libx264 @ 0xb701db40] mb P I16..4: 0.2% 0.6% 0.4% P16..4: 35.6% 3.1% 2.3% 0.0% 0.0% skip:57.8%
! javascript.0 2018-01-10 11:07:14.674 error [libx264 @ 0xb701db40] mb I I16..4: 5.9% 12.1% 82.0%
! javascript.0 2018-01-10 11:07:14.674 error script.js.Мои.Видео_через_Телеграм: [libx264 @ 0xb701db40] consecutive B-frames: 68.9% 13.3% 0.0% 17.8%
! javascript.0 2018-01-10 11:07:14.672 error [libx264 @ 0xb701db40] frame B:9 Avg QP:26.88 size: 1935
! javascript.0 2018-01-10 11:07:14.672 error [libx264 @ 0xb701db40] frame P:35 Avg QP:22.35 size: 16917
! javascript.0 2018-01-10 11:07:14.672 error script.js.Мои.Видео_через_Телеграм: [libx264 @ 0xb701db40] frame I:1 Avg QP:12.18 size:257434
! javascript.0 2018-01-10 11:07:14.544 error video:847kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.150408%
! javascript.0 2018-01-10 11:07:14.544 error script.js.Мои.Видео_через_Телеграм: frame= 45 fps=3.0 q=-1.0 Lsize= 849kB time=00:00:04.50 bitrate=1544.8kbits/s dup=0 drop=39 speed=0.303x
! javascript.0 2018-01-10 11:07:04.029 error script.js.Мои.Видео_через_Телеграм: frame= 44 fps= 11 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A dup=0 drop=38 speed= 0x
! javascript.0 2018-01-10 11:07:03.910 error script.js.Мои.Видео_через_Телеграм: [h264 @ 0xb6ff20d0] concealing 3403 DC, 3403 AC, 3403 MV errors in I frame
! javascript.0 2018-01-10 11:07:03.873 error script.js.Мои.Видео_через_Телеграм: [h264 @ 0xb6ff20d0] error while decoding MB 6 3, bytestream -19
! javascript.0 2018-01-10 11:07:03.137 error frame= 42 fps= 12 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A dup=0 drop=36 speed= 0x
! javascript.0 2018-01-10 11:07:03.137 error [rtsp @ 0xb6f92300] RTP: missed 47 packets
! javascript.0 2018-01-10 11:07:03.137 error script.js.Мои.Видео_через_Телеграм: [rtsp @ 0xb6f92300] max delay reached. need to consume packet
! javascript.0 2018-01-10 11:07:03.072 error [rtsp @ 0xb6f92300] RTP: missed 1 packets
! javascript.0 2018-01-10 11:07:03.072 error script.js.Мои.Видео_через_Телеграм: [rtsp @ 0xb6f92300] max delay reached. need to consume packet
! javascript.0 2018-01-10 11:07:02.978 error script.js.Мои.Видео_через_Телеграм: frame= 39 fps= 14 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A dup=0 drop=33 speed= 0x
! javascript.0 2018-01-10 11:07:02.895 error script.js.Мои.Видео_через_Телеграм: frame= 36 fps= 17 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A dup=0 drop=30 speed= 0x
! javascript.0 2018-01-10 11:07:01.336 error script.js.Мои.Видео_через_Телеграм: frame= 31 fps= 19 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A dup=0 drop=25 speed= 0x
! javascript.0 2018-01-10 11:07:00.768 error script.js.Мои.Видео_через_Телеграм: frame= 25 fps= 24 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A dup=0 drop=19 speed= 0x
! javascript.0 2018-01-10 11:07:00.590 error [h264 @ 0xb7001cc0] Increasing reorder buffer to 1
! javascript.0 2018-01-10 11:07:00.590 error [rtsp @ 0xb6f92300] RTP: missed 17 packets
! javascript.0 2018-01-10 11:07:00.590 error script.js.Мои.Видео_через_Телеграм: [rtsp @ 0xb6f92300] max delay reached. need to consume packet
! javascript.0 2018-01-10 11:07:00.201 error script.js.Мои.Видео_через_Телеграм: frame= 17 fps=0.0 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A dup=0 drop=14 speed= 0x
! javascript.0 2018-01-10 11:06:59.702 error Press [q] to stop, [?] for help
! javascript.0 2018-01-10 11:06:59.702 error Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
! javascript.0 2018-01-10 11:06:59.702 error Stream mapping:
! javascript.0 2018-01-10 11:06:59.702 error cpb: bitrate max/min/avg: 0/0/1500000 buffer size: 0 vbv_delay: -1
! javascript.0 2018-01-10 11:06:59.702 error Side data:
! javascript.0 2018-01-10 11:06:59.702 error encoder : Lavc57.64.101 libx264
! javascript.0 2018-01-10 11:06:59.702 error Metadata:
! javascript.0 2018-01-10 11:06:59.702 error Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 1280x720, q=-1–1, 1500 kb/s, 10 fps, 10240 tbn, 10 tbc
! javascript.0 2018-01-10 11:06:59.702 error encoder : Lavf57.56.101
! javascript.0 2018-01-10 11:06:59.702 error script.js.Мои.Видео_через_Телеграм:
! javascript.0 2018-01-10 11:06:59.700 error comment : ch0.h264
! javascript.0 2018-01-10 11:06:59.700 error title : H.264 Program Stream, streamed by the LIVE555 Media Server
! javascript.0 2018-01-10 11:06:59.700 error Metadata:
! javascript.0 2018-01-10 11:06:59.700 error script.js.Мои.Видео_через_Телеграм: Output #0, mp4, to '/tmp/video1.mp4':
! javascript.0 2018-01-10 11:06:59.666 error script.js.Мои.Видео_через_Телеграм: [libx264 @ 0xb701db40] 264 - core 142 r2431 a5831aa - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 debl
! javascript.0 2018-01-10 11:06:59.664 error script.js.Мои.Видео_через_Телеграм: [libx264 @ 0xb701db40] profile High, level 3.1
! javascript.0 2018-01-10 11:06:59.625 error script.js.Мои.Видео_через_Телеграм: [libx264 @ 0xb701db40] using cpu capabilities: ARMv6 NEON
! javascript.0 2018-01-10 11:06:59.264 error Stream #0:1: Audio: aac (LC), 8000 Hz, stereo, fltp
! javascript.0 2018-01-10 11:06:59.264 error script.js.Мои.Видео_через_Телеграм: Stream #0:0: Video: h264 (High), yuv420p(progressive), 1280x720, 20.08 tbr, 90k tbn, 180k tbc
! javascript.0 2018-01-10 11:06:59.251 error Duration: N/A, start: 0.000000, bitrate: N/A
! javascript.0 2018-01-10 11:06:59.251 error comment : ch0.h264
! javascript.0 2018-01-10 11:06:59.251 error script.js.Мои.Видео_через_Телеграм: H.264 Program Stream, streamed by the LIVE555 Media Server
! javascript.0 2018-01-10 11:06:59.249 error title :
! javascript.0 2018-01-10 11:06:59.249 error Metadata:
! javascript.0 2018-01-10 11:06:59.249 error script.js.Мои.Видео_через_Телеграм: Input #0, rtsp, from 'rtsp://@192.168.3.17:554/ch0.h264':
! javascript.0 2018-01-10 11:06:57.407 error [libx264 @ 0xb8b3f590] kb/s:1383.03
! javascript.0 2018-01-10 11:06:57.407 error [libx264 @ 0xb8b3f590] ref B L1: 88.4% 11.6%
! javascript.0 2018-01-10 11:06:57.407 error [libx264 @ 0xb8b3f590] ref B L0: 94.0% 4.3% 1.8%
! javascript.0 2018-01-10 11:06:57.407 error [libx264 @ 0xb8b3f590] ref P L0: 86.7% 4.4% 4.6% 4.2%
! javascript.0 2018-01-10 11:06:57.407 error [libx264 @ 0xb8b3f590] Weighted P-Frames: Y:0.0% UV:0.0%
! javascript.0 2018-01-10 11:06:57.407 error [libx264 @ 0xb8b3f590] i8c dc,h,v,p: 36% 25% 24% 15%
! javascript.0 2018-01-10 11:06:57.407 error [libx264 @ 0xb8b3f590] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 23% 19% 11% 7% 8% 7% 7% 8% 9%
! javascript.0 2018-01-10 11:06:57.407 error [libx264 @ 0xb8b3f590] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 32% 23% 19% 3% 3% 4% 5% 6% 5%
! javascript.0 2018-01-10 11:06:57.407 error [libx264 @ 0xb8b3f590] i16 v,h,dc,p: 19% 12% 22% 46%
! javascript.0 2018-01-10 11:06:57.407 error [libx264 @ 0xb8b3f590] coded y,uvDC,uvAC intra: 89.7% 52.8% 39.9% inter: 15.3% 7.8% 0.7%
! javascript.0 2018-01-10 11:06:57.407 error [libx264 @ 0xb8b3f590] 8x8 transform intra:23.7% inter:10.5%
! javascript.0 2018-01-10 11:06:57.407 error [libx264 @ 0xb8b3f590] final ratefactor: 20.80
! javascript.0 2018-01-10 11:06:57.407 error [libx264 @ 0xb8b3f590] mb B I16..4: 0.0% 0.0% 0.0% B16..8: 30.5% 1.5% 0.2% direct: 0.2% skip:67.6% L0:49.9% L1:49.6% BI: 0.5%
! javascript.0 2018-01-10 11:06:57.407 error [libx264 @ 0xb8b3f590] mb P I16..4: 0.2% 0.6% 0.4% P16..4: 34.8% 2.7% 2.0% 0.0% 0.0% skip:59.5%
! javascript.0 2018-01-10 11:06:57.407 error [libx264 @ 0xb8b3f590] mb I I16..4: 6.2% 12.2% 81.6%
! javascript.0 2018-01-10 11:06:57.407 error script.js.Мои.Видео_через_Телеграм_c_текстом: [libx264 @ 0xb8b3f590] consecutive B-frames: 66.0% 12.0% 6.0% 16.0%
! javascript.0 2018-01-10 11:06:57.406 error [libx264 @ 0xb8b3f590] frame B:11 Avg QP:27.12 size: 1813
! javascript.0 2018-01-10 11:06:57.406 error [libx264 @ 0xb8b3f590] frame P:38 Avg QP:22.42 size: 15477
! javascript.0 2018-01-10 11:06:57.406 error script.js.Мои.Видео_через_Телеграм_c_текстом: [libx264 @ 0xb8b3f590] frame I:1 Avg QP:12.25 size:256340
! javascript.0 2018-01-10 11:06:57.321 error video:845kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.152237%
! javascript.0 2018-01-10 11:06:57.321 error script.js.Мои.Видео_через_Телеграм_c_текстом: frame= 50 fps=2.9 q=-1.0 Lsize= 846kB time=00:00:04.70 bitrate=1474.7kbits/s dup=0 drop=45 speed=0.269x
! javascript.0 2018-01-10 11:06:56.691 error libpostproc 54. 1.100 / 54. 1.100
! javascript.0 2018-01-10 11:06:56.691 error libswresample 2. 3.100 / 2. 3.100
! javascript.0 2018-01-10 11:06:56.691 error libswscale 4. 2.100 / 4. 2.100
! javascript.0 2018-01-10 11:06:56.691 error script.js.Мои.Видео_через_Телеграм: libavresample 3. 1. 0 / 3. 1. 0
! javascript.0 2018-01-10 11:06:56.688 error libavfilter 6. 65.100 / 6. 65.100
! javascript.0 2018-01-10 11:06:56.688 error libavdevice 57. 1.100 / 57. 1.100
! javascript.0 2018-01-10 11:06:56.688 error libavformat 57. 56.101 / 57. 56.101
! javascript.0 2018-01-10 11:06:56.688 error libavcodec 57. 64.101 / 57. 64.101
! javascript.0 2018-01-10 11:06:56.688 error script.js.Мои.Видео_через_Телеграм: libavutil 55. 34.101 / 55. 34.101
! javascript.0 2018-01-10 11:06:56.658 error script.js.Мои.Видео_через_Телеграм: configuration: –prefix=/usr --extra-version='1~bpo8+1' --toolchain=hardened --libdir=/usr/lib/arm-linux-gnueabihf --incdir=/usr/include/arm-linux-gnueabihf --en
! javascript.0 2018-01-10 11:06:56.656 error built with gcc 4.9.2 (Debian 4.9.2-10)
! javascript.0 2018-01-10 11:06:56.656 error script.js.Мои.Видео_через_Телеграм: ffmpeg version 3.2.5-1~bpo8+1 Copyright (c) 2000-2017 the FFmpeg developers -
В лог сыпятся ошибки которые совсем вроде и не ошибки. Как убрать? `
Найти в коде кусок:ffmpeg.stderr.on('data', function(data){ console.error(data.toString()); });
и удалить его, либо закоментировать вывод ошибок:
ffmpeg.stderr.on('data', function(data){ //console.error(data.toString()); });
-
Еще один вариант (https://letyshops.com/r/aliexpress-l95yrp4f980s0
// Функция получает изображение с камеры, сохраняет его во временный файл и отправляет его в драйвер telegram function sendSnapshot() { exec("wget 'http://192.168.0.XX:YYYY/snapshot.cgi?user=admin&pwd=ПАРОЛЬ' -O /tmp/snapshot.jpg", function (err) { if (err) { console.error(err); } else { sendTo('telegram.0', '/tmp/snapshot.jpg'); // sendTo('telegram.0', {user: 'User', text: '/tmp/snapshot.jpg', caption: 'Камера 1'}); } }); } /* // Для проверки: schedule("* * * * *", function () { log("Будет исполняться каждую минуту!"); sendSnapshot(); }); */