So speichern Sie nur einen Teil eines langen Videos mit OpenCV So nehmen Sie ein aufgenommenes Bild aus einem Video auf (OpenCV) Ich habe OpenCV aus dem Kandidaturvideo verwendet, um die Umgebung vorzubereiten, die für die Bildverarbeitung notwendig zu sein scheint. Von hier aus wollen wir mit Funktionen und Bibliotheken verarbeiten. Das erste ist die Gesichtserkennung.
Da es auf einem Mac entwickelt wurde, installieren Sie es von Homebrew.
brew install opencv
Daher gibt es unter "/ usr / local / Cellar / opencv / 4.1.1_2 / share / opencv4 / haarcascades /" einen Teil, der als Kaskade (Verteiler) bezeichnet wird und zum Erkennen des Gesichts und des gesamten Körpers erforderlich ist. Die Typen sind in [Gesichtserkennung mit OpenCV (Haar-like Feature Classifier)](https://qiita.com/hitomatagi/items/04b1b26c1bc2e8081427#haar-like Feature Classifier) beschrieben.
Hier,
--haarcascade_frontalface_alt_tree.xml Vorderseite --haarcascade_eye.xml Beide Augen --haarcascade_righteye_2splits.xml rechtes Auge --haarcascade_lefteye_2splits.xml Linkes Auge
Ich werde es versuchen.
Hier
Wird verarbeitet.
Entwickelt basierend auf dem obigen Verarbeitungsablauf.
Version beurteilt durch Teilen des rechten und des linken Auges
import cv2
import os
import time
if __name__ == '__main__':
cap = cv2.VideoCapture('one_minutes.mp4')
cap_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
cap_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = cap.get(cv2.CAP_PROP_FPS)
fourcc = cv2.VideoWriter_fourcc('m','p','4','v')
writer = cv2.VideoWriter('detect_face.mp4',fourcc, fps, (cap_width, cap_height))
cascade_base_path = "/usr/local/Cellar/opencv/4.1.1_2/share/opencv4/haarcascades/"
#Machen Sie sich bereit Kaskade
face_cascade = cv2.CascadeClassifier(os.path.join(cascade_base_path, 'haarcascade_frontalface_alt_tree.xml'))
right_eye_cascade = cv2.CascadeClassifier(os.path.join(cascade_base_path, 'haarcascade_righteye_2splits.xml'))
left_eye_cascade = cv2.CascadeClassifier(os.path.join(cascade_base_path, 'haarcascade_lefteye_2splits.xml'))
start = time.time()
try :
while True:
if not cap.isOpened():
break
ret, frame = cap.read()
img_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 1.Das Gesicht ist im Rahmen
face_points = face_cascade.detectMultiScale(img_gray)
for (fx,fy,fw,fh) in face_points:
#2. ROI(Region of Interest:Zielgebiet)Schneiden Sie das Bild aus, das wird
#Unterteilt in rechten und linken Bereich(Baron Ashura Methode)
width_center = fx + int(fw * 0.5)
face_right_gray = img_gray[fy:fy+fh, fx:width_center]
face_left_gray = img_gray[fy:fy+fh, width_center:fx+fw]
#3.Stellen Sie fest, ob sowohl das rechte als auch das linke Auge sichtbar sind
right_eye_points = right_eye_cascade.detectMultiScale(face_right_gray)
left_eye_points = left_eye_cascade.detectMultiScale(face_left_gray)
if 0 < len(right_eye_points) and 0 < len(left_eye_points):
(rx,ry,rw,rh) = right_eye_points[0]
(lx,ly,lw,lh) = left_eye_points[0]
#4.Umgeben Sie das Gesicht, das rechte und das linke Auge mit einem Quadrat
#Das rechte Auge ist orange
cv2.rectangle(frame,(fx+rx,fy+ry),(fx+rx+rw,fy+ry+rh),(0,255,255),2)
#Das linke Auge ist rot
cv2.rectangle(frame,(width_center+lx,fy+ly),(width_center+lx+lw,fy+ly+lh),(0,0,255),2)
#Das ganze Gesicht ist grün
cv2.rectangle(frame,(fx,fy),(fx+fw,fy+fh),(0,255,0),2)
writer.write(frame)
except cv2.error as e:
print(e)
print("Verarbeitungszeit{}Sekunden".format(time.time() - start))
writer.release()
cap.release()
Zum Vergleich werde ich auch die mit beiden Augen "haarcascade_eye.xml" geben.
Version mit beiden Augen
import cv2
import os
import time
if __name__ == '__main__':
cap = cv2.VideoCapture('one_minutes.mp4')
cap_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
cap_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = cap.get(cv2.CAP_PROP_FPS)
fourcc = cv2.VideoWriter_fourcc('m','p','4','v')
writer = cv2.VideoWriter('detect_face_2.mp4',fourcc, fps, (cap_width, cap_height))
cascade_base_path = "/usr/local/Cellar/opencv/4.1.1_2/share/opencv4/haarcascades/"
face_cascade = cv2.CascadeClassifier(os.path.join(cascade_base_path, 'haarcascade_frontalface_alt_tree.xml'))
eyes_cascade = cv2.CascadeClassifier(os.path.join(cascade_base_path, 'haarcascade_eye.xml'))
start = time.time()
try :
while True:
if not cap.isOpened():
break
ret, frame = cap.read()
img_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
face_points = face_cascade.detectMultiScale(img_gray)
for (fx,fy,fw,fh) in face_points:
face_gray = img_gray[fy:fy+fh, fx:fx+fw]
eyes_points = eyes_cascade.detectMultiScale(face_gray)
if 0 < len(eyes_points):
for (ex,ey,ew,eh) in eyes_points:
#Die Augen sind orange
cv2.rectangle(frame,(fx+ex,fy+ey),(fx+ex+ew,fy+ey+eh),(0,255,255),2)
#Das ganze Gesicht ist grün
cv2.rectangle(frame,(fx,fy),(fx+fw,fy+fh),(0,255,0),2)
writer.write(frame)
except cv2.error as e:
print(e)
print("Verarbeitungszeit{}Sekunden".format(time.time() - start))
writer.release()
cap.release()
――Das Trennen des rechten und des linken Auges war genauer. Besonders als ich die Konkurrenz sah, erkannte ich sie mehr als beide Augen! ――Es ist das Erkennen beider Augen, aber das Erkennen anderer als der Augen ――Selbst wenn Ihr Gesicht ein wenig geneigt ist, sinkt die Genauigkeit stark. Ich habe N ○ H nicht gebrochen. Es ist möglicherweise am besten, jetzt Deep Learning zu verwenden. Sicherlich denke ich, dass die Genauigkeit gut zu sein scheint, weil ich lerne, nachdem ich ein Datenelement in der Bibliothek durch Kippen, Ändern der Größe, Verwischen usw. dupliziert habe: Denken: (Ich muss mich wieder an neue Dinge erinnern. Ist es ...: müde: Ich habe nicht die Energie und körperliche Stärke: thermometer_face :)
Vor einigen Tagen wurde Gesichtserkennung mit OpenCV in Echtzeit versuchen veröffentlicht und gelöscht: schreien: Die Zusammenstellung dauerte länger als die Entwicklung: müde: