【问题标题】:Send multiple frame to AWS rekognition向 AWS rekognition 发送多个帧
【发布时间】:2018-11-17 09:25:51
【问题描述】:

我正在尝试从我的网络摄像头将图片发送到 aws rekognition,以使用 python 检测坐在它前面的人的活动。

为此,我每 5 秒拍一张照片并将其发送到 aws。 但是当我这样做时,他似乎总是发回关于我发送的第一帧的信息

cap = cv2.VideoCapture(0)

while 1:
   ret, img = cap.read()
   client=boto3.client('rekognition')

   print("hello")
   ret, fileImg=cv2.imencode('.png',img)
   response = client.detect_labels(Image={'Bytes':fileImg.tobytes()})
   print('Detected labels for Camera Capture')    
   for label in response['Labels']:
       print (label['Name'] + ' : ' + str(label['Confidence']))

   sleep(5)

这是我从那个电话中得到的结果:

Detected labels for Camera Capture
Human : 99.1103897095
People : 99.1103744507
Person : 99.1103897095
Face : 56.5527687073
Crypt : 51.1719360352
hello
Detected labels for Camera Capture
Human : 99.0247421265
People : 99.0247344971
Person : 99.0247421265
Face : 57.7796173096
Lighting : 51.8473701477
Crypt : 51.08152771
hello
Detected labels for Camera Capture
Human : 99.0808181763
People : 99.0808105469
Person : 99.0808181763
Face : 56.4268836975
Lighting : 54.6302490234
Crypt : 50.8622779846
hello

在通话期间知道图像发生了很大变化,应该(至少我认为)显示其他结果。

【问题讨论】:

    标签: python amazon-web-services opencv webcam amazon-rekognition


    【解决方案1】:

    这里有一些代码,我用类似的方式在面部周围放置矩形:

    import cv2
    import numpy as np
    import boto3
    
    # Setup
    scale_factor = .15
    green = (0,255,0)
    red = (0,0,255)
    frame_thickness = 2
    cap = cv2.VideoCapture(0)
    rekognition = boto3.client('rekognition')
    
    while(True):
    
        # Capture frame-by-frame
        ret, frame = cap.read()
        height, width, channels = frame.shape
    
        # Convert frame to jpg
        small = cv2.resize(frame, (int(width * scale_factor), int(height * scale_factor)))
        ret, buf = cv2.imencode('.jpg', small)
    
        # Detect faces in jpg
        faces = rekognition.detect_faces(Image={'Bytes':buf.tobytes()}, Attributes=['ALL'])
    
        # Draw rectangle around faces
        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)
    
        # Display the resulting frame
        cv2.imshow('frame', frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    
    # When everything done, release the capture
    cap.release()
    cv2.destroyAllWindows()
    

    它会缩小图片,因为 Rekognition 不需要全尺寸来检测人脸。

    【讨论】:

    • 您好,感谢您的回答,我尝试调整图像大小但问题没有解决,看来我的 OpenCv 版本总是通过函数 cv2.imencode 返回相同的 jpg 图像。我必须将 APi 调用放在另一个线程中才能使其工作
    猜你喜欢
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多