Building Exercise Monitoring Using OpenCV and Mediapipe

Exercise Monitoring

Unlike most common fitness apps available in the market, this app will make use of computer vision to monitor, analyze, and quantify physical excercises. Instead of just giving the user a set of routines, the app has the capability of understanding proper workout postures (eg. Situps). With that, the app can automatically count the reps if the user is following the proper workout posture for the given routine. 

Concept

Download details:
Author: mecsung
Source code: https://github.com/mecsung/Exercise-Monitoring-Using-Opencv
License:

#opencv #python #mediapipe 

Building Exercise Monitoring Using OpenCV and Mediapipe
黎 飞

黎 飞

1653768000

一小时学习MediaPipe的所有知识

这是一门针对初学者的完整课程,学习有关MediaPipe的所有知识。包括:人脸识别、匹配、手势、姿势、自拍背景等。

00:00:00 简介
00:01:22 程序安装
00:02:25 人脸识别
00:07:19 人脸拟合
00:11:42 手部识别
00:13:57 姿态识别
00:15:43 整体识别
00:17:51 自拍背景
00:22:59 3D物体识别

 #python  #mediapipe #3d 

一小时学习MediaPipe的所有知识
Grace  Edwards

Grace Edwards

1651224840

How to Set up a Zoom Virtual Background with MediaPipe in Python

In this video, we are going to use MediaPipe's selfie segmentation module to set a zoom style virtual background for images in Python. Besides, we can blur the background as well.

We are also able to remove the background in an image. In this way, we can get rid of the noisy information to increase the accuracy of facial recognition models. This is the normalization stage in facial recognition pipelines.

Waiting for your comments!

Tutorial: https://sefiks.com/2022/01/15/virtual-background-with-mediapipe/

#mediapipe #python 

How to Set up a Zoom Virtual Background with MediaPipe in Python
Grace  Edwards

Grace Edwards

1651210380

Facial Landmark Detection with MediaPipe Library in Python

In this video, we are going to mention facial landmark detection with MediaPipe. MediaPipe is a Google powered library and it can find 468 facial landmarks in 3-dimensional space. Dlib can do it with 68 landmarks in 2D space.

We firstly project landmarks in 3D space, then highlight landmarks in the 2D image, and finally we will focus on specific areas such as eyes, eye brows, face oval, lips and face mesh.

#python #mediapipe 

Facial Landmark Detection with MediaPipe Library in Python
Callie  Maggio

Callie Maggio

1651203060

Deep Face Detection with MediaPipe Library in Python

We are going to mention face detection with Google powered MediaPipe library in Python. MediaPipe uses SSD (Single Shot Multibox Detector) to detect faces. It can also find some facial landmarks such as eyes, nose, mouth and ears. In that way, we are able to do alignment. Notice that detection and alignment are important pre-processing stages of a modern facial recognition pipeline.

#python #mediapipe #facedetection 

Deep Face Detection with MediaPipe Library in Python

Advanced Computer Vision Using MediaPipe & Opencv

MediaPipe Kullanarak İleri Seviye Bilgisayarla Görü

Mediapipe, Google tarafından oluşturulan makine öğrenimi çözümleri oluşturmak kullandığımız açık kaynaklı bir frameworktür. MediaPipe modüler yapısı sayesinde bize kullanımı kolay ve hızlı uygulanabilir bir yapı sunuyor. Bir çok platformda kullanılmasıda büyük bir avantaj sağlıyor.
Aşağıdak resimde mediapipe ile oluşturabileceğimiz bazı modeller bulunuyor. Bunları ayrıca incelemek için https://google.github.io/mediapipe/ adresini ziyaret edebilirsiniz. image

Burada bulunan çözümleri kullanarak bizde Hand,Face Detection, Face Mesh, Pose modelleri oluşturacağız. Bunları daha sonra kullanmak için modüler bir yapı kullanacağız. Adım adım ilerleyelim.

Kullanacağımız Kütüphaneler

