Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Распознавание лиц в реальном времени на Raspberry Pi — полное руководство

Это руководство проведёт вас через создание системы распознавания лиц в реальном времени на Raspberry Pi с использованием OpenCV и Pi-камеры. От настройки железа до обучения распознавателя — каждый шаг представлен с понятными фрагментами кода и практическими советами.

Ниже вы увидите живую демонстрацию Pi-камеры, обнаруживающей лица в реальном времени.

Проект опирается на открытую библиотеку OpenCV, оптимизированную для реального времени. Хотя мы фокусируемся на Raspberry Pi под Raspbian, тот же код работает на macOS и Windows с минимальными изменениями.

3 этапа

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

На диаграмме ниже эти фазы показаны схематично.

Шаг 1: Список материалов (BOM)

Необходимые компоненты:

Шаг 2: Установка OpenCV 3

Рекомендуем следовать гайду Адриана Розброука для чистой установки OpenCV 3 на Raspbian Stretch. После туториала активируйте выделенное виртуальное окружение Python:

source ~/.profile
workon cv

Внутри окружения проверьте версию Python и установку OpenCV:

python
>>> import cv2
>>> cv2.__version__

Должен отобразиться номер версии вроде 3.3.0 или новее.

Шаг 3: Проверка камеры

Если камера не определяется, включите драйвер:

sudo modprobe bcm2835-v4l2

Следующий Python-сниппет открывает поток Pi-камеры, показывает его в цвете и в оттенках серого, и переворачивает вертикально (скорректируйте, если ориентация камеры другая):

import numpy as np
import cv2

cap = cv2.VideoCapture(0)
cap.set(3, 640)
cap.set(4, 480)

while True:
    ret, frame = cap.read()
    frame = cv2.flip(frame, -1)
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    cv2.imshow('frame', frame)
    cv2.imshow('gray', gray)
    if cv2.waitKey(30) & 0xff == 27:
        break

cap.release()
cv2.destroyAllWindows()

Запустите python simpleCamTest.py (доступен на GitHub проекта). Нажмите ESC для выхода.

Шаг 4: Обнаружение лиц

Каскад Хаара OpenCV — лёгкий машинный подход для обнаружения лиц. Скачайте предобученный XML-файл (haarcascade_frontalface_default.xml) и положите в папку Cascades. Ниже скрипт демонстрирует обнаружение в реальном времени с ограничивающими рамками:

import cv2

faceCascade = cv2.CascadeClassifier('Cascades/haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(0)
cap.set(3, 640)
cap.set(4, 480)

while True:
    ret, img = cap.read()
    img = cv2.flip(img, -1)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = faceCascade.detectMultiScale(
        gray,
        scaleFactor=1.2,
        minNeighbors=5,
        minSize=(20, 20)
    )
    for (x, y, w, h) in faces:
        cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
    cv2.imshow('video', img)
    if cv2.waitKey(30) & 0xff == 27:
        break

cap.release()
cv2.destroyAllWindows()

Параметры detectMultiScale управляют чувствительностью: scaleFactor уменьшает изображение на каждой итерации, minNeighbors фильтрует ложные срабатывания, minSize задаёт минимальный размер лица.

Дополнительные примеры

Изучите больше вариантов обнаружения в GitHub проекта:

Haar Cascade Object Detection – Face & Eye Tutorial

Шаг 5: Сбор данных

Сбор размеченного датасета необходим для обучения. Создайте папку проекта (например, FacialRecognitionProject) и подкаталог dataset:

mkdir FacialRecognitionProject
cd FacialRecognitionProject
mkdir dataset

Скачайте файл каскада Хаара в корень проекта. Затем запустите 01_face_dataset.py для захвата 30 изображений лица на пользователя:

import cv2
import os

cam = cv2.VideoCapture(0)
cam.set(3, 640)
cam.set(4, 480)

face_detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
face_id = input('\nEnter user ID (numeric) and press <Return> → ')
print('\n[INFO] Initializing face capture. Look at the camera…')
count = 0

while True:
    ret, img = cam.read()
    img = cv2.flip(img, -1)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = face_detector.detectMultiScale(gray, 1.3, 5)
    for (x, y, w, h) in faces:
        cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
        count += 1
        cv2.imwrite(f'dataset/User.{face_id}.{count}.jpg', gray[y:y+h, x:x+w])
        cv2.imshow('image', img)
    if cv2.waitKey(100) & 0xff == 27 or count >= 30:
        break
    if count >= 30:
        break

cam.release()
cv2.destroyAllWindows()
print('\n[INFO] Exiting Program and cleaning up.')

Каждое изображение именуется User.{id}.{count}.jpg (например, User.1.4.jpg). При необходимости измените количество сэмплов.

Шаг 6: Обучение (Trainer)

Используя собранные изображения, обучите распознаватель лиц OpenCV. Полученная модель сохраняется как .yml файл в папке trainer. Детали реализации см. в полном скрипте обучения в репозитории проекта.

Читать подробнее: Real‑Time Face Recognition – End‑to‑End Project

Производственный процесс

  1. Мастерство операторов Python: Полное руководство
  2. Операции со списками в Python: создание, доступ, изменение и продвинутые техники
  3. Словари в Python: создание, манипуляции и продвинутые техники
  4. Установка Google Assistant на MATRIX Voice Raspberry Pi — пошаговое руководство
  5. Speathe: коммуникация на основе дыхания для парализованных пользователей
  6. Создание безопасной двери с распознаванием лиц на Windows IoT и Raspberry Pi
  7. Автоматизированное визуальное отслеживание объектов на Raspberry Pi и OpenCV
  8. Распознавание рукописных цифр на Raspberry Pi с TensorFlow и OpenCV
  9. Построение ровера на Windows IoT Core с Raspberry Pi 2 — Руководство от новичка к профи
  10. Расширение GoPiGo v2 на Windows 10 IoT Core для Raspberry Pi 3