mirror of
https://github.com/CopterExpress/clover.git
synced 2026-05-28 14:09:33 +00:00
docs: added the gsreamer's section in duocam_setup.md (#387)
* Added the gsreamer's section in duocam_setup.md Added the section on how to modify video using GStreamer * Edit Co-authored-by: Oleg Kalachev <okalachev@gmail.com>
This commit is contained in:
@@ -104,9 +104,11 @@ v4l2-ctl --list-devices
|
||||
Далее нам нужно настроить автозапуск видео с тепловизора при включении Raspberry Pi. Для этого в домашней директории создайте файл `duocam_autostart.sh` и добавьте в него команду для запуска видео с тепловизора Seek Thermal CompactPRO:
|
||||
|
||||
```
|
||||
seek_viewer --camtype=seekpro --colormap=2 --rotate=0 --mode=v4l2 --output=/dev/video5
|
||||
seek_viewer --camtype=seekpro --colormap=1 --rotate=0 --mode=v4l2 --output=/dev/video5
|
||||
```
|
||||
|
||||
> **Hint** Чтобы изображение с тепловизора имело красно-синюю раскраску используйте значение параметра `--colormap=2`.
|
||||
|
||||
Чтобы корректно запускать файл, необходимо присвоить ему соответствующие флаги доступа.
|
||||
|
||||
```bash
|
||||
@@ -164,12 +166,18 @@ gst-rtsp-launch "( v4l2src device=/dev/video0 ! video/x-raw,format=UYVY,width=19
|
||||
gst-rtsp-launch "( v4l2src device=/dev/video0 ! video/x-raw,format=UYVY,width=1920,height=1080,framerate=30/1 ! videoscale ! video/x-raw, width=1280, height=720 ! v4l2h264enc output-io-mode=4 extra-controls=\"encode,frame_level_rate_control_enable=1,h264_profile=4,h264_level=13,video_bitrate=4000000,h264_i_frame_period=5;\" ! rtph264pay name=pay0 mtu=1024 pt=96 )"
|
||||
```
|
||||
|
||||
Трансляция с обеих камер, картинка-в-картинке, разрешение 1280x720:
|
||||
Трансляция с обеих камер, "картинка в картинке", разрешение 1280x720:
|
||||
|
||||
```
|
||||
gst-rtsp-launch "( v4l2src device=/dev/video0 ! video/x-raw,format=UYVY,width=1920,height=1080,framerate=(fraction)30/1 ! videoscale ! video/x-raw,width=1280,height=720 ! queue ! mix. v4l2src device=/dev/video5 ! video/x-raw,width=320,height=240 ! queue ! videomixer name=mix ! v4l2h264enc output-io-mode=4 extra-controls=\"encode,frame_level_rate_control_enable=1,h264_profile=4,h264_level=13,video_bitrate=4000000,h264_i_frame_period=5;\" ! rtph264pay name=pay0 pt=96 )"
|
||||
```
|
||||
|
||||
Трансляция с обеих камер, "картинка в картинке", с обрезкой изображения тепловизора по краям, разрешение 1280x720:
|
||||
|
||||
```
|
||||
gst-rtsp-launch "( v4l2src device=/dev/video0 ! video/x-raw,format=UYVY,width=1920,height=1080,framerate=(fraction)30/1 ! videoscale ! video/x-raw,width=1280,height=720 ! queue ! mix. v4l2src device=/dev/video5 ! video/x-raw,width=320,height=240 ! videoscale ! video/x-raw, width=640, height=480 ! videocrop top=60 left=180 right=140 bottom=100 ! queue ! videomixer name=mix ! v4l2h264enc output-io-mode=4 extra-controls=\"encode,frame_level_rate_control_enable=1,h264_profile=4,h264_level=13,video_bitrate=4000000,h264_i_frame_period=5;\" ! rtph264pay name=pay0 pt=96 )"
|
||||
```
|
||||
|
||||
Смотреть трансляцию можно, например, в QGroundControl указав в настройках:
|
||||
|
||||

|
||||
@@ -263,3 +271,66 @@ sudo systemctl restart clover
|
||||
И новые топики с камерами появятся в списке:
|
||||
|
||||

