In letzter Zeit hat die Anzahl der Besprechungen und Kurse bei Zoom zugenommen, aber ich habe das Gefühl, dass ich nicht weiß, wie viel Interesse ich am Sprechen habe, es sei denn, ich bin von Angesicht zu Angesicht. Warum also nicht versuchen, es zu quantifizieren? Ich habe darüber nachgedacht und es geschafft.
Es ist mein erster Beitrag, also etwas schlampig, aber ich hoffe, Sie werden ihn bis zum Ende lesen: Schweiß:
zoom Erfasst ein Konferenzbild oder -video, erkennt das Gesicht im Bild und misst den Grad des Interesses an der Geschichte.
Ich habe mich für Amazon Rekognition entschieden, um die Gesichter von Personen zu erkennen, die diesmal an der Zoom-Konferenz teilnehmen.
Ich habe auf diesen Artikel verwiesen, um zu erfahren, wie man ihn benutzt. https://qiita.com/G-awa/items/477f2324552cb908ecd0
detect_face.py
import cv2
import numpy as np
import boto3
#Einstellungen wie Skalierung und Farbe
scale_factor = .15
green = (0,255,0)
red = (0,0,255)
frame_thickness = 2
cap = cv2.VideoCapture(0)
rekognition = boto3.client('rekognition')
#Schriftgröße
fontscale = 1.0
#Schriftfarbe(B, G, R)
color = (0, 120, 238)
#Schriftart
fontface = cv2.FONT_HERSHEY_DUPLEX
#Schleife, bis Sie q drücken.
while(True):
#Frame erfassen lassen
ret, frame = cap.read()
height, width, channels = frame.shape
#In JPG konvertieren Da die Bilddatei über die API über das Internet gesendet wird, sollten Sie die Größe klein halten.
small = cv2.resize(frame, (int(width * scale_factor), int(height * scale_factor)))
ret, buf = cv2.imencode('.jpg', small)
#API auf Amazon Rekognition werfen
faces = rekognition.detect_faces(Image={'Bytes':buf.tobytes()}, Attributes=['ALL'])
#Zeichne eine Schachtel um das Gesicht
for face in faces['FaceDetails']:
smile = face['Smile']['Value']
cv2.rectangle(frame,
(int(face['BoundingBox']['Left']*width),
int(face['BoundingBox']['Top']*height)),
(int((face['BoundingBox']['Left']+face['BoundingBox']['Width'])*width),
int((face['BoundingBox']['Top']+face['BoundingBox']['Height'])*height)),
green if smile else red, frame_thickness)
emothions = face['Emotions']
i = 0
for emothion in emothions:
cv2.putText(frame,
str(emothion['Type']) + ": " + str(emothion['Confidence']),
(25, 40 + (i * 25)),
fontface,
fontscale,
color)
i += 1
#Zeigen Sie das Ergebnis auf dem Display an
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
Als ich versuchte, den Code zu verschieben, konnte ich vorerst Gesichtserkennung und Emotionsanalyse durchführen! Bei der Videoaufnahme war es jedoch schwer und blieb auf halbem Weg stehen. Also habe ich beschlossen, das Bild zu laden. (Dies ist der Code des Artikels, auf den ich mich bezog.)
Ich habe auf diesen Artikel zur Bilderfassung verwiesen. https://qiita.com/koara-local/items/6a98298d793f22cf2e36
Ich habe PIL verwendet, um den Bildschirm aufzunehmen.
capture.py
from PIL import ImageGrab
ImageGrab.grab().save("./capture/PIL_capture.png ")
Ich habe einen separaten Ordner namens Capture erstellt und in diesem Ordner gespeichert.
face_detect.py
import cv2
import numpy as np
import boto3
#Einstellungen wie Skalierung und Farbe
scale_factor = .15
green = (0,255,0)
red = (0,0,255)
frame_thickness = 2
#cap = cv2.VideoCapture(0)
rekognition = boto3.client('rekognition')
#Schriftgröße
fontscale = 1.0
#Schriftfarbe(B, G, R)
color = (0, 120, 238)
#Schriftart
fontface = cv2.FONT_HERSHEY_DUPLEX
from PIL import ImageGrab
ImageGrab.grab().save("./capture/PIL_capture.png ")
#Frame erfassen lassen
#ret, frame = cap.read()
frame = cv2.imread("./capture/PIL_capture.png ")
height, width, channels = frame.shape
frame = cv2.resize(frame,(int(width/2),int(height/2)),interpolation = cv2.INTER_AREA)
#In JPG konvertieren Da die Bilddatei über die API über das Internet gesendet wird, sollten Sie die Größe klein halten.
small = cv2.resize(frame, (int(width * scale_factor), int(height * scale_factor)))
ret, buf = cv2.imencode('.jpg', small)
#API auf Amazon Rekognition werfen
faces = rekognition.detect_faces(Image={'Bytes':buf.tobytes()}, Attributes=['ALL'])
#Zeichne eine Schachtel um das Gesicht
for face in faces['FaceDetails']:
smile = face['Smile']['Value']
cv2.rectangle(frame,
(int(face['BoundingBox']['Left']*width/2),
int(face['BoundingBox']['Top']*height/2)),
(int((face['BoundingBox']['Left']/2+face['BoundingBox']['Width']/2)*width),
int((face['BoundingBox']['Top']/2+face['BoundingBox']['Height']/2)*height)),
green if smile else red, frame_thickness)
emothions = face['Emotions']
i = 0
score = 0
for emothion in emothions:
if emothion["Type"] == "HAPPY":
score = score + emothion["Confidence"]
elif emothion["Type"] == "DISGUSTED":
score = score - emothion["Confidence"]
elif emothion["Type"] == "SURPRISED":
score = score + emothion["Confidence"]
elif emothion["Type"] == "ANGRY":
score = score - emothion["Confidence"]
elif emothion["Type"] == "CONFUSED":
score = score - emothion["Confidence"]
elif emothion["Type"] == "CALM":
score = score - emothion["Confidence"]
elif emothion["Type"] == "SAD":
score = score - emothion["Confidence"]
i += 1
if i == 7:
cv2.putText(frame,
"interested" +":"+ str(round(score,2)),
(int(face['BoundingBox']['Left']*width/2),
int(face['BoundingBox']['Top']*height/2)),
fontface,
fontscale,
color)
#Zeigen Sie das Ergebnis auf dem Display an
cv2.imshow('frame', frame)
cv2.waitKey(0)
cv2.destroyAllWindows()
OpenCV wurde verwendet, um das Bild selbst zu lesen. Amazon Rekognition kann 6 Emotionen von HAPPY, DISGUSETED, SURPRISED, ANGRY, CONFUSED, CALM, SAD lesen. HAPPY und SURPRISED werden also als positive Emotionen (hohes Interesse) und andere Emotionen als negative Emotionen (niedriges Interesse) berechnet. Schließlich wurde es auf dem Gesicht angezeigt, das den Grad des Interesses im Bereich von -100 bis 100 erkannte. Ich leihe mir ein Bild einer Person aus, weil ich keine Leute mit Zoom sammeln konnte. https://tanachannell.com/4869
Amazon Rekognition bietet weitere Funktionen. Wenn Sie also interessiert sind, schauen Sie bitte! https://docs.aws.amazon.com/ja_jp/rekognition/latest/dg/faces-detect-images.html
・ Wenn die Anzahl der Teilnehmer im Zoom groß ist, überlappen sich die angezeigten Zeichen und es wird sehr schwer zu sehen.
Ich habe es so sehr gemacht, dass ich möchte, dass die Leute es sehen! Ich begann in diesem Sinne zu schreiben, aber als ich es schrieb, konnte ich die Erfahrung noch einmal erleben, während ich sie machte, was eine Lernerfahrung war. Es könnte eine Menge Spaß machen, wenn etwas, das ich so gemacht habe, die Welt durchdringt!
GitHub https://github.com/r-301/zoom-response-check
Recommended Posts