Форум по операционной системе GNU/Linux и свободному программному обеспечению
Текущее время: 11 дек 2018, 00:58

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
 Заголовок сообщения: Re: Open CV (продолжение) ...
Непрочитанное сообщениеДобавлено: 04 дек 2018, 12:30 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11350
Откуда: Харьков
Olej писал(а):
Начну с видеокамер... Захват камеры и далее чтение происходит как-то так (Python):

Дальше...
Захват видеопотока с камеры и запись его в файл:
Код:
...
cap = cv2.VideoCapture( dev )
...
codec = ( 'DIVX', 'XVID', 'MJPG', 'X264', 'WMV1', 'WMV2' )
ncod = 1 # 1 2 3 4 5 - when choosing a codak, be careful: it must be installed in the system
fourcc = cv2.VideoWriter_fourcc( *codec[ ncod ] )    # Define the codec and create VideoWriter object
fpc = 25
try:
    out = cv2.VideoWriter( sys.argv[ 1 ], fourcc, fpc, ( 640, 480 ) )
except Exception as err:
    print( "error in output : " + str( err ) )
    sys.exit( 1 )

n = 0
while True:
    ret, frame = cap.read()                          # Capture frame-by-frame
    if not ret:
        break
    out.write( frame )                               # Write reading frame
    cv2.imshow( '', frame )                          # Display the resulting frame
    n += 1
    key = cv2.waitKey( 1 ) & 0xFF
    if 27 == key or key == ord( 'q' ): break

cap.release()                                        # When everything done, release the capture
cv2.destroyAllWindows()
out.release()
print( 'saved {} frames'.format( n ) )

Вначале мы выбираем тип кодака для видео.
Вот что я нашёл где-то в недрах описаний OpenCV:
Цитата:
This time we create a VideoWriter object. We should specify the output file name (eg: output.avi).
Then we should specify the FourCC code (details in next paragraph). Then number of frames per second (fps)
and frame size should be passed. And last one is isColor flag. If it is True, encoder expect color frame,
otherwise it works with grayscale frame.

FourCC is a 4-byte code used to specify the video codec. The list of available codes can be found in fourcc.org.
It is platform dependent. Following codecs works fine for me.

