Computer Vision Made Easy!

Computer Vision Made Easy!

Giving computer the ability to understand the real world.

Computer vision fascinates me a lot, these days I am exploring the world of Computer Vision. While working I realised that we have to write hundreds of lines of code just for basic computer vision techniques like face detection, hand detection, pose classification etc. I explored opencv and mediapipe library which helped me gain a lot of insight into computer vision. I have developed some packages that might help the developer community to focus more on the implementation rather than on coding from scratch. Here are three packages that I developed recently.

1. Face Detection

Try it out

Screenshot (994).png

Function

faceDetector(image, draw=False)

  • Function Parameter : This function takes image (a single frame) as input and a variable draw with default value False. You can change the value of parameter draw to True if you want to draw the rectangular box over the face on the image frame.
  • Output : This function returns a nested list of length 2. The element at index 1 is the frame and a list of [x,y,w,h]. x is the minimum x co-ordinates of the face, y is the minimum y co-ordinate of face, w is the width and h is the height of the face. NOTE that the frame will have rectangular box over the face if value of draw is set to True in the function.

Usage

faceDetector(image, draw=False)

With detection over the face directly through function


from lkfacedetection import faceDetector
import cv2
cap = cv2.VideoCapture(0)
while True:
    success, image = cap.read()
    functionValues = faceDetector(image,draw=True) #draw over the frame from function
    frame = functionValues[0]
    cv2.imshow('Face', frame)
    cv2.waitKey(1)
cap.release()

With detection externally using the values from function


from lkfacedetection import faceDetector
import cv2
cap = cv2.VideoCapture(0)
while True:
    success, image = cap.read()
    functionValues = faceDetector(image) #doesn't draw over the frame
    frame = functionValues[0]
    x,y,w,h = functionValues[1]
    cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2) #Draws a rectangle over the face
    cv2.imshow('Face', frame)
    cv2.waitKey(1)
cap.release()

2. Hand Tracking Package

Try it out

Screenshot (995).png

Function

handTracker(image,draw=True)

  • Function Parameter : This function takes image (a single frame) as input and a variable draw with default value False. You can change the value of parameter draw to True if you want to the mapping of hands over the image frame.
  • Output : This function returns a nested list of length 2. The element at index 1 is the frame and a list of handLandmarks. Know more about these handLandmarks on this link. NOTE that the function will return [0] at index 1 in the list if no hands are detected.

Usage

handTracker(image,draw=False)

Mapping over the hands directly from function.


from lkhandtracking import handTracker
import cv2

cap = cv2.VideoCapture(0)
while True:
    success, image = cap.read()
    functionValues = handTracker(image,draw=True)
    image = functionValues[0]
    handLms = functionValues[1]
    print(handLms)
    cv2.imshow('Hands', image)
    cv2.waitKey(1)
cap.release()

Track hands without mapping.


from lkhandtracking import handTracker
import cv2

cap = cv2.VideoCapture(0)
while True:
    success, image = cap.read()
    functionValues = handTracker(image,draw=False)
    image = functionValues[0]
    handLms = functionValues[1]
    print(handLms)
    cv2.imshow('Hands', image)
    cv2.waitKey(1)
cap.release()

3. Body Segmentation

Try it out

Screenshot (996).png

Function

bodySegmentation(orignalImg,backgroundImg=(255,255,255),threshold=0.3)

  • Function Parameter : This function takes orignalImg i.e. the image on which the segmentation has to happen. Other parameters i.e. backgroundImg sets the background color, by default it is white, but it can be changed as per user's need. threshold defines the level at which background has to be removed.
  • Output : The functions returns a frame as output where the background is segmented.

Usage

bodySegmentation(img)

Default Segmentation (White Background)


from lkbodysegmentation import bodySegmentation
import cv2

cap = cv2.VideoCapture(0)


while True:
    success, img = cap.read()
    img = bodySegmentation(img)
    cv2.imshow('Image',img)
    cv2.waitKey(1)

bodySegmentation(img, backgroundColor, threshold)

Customized Segmentation


from lkbodysegmentation import bodySegmentation
import cv2

cap = cv2.VideoCapture(0)


while True:
    success, img = cap.read()
    backgroundColor = (255,0,255) #You can replace with an image too
    threshold = 0.45 #Level of background to be erased
    img = bodySegmentation(img,backgroundColor,threshold)
    cv2.imshow('Image',img)
    cv2.waitKey(1)

Developer

This package is developed by Lakshay Kumar an enthusiastic AI Researcher. This is developed keeping in mind the pain to write lengthy lines of code just to detect faces. This will enable other developers to focus more on implementation part rather than spending time on coding the face detection module.
Feel free to share your feedback via mail