MediaPipe kütüphanesini yüklemek için terminale "pip install mediapipe" yazabilirsiniz. Bununlar birlikte videolardan üzerinde yapacağımız işlemleri de opencv kütüphanesi ile yapacağız. OpenCV kurmak içinde pip install opencv-python yazabilirsiniz.

Hands

image
Elin şeklini ve hareketleri anlamak için bu modülü kullanacağız. MediaPipe Hands birden fazla modelin birlikte çalışması ile oluşuyor. Burada modellerden biri Palm Detection diğeri Hand Landmarks . Palm Detection modeli elin bulunduğu kısmı keser ve Hand Landmarks modeli elde bulunan noktaları detect etmeye çalışır. Elin croplanması sayesinde Landmark modeli daha başarı bir sonuç ortaya koyar.
Aşağıdaki resimde elde tespit edilecek landmarkları görebilirsiniz. image

Modüler bir yapı oluşturmak istediğimi söylemiştim. Bu sebeple HandTracking adında bir sınıf oluşturalım. Bunu sınıf içerisinde "init" metodu ile alacağımız parametreleri belirtelim. Bu parametlerelin ayrıntılı açıklamasını "https://google.github.io/mediapipe/solutions/hands.html" adresinden öğrenebilirsiniz.

Öncelikle hands adında bir değişken oluşturalım bu değişken ile hands sınıfındaki metotlara erişebileceğiz. Daha sonra elde ettiğimiz landmarkları çizim yaparken kullanmak için mp_drawing nesnesini oluşturuyoruz. image

find() adında image ve draw parametleri alan bir fonksiyon oluşturalım. Burada image değişkeni videodan aldığımız frameleri temsil ediyor, draw değişkenine ise default olarak True değerini verdik, video üzerinde çizim göstermek istemezsek bunu False yapabiliriz.

MediaPipe alınan imagelerin RGB formatında olmasını istiyor. Biz Opencv ile okuduğumuz videoları BGR olarak okuyoruz. Bu sebeple cvtColor metodu ile imagei RGB ye çeviriyoruz. Oluşturduğumuz hands nesnesinin process metodunu kullarak handtracking işlemini başlatıyoruz. Buradan aldığımız bilgileri result değişkeninde tutuyoruz. Result değişkeni içerisinde detect edilen eller ve bu ellerin landmarkları bulunuyor.For döngüsü ile detect edilen ellerin landmarklarını alıyoruz. Tüm bu aldığımız bilgileri mp_drawing objesinin draw_landmarks metodunu kullanarak çizdiriyoruz. Burada mp_hans.HAND_CONNECTIONS ile landmarklar arasında çizgiler çekiyoruz. Daha sonra kullanmak için img döndürüyoruz. image

Hand Videos

Aşağıdak videolarda sonuçları inceleyebilirsiniz.   

Pose

image

Videolar kullanarak pose tahmini ile yapılan egzersizlerin doğruluğunun kontrol edilmesi, işaret dili, vucut hareketlerimizi kullanabileceğimiz uygulamalar gibi bir çok alanda bize faydası olabilir. MediaPipe kütüphanesinde bulunan Pose sınıfıda bunu bizim için oldukça kolay hale getiriyor. 33 farklı 3 boyutlu landmarkı pose modelini kullanarak tespit edebiliyoruz.

image

Yine Hands modelinde olduğu gibi 2 farklı model bulunuyor modellerden biri landmarkların tespit edilmesi biri pose estimation yapılacak insanın tespit edilmesinde kullanıyor. Croplanan image sayesinde landmarkların yüksek doğruluk oranıyla detect edilmesi sağlanıyor.

Pose modelinde de daha sonra kullanmak için bir sınıf oluşturacağız. Modules klasörü altında Pose adında bir python dosyası oluşturalım. Bu python dosyasının içersinde "PoseDetection" adında bir sınıf oluşturalım. Burada bir çok parametre bulunuyor. Şimdilik bu parametreleri değiştirmemize gerek yok. Parametreler hakkında daha fazla bilgi almak için mediapipe sitesini ziyaret edebilirsiniz. image

