2015-08-09 3 views
0

Я хочу запрограммировать свой intel galileo gen 2, чтобы он отображал количество лиц перед веб-камерой и просто печатал их на оболочке (используя opencv). Мой код работает, но проблема в том, что скорость обработки очень медленная. Он печатает номер как раз каждые 15 секунд. Таким образом, я также не могу проверить правильность числа или нет. Есть ли способ или кто-то это сделал? Вот это код ..медленное обнаружение лица на opencv и intel galileo gen2

import cv2 
import sys 
import time 

cascPath = '/media/mmcblk0p1/haarcascade_frontalface_default.xml' 
faceCascade = cv2.CascadeClassifier(cascPath) 

video_capture = cv2.VideoCapture(0) 

while True: 
    # Capture frame-by-frame 
    ret, frame = video_capture.read() 

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 

    faces = faceCascade.detectMultiScale(
     gray, 
     scaleFactor=1.1, 
     minNeighbors=5, 
     minSize=(30, 30), 
     flags=cv2.cv.CV_HAAR_SCALE_IMAGE 
    ) 

    print len(faces) 

    time.sleep(0.033) 
+0

Это действительно медленный процессор. Вы можете попытаться уменьшить разрешение веб-камеры, так как это поможет с временем обработки. (Если разрешение x * y, если вы измените его на x/4 * y/4, вы должны в идеале опуститься примерно до 1 секунды.) Какое разрешение вы используете в настоящее время для веб-камеры? –

ответ

2

Хотя это процессор Intel, там не так много ресурсов (400 МГц процессор, 256 Мб оперативной память) на Intel Galileo для продвинутых алгоритмов компьютерного зрения (например, обнаружение лица).

Первое, что я замечаю, это то, что вы не устанавливаете измерение захвата. Я не знаю, каковы спецификации камеры, но я предполагаю, что вы открываете камеру с полным разрешением. Я рекомендую открывать камеру с более низким разрешением, например, 320x240 или даже 160x120, поскольку для обработки будет намного меньше пикселей.

Каскады HAAR также немного интенсивны (особенно в такой системе, как Intel Galileo Gen2). Я рекомендую изучить локальные двоичные шаблоны (LBP). Они уже реализованы в OpenCV, и вы можете проверить LBP c++ sample here. Это должно быть легко адаптировать к API Python или найти пример API Python. Каскады LBP должны быть быстрее каскадов HAAR.

Хотя менее стандартный, в зависимости от вашей камеры, вы можете иметь более низкий уровень доступа к нему. Если вы делаете либо получение изображений в оттенках серого напрямую, либо если поток сырого цвета находится в формате YUV, извлеките только Y-канал. Это должно дать вам небольшой импульс, поскольку вы больше не конвертируете цветовые пространства, но преследуйте это, только если вам легко управлять камерой (или у вас есть время и ресурсы, чтобы идти глубже только для частичного повышения).

Хотя медленнее прототипа, чем у Python, вы также можете попробовать использовать собственные c или C++ и проверить, есть ли какие-либо флаги оптимизации компилятора, которые могут максимально использовать преимущества CPU.

Примечание: вы можете найти c++ face detection sample for Intel Galileo here

Смежные вопросы