Обработка изображений в Java — распознавание лиц

Опубликовано: 15 Сентября, 2022

Предпосылки:

  • Обработка изображений в Java — чтение и запись
  • Обработка изображений в Java — получение и установка пикселей
  • Обработка изображений в Java — преобразование цветного изображения в изображение в градациях серого
  • Обработка изображений в Java — преобразование цветного изображения в негативное изображение
  • Обработка изображений в Java — преобразование цветных изображений в красные, зеленые, синие
  • Обработка изображений в Java — преобразование цветного изображения в изображение сепии
  • Обработка изображений в Java — создание случайного пиксельного изображения
  • Обработка изображений в Java — создание зеркального изображения

Обнаружение лиц с использованием OpenCV

Во вводной части Seton Image Processing для обработки изображений использовался класс Java BufferedImage. Применение класса BufferedImage ограничено только некоторыми операциями, т. е. мы можем изменять значения R, G, B данного входного изображения и создавать модифицированное изображение. . Для сложной обработки изображений, такой как обнаружение лиц/объектов, используется библиотека OpenCV, которую мы будем использовать в этой статье.

Сначала нам нужно настроить OpenCV для Java, для этого мы рекомендуем использовать eclipse, так как его легко использовать и настраивать. Теперь давайте разберемся с некоторыми методами, необходимыми для распознавания лиц.

  1. CascadeClassifier() : этот класс используется для загрузки обученного каскадного набора лиц, который мы будем использовать для обнаружения лиц на любом входном изображении.
  2. Imcodecs.imread()/Imcodecs.imwrite() : эти методы используются для чтения и записи изображений в виде объектов Mat, которые визуализируются OpenCV.
  3. Imgproc.rectangle() : используется для создания прямоугольника, очерчивающего обнаруженные лица, он принимает четыре аргумента — input_image, top_left_point, bottom_right_point, color_of_border.

Реализация:

Note: The front face cascade file can be downloaded from a local git repository. 

Входное изображение выглядит следующим образом:

Пример:

Java




// Java Program to Demonstrate Face Detection
// Using OpenCV Library
  
// Importing package module
package ocv;
  
// Importing required classes
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfRect;
import org.opencv.core.Point;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.CascadeClassifier;
  
// Main class
// FaceDetector
public class GFG {
  
    // Main driver method
    public static void main(String[] args)
    {
  
        // For proper execution of native libraries
        // Core.NATIVE_LIBRARY_NAME must be loaded before
        // calling any of the opencv methods
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
  
        // Face detector creation by loading source cascade
        // xml file using CascadeClassifier and must be
        // placed in same directory of the source java file
  
        // File is available here on git as mentioned above
        // prior to code
        CascadeClassifier faceDetector
            = new CascadeClassifier();
        faceDetector.load(
            "haarcascade_frontalface_alt.xml");
  
        // Reading the input image
        Mat image = Imgcodecs.imread("E:\input.jpg");
  
        // Detecting faces
        MatOfRect faceDetections = new MatOfRect();
        faceDetector.detectMultiScale(image,
                                      faceDetections);
  
        // Creating a rectangular box which represents for
        // faces detected
        for (Rect rect : faceDetections.toArray()) {
            Imgproc.rectangle(
                image, new Point(rect.x, rect.y),
                new Point(rect.x + rect.width,
                          rect.y + rect.height),
                new Scalar(0, 255, 0));
        }
  
        // Saving the output image
        String filename = "Ouput.jpg";
  
        Imgcodecs.imwrite("E:\" + filename, image);
  
        // Display message for successful execution of
        // program
        System.out.print("Face Detected");
    }
}

Выход:

Face Detected

Вывод программы показан под моей картинкой до и после распознавания лиц.

Вывод Объяснение:

  • Он загружает собственную библиотеку OpenCV для использования Java API. Создается экземпляр CascadeClassifier, которому передается имя файла, из которого загружается классификатор.
  • Затем метод detectMultiScale используется для классификатора, передавая ему данное изображение и объект MatOfRect.
  • MatOfRect отвечает за обнаружение лиц после обработки.
  • Процесс повторяется для выполнения всех обнаружений лиц и маркировки изображения прямоугольниками, а в конце изображение сохраняется как файл «output.png» .

Эта статья предоставлена Pratik Agarwal . Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью с помощью write.geeksforgeeks.org или отправить ее по адресу review-team@geeksforgeeks.org. Посмотрите, как ваша статья появится на главной странице GeeksforGeeks, и помогите другим гикам. Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсуждаемой выше.