title: AWS rekog PPE detection
body: <p>please help me, I am trying to implement AWS rekog PPE detection in a video file. I was able to implement it in an image but I can't implement it in a video for detection, what I can't do is I can't apply the bounding box and detect the PPE. I don't know if it will be the same method of creating a bounding box in an image. this is the link for the PPE detection using the image <a href="https://docs.aws.amazon.com/rekognition/latest/dg/ppe-example-image-bounding-box.html" rel="nofollow noreferrer">https://docs.aws.amazon.com/rekognition/latest/dg/ppe-example-image-bounding-box.html</a> What I am trying to figure out is if it is possible  to draw a bounding box using the draw function in a video frame? according to aws rekog they compute the bounding box base on the width and height of the image, frame and image are the same right? but I cant somehow implement it.</p>
  <p>See the code below, this is the same code on the website this is the code for the video.</p>
  <pre><code>import base64
  import csv
  import boto3
  import streamlit as st
  import io
  from PIL import Image, ImageDraw, ExifTags, ImageColor
  import os
  import cv2
  import math
  import json
  
  
  def rescale_frame(frame,percent=30):
      scale_percent = 30
      width = int(frame.shape[1] * scale_percent / 100)
      height = int(frame.shape[0] * scale_percent / 100)
      dim = (width, height)
      return cv2.resize(frame, dim, interpolation = cv2.INTER_AREA)
  
  fill_green = '#00d400'
  fill_red = '#ff0000'
  fill_yellow = '#ffff00'
  line_width = 3
  
  with open(&quot;new_user_credentials.csv&quot;, 'r') as input:
      next(input)
      reader = csv.reader(input)
      for line in reader:
          Access_key_id = line[2]
          Secret_access_key = line[3]
  
  videoFile = &quot;ppevideotest.mp4&quot;
  
  rekognition = boto3.client('rekognition', aws_access_key_id=Access_key_id, aws_secret_access_key=Secret_access_key,
                             region_name='ap-southeast-1')
  
  ppeLabels = []
  cap = cv2.VideoCapture(videoFile)
  frameRate = cap.get(5)  # frame rate
  while (cap.isOpened()):
      frameId = cap.get(1)  # current frame number
      print(&quot;Processing frame id: {}&quot;.format(frameId))
      ret, frame = cap.read()
      frame = rescale_frame(frame, percent=30)
  
      imgWidth = int(cap.get(3))
      imgHeight = int(cap.get(4))
  
      img = cv2.line(frame)
  
      cv2.imshow(&quot;Frame&quot;, img)
  
      if cv2.waitKey(1) == ord('q'):
          break
  
      if (ret != True):
          break
      if (frameId % math.floor(frameRate) == 0):
          hasFrame, imageBytes = cv2.imencode(&quot;.jpg&quot;, frame)
  
          if (hasFrame):
              response = rekognition.detect_protective_equipment(
                  Image={
                      'Bytes': imageBytes.tobytes(),
                  }
              )
  
          for person in response['Persons']:
  
              found_mask = False
              found_hat = False
              found_hand = False
  
              for body_part in person['BodyParts']:
                  ppe_items = body_part['EquipmentDetections']
  
                  for ppe_item in ppe_items:
  
                      if ppe_item['Type'] == 'HEAD_COVER':
                          fill_color = fill_green
                          found_hat = True
                          # check if mask covers face
                          if not ppe_item['CoversBodyPart']['Value']:
                              fill_color = fill = '#ff0000'
                          # draw bounding box around mask
                          box = ppe_item['BoundingBox']
                          left = imgWidth * box['Left']
                          top = imgHeight * box['Top']
                          width = imgWidth * box['Width']
                          height = imgHeight * box['Height']
                          points = (
                              (left, top),
                              (left + width, top),
                              (left + width, top + height),
                              (left, top + height),
                              (left, top)
                          )
                          img.line(points, fill=fill_yellow, width=line_width)
  </code></pre>