Hand modeline çok benzer işlemler uygulayarak find metodumuzu oluşturuyoruz. Landmarkların birleşmesi için mp_pose.POSE_CONNECTIONS parametresini de kullanmayı unutmayalım.
image

VIDEO

Face Detection

image

Mediapipe ile face detection yapmakta oldukça hızlı ve başarılı görünüyor. Yüzde bulunan 6 farklı landmarkın tespit edileside ayrıca sağlanıyor. Bunun yanında bounding box oluşturarak yüzü bir kare içerisine alarak detection işlemini gerçekleştirebiliyoruz. Ayrıca birden fazla yüzün tespit edilemside sağlanıyor.

Burada da aynı hand ve pose kısımlarında ki detection ve drawing objelerimizi oluşturuyoruz. Yine bahsettiğim gibi modüler bir yapı olması için FaceDetectionC adında bir class oluşturdum. image

Öncelikle results.detection ile detection yapılmışmı bunu kontrol edelim. Daha sonra detect edilen yüzleri for döngüsü ile geziyoruz. Yüzün sınırlarına bir kare çizmek için bounding_box bilgisini çekiyoruz. Daha sonra kendi bounding boxımızı oluşturmak için detection dan aldığımız bilgileri imagein height ve widht değerleri ile çarpıyoruz. (detection yapılırken x,y,widht,height değerleri 0 ile 1 arasında veriliyor. Konumların tespit etmek için image'in shape değerleri ile çarpıyoruz.) Aldığımız bbox bilgisi ile cv2.rectangle ile bir kare çiziyoruz. Detection objesi içerisinde bulunan score bilgisinide putText metodu ile ekrana basabiliriz.
image

VIDEO

FACE MESH

image

Face Mesh modelini kullanarak yüzde bulunan 468 3 boyutlu noktayı tespit edebiliz. Burada aldığımız landmarklar ile bir çok işlem gerçekleştirebiliriz. Örneğin son zamanlarda çok kullanılan kamera filtrelerini bu sayede kolayca oluşturabiliriz. image

Yine aynı şekilde bir FaceMeshC adında bir sınıf oluşturalım. Bunun init metodu içerisinde gerekli parametreleri alalım. Aynı şekilde process işlemini başlatmak için gereken objeleri oluşturalım. image
Diğer modellerde yaptığımız gibi mp_draw nesnesini kullanarak çizim işlemini yapalım. image

VIDEO

SONUC Tüm bunları kullanmak için mp_models.py adında bir python dosyası oluşturalım. Burada hangi modeli kullanmak istediğimizi arg olarak verebiliriz. Örn : python mp_models.py hand ile hand detector çalışır ve gönderdiğimiz video üzerinde detect işlemi yapılır daha sonra bu video processed_videos klasörüne kaydedilir. image

which() metoduna argument olarak hangi model adı ilgili sınıftan bir obje oluşturulur. Bu detector objesi ve video show() metoduna gönderilir.

image

show metodunda ise opencv de buluanan VideoCapture metodu ile okunur. İlgili sınıfında find metoduna image gönderilir detection işlemi yapılan ve dönen video kaydedilir.

Download Details:
Author: burakbaga
Source Code: https://github.com/burakbaga/advance_computer_vision
License: 

#opencv #python #mediapipe #Computervison

Advanced Computer Vision Using MediaPipe & Opencv
Dominic  Feeney

Dominic Feeney

1640449260

Creating A Augmented Reality Game using OpenCV, Mediapipe, and Pymunk

A toy project using OpenCV, PyMunk and Mediapipe

Creating a simple augmented reality game using OpenCV, Mediapipe, and Pymunk.

For a tutorial on how to develop such applications, please read my blog post Having fun with Computer Vision and Physics

https://user-images.githubusercontent.com/8543469/120778017-21752600-c53b-11eb-9e03-46b3441d2594.mp4

Download Details:
Author: amirabbasasadi
Source Code: https://github.com/amirabbasasadi/toy-project-cv-physics-engine
License: 

#opencv #mediapipe #python 

Creating A Augmented Reality Game using OpenCV, Mediapipe, and Pymunk
Python  Library

Python Library

1639711692

Building Face And Hand Tracking For Python

Face-And-Hand-Tracking

cv2.version
'4.5.4-dev'

mediapipe 0.8.9

id number determines which finger we choose HandLandmarks

Hands

Face

Download Details:
Author: doganozcan
Source Code: https://github.com/doganozcan/Face-And-Hand-Tracking
License: MIT License

#python #machine-learning #mediapipe 

Building Face And Hand Tracking For Python

Face Detection using OpenCV and Mediapipe (Project)

Live-Face-Detection

Project Description:

In this project, we will be using the live video feed from the camera to detect Faces. It will also detect some specific points such as ears, nose, lips and eyes.

Alt Text

Requirements:

Following modules need to be installed for it to work properly:

  • OpenCV
  • Mediapipe

OpenCV:

OpenCV is a huge open-source library for computer vision, machine learning, and image processing. OpenCV supports a wide variety of programming languages like Python, C++, Java, etc. It can process images and videos to identify objects, faces, or even the handwriting of a human.

It can be installed using "pip install opencv-python"

Mediapipe:

MediaPipe is a framework for building multimodal (eg. video, audio, any time series data), cross platform (i.e Android, iOS, web, edge devices) applied ML pipelines.

It can be installed using "pip install mediapipe"

Important Note:

I faced alot of dependency issues throughout this project. Some of the issues and their solutions are as follows:

  • autopy not installing: This is because autopy currently doesn't support Python versions above 3.8
  • webcam not opening: It was a bug in mediapipe and was fixed in latest python versions

Hence, inorder for the project to run smoothly, you need to degrade the Python version to 3.8

How to Degrade Python Version:

Follow the following steps:

  • Uninstall Python from add/remove programs
  • Go to AppData and remove any python folder you see.
  • Download Python 3.8 from this link : Python 3.8
  • Install it.
  • Open command promt and run "pip" inorder to confirm installation.
  • Your Python version has been degraded :)

