Обработка изображений в Java — распознавание лиц
Предпосылки:
- Обработка изображений в Java — чтение и запись
- Обработка изображений в Java — получение и установка пикселей
- Обработка изображений в Java — преобразование цветного изображения в изображение в градациях серого
- Обработка изображений в Java — преобразование цветного изображения в негативное изображение
- Обработка изображений в Java — преобразование цветных изображений в красные, зеленые, синие
- Обработка изображений в Java — преобразование цветного изображения в изображение сепии
- Обработка изображений в Java — создание случайного пиксельного изображения
- Обработка изображений в Java — создание зеркального изображения
Обнаружение лиц с использованием OpenCV
Во вводной части Seton Image Processing для обработки изображений использовался класс Java BufferedImage. Применение класса BufferedImage ограничено только некоторыми операциями, т. е. мы можем изменять значения R, G, B данного входного изображения и создавать модифицированное изображение. . Для сложной обработки изображений, такой как обнаружение лиц/объектов, используется библиотека OpenCV, которую мы будем использовать в этой статье.
Сначала нам нужно настроить OpenCV для Java, для этого мы рекомендуем использовать eclipse, так как его легко использовать и настраивать. Теперь давайте разберемся с некоторыми методами, необходимыми для распознавания лиц.
- CascadeClassifier() : этот класс используется для загрузки обученного каскадного набора лиц, который мы будем использовать для обнаружения лиц на любом входном изображении.
- Imcodecs.imread()/Imcodecs.imwrite() : эти методы используются для чтения и записи изображений в виде объектов Mat, которые визуализируются OpenCV.
- 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, и помогите другим гикам. Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсуждаемой выше.