In Fedora: DIVX, XVID, MJPG, X264, WMV1, WMV2. (XVID is more preferable.
MJPG results in high size video. X264 gives very small size video)
In Windows: DIVX (More to be tested and added)
In OSX : (I don’t have access to OSX. Can some one fill this?)
FourCC code is passed as cv2.VideoWriter_fourcc('M','J','P','G') or cv2.VideoWriter_fourcc(*'MJPG) for MJPG.

Но это было в 3.0-beta и потом куда-то исчезло... работает до 3.4.3, после чего ругается, что cv2.VideoWriter_fourcc - неизвестное имя: опять они его куда-то перенесли или переименовали...


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: Open CV (продолжение) ...
Непрочитанное сообщениеДобавлено: 04 дек 2018, 12:41 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11350
Откуда: Харьков
Olej писал(а):
Вначале мы выбираем тип кодака для видео.

Вот это очень интересное место ... на котором можно убить многие часы разбирательства :-o , когда при запуске будет что-то такое:
Код:
[olej@dell Face_recognition]$ ./vsave.py xxx.avi 0

** (python:30904): CRITICAL **: gst_missing_encoder_message_new: assertion 'gst_caps_is_fixed (encode_caps)' failed

(python:30904): GStreamer-CRITICAL **: gst_element_post_message: assertion 'message != NULL' failed
GStreamer Plugin: Embedded video playback halted; module encodebin0 reported: В вашей установке GStreamer отсутствует модуль.
warning: Error pushing buffer to GStreamer pipeline (/builddir/build/BUILD/opencv-3.2.0/modules/videoio/src/cap_gstreamer.cpp:1645)
warning: Error pushing buffer to GStreamer pipeline (/builddir/build/BUILD/opencv-3.2.0/modules/videoio/src/cap_gstreamer.cpp:1645)
...
warning: Cannot send EOS to GStreamer pipeline
 (/builddir/build/BUILD/opencv-3.2.0/modules/videoio/src/cap_gstreamer.cpp:1172)
saved 24 frames

И в итоге:
Код:
[olej@dell Face_recognition]$ ls -l xxx.avi
-rw-rw-r-- 1 olej olej 0 дек  3 18:06 xxx.avi

Длина = 0
:cry:


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: Open CV (продолжение) ...
Непрочитанное сообщениеДобавлено: 04 дек 2018, 12:57 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11350
Откуда: Харьков
Olej писал(а):

Фокус здесь в том, что:
- ошибки здесь не в нашей программе, а в пакетах не установдленных в Linux системе...
- которые (недостающие пакеты) выявить трудно ... чего бы не доустанавливали
- для некоторых кодаков (H264), которые не совсем свободные, просто нет реализаций в стандартных репозиториях дистрибутивов
- для некоторых кодаков (DIVX характерного для Windows) я так и не нашёл кодака...
Например, для некоторых (последних) Fedora кодаки H264 можно найти в отдельном репозитории Cisco - https://codecs.fedoraproject.org/openh264/:
Цитата:
Parent Directory -
24/ 2016-04-25 23:07 -
25/ 2017-03-24 17:58 -
26/ 2017-03-24 17:58 -
27/ 2017-03-24 18:17 -
28/ 2018-09-12 14:13 -
29/ 2018-09-12 14:23 -
30/ 2018-09-12 14:36 -

Нужно добавить репозиторий командами dnf ... или в /etc/yum.repos.d создав файл, например fedora-cisco-openh264.repo:
Код:
[fedora-cisco-openh264]
name=Fedora $releasever openh264 (From Cisco) - $basearch
baseurl=https://codecs.fedoraproject.org/openh264/$releasever/$basearch/
type=rpm
enabled=1
enabled_metadata=1
metadata_expire=14d
repo_gpgcheck=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
skip_if_unavailable=False

[fedora-cisco-openh264-debuginfo]
name=Fedora $releasever openh264 (From Cisco) - $basearch - Debug
failovermethod=priority
baseurl=https://codecs.fedoraproject.org/openh264/$releasever/$basearch/debug/
type=rpm
enabled=0
metadata_expire=28d
repo_gpgcheck=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
skip_if_unavailable=False

После чего можем установить:
Код:
[olej@dell Face_recognition]$ sudo dnf install openh264 gstreamer1-plugin-openh264
Последняя проверка окончания срока действия метаданных: 0:59:30 назад, Пн 03 дек 2018 18:15:25.
Зависимости разрешены.
==============================================================================================================================================
 Пакет                                      Архитектура            Версия                         Репозиторий                           Размер
==============================================================================================================================================
Установка:
 gstreamer1-plugin-openh264                 x86_64                 1.10.4-1.fc27                  fedora-cisco-openh264                  19 k
 openh264                                   x86_64                 1.6.0-5.fc27                   fedora-cisco-openh264                 359 k

Результат транзакции
==============================================================================================================================================
Установка  2 Пакеты

Объем загрузки: 378 k
Объем изменений: 1.0 M
...
Установлено:
  gstreamer1-plugin-openh264.x86_64 1.10.4-1.fc27                                 openh264.x86_64 1.6.0-5.fc27
Выполнено!

Но фокус ещё и в том, что для некоторых DEB дистрибутивов - Mint 18.3 - я не знаю где взять надлежащие реализации H264.
Но в других свежих дистрибутивах Debian эти кодаки уже установлены ... вот одноплатник DragonBoard 410C:
Код:
linaro@linaro-alip:~$ uname -a
Linux linaro-alip 4.14.0-qcomlt-arm64 #1 SMP PREEMPT Fri Feb 2 21:19:01 UTC 2018 aarch64 GNU/Linux

linaro@linaro-alip:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux testing (buster)
Release:        testing
Codename:       buster


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: Open CV (продолжение) ...
Непрочитанное сообщениеДобавлено: 04 дек 2018, 13:34 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11350
Откуда: Харьков
Olej писал(а):
Вот это очень интересное место ... на котором можно убить многие часы разбирательства :-o , когда при запуске будет что-то такое:

Более того! При отсутствии установленного кодака элементарное чтение записанного так файла тоже завершится такими-же криками.
Вот такой код, который приводится во всех примерах OpenCV:
Код:
...
cap = cv2.VideoCapture( "xxx.avi" )
...
while True:
    ret, frame = cap.read()                          # Capture frame-by-frame
    if not ret: break
    if frame.ndim > 2 :                              # Convert BGR to grayscale (if not yet)
        gray = cv2.cvtColor( frame, cv2.COLOR_BGR2GRAY )
    else:
        gray = frame
    faces = common.detect( gray )
    if len( faces ) > 0:
        for x, y, w, h in faces:                     # Draw rectangle around the face
            cv2.rectangle( frame, ( x, y ), ( x + w, y + h ), ( 255, 0, 0 ), 2 )
    cv2.imshow( '', frame )                          # Display the resulting frame
    key = cv2.waitKey( 10 ) & 0xFF                   # Wait for ...     
    if ( 27 == key ) or ( key == ord( 'q' ) ): break # Esc or 'q'       

cap.release()                                        # When everything done, release the capture
cv2.destroyAllWindows()

... и код, который вчера работал - сегодня (после переинсталляций) работать перестаёт ... или при переносе в другой, точно такой же Linux...


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу Пред.  1, 2, 3

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB
[ Time : 0.168s | 15 Queries | GZIP : On ]