|
||||
|
||||
## Обработка изображения с камер с помощью GStreamer
|
||||
|
||||
Изображение с камер можно обрабатывать как методами OpenCV, так и GStreamer. С помощью GStreamer можно, например, обрезать или изменить размер кадра. В этом разделе расскажем, как изменить разрешение передней камеры с 1920х1080 на 1280х720, а также вырезать из изображения с тепловизора (обрезать края кадра) в центральной части квадрат размером 120х120 и растянуть его до 240х240.
|
||||
|
||||
Для начала нам нужно создать еще 2 виртуальных видеоустройства, куда мы направим вывод с GStreamer. В файле `/etc/modprobe.d/v4l2loopback.conf` измените содержимое на:
|
||||
|
||||
```
|
||||
options v4l2loopback devices=3 exclusive_caps=1 video_nr=5,6,7 card_label="Thermal-camera,Thermal-scale,Front-scale"
|
||||
```
|
||||
|
||||
Теперь нам нужно добавить непосредственно команды GStreamer, которые делают то, что нам нужно. Для этого в файле `duocam_autostart.sh` измените содержимое на:
|
||||
|
||||
```bash
|
||||
seek_viewer --camtype=seekpro --colormap=1 --rotate=0 --mode=v4l2 --output=/dev/video5 &
|
||||
|
||||
sleep 10
|
||||
|
||||
gst-launch-1.0 v4l2src device=/dev/video5 ! video/x-raw,width=320,height=240 ! videoconvert ! videocrop top=30 left=90 right=70 bottom=50 ! videoscale ! video/x-raw, width=240, height=240 ! tee ! v4l2sink device=/dev/video6 &
|
||||
|
||||
gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,format=UYVY,width=1920,height=1080,framerate=30/1 ! videoscale ! video/x-raw, width=1280, height=720 ! tee ! v4l2sink device=/dev/video7
|
||||
```
|
||||
|
||||
В заключение измените содержимое файла `~/catkin_ws/src/clover/clover/launch/front_camera.launch` на следующий текст:
|
||||
|
||||
```xml
|
||||
<launch>
|
||||
<!-- v4l2 device -->
|
||||
<arg name="front_device" default="/dev/video7"/>
|
||||
|
||||
<!-- camera nodelet manager -->
|
||||
<node pkg="nodelet" type="nodelet" name="front_camera_nodelet_manager" args="manager" output="screen" clear_params="true" respawn="true">
|
||||
<param name="num_worker_threads" value="2"/>
|
||||
</node>
|
||||
|
||||
<!-- camera node -->
|
||||
<node pkg="nodelet" type="nodelet" name="front_camera" args="load cv_camera/CvCameraNodelet front_camera_nodelet_manager" clear_params="true" respawn="true">
|
||||
<!-- v4l2 device -->
|
||||
<param name="device_path" value="$(arg front_device)"/>
|
||||
</node>
|
||||
</launch>
|
||||
```
|
||||
|
||||
А также измените содержимое файла `~/catkin_ws/src/clover/clover/launch/thermal_camera.launch` на следующий текст:
|
||||
|
||||
```xml
|
||||
<launch>
|
||||
<!-- v4l2 device -->
|
||||
<arg name="thermal_device" default="/dev/video6"/>
|
||||
|
||||
<!-- camera nodelet manager -->
|
||||
<node pkg="nodelet" type="nodelet" name="thermal_camera_nodelet_manager" args="manager" output="screen" clear_params="true" respawn="true">
|
||||
<param name="num_worker_threads" value="2"/>
|
||||
</node>
|
||||
|
||||
<!-- camera node -->
|
||||
<node pkg="nodelet" type="nodelet" name="thermal_camera" args="load cv_camera/CvCameraNodelet thermal_camera_nodelet_manager" launch-prefix="rosrun clover waitfile $(arg thermal_device)" clear_params="true" respawn="true">
|
||||
<param name="device_path" value="$(arg thermal_device)"/>
|
||||
</node>
|
||||
</launch>
|
||||
```
|
||||
|
||||
После перезагрузки Raspberry Pi в топиках с камерами будут обработанные изображения.
|
||||
|
||||
Reference in New Issue
Block a user