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

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

Модератор: Olej

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

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

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

Olej писал(а):
17 янв 2023, 19:05
Тот который нам нужен для захвата видеопотока (кадров) - это тот который index0, т.е. /dev/video0
Если камера одна то дефаултная камера должна захватываться как cv2.VideoCapture(0) (как мне помнится?), и тогда процесс захвата фрейма должен выглядеть как-то так:

Код: Выделить всё

[olej@xenix dev]$ python
Python 3.11.1 (main, Dec  7 2022, 00:00:00) [GCC 12.2.1 20221121 (Red Hat 12.2.1-4)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2 as cv
>>> import numpy as np
>>> cap = cv.VideoCapture(0)
[ INFO:0@31.069] global /builddir/build/BUILD/opencv-4.6.0/modules/videoio/src/videoio_registry.cpp (223) VideoBackendRegistry VIDEOIO: Enabled backends(8, sorted by priority): FFMPEG(1000); GSTREAMER(990); INTEL_MFX(980); V4L2(970); CV_IMAGES(960); CV_MJPEG(950); FIREWIRE(940); UEYE(930)
[ INFO:0@31.077] global /builddir/build/BUILD/opencv-4.6.0/modules/videoio/src/cap_gstreamer.cpp (1104) open OpenCV | GStreamer: v4l2src device=/dev/video0 ! videoconvert ! appsink drop=true
[ INFO:0@31.179] global /builddir/build/BUILD/opencv-4.6.0/modules/videoio/src/cap_gstreamer.cpp (1137) open OpenCV | GStreamer: mode - MANUAL
[ WARN:0@32.050] global /builddir/build/BUILD/opencv-4.6.0/modules/videoio/src/cap_gstreamer.cpp (1405) open OpenCV | GStreamer warning: Cannot query video position: status=0, value=-1, duration=-1
>>> print(cap.isOpened())
True
>>> ret, frame = cap.read()
>>> print(ret)
True
>>> gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
[ INFO:0@108.043] global /builddir/build/BUILD/opencv-4.6.0/modules/core/src/parallel/registry_parallel.impl.hpp (96) ParallelBackendRegistry core(parallel): Enabled backends(2, sorted by priority): TBB(1000); OPENMP(990)
[ INFO:0@108.043] global /builddir/build/BUILD/opencv-4.6.0/modules/core/include/opencv2/core/parallel/backend/parallel_for.tbb.hpp (54) ParallelForBackend Initializing TBB parallel backend: TBB_INTERFACE_VERSION=11103
[ INFO:0@108.043] global /builddir/build/BUILD/opencv-4.6.0/modules/core/src/parallel/parallel.cpp (77) createParallelForAPI core(parallel): using backend: TBB (priority=1000)
>>> cv.imshow('frame', gray)
[ INFO:0@134.538] global /builddir/build/BUILD/opencv-4.6.0/modules/highgui/src/registry.impl.hpp (114) UIBackendRegistry UI: Enabled backends(3, sorted by priority): GTK(1000); GTK3(990); GTK2(980) + BUILTIN(QT5)
>>> cap.release()
>>> cv.destroyAllWindows()
>>> exit()
Правда, по кодам ошибок всё ОК, но фрейм отображается как ... "чёрный квадрат" - но это пожалуй что-то с параметрами отображения...

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

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

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

Olej писал(а):
17 янв 2023, 19:33
Правда, по кодам ошибок всё ОК, но фрейм отображается как ... "чёрный квадрат" - но это пожалуй что-то с параметрами отображения...
Чтоб пока не разбираться и не вспоминать ... я пока поднял свой проект распознавания лиц + подчистил его под Python3 + выверил...
И получается что всё работает на ОК с видеопотоками (не только изображениями):
- вот так визуализируется видеопоток на экран с выделением (детектированием) человеческих лиц, если они попадают в кадр:

Код: Выделить всё

[olej@xenix Face_recognition]$ ./vshow.py -h
usage: ./vshow.py <file> | [<camera>]

Код: Выделить всё

[olej@xenix Face_recognition]$ ./vshow.py
default camera 0
[ INFO:0@0.046] global /builddir/build/BUILD/opencv-4.6.0/modules/videoio/src/videoio_registry.cpp (223) VideoBackendRegistry VIDEOIO: Enabled backends(8, sorted by priority): FFMPEG(1000); GSTREAMER(990); INTEL_MFX(980); V4L2(970); CV_IMAGES(960); CV_MJPEG(950); FIREWIRE(940); UEYE(930)
[ INFO:0@0.055] global /builddir/build/BUILD/opencv-4.6.0/modules/videoio/src/cap_gstreamer.cpp (1104) open OpenCV | GStreamer: v4l2src device=/dev/video0 ! videoconvert ! appsink drop=true
[ INFO:0@0.157] global /builddir/build/BUILD/opencv-4.6.0/modules/videoio/src/cap_gstreamer.cpp (1137) open OpenCV | GStreamer: mode - MANUAL
[ WARN:0@0.909] global /builddir/build/BUILD/opencv-4.6.0/modules/videoio/src/cap_gstreamer.cpp (1405) open OpenCV | GStreamer warning: Cannot query video position: status=0, value=-1, duration=-1
capture open OK!
[ INFO:0@0.927] global /builddir/build/BUILD/opencv-4.6.0/modules/core/src/parallel/registry_parallel.impl.hpp (96) ParallelBackendRegistry core(parallel): Enabled backends(2, sorted by priority): TBB(1000); OPENMP(990)
[ INFO:0@0.927] global /builddir/build/BUILD/opencv-4.6.0/modules/core/include/opencv2/core/parallel/backend/parallel_for.tbb.hpp (54) ParallelForBackend Initializing TBB parallel backend: TBB_INTERFACE_VERSION=11103
[ INFO:0@0.927] global /builddir/build/BUILD/opencv-4.6.0/modules/core/src/parallel/parallel.cpp (77) createParallelForAPI core(parallel): using backend: TBB (priority=1000)
[ INFO:0@0.932] global /builddir/build/BUILD/opencv-4.6.0/modules/core/src/ocl.cpp (1186) haveOpenCL Initialize OpenCL runtime...
[ INFO:0@1.075] global /builddir/build/BUILD/opencv-4.6.0/modules/core/src/ocl.cpp (1192) haveOpenCL OpenCL: found 1 platforms
[ INFO:0@1.075] global /builddir/build/BUILD/opencv-4.6.0/modules/core/src/ocl.cpp (984) getInitializedExecutionContext OpenCL: initializing thread execution context
[ INFO:0@1.075] global /builddir/build/BUILD/opencv-4.6.0/modules/core/src/ocl.cpp (994) getInitializedExecutionContext OpenCL: creating new execution context...
[ INFO:0@1.141] global /builddir/build/BUILD/opencv-4.6.0/modules/core/src/ocl.cpp (1012) getInitializedExecutionContext OpenCL: device=GeForce GT 520
[ INFO:0@1.141] global /builddir/build/BUILD/opencv-4.6.0/modules/core/src/ocl.cpp (5370) __init_buffer_pools OpenCL: Initializing buffer pool for context@0 with max capacity: poolSize=0 poolSizeHostPtr=0
[ INFO:0@1.162] global /builddir/build/BUILD/opencv-4.6.0/modules/highgui/src/registry.impl.hpp (114) UIBackendRegistry UI: Enabled backends(3, sorted by priority): GTK(1000); GTK3(990); GTK2(980) + BUILTIN(QT5)
А вот так записывается видеопоток:

Код: Выделить всё

[olej@xenix Face_recognition]$ ./vsave.py -h
usage: ./vsave.py <out_file> [<camera>]
Имя файла записи должно указываться с расширением, .avi или .mkv (матроска) - при записи тоже происходит визуализация:

Код: Выделить всё

[olej@xenix Face_recognition]$ ./vsave.py xxx2.avi
default camera 0
[ INFO:0@0.014] global /builddir/build/BUILD/opencv-4.6.0/modules/videoio/src/videoio_registry.cpp (223) VideoBackendRegistry VIDEOIO: Enabled backends(8, sorted by priority): FFMPEG(1000); GSTREAMER(990); INTEL_MFX(980); V4L2(970); CV_IMAGES(960); CV_MJPEG(950); FIREWIRE(940); UEYE(930)
[ INFO:0@0.022] global /builddir/build/BUILD/opencv-4.6.0/modules/videoio/src/cap_gstreamer.cpp (1104) open OpenCV | GStreamer: v4l2src device=/dev/video0 ! videoconvert ! appsink drop=true
[ INFO:0@0.125] global /builddir/build/BUILD/opencv-4.6.0/modules/videoio/src/cap_gstreamer.cpp (1137) open OpenCV | GStreamer: mode - MANUAL
[ WARN:0@0.995] global /builddir/build/BUILD/opencv-4.6.0/modules/videoio/src/cap_gstreamer.cpp (1405) open OpenCV | GStreamer warning: Cannot query video position: status=0, value=-1, duration=-1
capture open OK!
[ INFO:0@0.996] global /builddir/build/BUILD/opencv-4.6.0/modules/videoio/src/backend_plugin.cpp (369) getPluginCandidates VideoIO plugin (FFMPEG): glob is 'libopencv_videoio_ffmpeg*.so', 1 location(s)
[ INFO:0@1.119] global /builddir/build/BUILD/opencv-4.6.0/modules/videoio/src/backend_plugin.cpp (379) getPluginCandidates     - /lib64: 0
[ INFO:0@1.119] global /builddir/build/BUILD/opencv-4.6.0/modules/videoio/src/backend_plugin.cpp (383) getPluginCandidates Found 0 plugin(s) for FFMPEG
[ INFO:0@1.132] global /builddir/build/BUILD/opencv-4.6.0/modules/highgui/src/registry.impl.hpp (114) UIBackendRegistry UI: Enabled backends(3, sorted by priority): GTK(1000); GTK3(990); GTK2(980) + BUILTIN(QT5)
[ INFO:0@1.365] global /builddir/build/BUILD/opencv-4.6.0/modules/core/src/parallel/registry_parallel.impl.hpp (96) ParallelBackendRegistry core(parallel): Enabled backends(2, sorted by priority): TBB(1000); OPENMP(990)
[ INFO:0@1.365] global /builddir/build/BUILD/opencv-4.6.0/modules/core/include/opencv2/core/parallel/backend/parallel_for.tbb.hpp (54) ParallelForBackend Initializing TBB parallel backend: TBB_INTERFACE_VERSION=11103
[ INFO:0@1.365] global /builddir/build/BUILD/opencv-4.6.0/modules/core/src/parallel/parallel.cpp (77) createParallelForAPI core(parallel): using backend: TBB (priority=1000)
saved 48 frames

Код: Выделить всё

[olej@xenix Face_recognition]$ file xxx*
xxx1.mkv: Matroska data
xxx2.avi: RIFF (little-endian) data, AVI, 640 x 480, 25.00 fps, video: H.264 H.264 X.264 or H.264
Для завершения программ жмём 'q' :!:
Вложения
Face_recognition.tgz
(148.95 КБ) 24 скачивания

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

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

Непрочитанное сообщение Olej » 18 янв 2023, 00:31

Olej писал(а):
17 янв 2023, 19:33
тогда процесс захвата фрейма должен выглядеть как-то так:
Приложение, захватывающее один кадр:

Код: Выделить всё

#!/usr/bin/env python3
import cv2, sys

DEVICE_NUMBER = 0                                    # Constants
vc = cv2.VideoCapture(DEVICE_NUMBER)   # Init webcam

if vc.isOpened():                                            # Check if the webcam init was successful
    retval, frame = vc.read()                           # try to get the frame
else:
    sys.exit(1)

retval, frame = vc.read()
cv2.imshow("new frame", frame)
cv2.waitKey(0)                                               # Exit program after waiting indefinitely for a pressed key
cap.release()                                                  # When everything done, release the capture
cv2.destroyAllWindows()

Код: Выделить всё

[olej@xenix Face_recognition]$ ./take_picture.py
[ INFO:0@0.007] global /builddir/build/BUILD/opencv-4.6.0/modules/videoio/src/videoio_registry.cpp (223) VideoBackendRegistry VIDEOIO: Enabled backends(8, sorted by priority): FFMPEG(1000); GSTREAMER(990); INTEL_MFX(980); V4L2(970); CV_IMAGES(960); CV_MJPEG(950); FIREWIRE(940); UEYE(930)
[ INFO:0@0.014] global /builddir/build/BUILD/opencv-4.6.0/modules/videoio/src/cap_gstreamer.cpp (1104) open OpenCV | GStreamer: v4l2src device=/dev/video0 ! videoconvert ! appsink drop=true
[ INFO:0@0.115] global /builddir/build/BUILD/opencv-4.6.0/modules/videoio/src/cap_gstreamer.cpp (1137) open OpenCV | GStreamer: mode - MANUAL
[ WARN:0@0.966] global /builddir/build/BUILD/opencv-4.6.0/modules/videoio/src/cap_gstreamer.cpp (1405) open OpenCV | GStreamer warning: Cannot query video position: status=0, value=-1, duration=-1
[ INFO:0@1.098] global /builddir/build/BUILD/opencv-4.6.0/modules/highgui/src/registry.impl.hpp (114) UIBackendRegistry UI: Enabled backends(3, sorted by priority): GTK(1000); GTK3(990); GTK2(980) + BUILTIN(QT5)
[ INFO:0@1.288] global /builddir/build/BUILD/opencv-4.6.0/modules/core/src/parallel/registry_parallel.impl.hpp (96) ParallelBackendRegistry core(parallel): Enabled backends(2, sorted by priority): TBB(1000); OPENMP(990)
[ INFO:0@1.288] global /builddir/build/BUILD/opencv-4.6.0/modules/core/include/opencv2/core/parallel/backend/parallel_for.tbb.hpp (54) ParallelForBackend Initializing TBB parallel backend: TBB_INTERFACE_VERSION=11103
[ INFO:0@1.288] global /builddir/build/BUILD/opencv-4.6.0/modules/core/src/parallel/parallel.cpp (77) createParallelForAPI core(parallel): using backend: TBB (priority=1000)
Снимок экрана от 2023-01-17 23-14-03.png
Снимок экрана от 2023-01-17 23-14-03.png (512.93 КБ) 433 просмотра
Вложения
take_picture.py
(675 байт) 24 скачивания

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

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

Непрочитанное сообщение Olej » 18 янв 2023, 00:41

Olej писал(а):
17 янв 2023, 19:33
Правда, по кодам ошибок всё ОК, но фрейм отображается как ... "чёрный квадрат" - но это пожалуй что-то с параметрами отображения...
И с этим разобрался...

Код: Выделить всё

[olej@xenix ~]$ python3
Python 3.11.1 (main, Dec  7 2022, 00:00:00) [GCC 12.2.1 20221121 (Red Hat 12.2.1-4)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> vc = cv2.VideoCapture(0)
[ INFO:0@24.973] global /builddir/build/BUILD/opencv-4.6.0/modules/videoio/src/videoio_registry.cpp (223) VideoBackendRegistry VIDEOIO: Enabled backends(8, sorted by priority): FFMPEG(1000); GSTREAMER(990); INTEL_MFX(980); V4L2(970); CV_IMAGES(960); CV_MJPEG(950); FIREWIRE(940); UEYE(930)
[ INFO:0@24.989] global /builddir/build/BUILD/opencv-4.6.0/modules/videoio/src/cap_gstreamer.cpp (1104) open OpenCV | GStreamer: v4l2src device=/dev/video0 ! videoconvert ! appsink drop=true
[ INFO:0@25.098] global /builddir/build/BUILD/opencv-4.6.0/modules/videoio/src/cap_gstreamer.cpp (1137) open OpenCV | GStreamer: mode - MANUAL
[ WARN:0@25.969] global /builddir/build/BUILD/opencv-4.6.0/modules/videoio/src/cap_gstreamer.cpp (1405) open OpenCV | GStreamer warning: Cannot query video position: status=0, value=-1, duration=-1
>>> retval, frame = vc.read()
>>> print(retval)
True
>>> cv2.imshow("", frame)
[ INFO:0@84.500] global /builddir/build/BUILD/opencv-4.6.0/modules/highgui/src/registry.impl.hpp (114) UIBackendRegistry UI: Enabled backends(3, sorted by priority): GTK(1000); GTK3(990); GTK2(980) + BUILTIN(QT5)
[ INFO:0@84.778] global /builddir/build/BUILD/opencv-4.6.0/modules/core/src/parallel/registry_parallel.impl.hpp (96) ParallelBackendRegistry core(parallel): Enabled backends(2, sorted by priority): TBB(1000); OPENMP(990)
[ INFO:0@84.778] global /builddir/build/BUILD/opencv-4.6.0/modules/core/include/opencv2/core/parallel/backend/parallel_for.tbb.hpp (54) ParallelForBackend Initializing TBB parallel backend: TBB_INTERFACE_VERSION=11103
[ INFO:0@84.778] global /builddir/build/BUILD/opencv-4.6.0/modules/core/src/parallel/parallel.cpp (77) createParallelForAPI core(parallel): using backend: TBB (priority=1000)
К этому моменту действительно отображается только "чёрный квадрат":
Снимок экрана от 2023-01-17 23-35-06.png
Снимок экрана от 2023-01-17 23-35-06.png (3.75 КБ) 433 просмотра
А вот только после завершения этого ожидания ранее захваченный кадр отображается:

Код: Выделить всё

>>> cv2.waitKey(0)
49
Снимок экрана от 2023-01-17 23-35-56.png
Снимок экрана от 2023-01-17 23-35-56.png (434.32 КБ) 433 просмотра
И завершаем закрытием окон:

Код: Выделить всё

>>> cv2.destroyAllWindows()
>>> exit()

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

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

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

Olej писал(а):
18 янв 2023, 00:41
И завершаем закрытием окон:
Вот собственно и всё, что я, на сегодняшний день, хотел бы от проверки свежих версий OpenCV.
:!: :lol:

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

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

Непрочитанное сообщение Olej » 20 янв 2023, 02:00

Хороший беглый обзор основных операций с изображениями в OpenCV: Шпаргалка по OpenCV — Python.
Александр Ланский
3 мая 2019

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

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

Непрочитанное сообщение Olej » 26 мар 2023, 18:47



Скачивайте книгу, пока свободно дают. :-D

Код: Выделить всё

olej@R420:~/Загрузки/Книги/IT-книги/OpenCV_BOOKS$ ls -l Цифровая_обработка_изображений_в_OpenCV.pdf 
-rw-rw-r-- 1 olej olej 12648806 мар 26 18:49 Цифровая_обработка_изображений_в_OpenCV.pdf

Ответить

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

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

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