{"id":42496076,"url":"https://github.com/cvjena/4dpadcurvanalysis","last_synced_at":"2026-01-28T12:41:47.158Z","repository":{"id":143048792,"uuid":"360199518","full_name":"cvjena/4DPADCurvAnalysis","owner":"cvjena","description":"Implementation of the 4D curvature analysis for facial behavior analysis using a single Intel RealSense camera.","archived":false,"fork":false,"pushed_at":"2021-04-21T14:37:49.000Z","size":66524,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-09-10T07:40:03.577Z","etag":null,"topics":["behavior","computer-vision","face-recognition","pattern-recognition"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cvjena.png","metadata":{"files":{"readme":"Readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2021-04-21T14:25:51.000Z","updated_at":"2025-02-03T13:58:16.000Z","dependencies_parsed_at":"2023-04-13T09:22:29.607Z","dependency_job_id":null,"html_url":"https://github.com/cvjena/4DPADCurvAnalysis","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/cvjena/4DPADCurvAnalysis","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cvjena%2F4DPADCurvAnalysis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cvjena%2F4DPADCurvAnalysis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cvjena%2F4DPADCurvAnalysis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cvjena%2F4DPADCurvAnalysis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cvjena","download_url":"https://codeload.github.com/cvjena/4DPADCurvAnalysis/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cvjena%2F4DPADCurvAnalysis/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28845282,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-28T12:37:07.070Z","status":"ssl_error","status_checked_at":"2026-01-28T12:37:06.657Z","response_time":57,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["behavior","computer-vision","face-recognition","pattern-recognition"],"created_at":"2026-01-28T12:41:46.429Z","updated_at":"2026-01-28T12:41:47.147Z","avatar_url":"https://github.com/cvjena.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 4D Curvature Analysis of Radial Stripes for Facial Behavior Research\nThis repository contains the official source code used to produce the results reported in the following papers:\n\n\u003e [**Facial Behavior Analysis using 4D Curvature Statistics for Presentation Attack Detection**][1]  \n\u003e Martin Thümmel, Sven Sickert and Joachim Denzler.\n\u003e IEEE International Workshop on Biometrics and Forensics, 2021.\n\nIf you use this code, please cite this paper.\n\n\u003cdetails\u003e\u003csummary\u003e\u003cstrong\u003eTable of Contents\u003c/strong\u003e\u003c/summary\u003e\n\n1. [Installation](#1-installation)\n2. [3D-Sensor Prequesites](#2-3d-sensor-prequesites)\n3. [Results](#3-results)\n\u003c/details\u003e\n\n## 1. Installation\nThe following commands install all requirements for Ubuntu.\nThis code was tested with Ubuntu v18.04., dlib v19.13, PCL v1.9.1, libigl v2.1.0, Eigen v3.3.0, lz4 v1.8.2, librealsense v2.30.0 and OpenCV v4.0.0.\nTo use the RealSense camera, you need to install\n\n    apt install libusb-1.0-0-dev\n\nFor visualizing the point cloud, you need to install\n\n    apt install libgl1-mesa-glx libgtk-3-dev libglfw3-dev libglu1-mesa-dev\n\nand FLANN and OpenGL for PCL\n\n    apt install freeglut3-dev mesa-common-dev libflann-dev\n\nFor visualizing the temporal cross-correlation using matplotlib in C++, you need to install\n\n    apt install python-2.7 matplotlib-dev\n\nand download matplotlibcpp.h from [here](https://github.com/lava/matplotlib-cpp) to the source folder.\nFor face and landmark localization you need to download OpenCV from [here](https://github.com/opencv/opencv), Eigen from [here](http://eigen.tuxfamily.org/index.php?title=Main_Page), Librealsense from [here](https://github.com/IntelRealSense/librealsense), PCL from [here](https://github.com/PointCloudLibrary/pcl), and Dlib from [here](https://github.com/davisking/dlib).\nAll of these libraries need to be installed locally e.g. in `$HOME/libs`. For installing PCL, you have to set `WITH_VTK=FALSE`.\n\nFor installing libigl, first clone the following repository to your library folder\n\n    git clone --single-branch --branch martinsChanges gogs@triton.inf-cv.uni-jena.de:3DFaces/libigl_Martin.git\n\nThen create a build folder inside and call cmake from this build folder as follows\n\n    cmake -D LIBIGL_USE_STATIC_LIBRARY=OFF -D LIBIGL_BUILD_TESTS=OFF -D LIBIGL_BUILD_TUTORIAL=OFF ..\n\nTo let cmake automatically find the libraries above, respective paths (`PCL_DIR`, `OpenCV_DIR`, `Eigen3_DIR`, `dlib_DIR`, `LIBIGL`, `realsense2_DIR`) need to be set properly.\n\nAs a pretrained model you need to download the dlib landmark model `shape_predictor_68_face_landmarks.dat` from [here](https://github.com/davisking/dlib-models) and set the path to this model in the source code accordingly.\n\nFinally, python (tested: 3.7.3) with matplotlib (tested: 3.1.1) have to be installed for visualization purposes.\nThe path to this python library and include directory must be set in the CMakeLists.txt file accordingly. For some reason, matplotlib is not working in C++ using python 3.6.\n\n## 2. 3D-Sensor Prerequisites\nTo run an offline analysis by passing a BAG-file as an argument you need to call the program as follows:\n\n        ./radialStripe4DCurvature [inputBagFilePath]\n        \nwhere `inputBagFilePath` is the path to the BAG-file.\n\nInstead of the more expensive RealSense D435 you can also run the D415 version. \nIt has a smaller field of view and a higher relative resolution for face scans at the same distance.\nThe minimum object distance could be lower than 45 cm in case of the D435, but that is unsuited in case of face scans. \nThe more expensive global shutter of the D435 is not required since the movement of the face and facial expressions are slow. \nThe *faceConfig.json* file in the repository adjusts all recommended parameters for near-range face capturing.\nThe object distance to the nose tip should not be much larger than the minimum distance of 45 cm to obtain the highes accuracy.\nThe environment must be bright and nothing should occlude the face for optimal results (like glasses, large beards, scarfs or hats).\n\n## 3. PAD Results\n\u003ctable\u003e\n    \u003cthead\u003e\n        \u003ctr\u003e\n            \u003cth\u003eCurvature correlation time series (low for masks, high for genuine faces)\u003c/th\u003e\n            \u003cth\u003eVisualization of extracted radial stripes \u003c/th\u003e\n        \u003c/tr\u003e\n    \u003c/thead\u003e\n    \u003ctbody\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\u003cimg src=\"./results/genuine/correlation.gif\" style=\"width:50%\"\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003cimg src=\"./results/genuine/radialStripes.gif\" style=\"width:50%\"\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n    \u003c/tbody\u003e\n    \u003ctbody\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\u003cimg src=\"./results/flexibleMask/correlation.gif\" style=\"width:50%\"\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003cimg src=\"./results/flexibleMask/radialStripes.gif\" style=\"width:50%\"\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n    \u003c/tbody\u003e\n    \u003ctbody\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\u003cimg src=\"./results/flexibleMaskExtremeMovement/correlation.gif\" style=\"width:50%\"\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003cimg src=\"./results/flexibleMaskExtremeMovement/radialStripes.gif\" style=\"width:50%\"\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n    \u003c/tbody\u003e\n    \u003ctbody\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\u003cimg src=\"./results/staticMask/correlation.gif\" style=\"width:50%\"\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003cimg src=\"./results/staticMask/radialStripes.gif\" style=\"width:50%\"\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n    \u003c/tbody\u003e\n    \u003ctbody\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\u003cimg src=\"./results/staticMaskMoving/correlation.gif\" style=\"width:50%\"\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003cimg src=\"./results/staticMaskMoving/radialStripes.gif\" style=\"width:50%\"\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n    \u003c/tbody\u003e                \n\u003c/table\u003e\n\n[1]: Pre-print available at https://arxiv.org/abs/1910.06056\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcvjena%2F4dpadcurvanalysis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcvjena%2F4dpadcurvanalysis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcvjena%2F4dpadcurvanalysis/lists"}