Автор Тема: OpenCV на Armbian + Opi One  (Прочитано 186 раз)

Оффлайн Olej

OpenCV на Armbian + Opi One
« : Август 16, 2018, 10:02:30 am »
Заманчивая идея: запустить компьютерное зрение Open CV на Orange Pi One с Web-камерой на USB - и сделать распознавание лиц  из видеопотока с камеры.
P.S. А кому-то понравится распознавать дорожные знаки ... или номерные знаки автомобилей и т .д.

Уже сделал такую игрушку на другом SBC: DragonBoard 410c (некоторые детали можете смотреть здесь: Программирование)

С видеокамерой на Orange Pi проблем не оказалось:
olej@orangepione:~$ uname -a
Linux orangepione 4.14.48-sunxi #1 SMP Wed Jun 6 19:14:27 EEST 2018 armv7l GNU/Linux

olej@orangepione:~$ lsusb
Bus 004 Device 004: ID 1908:2310 GEMBIRD
Bus 004 Device 003: ID 046d:c31c Logitech, Inc. Keyboard K120
Bus 004 Device 002: ID 05e3:0606 Genesys Logic, Inc. USB 2.0 Hub / D-Link DUB-H4 USB 2.0 Hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

olej@orangepione:~$ ls -l /dev/video*
crw-rw----+ 1 root video 81, 0 авг 15 12:15 /dev/video0

olej@orangepione:~$ ls -l /dev/v4l/by-id/
total 0
lrwxrwxrwx 1 root root 12 авг 15 12:15 usb-Generic_USB2.0_PC_CAMERA-video-index0 -> ../../video0

А вот с установкой OpenCV из пакетной системы оказались проблемы:
« Последнее редактирование: Август 16, 2018, 10:04:09 am от Olej »

Оффлайн Olej

Re: OpenCV на Armbian + Opi One
« Ответ #1 : Август 16, 2018, 10:28:23 am »
А вот с установкой OpenCV из пакетной системы оказались проблемы:
Причём делал подобное много раз: и на десктопах Fedora 28 & Mint 18.3, и на ARM64 DragonBoard 410c ...
А тут возник затык небольшой:
olej@orangepione:~$ aptitude search python-opencv
p   python-opencv                                                 - Python bindings for the computer vision library
Проверил, что даже на самой маленькой SD-карте мне места достаточно будет (подчистил):
olej@orangepione:~$ df
Filesystem     1K-blocks    Used Available Use% Mounted on
udev              216804       0    216804   0% /dev
tmpfs              50516    3388     47128   7% /run
/dev/mmcblk0p1   1682872 1456288    179996  89% /
tmpfs             252576       0    252576   0% /dev/shm
tmpfs               5120       4      5116   1% /run/lock
tmpfs             252576       0    252576   0% /sys/fs/cgroup
tmpfs             252576       0    252576   0% /tmp
log2ram            51200    2628     48572   6% /var/log
tmpfs              50512       0     50512   0% /run/user/1000
olej@orangepione:~$ sudo aptitude install python-opencv
The following NEW packages will be installed:
  fontconfig{a} fontconfig-config{a} fonts-dejavu-core{a} gnome-icon-theme{a} gtk-update-icon-cache{a} hicolor-icon-theme{a}
  libatk1.0-0{a} libatk1.0-data{a} libavahi-client3{a} libavahi-common-data{a} libavahi-common3{a} libavcodec57{a} libavformat57{a}
  libavutil55{a} libblas-common{a} libblas3{a} libbluray1{a} libcairo2{a} libchromaprint1{a} libcroco3{a} libcups2{a} libdatrie1{a}
  libdc1394-22{a} libdrm2{a} libfontconfig1{a} libfreetype6{a} libgdk-pixbuf2.0-0{a} libgdk-pixbuf2.0-common{a} libgfortran3{a}
  libgme0{a} libgraphite2-3{a} libgtk2.0-0{a} libgtk2.0-common{a} libharfbuzz0b{a} libilmbase12{a} libjbig0{a} libjpeg62-turbo{a}
  liblapack3{a} libmp3lame0{a} libmpg123-0{a} libopencv-calib3d2.4v5{a} libopencv-contrib2.4v5{a} libopencv-core2.4v5{a}
  libopencv-features2d2.4v5{a} libopencv-flann2.4v5{a} libopencv-highgui2.4-deb0{a} libopencv-imgproc2.4v5{a} libopencv-legacy2.4v5{a}
  libopencv-ml2.4v5{a} libopencv-objdetect2.4v5{a} libopencv-photo2.4v5{a} libopencv-video2.4v5{a} libopenexr22{a} libopenjp2-7{a}
  libopenmpt0{a} libopus0{a} libpango-1.0-0{a} libpangocairo-1.0-0{a} libpangoft2-1.0-0{a} libpixman-1-0{a} libpython2.7{a}
  libraw1394-11{a} librsvg2-2{a} librsvg2-common{a} libshine3{a} libsnappy1v5{a} libsoxr0{a} libspeex1{a} libssh-gcrypt-4{a}
  libswresample2{a} libswscale4{a} libthai-data{a} libthai0{a} libtheora0{a} libtiff5{a} libtwolame0{a} libv4l-0{a} libv4lconvert0{a}
  libva-drm1{a} libva-x11-1{a} libva1{a} libvdpau1{a} libvpx4{a} libwebp6{a} libwebpmux2{a} libx11-6{a} libx11-data{a} libx264-148{a}
  libx265-95{a} libxau6{a} libxcb-render0{a} libxcb-shm0{a} libxcb1{a} libxcomposite1{a} libxcursor1{a} libxdamage1{a} libxdmcp6{a}
  libxext6{a} libxfixes3{a} libxi6{a} libxinerama1{a} libxrandr2{a} libxrender1{a} libxvidcore4{a} libzvbi-common{a} libzvbi0{a}
  python-numpy{a} python-opencv shared-mime-info{a}
