медленное распознавание лиц на opencv и intel galileo gen2

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

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)

person H D    schedule 09.08.2015    source источник
comment
Это ОЧЕНЬ медленный процессор. Вы можете попробовать уменьшить разрешение веб-камеры, так как это уменьшит время обработки. (Если разрешение равно x*y, если вы измените его на x/4 * y/4, в идеале время обработки должно сократиться примерно до 1 секунды.) Какое разрешение вы сейчас используете для веб-камеры?   -  person Chris Britt    schedule 09.08.2015


Ответы (1)


Несмотря на то, что это процессор Intel, на Intel Galileo не так много ресурсов (процессор 400 МГц, 256 МБ ОЗУ) для продвинутых алгоритмов компьютерного зрения (таких как распознавание лиц).

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

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

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

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

Примечание. можно найти пример распознавания лиц c++ для Intel Galileo здесь

person George Profenza    schedule 09.08.2015