人工知能技術の継続的な発展により、顔検出および認識技術は日常生活でますます広く使用されるようになりました。顔検出および認識技術は、顔アクセス制御システム、顔決済システム、顔検索エンジンなど、さまざまな場面で広く使用されています。広く使用されているプログラミング言語である Java は、顔の検出および認識テクノロジを実装することもできます。この記事では、Java を使用して顔検出および認識テクノロジを実装する方法を紹介します。
1. 顔検出技術
顔検出技術とは、画像またはビデオ内の顔を検出する技術を指します。 Java では、オープンソースのコンピューター ビジョン ライブラリである OpenCV を使用して、顔検出テクノロジを実装できます。 OpenCV は、効率性、使いやすさ、拡張性という利点を備えたクロスプラットフォームのコンピューター ビジョン ライブラリです。
OpenCV を使用して Java に顔検出テクノロジを実装する基本的な手順は次のとおりです。
以下は、OpenCV を使用して Java で顔検出を実装するサンプル コードです。
import org.opencv.core.*; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc.Imgproc; import org.opencv.objdetect.CascadeClassifier; public class FaceDetector { public static void main(String[] args) { // Load OpenCV library System.loadLibrary(Core.NATIVE_LIBRARY_NAME); // Load Haar classifier CascadeClassifier faceDetector = new CascadeClassifier("path/to/haarcascade_frontalface_default.xml"); // Load image Mat image = Imgcodecs.imread("path/to/image.jpg"); // Detect faces MatOfRect faceDetections = new MatOfRect(); faceDetector.detectMultiScale(image, faceDetections); // Draw rectangles around detected faces 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, 0, 255), 2); } // Save image with detected faces Imgcodecs.imwrite("path/to/result.jpg", image); } }
上記のコードでは、OpenCV の Core、Imgcodecs、Imgproc、および CascadeClassifier クラスが使用されています。このうち、CascadeClassifier クラスは Haar 分類器モデルを読み込み、Imgcodecs クラスと Imgproc クラスは画像を読み込み、検出結果を描画するために使用されます。このコードを使用して、画像内の顔を検出して位置を特定します。
2. 顔認識技術
顔認識技術とは、顔データベースが既知である場合に、入力された顔をデータベース内の顔と比較し、類似する顔を見つける技術を指します。彼ら。 Java では、顔認識に FaceRecognizer クラスを使用できます。 FaceRecognizer は OpenCV での顔認識に特に使用されるクラスで、Eigenfaces、Fisherfaces、LBPH などのいくつかの認識アルゴリズムをカプセル化します。
以下は、FaceRecognizer を使用して Java で顔認識テクノロジを実装する基本的な手順です。
以下は、FaceRecognizer を使用して Java で顔認識を実装するサンプル コードです:
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; import org.opencv.face.FaceRecognizer; import org.opencv.face.LBPHFaceRecognizer; public class FaceRecognizer { public static void main(String[] args) { // Load OpenCV library System.loadLibrary(Core.NATIVE_LIBRARY_NAME); // Load Haar classifier CascadeClassifier faceDetector = new CascadeClassifier("path/to/haarcascade_frontalface_default.xml"); // Load face recognizer FaceRecognizer recognizer = LBPHFaceRecognizer.create(); // Load all images from the directory for (int i = 1; i <= 10; i++) { String fileName = "path/to/database/" + i + ".jpg"; Mat image = Imgcodecs.imread(fileName); // Convert image to grayscale Imgproc.cvtColor(image, image, Imgproc.COLOR_BGR2GRAY); // Detect faces MatOfRect faceDetections = new MatOfRect(); faceDetector.detectMultiScale(image, faceDetections); // Extract face features Mat face = new Mat(); face = image.submat(faceDetections.toArray()[0]); recognizer.train(face, new Mat()); } // Load input image Mat inputImage = Imgcodecs.imread("path/to/input/image.jpg"); Imgproc.cvtColor(inputImage, inputImage, Imgproc.COLOR_BGR2GRAY); // Detect face MatOfRect faceDetections = new MatOfRect(); faceDetector.detectMultiScale(inputImage, faceDetections); // Recognize face Mat inputFace = new Mat(); inputFace = inputImage.submat(faceDetections.toArray()[0]); int[] label = new int[1]; double[] confidence = new double[1]; recognizer.predict(inputFace, label, confidence); // Draw rectangle and name of recognized person Imgproc.rectangle(inputImage, faceDetections.toArray()[0].tl(), faceDetections.toArray()[0].br(), new Scalar(0, 0, 255), 2); Imgproc.putText(inputImage, "Person " + label[0], faceDetections.toArray()[0].tl(), Imgproc.FONT_HERSHEY_PLAIN, 1, new Scalar(0, 255, 0), 2); // Show and save result Imgcodecs.imwrite("path/to/result.jpg", inputImage); } }
上記のコードでは、最初に Haar 分類器を使用して顔を検出し、顔を抽出します。顔データベース トレーニング用に顔画像をロードし、顔の特徴を生成します。次に、認識したい画像を入力し、そこに写っている顔を抽出し、FaceRecognizer クラスを使用して認識します。最後に、Imgproc クラスを使用して、検出と認識の結果を画像にプロットします。このコードを使用して、簡単な顔認識システムを実装できます。
概要
この記事では、Java を使用して顔検出および認識テクノロジを実装する方法を紹介します。 Java 開発者は、これらのテクノロジーを習得することで、顔アクセス制御システム、顔支払いシステム、顔検索エンジンなどの顔ベースのアプリケーションを実装できます。サンプル コードでは OpenCV ライブラリが使用されていますが、JavaCV、BoofCV など、同様のコンピュータ ビジョン ライブラリが多数あります。興味のある読者は、これらのライブラリを使用して顔検出および認識テクノロジを実装してみることができます。
以上がJavaを使用して実装された顔検出および認識テクノロジーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。