Utilitzar OpenCV per detectar punts clau de cara amb C ++

Bloc

Utilitzar OpenCV per detectar punts clau de cara amb C ++

Aquesta publicació és un seguiment del meu primer missatge sobre la construcció d’un detector de cares amb OpenCV en C ++. En aquesta publicació, basarem-nos en el codi existent i detectarem els punts clau de la cara. El resultat serà així.



Dona que somriu amb la superposició de punts clau de la cara detectada

Com que treballarem amb una versió relativament nova d'OpenCV (4.2.0), és possible que vulgueu tornar a entrada anterior per obtenir més informació sobre com instal·lar els paquets necessaris.



El codi és al meu github.

Comencem!



Detecció de punts clau de la cara

Després de detectar les cares a l’última publicació, ara volem detectar els punts clau de les cares. Utilitzem el cv :: face :: FacemarkLBF model per trobar punts clau en els rectangles facials que vam identificar a l'últim tutorial.

Afegir el fitxer del model de detecció de punts clau

Pel que fa al model de detecció de cares, hem d’afegir un fitxer model per al model LBF. He posat el fitxer model a assets carpeta de això publica repositori de git , de manera que podeu anar-hi i descarregar-lo.

Per passar la ubicació d’aquest fitxer model al nostre codi, utilitzarem el mateix CMake target_compile_definitions truc que vam fer servir a la primera publicació. Assegureu-vos que teniu el fitxer model al lloc adequat i afegiu les línies següents al vostre CMakeLists.txt.

## Introduce preprocessor variables to keep paths of asset files ... set(KEY_POINT_DETECTION_MODEL '${PROJECT_SOURCE_DIR}/assets/lbfmodel.yaml') ... target_compile_definitions(${PROJECT_NAME} PRIVATE KEY_POINT_DETECTION_MODEL='${KEY_POINT_DETECTION_MODEL}')

Una classe per al detector de punts clau

Comencem afegint una classe per al detector de punts clau. D’aquesta manera tenim el codi per inicialitzar i trucar al model en un sol lloc.

KeyPointDetector.h

Al include carpeta, creem un fitxer KeyPointDetector.h. Aquest serà el fitxer de capçalera del detector de punts clau.

El KeyPointDetector tindrà dos mètodes públics. El primer és un constructor. Utilitzarem el constructor per inicialitzar el model LBF subjacent.

El segon mètode detect_key_points detecta els punts clau de la cara dins d’un rectangle determinat d’una imatge. Com que els punts clau de cada cara són de tipus std::vector, aquesta funció retornarà un vector de std::vector.

El fitxer de capçalera del detector de punts clau serà així.

#ifndef KEYPOINTDETECTOR_H #define KEYPOINTDETECTOR_H #include class KeyPointDetector { public: /// Constructor explicit KeyPointDetector(); /// Detect face key points within a rectangle inside an image /// param face_rectangles Rectangles that contain faces /// param image Image in which we want to detect key points /// eturn List of face keypoints for each face rectangle std::vector detect_key_points(const std::vector &face_rectangles, const cv::Mat &image) const; private: cv::Ptr facemark_; }; #endif //KEYPOINTDETECTOR_H

#code # processament d'imatges #opencv #cpp # machine-learning #cplusplus

medium.com

Utilitzar OpenCV per detectar punts clau de cara amb C ++

Detecteu els punts clau d’una cara amb els models d’aprenentatge automàtic integrats a OpenCV. Aquest post és un seguiment del meu primer post sobre la construcció d’un detector de cares amb OpenCV en C ++. En aquesta publicació, basarem-nos en el codi existent i detectarem els punts clau de la cara. El resultat serà així. Com que treballarem amb una versió relativament nova d'OpenCV (4.2.0), potser voldreu tornar a la publicació anterior per obtenir més informació sobre com instal·lar els paquets necessaris.