The following packages are RECOMMENDED but will NOT be installed:
  libaacs0 libgail-common libgtk2.0-bin libvdpau-va-gl1 mesa-va-drivers mesa-vdpau-drivers nvidia-legacy-340xx-vdpau-driver
  nvidia-vdpau-driver va-driver-all vdpau-driver-all vdpau-va-driver
0 packages upgraded, 109 newly installed, 0 to remove and 9 not upgraded.
Need to get 42,7 MB of archives. After unpacking 115 MB will be used.
...
E: Failed to fetch http://cdn-fastly.deb.debian.org/debian/pool/main/s/shared-mime-info/shared-mime-info_1.8-1_armhf.deb: 404  Not Found [IP: 151.101.84.204 80]
E: Unable to fetch some packages; try '-o APT::Get::Fix-Missing=true' to continue with missing packages
olej@orangepione:~$ sudo aptitude install python-opencv -o APT::Get::Fix-Missing=true
...
Err http://cdn-fastly.deb.debian.org/debian stretch/main armhf shared-mime-info armhf 1.8-1
  404  Not Found [IP: 151.101.84.204 80]
Extracting templates from packages: 100%
Preconfiguring packages ...
Selecting previously unselected package libfreetype6:armhf.
(Reading database ... 35239 files and directories currently installed.)
...
Processing triggers for libc-bin (2.24-11+deb9u3) ...
E: Failed to fetch http://cdn-fastly.deb.debian.org/debian/pool/main/s/shared-mime-info/shared-mime-info_1.8-1_armhf.deb: 404  Not Found [IP: 151.101.84.204 80]
olej@orangepione:~$ python
Python 2.7.13 (default, Nov 24 2017, 17:33:09)
[GCC 6.3.0 20170516] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> import cv2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named cv2
Вот так вот - проблема в репозитории, как я понимаю, http://cdn-fastly.deb.debian.org/debian stretch/main armhf shared-mime-info armhf 1.8-1, прописанном где-то в /etc/apt/sources.list или в файлах в каталоге /etc/apt/sources.list.d (сейчас не загружен Opi чтобы точно глянуть) ... который либо ошибочно прописан в Armbian, либо лёг/сдох к настоящему времени, либо и т.д.

