компьютерное зрение на одноплатных SBC

встраиваемые модели

Модераторы: Olej, vikos

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

Re: компьютерное зрение на одноплатных SBC

Непрочитанное сообщение Olej » 18 авг 2018, 18:45

Olej писал(а): Этот показывает сразу 2 окна:
1. окно настройки с движками;
2. захваченный фрейм с камеры - как это теперь выглядит;
А это то, как guvcview выглядит в DragonBoard 410c.

P.S. Только прошу обратит внимание, что я рассматриваю картинки и настраиваю камеру в Харькове, а мой DragonBoard 410c находится в Израиле - за 2-3 тыс.км. (или сколько там?) ... и что там изображено на картинке - я не могу сказать ... судя по тому, что сегодня суббота, картина называется "шабат" ... "покой" :lol:
Вложения
o51.png
o52.png

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

Re: компьютерное зрение на одноплатных SBC

Непрочитанное сообщение Olej » 18 авг 2018, 19:14

Olej писал(а):Работает на малышке Orange Pi One - просматриваю на комфортном десктопе (по ssh ...).
Или кому так понятнее - X-терминал на Orange Pi:
Вложения
o43.png
o43.png (8.7 КБ) 2381 просмотр
o44.png
o44.png (17.43 КБ) 2381 просмотр

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

Re: компьютерное зрение на одноплатных SBC

Непрочитанное сообщение Olej » 20 авг 2018, 00:11

Olej писал(а): Opange Pi One:

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

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()
Версия OpenCV 2.4.9.1 - это очень грустно... как будет показано очень скоро.
Вопрос не в том, что в более старых OpenCV нет каких-то возможностей (но и это есть то же), но в том что в OpenCV очень плохая совместимость API, очень динамичное развитие API, меняются названия функций и их параметры вызовов ... нужно искать API для конкретной установленной версии!
Очень неприятная ситуация!

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

Re: компьютерное зрение на одноплатных SBC

Непрочитанное сообщение Olej » 20 авг 2018, 00:21

Olej писал(а): ... нужно искать API для конкретной установленной версии!
Очень неприятная ситуация!
Но даже в этой неприятной ситуации есть решение:
1. подключаюсь к Orange Pi по SSH с туннелированием X11 протокола:

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

[olej@dell .ssh]$ ssh -Y olej@192.168.1.108
olej@192.168.1.108's password: 
...
2. Устанавливаю любой любой (желательно более лёгкий) браузер на удалённом Orange Pi:

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

olej@orangepione:~$ aptitude search firefox
v   firefox-adblock-plus                                            -
v   firefox-adblock-plus-element-hiding-helper                      -
v   firefox-all-in-one-sidebar                                      -
v   firefox-autofill-forms                                          -
v   firefox-automatic-save-folder                                   -
v   firefox-branding-iceweasel                                      -
v   firefox-certificatepatrol                                       -
v   firefox-classic-theme-restorer                                  -
v   firefox-colorfultabs                                            -
v   firefox-cookie-monster                                          -
v   firefox-custom-tab-width                                        -
v   firefox-debianbuttons                                           -
v   firefox-dom-inspector                                           -
v   firefox-downthemall                                             -
p   firefox-esr                                                     - Mozilla Firefox web browser - Extended Support Release (ESR)
...

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

olej@orangepione:~$ sudo aptitude install firefox-esr firefox-esr-l10n-ru
The following NEW packages will be installed:
  firefox-esr firefox-esr-l10n-ru libevent-2.0-5{a} libhunspell-1.4-0{a} libjsoncpp1{a} libstartup-notification0{a} libxcb-util0{a}
