<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>shape predictor &#8211; Visão Computacional</title>
	<atom:link href="https://visaocomputacional.com.br/tag/shape-predictor/feed/" rel="self" type="application/rss+xml" />
	<link>https://visaocomputacional.com.br</link>
	<description>Tecnologias, teorias e testes.</description>
	<lastBuildDate>Thu, 28 Aug 2025 18:26:08 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.8.1</generator>

<image>
	<url>https://visaocomputacional.com.br/wp-content/uploads/2021/12/cropped-logo-150x150-1-32x32.png</url>
	<title>shape predictor &#8211; Visão Computacional</title>
	<link>https://visaocomputacional.com.br</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Detecção de pontos faciais (Facemark) com Dlib</title>
		<link>https://visaocomputacional.com.br/deteccao-de-pontos-faciais-facemark-com-dlib/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=deteccao-de-pontos-faciais-facemark-com-dlib</link>
		
		<dc:creator><![CDATA[Piemontez]]></dc:creator>
		<pubDate>Tue, 19 Oct 2021 14:03:07 +0000</pubDate>
				<category><![CDATA[Visão computacional]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[Dlib]]></category>
		<category><![CDATA[facemark]]></category>
		<category><![CDATA[Pontos Faciais]]></category>
		<category><![CDATA[shape predictor]]></category>
		<guid isPermaLink="false">http://visaocomputacional.com.br/?p=2192</guid>

					<description><![CDATA[<p>Saiba como realizar a detecção de pontos faciais, com a biblioteca Dlib, utilizando o algoritmo Shape Predictor de Kazemi.</p>
<p>O código fonte disponibilizado contém o modelo treinado para possibilitar a replicação do experimento.</p>
<p>The post <a rel="nofollow" href="https://visaocomputacional.com.br/deteccao-de-pontos-faciais-facemark-com-dlib/">Detecção de pontos faciais (Facemark) com Dlib</a> appeared first on <a rel="nofollow" href="https://visaocomputacional.com.br">Visão Computacional</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<div class="ratio ratio-16x9"><iframe loading="lazy" title="VC - Detecção de pontos faciais (Facemark) com Dlib" width="800" height="450" src="https://www.youtube.com/embed/_ALx8It4Eqo?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></div>
</div></figure>



<p>Neste post, é apresentado como realizar a detecção de pontos faciais com o algoritmo de Kazemi, implementado na biblioteca Dlib utilizando Shape Predictor. Na primeira parte deste tutorial, é apresentado o conceito de shape predictor (preditor de forma/ponto de referência) e como ele pode se usado para prever localizações específicas em objetos estruturais.</p>



<p>Este conteúdo é continuação do post <a href="http://visaocomputacional.com.br/deteccao-de-pontos-faciais-facemark-com-opencv-e-dlib/">Detecção de pontos faciais (Facemark) com OpenCV,</a> recomendo a leitura dele primeiro, para melhor entender os conceitos básicos aqui apresentados.</p>



<h2>Revisão de Conteúdo</h2>



<p>Caso você não queira ler o <a href="http://visaocomputacional.com.br/deteccao-de-pontos-faciais-facemark-com-opencv-e-dlib/">post anterior</a>, segue uma rápida revisão do conteúdo.</p>



<p>Os pontos faciais, em visão computacional, como o próprio nome diz, são pequenas regiões faciais identificadas por uma numeração, conforme ilustra a Fig 1.. Estas regiões, são identificadas por um ponto e uma numeração que pode variar de técnica para técnica utilizada.</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="http://visaocomputacional.com.br/wp-content/uploads/2021/10/pontosfaciais.png"><img loading="lazy" width="150" height="150" src="http://visaocomputacional.com.br/wp-content/uploads/2021/10/pontosfaciais-150x150.png" alt="" class="wp-image-1925" srcset="https://visaocomputacional.com.br/wp-content/uploads/2021/10/pontosfaciais-150x150.png 150w, https://visaocomputacional.com.br/wp-content/uploads/2021/10/pontosfaciais-230x230.png 230w" sizes="(max-width: 150px) 100vw, 150px" /></a><figcaption>Fig 1. Principais pontos faciais utilizados.</figcaption></figure></div>



<p>Para realizar a detecção de pontos faciais, são necessárias as seguintes etapas antecessoras à coleta dos pontos na imagem: (1) identificar os rostos na imagem; (2) rotacionar o rosto caso necessário e (3) identificar os pontos faciais A Fig 2. Ilustra estas etapas..</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="http://visaocomputacional.com.br/wp-content/uploads/2021/10/etapas_facemark.png"><img loading="lazy" width="300" height="105" src="http://visaocomputacional.com.br/wp-content/uploads/2021/10/etapas_facemark-300x105.png" alt="" class="wp-image-1971" srcset="https://visaocomputacional.com.br/wp-content/uploads/2021/10/etapas_facemark-300x105.png 300w, https://visaocomputacional.com.br/wp-content/uploads/2021/10/etapas_facemark-768x268.png 768w, https://visaocomputacional.com.br/wp-content/uploads/2021/10/etapas_facemark-600x209.png 600w, https://visaocomputacional.com.br/wp-content/uploads/2021/10/etapas_facemark.png 998w" sizes="(max-width: 300px) 100vw, 300px" /></a><figcaption>Fig 2. Etapas antecessoras a detecção de pontos faciais.</figcaption></figure></div>



<h2>Algoritmo Shape Predictor de Kazemi</h2>



<p>&#8220;Shape Predictor&#8221; são utilizados para localizar coordenadas (x, y) específicas a partir de uma forma de entrada. O termo &#8220;Shape&#8221; é arbitrário, mas presume-se que a forma seja de natureza estrutural, como: rostos; mãos; dedos; etc <a href="#refs_r">[R]</a>.</p>



<p>Por exemplo, os rostos têm formas e tamanhos diversos, e todos eles compartilham características estruturais comuns: os olhos estão acima do nariz, o nariz está acima da boca, etc. O objetivo dos preditores de forma/ponto de referência, é explorar esse conhecimento estrutural e, com dados de treinamento suficientes, aprender como prever automaticamente a localização dessas estruturas <a href="#refs_r">[R]</a>.</p>



<p>Existem vários algoritmos preditores de forma. O algoritmo do preditor de forma implementado na biblioteca Dlib vem do artigo <a href="https://www.csc.kth.se/~vahidk/face_ert.html">CVPR de Kazemi e Sullivan de 2014, One Millisecond Face Alignment with an Ensemble of Regression Trees </a> &nbsp;<a href="http://visaocomputacional.com.br/deteccao-de-pontos-faciais-facemark-com-opencv-e-dlib/#ref_kj1">[KJ1]</a>.</p>



<h2>Código e Experimentos</h2>



<p>A seguir, são apresentados partes do código criado para realizar os experimentos de detecção de pontos faciais. Caso queira replicar estes experimentos, basta baixar o código fonte disponível no github (link na seção “Source” no final deste post).</p>



<p>Neste primeiro bloco, são inicializados todos os detectores do sistema, o detector facial e o detector de pontos faciais. Para iniciar todos estes detectores é muito simples, basta instanciar a classe <strong>dlib::frontal_face_detector</strong>, instanciar a classe <strong>dlib::shape_predictor</strong> e carregar o modelo treinado para a classe shape_predictor.</p>



<pre class="wp-block-preformatted">...
#include &lt; dlib/image_processing/frontal_face_detector.h &gt;
#include &lt; dlib/image_processing.h &gt;
<strong>dlib::frontal_face_detector detector;</strong>
<strong>dlib::shape_predictor shapePredictor;
</strong>
main() {
...
    // Inicia Detector faciauk
    <strong>detector = dlib::get_frontal_face_detector()</strong>;
    //Carrega o modelo treinado do shape predictor
    iniciarDetectorPontosFacialSP(shapePredictor);
...
}
void iniciarDetectorPontosFacialSP(dlib::shape_predictor &amp;sp)
{
    <strong>dlib::deserialize("../../extra/shape_predictor_68_face_landmarks.dat")</strong> &gt;&gt; sp;
}
</pre>



<p>Para carregar o modelo de dados com Dlib, basta utilizar a função de <strong>dlib::deserialize</strong> e informar o caminho do arquivo. Esta função carrega o modelo treinado e transfere os dados carregados para a classe de predição com o operador &#8220;&gt;&gt;&#8221;&nbsp; conforme trecho de código <strong>&#8220;&gt;&gt; sp&#8221;</strong>.</p>



<p>Com os detectores/preditores carregados, agora precisamos carregar a imagem com os rostos a serem detectados. Neste experimento, utilizamos a webcam para este fim e para carregar as imagens da webcam, utilizamos a biblioteca OpenCV, que é de fácil instalação.</p>



<p>Para capturar a câmera do vídeo com o OpenCV, basta instanciar a classe “cv::VideoCapturecap” e coletar a imagem do vídeo com o operador “&gt;&gt;” conforme trecho de código “cap&gt;&gt;img”.</p>



<pre class="wp-block-preformatted">main() {
  ...
  //Inicia captura dos vídeos
<strong>  cv::VideoCapturecap cap(0);</strong>
  if (!cap.isOpened()) {
    std::cout&lt;&lt;"Video Capture Fail"&lt;&lt;std::endl; return1; } cv::Mat img; cap&gt;&gt;img;
    return 1;
  }
  //Calcula nova dimensão da imagem para 320 pixels
  auto showSize = cv::Size(320, ((float)320 / img.cols) * img.rows);
  for (;;)
  {
    //Coleta a imagem da camera
    <strong>cap&gt;&gt;img;</strong>
    //Reescala a imagem para uma largura de 320 pixels
    cv::resize(img, img, showSize, 0, 0, cv::INTER_LINEAR_EXACT);
    <strong>coletarPontosFaciais(img);
</strong>
    cv::imshow("Origem", img);
    cv::waitKey(5);
  }
}
</pre>



<p>Por fim, no último trecho de código, é apresentado como coletar os pontos faciais com o OpenCV.</p>



<pre class="wp-block-preformatted">dlib::image_window win, win_faces;
std::vector&lt; dlib::rectangle &gt; rostosDetectados;
void coletarPontosFaciais(const dlib::array2d&amp; imagemOriginal)
{
    //Detecta os pontos faciais e retorna a lista de rostos detectados
    rostosDetectados = <strong>detector(imagemOriginal)</strong>;
    //Percorre os rostos detectados e coloca os pontos faciais
    <strong>std::vector&lt; dlib::full_object_detection &gt; pontosFaciais</strong>;
    for (unsigned long j = 0; j &lt; rostosDetectados.size(); ++j)
    {
        //Coleta os pontos faciais de um único rosto
        <strong>dlib::full_object_detection shape = shapePredictor(imagemOriginal, rostosDetectados[j]);</strong>
        pontosFaciais.push_back(shape);
    }
    // Exibe a imagem com o contorno dos pontos.
    win.clear_overlay();
    win.set_image(imagemOriginal);
    win.add_overlay(render_face_detections(pontosFaciais));
    // Recorta o rosto da imagem original e a exibe.
    dlib::array rostosRecortados;
    extract_image_chips(imagemOriginal, get_face_chip_details(pontosFaciais), rostosRecortados);
    win_faces.set_image(tile_images(rostosRecortados));
}
</pre>



<p>Observe que para detectar os rostos faciais com a classe dlib::frontal_face_detector, basta utilizar a variável <strong>detector&nbsp;</strong>como fosse uma função, passando a imagem como parâmetro. Ao utilizar o detector como função, serão detectados os rostos e retorna uma lista de retângulos com sua localização.</p>



<p>Com os rostos detectados, basta percorrer cada região dos rostos e chamar a função do <strong>shapePredictor</strong>, para coletar os pontos faciais. Esta função retorna uma lista com todos pontos localizados.</p>



<p>A classe <strong>dlib::image_window</strong> é utilizada para criar uma janela para exibição das imagens. A função render_face_detections é disponibilizada pela própria Dlib a fim de demarcar as regiões do rosto na imagem. E as funções extract_image_chips e get_face_chip_details recortam o rosto a partir dos pontos faciais. Como resultado deste projeto, foi realizado o experimento&nbsp;ilustrado&nbsp;pela Fig 3.&nbsp;</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="http://visaocomputacional.com.br/wp-content/uploads/2021/10/detecao_pontos_faciais_dlib.gif"><img loading="lazy" width="518" height="246" src="http://visaocomputacional.com.br/wp-content/uploads/2021/10/detecao_pontos_faciais_dlib.gif" alt="" class="wp-image-2273"/></a><figcaption>Fig 4. Resultados obtidos com este experimento</figcaption></figure></div>



<p>Espero que esse conteúdo os ajudem na tarefa de identificação de pontos faciais.&nbsp;<br>Caso tenham dúvidas e sugestões de melhorias no post, deixe seu comentário abaixo.</p>



<p>Source:</p>



<p><a href="https://github.com/visaocomputacionalexemplos/experimentos_faciais/tree/main/detectar_pontos_faciais_dlib">https://github.com/visaocomputacionalexemplos/experimentos_faciais/tree/main/detectar_pontos_faciais_dlib</a></p>



<p><strong>Referencias:</strong></p>



<p>Huber, Patrik. (2018). Real-time 3D morphable shape model fitting to monocular in-the-wild videos.</p>



<p>[R] <a href="https://www.pyimagesearch.com/2019/12/16/training-a-custom-dlib-shape-predictor/">Rosebrock, A, Training a custom dlib shape predictor, 2019, acessado em: 18/10/2101</a></p>



<p>[KJ1]&nbsp;<a style="background-color: #ffffff;" href="https://www.csc.kth.se/~vahidk/papers/KazemiCVPR14.pdf">V. Kazemi and J. Sullivan, “One millisecond face alignment with an ensemble of regression trees,”&nbsp;<em>2014 IEEE Conference on Computer Vision and Pattern Recognition</em>, 2014, pp. 1867-1874, doi: 10.1109/CVPR.2014.241.</a></p>
<p>The post <a rel="nofollow" href="https://visaocomputacional.com.br/deteccao-de-pontos-faciais-facemark-com-dlib/">Detecção de pontos faciais (Facemark) com Dlib</a> appeared first on <a rel="nofollow" href="https://visaocomputacional.com.br">Visão Computacional</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