Download Details:
Author: HxnDev
Source Code: https://github.com/HxnDev/Live-Face-Detection
License: 

#opencv #mediapipe #python 

Face Detection using OpenCV and Mediapipe (Project)

Gesture Volume Control Project with OpenCV and MediaPipe

Gesture Volume Control Using OpenCV and MediaPipe

output

This Project uses OpenCV and MediaPipe to Control system volume

💾 REQUIREMENTS

  • opencv-python
  • mediapipe
  • comtypes
  • numpy
  • pycaw
pip install -r requirements.txt

MEDIAPIPE

mediapipeLogo

MediaPipe offers open source cross-platform, customizable ML solutions for live and streaming media.

Hand Landmark Model

After the palm detection over the whole image our subsequent hand landmark model performs precise keypoint localization of 21 3D hand-knuckle coordinates inside the detected hand regions via regression, that is direct coordinate prediction. The model learns a consistent internal hand pose representation and is robust even to partially visible hands and self-occlusions.

To obtain ground truth data, we have manually annotated ~30K real-world images with 21 3D coordinates, as shown below (we take Z-value from image depth map, if it exists per corresponding coordinate). To better cover the possible hand poses and provide additional supervision on the nature of hand geometry, we also render a high-quality synthetic hand model over various backgrounds and map it to the corresponding 3D coordinates.
 

Solution APIs

Configuration Options

Naming style and availability may differ slightly across platforms/languages.

STATIC_IMAGE_MODE
If set to false, the solution treats the input images as a video stream. It will try to detect hands in the first input images, and upon a successful detection further localizes the hand landmarks. In subsequent images, once all max_num_hands hands are detected and the corresponding hand landmarks are localized, it simply tracks those landmarks without invoking another detection until it loses track of any of the hands. This reduces latency and is ideal for processing video frames. If set to true, hand detection runs on every input image, ideal for processing a batch of static, possibly unrelated, images. Default to false.

MAX_NUM_HANDS
Maximum number of hands to detect. Default to 2.

MODEL_COMPLEXITY
Complexity of the hand landmark model: 0 or 1. Landmark accuracy as well as inference latency generally go up with the model complexity. Default to 1.

