soroush252525 Ответов: 1

Как нарисовать линию вокруг обнаруженного лица на картинке?


Привет. Я хочу обнаружить лицо и нарисовать линию точно вокруг лица, чтобы обрезать его.
Я много искал и использовал детектор лица EmguCV. но теперь мой код просто рисует "прямоугольник" вокруг лица, и если я его обрезаю, то у меня будет прямоугольник с лицом внутри него, и это мне не полезно.

Что я уже пробовал:

это ядро моего простого кода:
CascadeClassifier _cascadeClassifier = new CascadeClassifier(Application.StartupPath + "/haarcascade_frontalface_alt_tree.xml");
using (var firstImage = Image.FromStream(saveImageStream))
{
    var bgrImage = new Image(new Bitmap(firstImage));
    Image grayFrame = bgrImage.Convert();
    var faces = _cascadeClassifier.DetectMultiScale(grayFrame, 1.01, 1, Size.Empty);
    foreach (var face in faces)
    {
        bgrImage.Draw(face, new Bgr(Color.BurlyWood), 3);
    }
    Image detectedImage = bgrImage.ToBitmap();
    detectedImage.Save("detectedImage .jpg");
}

выход этого кода-картинка с "прямоугольником" вокруг лица.
здесь вы можете увидеть текущий результат и ожидаемый результат
Но как я могу обнаружить лицо и "нарисовать линию вокруг лица", как овал, который состоит из всех элементов лица и ничего больше?

1 Ответов

Рейтинг:
2

Afzaal Ahmad Zeeshan

Грань определяется как прямоугольная область, ограничивающая грань. Что вам нужно, так это алгоритм обнаружения ребер, который обнаруживает ограничительные области от краев, а затем вы очищаете внутренние пиксели и получаете маску. Вы можете смешать алгоритм распознавания лиц и алгоритм обнаружения ребер, чтобы сначала найти ограничивающую рамку, а затем выполнить обнаружение ребер внутри нее. Таким образом, полученная маска будет использоваться для определения области, в которой находится лицо, а затем вы сможете использовать этот полигон для рисования вокруг лица.

Решение для глубокого обучения было бы немного проще, я использовал эту технику в одном из своих собственных приложений несколько недель назад, обнаружение сегментации в изображениях с помощью глубокого обучения.

Он будет обнаруживать сегменты на изображении, сегменты-это в основном объекты, которые кажутся связанными. Чтобы повысить эффективность алгоритма, вы можете запустить его в полученном прямоугольнике.

Как сделать семантическую сегментацию с помощью глубокого обучения[^]


Maciej Los

5ed!

Afzaal Ahmad Zeeshan

Спасибо тебе, Мацей!