Repozytorium zawierające pliki projektu inżynierskiego pod tytułem Lokalizacja i śledzenie sylwetki człowieka na sekwencjach wideo.
Projekt był realizowany w środowisku Windows 10. Wszystkie instrukcje są napisane dla tego systemu operacyjnego. Wymagane jest zainstalowanie dowolnej wersji języka Python 3. W projekcie korzystano z wersji 3.9.7. Następnie należy zainstalować biblioteki numpy, pandas, opencv oraz matplotlib.
Instalacja OpenPose według instrukcji ze strony.
- Zainstalować CMake GUI ze strony.
- Zainstalować Microsoft Visual Studio 2019 Community. Podczas instalacji należy wybrać opcję Desktop Development with C++.
- W celu wykorzystania GPU ze wsparciem CUDA zainstalować CUDA 11.1.1 oraz cuDNN 8.1.0
- Reszta wymagań powinna zostać pobrana przez CMake podczas instalacji.
- Pobrać lub sklonować repozytorium GitHub z OpenPose.
- Pobrać lub sklonować repozytorium z pybind11. W czasie instalacji napotkano błąd, przez który to repozytorium nie zostało pobrane automatycznie przez CMake. Pobrano je ręcznie i umieszczono w folderze openpose-master/3rdparty.
- W programie CMake jako folder z kodem źródłowym (source code) wybrać folder z OpenPose. Jako folder build wybrać dowolny inny folder lub stworzyć nowy folder build w openpose- master.
- Nacisnąć przycisk Configure i w polu Specify the generator for this project wybrać zainstalowaną wersję Visual Studio. W polu Optional platform for generator wybrać x64. Pole Optional toolset to use pozostawić puste. Nacisnąć Finish.
- Zaznaczyć flagę BUILD_PYTHON i nacisnąć Configure.
- W celu wykorzystania GPU ze wsparaciem CUDA, flagę GPU_MODE zmienić na CUDA.
- Jeśli na dole okna CMake widnieje napis Configuring done, oznacza to, że konfiguracja przebiegła poprawnie.
- Nacisnąć przycisk Generate.
- Nacisnąć przycisk Open Project. Spowoduje to otworzenie Visual Studio. W panelu Visual Studio zmienić konfigurację z Debug na Release.
- Z Build menu wybrać i nacisnąć Build solution.
Po wykonaniu tych kroków OpenPose został zainstalowany na komputerze. Wszystkie pliki w języku Python służące do lokalizacji i detekcji muszą zostać umieszczone w folderze /openpose-master/build/examples/tutorial_api_python lub w innym wybranym wcześniej folderze build.
- W konsoli uruchomić komendę
pip install smplx[all] - Pobrać lub sklonować repozytorium z serwisu GitHub.
- W konsoli uruchomić komendę
python setup.py install
- Pobrać lub sklonować repozytorium z serwisu GitHub.
- Pobrać model SMPL-X ze strony i umieścić w folder ze rich-toolkit/body_models/smplx/
- Pobrać modele ciał SMPL-X (SMPL-X bodies) ze strony. Wymagane modele należą do zbiorów train i test. Pobrane modele umieścić w folderze rich-toolkit/data/bodies/test lub train, w zależności od sekwencji.
- Pobrać skany i pliki kalibracyjne (Scans and calibration files) ze strony. Następnie umieścić je w folderze rich-toolkit/data/scan_calibration
Sekwencje z bazy RICH, z których korzystano w projekcie,
można pobrać instalując program Git Bash dla systemu Windows i uruchamiając udostępniony plik sekwencje.sh za pomocą komendy: sh sekwencje.sh
W celu odtworzenia rezultatów projektu należy pobrać repozytorium lub sklonować repozytorium. Następnie pliki z folderu eval oraz plik mapping.json należy umieścić w folderze zawierającym pobrane wcześniej repozytorium rich-toolkit. Natomiast pliki z folderu openpose należy umieścić w folderze /openpose-master/build/examples/tutorial_api_python, z powodów opisanych w części instalacja. W celu wykonania lokalizacji oraz śledzenia sylwetki człowieka na sekwencjach wideo należy użyć następujących plików:
- DroneEstimatePoseVideo.py – pozwala na wykonanie lokalizacji i śledzenia dla sekwencji wideo z drona.
- RichEstimatePose.py – pozwala na wykonanie lokalizacji i śledzenia dla sekwencji wideo z bazy RICH.
- RichEstimatePoseCameras.py – posiada tą samą funkcję, co RichEstimatePose.py, ale pozwala na iterację po ujęć z kamer dla określonej sytuacji. Dzięki temu nie ma potrzeby uruchamiania pliku RichEstimatePose.py dla każdej sekwencji po kolei.
Następnie nazwy plików z adnotacjami dla sekwencji z bazy RICH należy zmienić na nazwy odpowiadających im klatek za pomocą pliku renamePred.py. W celu ewaluacji wyników dla sekwencji z drona należy użyć następujących plików:
- DronEval.py – pozwala na ewaluację wyników w metrykach AP i PCKh,
- DronEvalThresh.py – pozwala na wykreślenie wykresu zależności wyników od progu.
W celu ewaluacji wyników dla sekwencji z bazy RICH należy użyć następujących plików:
- RICHEvaluationRaw.py lub RICHEvaluationRawCameras.py – pozwalają na zapis do plików pkl danych ground truth oraz ewaluację. Przed zapisem do pliku, w folderze zawierającym rich-toolkit należy utworzyć następującą ścieżkę: …/results/{train lub test}/{nazwa sekwencji}/{numer_kamery}.
- RICHEvalFromFile.py – plik służy do ewaluacji wyników poprzez odczytanie danych z plików pkl utworzonych w poprzednim punkcie. Zaleca się utworzenie plików pkl, a następnie korzystanie RICHEvalFromFile.py, ponieważ znacznie przyspiesza to wczytywanie danych ground truth. Wyniki ewaluacji są zapisywane do pliku csv.
- RICHEvalThreshCams.py – pozwala na zapis uśrednionych wyników ewaluacji dla różnych progów do plików csv. Działa w analogiczny sposób jak plik RichEstimatePoseCameras.py, iterując po ujęciach z kamer.
- RICHEvalFromCSV.py – do jego działania wymagane są pliki csv utworzone przez RICHEvalFromFile.py. Oblicza on wyniki zawarte w tabelach 3,7 i 10. Następnie zapisuje je do plików csv.
- RICHthreshEvalFromCSV.py – pozwala na wykreślenie wykresu zależności wyników od progu.
Do wizualizacji wyników służą następujące pliki:
- visualizeVideoDrone.py – odtwarza sekwencję wideo z drona z naniesionymi punktami zlokalizowanymi przez OpenPose oraz punktami prawdziwymi,
- visualizeResultsRICH.py – wizualizuje wybraną klatkę z sekwencji z bazy RICH z naniesionymi punktami zlokalizowanymi przez OpenPose oraz punktami prawdziwymi.