MIN_DETECTION_CONFIDENCE
Minimum confidence value ([0.0, 1.0]) from the hand detection model for the detection to be considered successful. Default to 0.5.

MIN_TRACKING_CONFIDENCE:
Minimum confidence value ([0.0, 1.0]) from the landmark-tracking model for the hand landmarks to be considered tracked successfully, or otherwise hand detection will be invoked automatically on the next input image. Setting it to a higher value can increase robustness of the solution, at the expense of a higher latency. Ignored if static_image_mode is true, where hand detection simply runs on every image. Default to 0.5.

Source: MediaPipe Hands Solutions

mediapipeLogomediapipeLogo 

📝 CODE EXPLANATION

Importing Libraries

import cv2
import mediapipe as mp
import math
import numpy as np
from ctypes import cast, POINTER
from comtypes import CLSCTX_ALL
from pycaw.pycaw import AudioUtilities, IAudioEndpointVolume

Solution APIs

mp_drawing = mp.solutions.drawing_utils
mp_drawing_styles = mp.solutions.drawing_styles
mp_hands = mp.solutions.hands

Volume Control Library Usage

devices = AudioUtilities.GetSpeakers()
interface = devices.Activate(IAudioEndpointVolume._iid_, CLSCTX_ALL, None)
volume = cast(interface, POINTER(IAudioEndpointVolume))

Getting Volume Range using volume.GetVolumeRange() Method

volRange = volume.GetVolumeRange()
minVol , maxVol , volBar, volPer= volRange[0] , volRange[1], 400, 0

Setting up webCam using OpenCV

wCam, hCam = 640, 480
cam = cv2.VideoCapture(0)
cam.set(3,wCam)
cam.set(4,hCam)

Using MediaPipe Hand Landmark Model for identifying Hands

with mp_hands.Hands(
    model_complexity=0,
    min_detection_confidence=0.5,
    min_tracking_confidence=0.5) as hands:

  while cam.isOpened():
    success, image = cam.read()

    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    results = hands.process(image)
    image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
    if results.multi_hand_landmarks:
      for hand_landmarks in results.multi_hand_landmarks:
        mp_drawing.draw_landmarks(
            image,
            hand_landmarks,
            mp_hands.HAND_CONNECTIONS,
            mp_drawing_styles.get_default_hand_landmarks_style(),
            mp_drawing_styles.get_default_hand_connections_style()
            )

Using multi_hand_landmarks method for Finding postion of Hand landmarks

lmList = []
    if results.multi_hand_landmarks:
      myHand = results.multi_hand_landmarks[0]
      for id, lm in enumerate(myHand.landmark):
        h, w, c = image.shape
        cx, cy = int(lm.x * w), int(lm.y * h)
        lmList.append([id, cx, cy])    

Assigning variables for Thumb and Index finger position

if len(lmList) != 0:
      x1, y1 = lmList[4][1], lmList[4][2]
      x2, y2 = lmList[8][1], lmList[8][2]

Marking Thumb and Index finger using cv2.circle() and Drawing a line between them using cv2.line()

cv2.circle(image, (x1,y1),15,(255,255,255))  
cv2.circle(image, (x2,y2),15,(255,255,255))  
cv2.line(image,(x1,y1),(x2,y2),(0,255,0),3)
length = math.hypot(x2-x1,y2-y1)
if length < 50:
    cv2.line(image,(x1,y1),(x2,y2),(0,0,255),3)

Converting Length range into Volume range using numpy.interp()

vol = np.interp(length, [50, 220], [minVol, maxVol])

Changing System Volume using volume.SetMasterVolumeLevel() method

volume.SetMasterVolumeLevel(vol, None)
volBar = np.interp(length, [50, 220], [400, 150])
volPer = np.interp(length, [50, 220], [0, 100])

Drawing Volume Bar using cv2.rectangle() method

