Распознавание лица в реальном времени на Raspberry Pi3 работает медленно - PullRequest
0 голосов
/ 05 мая 2018

Я использую Raspberry Pi3 для распознавания лиц, и это мой код для обнаружения лиц, но распознавание в реальном времени выполняется медленно

cam = cv2.VideoCapture(0)

rec = cv2.face.LBPHFaceRecognizer_create();

rec.read(...'/data/recognizer/trainingData.yml')
    getId = 0
    font = cv2.FONT_HERSHEY_SIMPLEX
    userId = 0
    i = 0
    while (cam.isOpened() and i<91):
        i=i+1
        ret, img = cam.read()
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        faces = faceDetect.detectMultiScale(gray, 1.3, 5)
        for (x, y, w, h) in faces:
            cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)

            getId, conf = rec.predict(gray[y:y + h, x:x + w])  # This will predict the id of the face

            # print conf;
            if conf < 50:
                userId = getId
                cv2.putText(img, "Detected", (x, y + h), font, 2, (0, 255, 0), 2)
                record = Records.objects.get(id=userId)
                record.is_present = True
                record.save()
            else:
                cv2.putText(img, "Unknown", (x, y + h), font, 2, (0, 0, 255), 2)

            # Printing that number below the face
            # @Prams cam image, id, location,font style, color, stroke

        cv2.imshow("Face", img)
        cv2.waitKey(50)`

Как это исправить пожалуйста? Спасибо за вашу руку помощи.

1 Ответ

0 голосов
/ 06 мая 2018

Вы должны использовать потоки для увеличения производительности. imutils - это библиотека, которая позволяет вам использовать потоки как на Picamera, так и на записи с веб-камеры Проблема в том, что между кадрами выполняется слишком много операций ввода-вывода.

Вот статья, которая помогла увеличить мой fps: https://www.pyimagesearch.com/2015/12/28/increasing-raspberry-pi-fps-with-python-and-opencv/

И вот код, который вы можете добавить:

import imutils
from imutils.video.pivideostream import PiVideoStream

Тогда вместо cam = cv2.VideoCapture(0)

использовать cam = PiVideoStream().start()

и вместо ret, img = cam.read() используйте im = cam.read()

и для освобождения камеры используйте:

cam.stop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...