Что можно предпринять и перепрописать в качестве репозитория?

Оффлайн Olej

Re: OpenCV на Armbian + Opi One
« Ответ #2 : Август 16, 2018, 11:29:34 am »
Вот так вот - проблема в репозитории, как я понимаю, http://cdn-fastly.deb.debian.org/debian stretch/main armhf shared-mime-info armhf 1.8-1, прописанном где-то в /etc/apt/sources.list или в файлах в каталоге /etc/apt/sources.list.d (сейчас не загружен Opi чтобы точно глянуть) ... который либо ошибочно прописан в Armbian, либо лёг/сдох к настоящему времени, либо и т.д.
Та же проблема и в Rapsbery Pi (для сравнения), вот таком - это с загрузки:
...
model: Raspberry Pi 2 Model B Rev 1.1
compatible: brcm,bcm2836
My IP address is 192.168.1.107

Xenomai/cobalt v3.0.5
...
Это Debian с hard realtime Xenomai.
root@raspberrypi:/etc/apt # uname -a
Linux raspberrypi 4.9.35-v7+ #1014 SMP Fri Jun 30 14:47:43 BST 2017 armv7l GNU/Linux
Но с ним, после обстоятельной возни с sources.list + update + upgrade
...
43 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
Need to get 11.6 MB of archives.
...
Удалось таки открыть глаза и установить компьютерное зрение ;D:
pi@raspberrypi:~ $ sudo apt-get install python-opencv
...
Unpacking python-opencv (2.4.9.1+dfsg-1+deb8u2) ...
Setting up libopencv-photo2.4:armhf (2.4.9.1+dfsg-1+deb8u2) ...
Setting up python-opencv (2.4.9.1+dfsg-1+deb8u2) ...
Processing triggers for libc-bin (2.19-18+deb8u10) ...
Правда ...  ???
pi@raspberrypi:~ $ python
Python 2.7.9 (default, Sep 17 2016, 20:26:04)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'2.4.9.1'
>>> quit()
Старовата версия!
Там многого нет ... хотя бы 3.0 ...
В десктопах из репозиториев ставятся: Fedora 28 - 3.4.2, Mint 18.3 - 3.2.0

Оффлайн Olej

Re: OpenCV на Armbian + Opi One
« Ответ #3 : Август 16, 2018, 11:30:45 am »
Удалось таки открыть глаза и установить компьютерное зрение ;D:
Осталось забороть Orange Pi ...  ;)

Оффлайн Olej

Re: OpenCV на Armbian + Opi One
« Ответ #4 : Август 16, 2018, 11:36:47 am »
Старовата версия!
Там многого нет ... хотя бы 3.0 ...
В десктопах из репозиториев ставятся: Fedora 28 - 3.4.2, Mint 18.3 - 3.2.0
Даже 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:~$ python
Python 2.7.15 (default, Jul 28 2018, 11:29:29)
[GCC 8.1.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'3.2.0'
>>>

Оффлайн Olej

Re: OpenCV на Armbian + Opi One
« Ответ #5 : Август 16, 2018, 09:57:24 pm »
Осталось забороть Orange Pi ...  ;)
1. переустановил свежий образ
Цитировать
Armbian Stretch
mainline kernel 4.14.y or 4.17.y
Server or light desktop usage scenarios.
Stable
Не думаю, что это имеет какое-то значение....

2. на SD-карточку, имеющую достаточно много свободного места...

