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-поток.  ****Но нужен установленный 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(); }); */
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden