# BADMINTON-POSE-RECOGNITION ###### tags: `Project` ## My Updates - 2020 - 10 Add newrunvideo.py - 2020 - 10 Output keypoints as csv files in estimator.py - 2020 - 11 Apply player tracking in estimator.py - 2020 - 11 Update player tracking in estimator.py - 2020 - 11 Construct and training models to import by sklearn - 2020 - 12 - 20 Done background submission , bitwise and in file Background_subtraction ## tf-pose-estimation openpose is reference by https://github.com/ildoonet/tf-pose-estimation <br> **If there is any compyright issue, please contact me immediately** 'Openpose', human pose estimation algorithm, have been implemented using Tensorflow. It also provides several variants that have some changes to the network structure for **real-time processing on the CPU or low-power embedded devices.** **You can even run this on your macbook with a descent FPS!** Implemented features are listed here : [features](./etcs/feature.md) ### Installation Guide #### Dependencies You need dependencies below. - python3 - tensorflow 1.4.1+ (python 3.6 above does not support) - opencv3, protobuf, python3-tk - slidingwindow - https://github.com/adamrehn/slidingwindow - I copied from the above git repo to modify few things. #### Install Clone the repo and install 3rd-party libraries. ```bash $ git clone https://www.github.com/ildoonet/tf-pose-estimation $ cd tf-pose-estimation $ pip3 install -r requirements.txt ``` Build c++ library for post processing. See : https://github.com/ildoonet/tf-pose-estimation/tree/master/tf_pose/pafprocess ``` $ cd tf_pose/pafprocess $ swig -python -c++ pafprocess.i && python3 setup.py build_ext --inplace ``` #### Package Install Alternatively, you can install this repo as a shared package using pip. ```bash $ git clone https://www.github.com/ildoonet/tf-pose-estimation $ cd tf-pose-estimation $ python setup.py install # Or, `pip install -e .` ``` #### Download Tensorflow Graph File(pb file) Before running demo, you should download graph files. You can deploy this graph on your mobile or other platforms. - cmu (trained in 656x368) - mobilenet_thin (trained in 432x368) - mobilenet_v2_large (trained in 432x368) - mobilenet_v2_small (trained in 432x368) ``` $ cd models/graph/cmu $ bash download.sh ``` ### Python Usage #### Realtime Webcam ``` $ python run_webcam.py --model=mobilenet_thin --resize=432x368 --camera=0 ``` Apply TensoRT ``` $ python run_webcam.py --model=mobilenet_thin --resize=432x368 --camera=0 --tensorrt=True ``` #### run video ``` python3 newrunvideo.py --model=mobilenet_thin --video=./images/2.mp4 --write_video=./results.mp4 ``` ## Background Subtraction using opencv Background subtraction (BS) is a common and widely used technique for generating a foreground mask (namely, a binary image containing the pixels belonging to moving objects in the scene) by using static cameras.<br> As the name suggests, BS calculates the foreground mask performing a subtraction between the current frame and a background model, containing the static part of the scene or, more in general, everything that can be considered as background given the characteristics of the observed scene.<br> ![](https://i.imgur.com/PbVLrGX.png) Basic Example : ```=py from __future__ import print_function import cv2 as cv import argparse parser = argparse.ArgumentParser(description='This program shows how to use background subtraction methods provided by \ OpenCV. You can process both videos and images.') parser.add_argument('--input', type=str, help='Path to a video or a sequence of image.', default='vtest.avi') parser.add_argument('--algo', type=str, help='Background subtraction method (KNN, MOG2).', default='MOG2') args = parser.parse_args() if args.algo == 'MOG2': backSub = cv.createBackgroundSubtractorMOG2() else: backSub = cv.createBackgroundSubtractorKNN() capture = cv.VideoCapture(cv.samples.findFileOrKeep(args.input)) if not capture.isOpened: print('Unable to open: ' + args.input) exit(0) while True: ret, frame = capture.read() if frame is None: break fgMask = backSub.apply(frame) cv.rectangle(frame, (10, 2), (100,20), (255,255,255), -1) cv.putText(frame, str(capture.get(cv.CAP_PROP_POS_FRAMES)), (15, 15), cv.FONT_HERSHEY_SIMPLEX, 0.5 , (0,0,0)) cv.imshow('Frame', frame) cv.imshow('FG Mask', fgMask) keyboard = cv.waitKey(30) if keyboard == 'q' or keyboard == 27: break ``` ### Results Raw Data : ![](https://i.imgur.com/nYN5yIP.png) Result After Background Subtraction : ![](https://i.imgur.com/SdBoDjt.png) Result After Bitwise And : ![](https://i.imgur.com/u5ZV8bG.png) ### Usage ``` python3 main.py --input video.mp4 ```