3.
root@orangepione:~# aptitude install python-opencv
The following NEW packages will be installed:
  fontconfig{a} fontconfig-config{a} fonts-dejavu-core{a} gnome-icon-theme{a} gtk-update-icon-cache{a} hicolor-icon-theme{a} libatk1.0-0{a} libatk1.0-data{a}
  libavahi-client3{a} libavahi-common-data{a} libavahi-common3{a} libavcodec57{a} libavformat57{a} libavutil55{a} libblas-common{a} libblas3{a} libbluray1{a}
  libcairo2{a} libchromaprint1{a} libcroco3{a} libcups2{a} libdatrie1{a} libdc1394-22{a} libdrm2{a} libfontconfig1{a} libfreetype6{a} libgdk-pixbuf2.0-0{a}
  libgdk-pixbuf2.0-common{a} libgfortran3{a} libgme0{a} libgraphite2-3{a} libgsm1{a} libgtk2.0-0{a} libgtk2.0-common{a} libharfbuzz0b{a} libilmbase12{a} libjbig0{a}
  libjpeg62-turbo{a} liblapack3{a} libmp3lame0{a} libmpg123-0{a} libogg0{a} libopencv-calib3d2.4v5{a} libopencv-contrib2.4v5{a} libopencv-core2.4v5{a}
  libopencv-features2d2.4v5{a} libopencv-flann2.4v5{a} libopencv-highgui2.4-deb0{a} libopencv-imgproc2.4v5{a} libopencv-legacy2.4v5{a} libopencv-ml2.4v5{a}
  libopencv-objdetect2.4v5{a} libopencv-photo2.4v5{a} libopencv-video2.4v5{a} libopenexr22{a} libopenjp2-7{a} libopenmpt0{a} libopus0{a} libpango-1.0-0{a}
  libpangocairo-1.0-0{a} libpangoft2-1.0-0{a} libpixman-1-0{a} libpng16-16{a} libpython2.7{a} libraw1394-11{a} librsvg2-2{a} librsvg2-common{a} libshine3{a}
  libsnappy1v5{a} libsoxr0{a} libspeex1{a} libssh-gcrypt-4{a} libswresample2{a} libswscale4{a} libthai-data{a} libthai0{a} libtheora0{a} libtiff5{a} libtwolame0{a}
  libv4l-0{a} libv4lconvert0{a} libva-drm1{a} libva-x11-1{a} libva1{a} libvdpau1{a} libvorbis0a{a} libvorbisenc2{a} libvorbisfile3{a} libvpx4{a} libwavpack1{a}
  libwebp6{a} libwebpmux2{a} libx11-6{a} libx11-data{a} libx264-148{a} libx265-95{a} libxau6{a} libxcb-render0{a} libxcb-shm0{a} libxcb1{a} libxcomposite1{a}
  libxcursor1{a} libxdamage1{a} libxdmcp6{a} libxext6{a} libxfixes3{a} libxi6{a} libxinerama1{a} libxrandr2{a} libxrender1{a} libxvidcore4{a} libzvbi-common{a}
  libzvbi0{a} python-numpy{a} python-opencv shared-mime-info{a}
The following packages are RECOMMENDED but will NOT be installed:
  libaacs0 libgail-common libgtk2.0-bin libvdpau-va-gl1 mesa-va-drivers mesa-vdpau-drivers nvidia-legacy-340xx-vdpau-driver nvidia-vdpau-driver va-driver-all
  vdpau-driver-all vdpau-va-driver
0 packages upgraded, 116 newly installed, 0 to remove and 0 not upgraded.
Need to get 43.2 MB of archives. After unpacking 117 MB will be used.
Do you want to continue? [Y/n/?] y
...
Setting up libgtk2.0-0:armhf (2.24.31-2) ...
Setting up libopencv-highgui2.4-deb0:armhf (2.4.9.1+dfsg1-2) ...
Setting up libopencv-objdetect2.4v5:armhf (2.4.9.1+dfsg1-2) ...
Setting up libopencv-features2d2.4v5:armhf (2.4.9.1+dfsg1-2) ...
Setting up libopencv-calib3d2.4v5:armhf (2.4.9.1+dfsg1-2) ...
Setting up libopencv-legacy2.4v5:armhf (2.4.9.1+dfsg1-2) ...
Setting up libopencv-contrib2.4v5:armhf (2.4.9.1+dfsg1-2) ...
Setting up python-opencv (2.4.9.1+dfsg1-2) ...
Processing triggers for libc-bin (2.24-11+deb9u3) ...
Processing triggers for libgdk-pixbuf2.0-0:armhf (2.36.5-2+deb9u2) ...

