This code finds bounding box of a single human mouth. In comparison to other face segmentation methods, it is relatively insusceptible to open mouth conditions, e.g., yawning, surgical robots, etc. The mouth coordinates are found in a more certified way using two independent algorithms. Therefore, the algorithm can be used in more sensitive applications.
import swab_ai import cv2 img = cv2.imread("input.jpg") # img is numpy array points = swab_ai.Get_BoundingBox(img) # returns bounding box coordinates of img if points: # bounding box is found # save output file -> only for debugging purposes cv2.imwrite("output.jpg", cv2.rectangle(img, points, points, (0, 0, 255), 2)) print("output.jpg is written.")
It loads required libraries and models. This module contains three functions:
GetFace(input_image, show=False, save=False, live=False): calls
FaceInference.pyand returns coordinates of face bounding box and two landmarks of mouth.
GetMouth(face_image, show=False, save=False, live=False): return mouth mask.
Get_BoundingBox(input_image, show=False, save=False, live=False): calls
GetMouthfunctions and checks if the bounding box could be certified by checking for sufficient overlap of two independent algorithms. This function returns the mouth bounding box and also prints the FPS in the output. In case mouth bounding box could not be found
Frame Droppeis printed in the console.
For debugging purposes: The algorithm is run on live webcam video. The result of face detection and segmentation algorithms is visualized in real-time.
We have used the latest version of pytorch image
pytorch:1.9.0-cuda11.1-cudnn8-runtime as of now.
To build the docker image and run the container in one step:
docker build -t swabai . docker run --runtime=nvidia swabai
--runtime=nvidiais necessary to enable GPU.
If you see the message
output.jpg is written, it means that everything is working correctly. To see the output image use this command to mount local working directory:
docker run -v $PWD:/usr/src/app/ --runtime=nvidia swabai
The first time that the code is run, model is downloaded automatically. Every time that the code restarts, it checks for model updates.