The following packages are RECOMMENDED but will NOT be installed:
  hunspell-af hunspell-an hunspell-ar hunspell-be hunspell-bg hunspell-bn hunspell-bo hunspell-br hunspell-bs hunspell-ca hunspell-cs
  hunspell-da hunspell-de-at hunspell-de-at-frami hunspell-de-ch hunspell-de-ch-frami hunspell-de-de hunspell-de-de-frami hunspell-el
  hunspell-en-au hunspell-en-ca hunspell-en-gb hunspell-en-us hunspell-en-za hunspell-es hunspell-eu hunspell-fr-classical
  hunspell-fr-comprehensive hunspell-fr-modern hunspell-fr-revised hunspell-gd hunspell-gl hunspell-gl-es hunspell-gu hunspell-he
  hunspell-hi hunspell-hr hunspell-hu hunspell-is hunspell-it hunspell-kk hunspell-kmr hunspell-ko hunspell-lo hunspell-lt hunspell-ne
  hunspell-nl hunspell-no hunspell-oc hunspell-pl hunspell-pt-br hunspell-pt-pt hunspell-ro hunspell-ru hunspell-se hunspell-si hunspell-sk
  hunspell-sl hunspell-sr hunspell-sv hunspell-sv-se hunspell-sw hunspell-te hunspell-th hunspell-uk hunspell-uz hunspell-vi myspell-bg
  myspell-cs myspell-da myspell-de-at myspell-de-ch myspell-de-de myspell-de-de-1901 myspell-en-au myspell-eo myspell-es myspell-et
  myspell-fa myspell-fo myspell-fr myspell-fr-gut myspell-ga myspell-gd myspell-gv myspell-he myspell-hr myspell-hu myspell-hy myspell-lv
  myspell-nb myspell-nl myspell-nn myspell-pl myspell-pt-br myspell-pt-pt myspell-ru myspell-sk myspell-tl myspell-uk
0 packages upgraded, 7 newly installed, 0 to remove and 0 not upgraded.
Need to get 43.0 MB of archives. After unpacking 80.0 MB will be used.
Do you want to continue? [Y/n/?] y
...
3. Запускаю справочную систему документации по установленным модулям Python (текущей версии):

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

olej@orangepione:~$ pydoc -p 30000 &
[1] 2772
olej@orangepione:~$ pydoc server ready at http://localhost:30000/
4. Коннектим браузер на Orange Pi к справочной системе Python + с GUI отображением на хост-сессию SSH:

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

olej@orangepione:~$ firefox
ExceptionHandler::GenerateDump cloned child 2972
ExceptionHandler::SendContinueSignalToChild sent continue signal to child
ExceptionHandler::WaitForContinueSignal waiting for continue signal...
[Parent 2890] WARNING: pipe error (49): Connection reset by peer: file /build/firefox-esr-vpQUFM/firefox-esr-52.9.0esr/ipc/chromium/src/chrome/common/ipc_channel_posix.cc, line 322
[Parent 2890] WARNING: pipe error (45): Connection reset by peer: file /build/firefox-esr-vpQUFM/firefox-esr-52.9.0esr/ipc/chromium/src/chrome/common/ipc_channel_posix.cc, line 322
[Parent 2890] WARNING: pipe error (48): Connection reset by peer: file /build/firefox-esr-vpQUFM/firefox-esr-52.9.0esr/ipc/chromium/src/chrome/common/ipc_channel_posix.cc, line 322
[Parent 2890] WARNING: pipe error (46): Connection reset by peer: file /build/firefox-esr-vpQUFM/firefox-esr-52.9.0esr/ipc/chromium/src/chrome/common/ipc_channel_posix.cc, line 322
[Parent 2890] WARNING: pipe error (44): Connection reset by peer: file /build/firefox-esr-vpQUFM/firefox-esr-52.9.0esr/ipc/chromium/src/chrome/common/ipc_channel_posix.cc, line 322
...
Вложения
pd1.png
pd2.png

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

Re: компьютерное зрение на одноплатных SBC

Непрочитанное сообщение Olej » 26 авг 2018, 16:11

Olej писал(а): Не самые свежие версии, но всё же...
Захват видеопотока (с видео файла или 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()
Вложения
d1.png

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

Re: компьютерное зрение на одноплатных SBC

Непрочитанное сообщение Olej » 26 авг 2018, 16:35

Olej писал(а): Захват видеопотока (с видео файла или 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.
Чтобы не рассказывать долго, прилагается архив такого усечённого проекта, содержащий этот минимум.
Вложения
Face.0.tgz
(4.06 МБ) 225 скачиваний

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

Re: компьютерное зрение на одноплатных SBC

Непрочитанное сообщение Olej » 27 авг 2018, 20:36

Olej писал(а):Так что самые нетерпеливые могут устанавливать уже и OpenCV 4. :lol:
Пробую собрать OpenCV 4, потому как очень многие вещи (мной опробованные) работают нормально только начиная с 3.4, и даже 3.2 создаёт определённые сложности...
Для сборки создаю отдельное виртуальную среду Python (см. Python: Виртуальная среда):

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

olej@orangepione:~$ workon
py2cv2
py3cv4

olej@orangepione:~$ workon py3cv4
(py3cv4) olej@orangepione:~$ 

Ответить

Вернуться в «Одноплатные компьютеры»

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

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