4. Всё. ;D
olej@orangepione:~$ python
Python 2.7.13 (default, Nov 24 2017, 17:33:09)
[GCC 6.3.0 20170516] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'2.4.9.1'
>>> import numpy
>>> numpy.__version__
'1.12.1'
>>> quit()
Не самые свежие версии, но всё же...

Оффлайн Olej

Re: OpenCV на Armbian + Opi One
« Ответ #6 : Август 16, 2018, 10:03:10 pm »
4. Всё. ;D
Воткнул видеокамеру (1-я позиция в lsusb):
olej@orangepione:~$ lsusb
Bus 004 Device 004: ID 1908:2310 GEMBIRD
Bus 004 Device 003: ID 046d:c31c Logitech, Inc. Keyboard K120
Bus 004 Device 002: ID 05e3:0606 Genesys Logic, Inc. USB 2.0 Hub / D-Link DUB-H4 USB 2.0 Hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Удивляет меня это:
olej@orangepione:~$ ls /dev/video*
ls: cannot access '/dev/video*': No such file or directory

root@orangepione:~# dmesg | tail -n 6
[11683.256458] usb 4-1.3: new full-speed USB device number 4 using ohci-platform
[11683.618874] usb 4-1.3: not running at top speed; connect to a high speed hub
[11683.628882] usb 4-1.3: New USB device found, idVendor=1908, idProduct=2310
[11683.628900] usb 4-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[11683.628911] usb 4-1.3: Product: USB2.0 PC CAMERA
[11683.628922] usb 4-1.3: Manufacturer: Generic

Оффлайн Olej

Re: OpenCV на Armbian + Opi One
« Ответ #7 : Август 16, 2018, 10:07:38 pm »
Удивляет меня это:
Вот оно! :
olej@orangepione:~$ lsmod | grep uvcvideo
olej@orangepione:~$
olej@orangepione:~$ lsmod | grep uvcvideo

olej@orangepione:~$ modprobe uvcvideo
Could not find the database of available applications, run update-command-not-found as root to fix this
Command 'modprobe' is available in '/sbin/modprobe'
The command could not be located because '/sbin' is not included in the PATH environment variable.
This is most likely caused by the lack of administrative priviledges associated with your user account.
modprobe: command not found

olej@orangepione:~$ /sbin/modprobe uvcvideo
modprobe: ERROR: ../libkmod/libkmod.c:586 kmod_search_moddep() could not open moddep file '/lib/modules/4.14.14-sunxi/modules.dep.bin'
modprobe: FATAL: Module uvcvideo not found in directory /lib/modules/4.14.14-sunxi

Оффлайн Olej

Re: OpenCV на Armbian + Opi One
« Ответ #8 : Август 16, 2018, 11:10:27 pm »
Вот оно! :
root@orangepione:~# aptitude search uvc
p   guvcview                                                                       - GTK+ base UVC Viewer
p   libguvcview-2.0-2                                                              - GTK+ base UVC Viewer - runtime
p   libguvcview-dev                                                                - GTK+ base UVC Viewer - development files
p   uvccapture                                                                     - USB UVC Video Class snapshot software
p   uvcdynctrl                                                                     - Command line tool to control v4l2 devices
p   uvcdynctrl-data                                                                - Command line tool to control v4l2 devices - data files
p   uvcdynctrl-dbg                                                                 - Debug Symbols for uvcdynctrl

