Führen Sie bei der Gesichtserkennung einen Befehl aus

Ich muss einen Windows 10-PC mit einer Webcam einrichten, um automatisch ein Video abzuspielen, wenn eine Person erkannt wird, idealerweise Gesichtserkennung oder Bewegungserkennung.

Gibt es Windows-Apps, die dies tun, oder eine Anwendung, die Bewegungen erkennt und es mir ermöglicht, Befehle an ein anderes Programm wie VLC oder XBMC zu senden?

Dies dient nicht zum Aufzeichnen von Videos oder zur Überwachung, sondern nur zum Abspielen eines Videos für jede Person, die zum PC geht.

Ist die Bewegungserkennung gut genug oder benötigen Sie eine Gesichtserkennung?
Denn ehrlich gesagt braucht man dafür kein Win10, sondern nur einen RasPi
@Daniel Es ist ein 27-Zoll-All-In-One-Touchscreen mit Windows 10 - welche Linux-Software würden Sie für den RasPi empfehlen?
Sie würden einfach ein Skript schreiben, um das Video für jedes Gesicht abzufeuern.

Antworten (1)

Sie können OpenCV2 und Python zusammen verwenden, um so etwas in etwa 100 Codezeilen zu erledigen, wie am Beispiel der Gesichtserkennung oder der Beispieldatei zu sehen ist.

  • Kostenlos, Gratis & Open Source
  • Plattformübergreifend – funktioniert unter Windows, OS-X, Linux, Android, iOS, sogar Raspberry-Pi mit einem Kameramodul.

Die Beispieldatei, die mit der Kamera verbunden ist und ein Fenster mit der Ansicht von der Kamera anzeigt, wobei das Gesicht und die Augen markiert sind, wenn sie erkannt werden, könnte leicht modifiziert werden, um eine bestimmte Videodatei abzuspielen oder das Abspielen auszulösen, wenn ein Gesicht erkannt wird , (Sie könnten es sogar so anpassen, dass es nur abgespielt wird, wenn die Gesichtserkennung eine bestimmte Größe überschreitet) . Die Beispieldatei:

#!/usr/bin/env python

import numpy as np
import cv2

# local modules
from video import create_capture
from common import clock, draw_str

help_message = '''
USAGE: facedetect.py [--cascade <cascade_fn>] [--nested-cascade <cascade_fn>] [<video_source>]
'''

def detect(img, cascade):
    rects = cascade.detectMultiScale(img, scaleFactor=1.3, minNeighbors=4, minSize=(30, 30), flags = cv2.CASCADE_SCALE_IMAGE)
    if len(rects) == 0:
        return []
    rects[:,2:] += rects[:,:2]
    return rects

def draw_rects(img, rects, color):
    for x1, y1, x2, y2 in rects:
        cv2.rectangle(img, (x1, y1), (x2, y2), color, 2)

if __name__ == '__main__':
    import sys, getopt
    print help_message

    args, video_src = getopt.getopt(sys.argv[1:], '', ['cascade=', 'nested-cascade='])
    try:
        video_src = video_src[0]
    except:
        video_src = 0
    args = dict(args)
    cascade_fn = args.get('--cascade', "../../data/haarcascades/haarcascade_frontalface_alt.xml")
    nested_fn  = args.get('--nested-cascade', "../../data/haarcascades/haarcascade_eye.xml")

    cascade = cv2.CascadeClassifier(cascade_fn)
    nested = cv2.CascadeClassifier(nested_fn)

    cam = create_capture(video_src, fallback='synth:bg=../data/lena.jpg:noise=0.05')

    while True:
        ret, img = cam.read()
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        gray = cv2.equalizeHist(gray)

        t = clock()
        rects = detect(gray, cascade)
        vis = img.copy()
        draw_rects(vis, rects, (0, 255, 0))
        if not nested.empty():
            for x1, y1, x2, y2 in rects:
                roi = gray[y1:y2, x1:x2]
                vis_roi = vis[y1:y2, x1:x2]
                subrects = detect(roi.copy(), nested)
                draw_rects(vis_roi, subrects, (255, 0, 0))
        dt = clock() - t

        draw_str(vis, (20, 20), 'time: %.1f ms' % (dt*1000))
        cv2.imshow('facedetect', vis)

        if 0xFF & cv2.waitKey(5) == 27:
            break
    cv2.destroyAllWindows()