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()