cv2.rectangle(image, (50, 150), (85, 400), (0, 0, 0), 3)
cv2.rectangle(image, (50, int(volBar)), (85, 400), (0, 0, 0), cv2.FILLED)
cv2.putText(image, f'{int(volPer)} %', (40, 450), cv2.FONT_HERSHEY_COMPLEX,
        1, (0, 0, 0), 3)}

Displaying Output using cv2.imshow method

cv2.imshow('handDetector', image) 
    if cv2.waitKey(1) & 0xFF == ord('q'):
      break

Closing webCam

cam.release()

Download Details:
Author: pratham-bhatnagar
Source Code: https://github.com/pratham-bhatnagar/Gesture-Volume-Control
License: 

#opencv #python #mediapipe 

Gesture Volume Control Project with OpenCV and MediaPipe
Dominic  Feeney

Dominic Feeney

1637578816

How to Make 3D Hand Pose with MediaPipe and TensorFlow.js

Today, we're excited to share a new version of our model for hand pose detection, with improved accuracy for 2D, novel support for 3D, and the new ability to predict keypoints on both hands simultaneously. You can try a live demo of the new model here. In this article, we'll describe the new model, and how you can get started.

  1. How to use it
  2. Model deep dive
  3. Model quality
  4. Browser performance
  5. Cross platform availability

#tensorflow #mediapipe #javascript 

How to Make 3D Hand Pose with MediaPipe and TensorFlow.js
Dominic  Feeney

Dominic Feeney

1636451820

How to High Fidelity Posture Tracking with MediaPipe and TensorFlow.js

Today we’re excited to launch MediaPipe's BlazePose in our new pose-detection API. With today’s release we enable developers to use the same models on the web that are powering MLKit Pose and MediaPipe Python unlocking the same great performance across all devices. The new TensorFlow. MediaPipe capitalizes on WASM with GPU accelerated processing and provides faster out-of-the-box inference speed.

The MediaPipe runtime currently lacks Node and iOS Safari support, but we'll be adding the support soon.

#mediapipe #tensorflow #javascript #BlazePose

How to High Fidelity Posture Tracking with MediaPipe and TensorFlow.js
Dominic  Feeney

Dominic Feeney

1636444211

How to Detect 3D Pose with MediaPipe BlazePose GHUM & TensorFlow.js

Pose detection is an important step in understanding more about the human body in videos and images. Today, we are launching our first 3D model in TF.js pose-detection API.

#tensorflow #mediapipe 

How to Detect 3D Pose with MediaPipe BlazePose GHUM & TensorFlow.js
Helene  Ward

Helene Ward

1635806460

How to Code A Zoom Background Removal using OpenCV Python MediaPipe

Learn how to code a Zoom Virtual Background Removal Clone from Scratch using OpenCV Python and the MediaPipe Library in this Computer Vision Tutorial. We will start off by coding the person pixel segmentation using MediaPipe as well as the Logic for background removal with a virtual greenscreen or virtual background using OpenCV.

⭐ Download the Code at the AI Vision Store: https://augmentedstartups.info/VisionStore

#tensorflow #opencv #python #mediapipe 

How to Code A Zoom Background Removal using OpenCV Python MediaPipe
Helene  Ward

Helene Ward

1635802680

StreamLit Computer Vision UI Course & MediaPipe OpenCV Python (2021)

Want to build, from Scratch, a Computer Vision User Interface using StreamLit in Python & OpenCV? Well, in this Course, we will code a Web App with PYTHON ONLY, & combine it MediaPipe's face landmark detection, in real time.  

⭐ Download the Code at the AI Vision Store: https://augmentedstartups.info/VisionStore

The first page will tell us a bit about the web app and the author, the second will help us to infer face mesh on a single image and the third will allow us to implement real-time face landmark detection on video.  Whats great about this is that unlike native OpenCV scripts is that you can actually interact with the app and make adjustments and create neat analytical dashboards with this. If you don't already know, StreamLit turns data scripts into shareable web apps in minutes. All in Python. All for free. No front‑end experience required.


#tensorflow #opencv #python #streamlit #mediapipe 

StreamLit Computer Vision UI Course & MediaPipe OpenCV Python (2021)