root@orangepione:~# aptitude search v4l
p   dov4l                                                                          - program to set and query settings of video4linux devices
p   dv4l                                                                           - Redirect V4L API to access a camcorder from a V4L program
p   gambas3-gb-v4l                                                                 - Gambas video for Linux component
p   gem-plugin-dv4l                                                                - Graphics Environment for Multimedia - DV support
p   gem-plugin-v4l2                                                                - Graphics Environment for Multimedia - V4L2 output support
i A libv4l-0                                                                       - Collection of video4linux support libraries
p   libv4l-dev                                                                     - Collection of video4linux support libraries (development files)
p   libv4l2rds0                                                                    - Video4Linux Radio Data System (RDS) decoding library
i A libv4lconvert0                                                                 - Video4linux frame format conversion library
p   libvideo-capture-v4l-perl                                                      - Perl interface to the Video4linux framegrabber interface
p   qv4l2                                                                          - Graphical Qt v4l2 control panel
p   v4l-conf                                                                       - tool to configure video4linux drivers
p   v4l-utils                                                                      - Collection of command line video4linux utilities
p   v4l2loopback-dkms                                                              - Source for the v4l2loopback driver (DKMS)
p   v4l2loopback-source                                                            - Source for the v4l2loopback driver
p   v4l2loopback-utils                                                             - Commandline utilities for the for the v4l2-loopback module
p   v4l2ucp                                                                        - Video for Linux 2 Universal Control Panel


olej@orangepione:~$ sudo aptitude install uvccapture
...

olej@orangepione:~$ aptitude search uvccapture
i   uvccapture                                                                     - USB UVC Video Class snapshot software

olej@orangepione:~$ ls /dev/video*
/dev/video0

olej@orangepione:~$ ls -l /dev/video*
crw-rw---- 1 root video 81, 0 Aug 16 19:17 /dev/video0

olej@orangepione:~$ ls /dev/v4l
by-id  by-path
И вот вам благополучный захват фрейма из камеры:
olej@orangepione:~$ python
Python 2.7.13 (default, Nov 24 2017, 17:33:09)
[GCC 6.3.0 20170516] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cap = cv2.VideoCapture( 0 )
>>> ret, frame = cap.read()
>>> ret
True
« Последнее редактирование: Август 16, 2018, 11:14:12 pm от Olej »

Оффлайн Olej

Re: OpenCV на Armbian + Opi One
« Ответ #9 : Август 21, 2018, 10:46:18 am »
Событие и инсайдерская информация из области OpenCV, которую нельзя не отметить:
Цитировать
OpenCV 4 has not been officially released yet; however, a release is expected in autumn 2018. In the meantime, we can compile and install OpenCV 4 from source using the pre-release on GitHub.
OpenCV 4 includes more optimizations, C+11 support, more compact modules, and many improvements to the Deep Neural Network (DNN) module.
Это из инсайдерской рассылки одного из непосредственных активных участников на сегодня развития OpenCV.
И страничка с детальным пошаговым описанием как и откуда уже на сегодня каждый желающий может установить себе OpenCV 4: How to install OpenCV 4 on Ubuntu
Цитировать
by Adrian Rosebrock on August 15, 2018 in OpenCV 4, Tutorials
Здесь же о том, как создать виртуальные Python + OpenCV окружения для работы с разными версиями.

P.S.
Цитировать
Hello! I’m Adrian Rosebrock.
 
I'm an entrepreneur and Ph.D who has launched two successful image search engines, ID My Pill and Chic Engine. I'm here to share my tips, tricks, and hacks I've learned along the way.

Оффлайн Olej

Re: OpenCV на Armbian + Opi One
« Ответ #10 : Август 26, 2018, 04:13:07 pm »
Не самые свежие версии, но всё же...
Захват видеопотока (с видео файла или WEB-камеры) + отображение последовательных захваченных видеофреймов + поиск и распознавание на них человеческих лиц:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import cv2, sys, os
from comfuncs import defcam, common
from defcam import get_cameras, get_default

