Open CV (продолжение) ...

Вопросы написания собственного программного кода (на любых языках)

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Open CV (продолжение) ...

Непрочитанное сообщение Olej » 04 дек 2018, 12:30

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 - неизвестное имя: опять они его куда-то перенесли или переименовали...

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Open CV (продолжение) ...

Непрочитанное сообщение Olej » 04 дек 2018, 12:41

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:

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Open CV (продолжение) ...

Непрочитанное сообщение Olej » 04 дек 2018, 12:57

Olej писал(а):https://codecs.fedoraproject.org/openh264/
Длина = 0
:cry:
Фокус здесь в том, что:
- ошибки здесь не в нашей программе, а в пакетах не установдленных в 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

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Open CV (продолжение) ...

Непрочитанное сообщение Olej » 04 дек 2018, 13:34

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...

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Open CV (продолжение) ...

Непрочитанное сообщение Olej » 04 май 2019, 10:15

Olej писал(а): На сегодня из GIT можно установить-собрать версии: 3.3, 3.4.2 ... пререлиз 4.0.0.
Но я не вижу необходимости ... пока.
OpenCV очень быстро прогрессирует по версиям, в новых OpenCV добавляются алгоритмы, просто отсутствующие в предыдущих, и меняется даже структура отдельных разделов вместе с API. Так что имеется прямой резон сразу вручную устанавливать свежий OpenCV, не полагаясь на то, что есть в дистрибутиве.

Установка OpenCV не так и сложна, она описана в моём тексте описния относительно инсталляций для распознавания лиц, размещённом ранее здесь на форуме.

Или можете подробно почитать об этом на одной из страниц упорно продвигаемого проекта Learn OpenCV (и интересного в отдельных своих страницах):
OpenCV Installation on Ubuntu, macOS, Windows and Raspberry Pi
DECEMBER 3, 2018 BY VISHWESH SHRIMALI

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Open CV (продолжение) ...

Непрочитанное сообщение Olej » 24 фев 2020, 03:30

Проект OpenCV активно развивается. И, как я понимаю, его авторы-участники, нуждаясь в финансировании, открыли целый ряд учебных курсов (и дай им Бог удачи в этом деле). А для вовлечения учащихся в курсы, открыли сайт публикации регулярных и свежих статей относительно компьютерного зрения. Вот здесь: Learn OpenCV.

Здесь только анонсы (начала) статей. Но если вы откроете любую из статей, то увидите подробный текст + ссылку на скачивание всех иллюстрируемых программных кодов к этой теме. Более того, для скачивания вас попросят зарегистрировать свой мэйл, и после этого на мэйл будут поступать свежие уведомления о новых свежих публикациях.
Очень рекомендую обратить внимание!

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Open CV (продолжение) ...

Непрочитанное сообщение Olej » 17 янв 2023, 15:43

Olej писал(а):
24 фев 2020, 03:30
Проект OpenCV активно развивается.
Версии меняются, развиваются ... как OpenCV, так и дистрибутивов Linux где это устанавливается, и состав репозиториев пакетных систем...
Самое время посмотреть что там произошло за 4 года ;-) : Open CV (продолжение) ...

Ответить

Вернуться в «Программирование»

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

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