# show image stream to the screen

def usage():
    print( 'usage: {} <file>|[<camera>]'.format( sys.argv[ 0 ] ) )

if 1 == len( sys.argv ):
    dev = get_default()
    print( 'default camera {}'.format( dev ) )
    cap = cv2.VideoCapture( dev )
elif 2 == len( sys.argv ):
    try:
        dev = int( sys.argv[ 1 ] )
        if not dev in get_cameras():
            print( "illegal camera #{}: ".format( dev ) )
            sys.exit( 1 )
        try:
            cap = cv2.VideoCapture( dev )
        except cv2.Exception as err:
            print( "illegal camera #: " + str( err ) )
            sys.exit( 1 )
    except Exception as err:                         # capture image file
        print( 'image file: ' + sys.argv[ 1 ] )
        if not os.path.isfile( sys.argv[ 1 ] ):
            print( "illegal file name: " + sys.argv[ 1 ] )
            sys.exit( 1 )
        try:
            cap = cv2.VideoCapture( sys.argv[ 1 ] )
        except Exception as err:
            print( "illegal file: " + str( err ) )
            sys.exit( 1 )
else:
    usage()
    sys.exit( 1 )

if cv2.__version__ >= '3.3':
    if not cv2.VideoCapture.isOpened( cap ):
        print( "no source captured!" )
        sys.exit( 1 )
    else:
        print( "capture open OK!" )

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( 1 ) & 0xFF                    # Wait for ...     
    if ( 27 == key ) or ( key == ord( 'q' ) ): break # Esc or 'q'       

cap.release()                                        # When everything done, release the capture
cv2.destroyAllWindows()
Одно или несколько лиц анфас, попавшие в кадр, обрамляются синенькой рамочкой ;).

Это отчётливая иллюстрация того, что:
- такой игрушки как Orange Pi вполне достаточно для обеспечения компьютерного зрения ...
- того, что этой сильно устаревшей версии Orange Pi достаточно для работы с изображениями...
- ... но, как будет показано вскорости, недостаточно для использования новых, расширенных алгоритмов из OpenCV
olej@orangepione:~/Face$ python
Python 2.7.13 (default, Nov 24 2017, 17:33:09)
[GCC 6.3.0 20170516] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'2.4.9.1'
>>> quit()
« Последнее редактирование: Август 26, 2018, 04:19:58 pm от Olej »

Оффлайн Olej

Re: OpenCV на Armbian + Opi One
« Ответ #11 : Август 26, 2018, 04:39:39 pm »
Захват видеопотока (с видео файла или WEB-камеры) + отображение последовательных захваченных видеофреймов + поиск и распознавание на них человеческих лиц:
Показанный код использует некоторые дополнительные функции, файлы и т.д.
- инициализация:
if cv2.__version__ < '2.4.9':
    print( 'OpenCV version should be higher than 2.9' )
    exit( 1 )
if cv2.__version__ >= '3.0':
    cv2.ocl.setUseOpenCL( False )                                        # Prohibit OpenCL
- get_cameras() - получения списка доступных к использованию WEB-камер;
- get_default() - выбор из этого списка камеры по умолчанию;
- detect( frame ) - детектирование лица в кадре, используя методы OpenCV;
- файл haarcascade_frontalface_default.xml - это обученный классификатор Хаара для лица анфас, взят из файлов самого проекта  OpenCV;
Они разложены (для дальнейшего развития) в некоторую иерархию файлов-исходников - пакетов и модулей в терминологии Python.
Чтобы не рассказывать долго, прилагается архив такого усечённого проекта, содержащий этот минимум.

P.S. Хотел прикрепить файл архива для интересующихся, но ... правила этого форума позволяют прикреплять только файл не больше размером, чем 192Kb - такие правила хороши для простого "бла-бла-бла", но явно недостаточны для предметных обсуждений >:(
Файл архива можно взять здесь.