Cet article partage le code spécifique pour Java afin de réaliser la reconnaissance faciale de votre référence. Le contenu spécifique est le suivant
Fichier officiel de téléchargement et d'installation, prenez Win7 comme exemple, téléchargez OpenCV-2.4.13.3-VC14.exe
Après l'installation, dans le répertoire de construction, dans le répertoire de construction, d: / opencv / build / java, obtenez OpenCV-2413.jar, copiez dans le répertoire du projet, et nécessitez également le fichier DLL et chaque fichier XML de reconnaissance pour identifier différentes fonctionnalités (face, face latérale, yeux, etc.)
Répertoire DLL: d: /opencv/build/java/x64/opencv_java2413.dll
Répertoire XML: d: /opencv/sources/data/haarcascades/haarcascade_frontalface_alt.xml (il existe différents fichiers d'identification dans le répertoire)
Structure du projet:
Code spécifique: Puisque vous devez utiliser le fichier DLL d'OpenCV, il peut être placé dans le chemin de la bibliothèque Java ou dans JRE LIB. Il peut être placé dans le répertoire System32 sous Windows, ou il peut être chargé dynamiquement dans le code, comme suit:
Package OpenCV; import com.sun.scenario.effecct.imagedata; import org.opeccv.core. *; import org.opencv.core.point; import org.opencv.highgui.highgui; import org.opeccv.imgproc.imgproc; import org.opeccv.objdetect.cascadeclassifier; import javax.imageio.imageio; importer javax.swing. *; import java.awt. *; Importer java.awt.image.bufferedImage; Importer java.io.file; Importer java.io.ioException; import java.util.arrays; Importer java.util.vector; / ** * Créé par l'administrateur le 2017/8/17. * / public class test {static {// import opencv Library String opencv path = System.getProperty ("user.dir") + "// opencv // x64 //"; String libpath = System.getProperty ("java.library.path"); String a = opencvpath + core.native_library_name + ".dll"; System.Load (OpenCVVPath + Core.Native_Library_Name + ".dll"); } public static String getCUTPATH (String FilePath) {String [] SplitPath = filePath.split ("//."); return SplitPath [0] + "Cut" + "." + SplitPath [1]; } public static void Process (String Original, String Target) lève une exception {String originalcut = getCutPath (original); String TargetCUT = GetCutPath (Target); if (Detectface (original, originalcut) && Detectface (Target, Targetcut)) {}} public static boolean Detectface (String ImagePath, String Outfile) lève exception {System.out.println ("/ nrunning détect Facemo"); // Créez une reconnaissance faciale à partir du fichier de configuration LBPCASCAD_FRONTALFACE.xml, qui se trouve dans le répertoire d'installation OpenCV. Cascadeclassifier facedetector = new Cascadeclassifier ("c: //users//administrator//desktop//opencv//haarcascade_frontalface_alt.xml"); Mat Image = HighGui.Imread (ImagePath); // détecter les faces dans l'image Matofrect facetections = new Matofrect (); faceDetector.tectMultiscale (image, facettements); System.out.println (String.Format ("détecté% s faces", facetection.toArray (). Length)); Rect [] rects = facetection.toArray (); if (recT! = null && reds.length> 1) {throw new RuntimeException ("Plus d'un visage"); } // dessinez une boîte autour de chaque face reconnue recT recul = rects [0]; Core.rectangle (image, nouveau point (rect.x-2, rect.y-2), nouveau point (rect.x + rect.width, rect.y + rect.height), nouveau scalaire (0, 255, 0)); Mat sub = image.submat (rect); Mat Mat = new Mat (); Taille de taille = nouvelle taille (300, 300); Imgproc.resize (sub, mat, taille); // rechercher le visage et enregistrer le return highgui.imwrite (outfile, mat); // Enregistrez le résultat dans un fichier // string filename = "c: //users//administrator//desktop//opencv//facedetection.png"; // System.out.println (string.format ("Writing% s", nom de fichier)); // highgui.imwrite (nom de fichier, image); } public static void setalpha (String ImagePath, String outfile) {/ ** * Ajouter des éléments de test * Lisez l'image et dessinez-la dans Translucent * / Try {ImageIcon ImageIcon = new ImageIcon (ImagePath); BufferedImage BufferedImage = new BufferedImage (ImageIcon.GetIconWidth (), ImageIcon.getIconHeight (), BufferedImage.Type_4Byte_Abgr); Graphics2d g2d = (graphics2d) bufferedImage.getGraphics (); G2d.DrawImage (ImageIcon.GetImage (), 0, 0, ImageIcon.GetImageObserver ()); // boucler chaque point de pixel et modifier la valeur alpha du point de pixel int alpha = 100; pour (int j1 = bufferedImage.getminy (); j1 <butteredImage.getHeight (); j1 ++) {for (int j2 = bufferedImage.getMinx (); j2 <buttereDimage.getwidth (); j2 ++) {int rgb = buffreDimage.getrgb (j2, j2); rgb = ((alpha + 1) << 24) | (RGB & 0x00FFFFFF); BufferedImage.Setrgb (J2, J1, RGB); }} G2d.DrawImage (BufferedImage, 0, 0, ImageIcon.GetImageObserver ()); // Générez l'image en tant que png imageio.write (bufferedImage, "png", nouveau fichier (outfile)); } catch (exception e) {e.printStackTrace (); }} Private Static Void Watermark (String A, String B, String OutFile, Float Alpha) lève IOException {// Obtenez la carte de base BuffreDImage BuffImg = ImageIo.Read (nouveau fichier (A)); // Obtenir la carte de couche BufferedImage waterImg = imageo.read (nouveau fichier (b)); // Créer un objet Graphics2D et dessiner sur l'objet de base de la carte Graphics2d G2d = Buffimg.CreateGraphics (); int waterimgwidth = waterimg.getWidth (); // obtenir la largeur de la carte de couche int waterimgheight = waterimg.getheight (); // obtenir la hauteur de la carte de couche // implémentaire le mélange et les effets transparents dans les graphiques et les images g2d.setcomposite (alphacomposite.getinstance (alphacomposite.src_atop, alpha); // dessiner G2d.Drawimage (waterimg, 0, 0, waterimgwidth, waleimgheight, null); g2d.dispose (); // Libérez les ressources système utilisées dans le contexte graphique // Générez l'image en tant que png imageio.write (buffimg, "png", nouveau fichier (outfile)); } public static booléen fusionimple (bufferedImage image1, bufferedImage image2, int posw, int posh, file fileoutput) {// fusionner deux images int w1 = image1.getWidth (); int h1 = image1.getheight (); int w2 = image2.getWidth (); int h2 = image2.getheight (); BufferedImage ImagesVed = new BufferedImage (W1, H1, BufferedImage.Type_int_argb); Graphics2d g2d = imagesaved.creategraphics (); // Ajouter le code suivant pour rendre l'arrière-plan transparent G2D.DrawImage (image1, null, 0, 0); Image1 = g2d.getDeviceConfiguration (). CreateCompatibleImage (W1, W2, transparency.translucent); g2d.dispose (); g2d = image1.creategraphics (); // Fin de l'arrière-plan Code transparent // for (int i = 0; i <w2; i ++) {// for (int j = 0; j <h2; j ++) {// int rgb1 = image1.getrgb (i + posw, j + posh); // int rgb2 = image2.getrgb (i, j); // if (rgb1! = rgb2) {// // rgb2 = rgb1 & rgb2; //} // imagesaved.setrgb (i + posw, j + posh, rgb2); //} //} booléen b = false; essayez {b = imageo.write (imagesaved, "png", fileOutput); } catch (ioException ie) {ie.printStackTrace (); } return b; } public static void main (String [] args) lève une exception {String a, b, c, d; a = "c: //users//administrator//desktop//opencv//zzl.jpg"; d = "c: //users//administrator//desktop//opencv//cgx.jpg"; // processus (a, d); a = "c: //users//administrator//desktop//opencv//zzlcut.jpg"; d = "c: //users//administrator//desktop//opencv//cgxcut.jpg"; Cascadeclassifier facedetector = new Cascadeclassifier ("c: //users//administrator//desktop//opencv//haarcascade_frontalface_alt.xml"); CASCADECLASSIFIER EYEDEDETERECTOR1 = NOUVEAU CASCADECLASSIFIER ("C: //USERS//ADMINISTRATRAY//DESKTOP//OPENCV//HAARCASCADE_EYE.XML"); CascadeClassifier eyeDetector2 = new CascadeClassifier ("c: //users//administrator//desktop//opencv//haarcascade_eye_tree_eyeglasses.xml"); Mat Image = highgui.imread ("c: //users//administrator//desktop//opencv//gakki.jpg"); // détecter les faces de faces de vue dans l'image matofrect facetections = new Matofrect (); //eyedetector2.detectMultiscale(image, facetections); Objets Vector <cct>; EyeDetector1.DetectMultiscale (image, facestéctions, 2,0,1,1, nouvelle taille (20,20), nouvelle taille (20,20)); Rect [] rects = facetection.toArray (); Rect Eye, EyeB; Eye = rects [0]; EyeB = rects [1]; System.out.println ("A-Center Coordonnées" + Eye.x + "et" + Eye.y); System.out.println ("coordonnée B-Center" + EyeB.x + "et" + EyeB.Y); // Obtenez l'angle de deux yeux double dy = (Eyeb.y eyea.y); double dx = (eyeb.x eyea.x); Double len = math.sqrt (dx * dx + dy * dy); System.out.println ("dx est" + dx); System.out.println ("Dy est" + dy); System.out.println ("len est" + len); double angle = math.atan2 (math.abs (dy), math.abs (dx)) * 180.0 / math.pi; System.out.println ("l'angle est" + angle); pour (rect rect: facedetections.toArray ()) {core.rectangle (image, nouveau point (rect.x, rect.y), nouveau point (rect.x + rect.width, rect.y + rect.height), nouveau scalaire (0, 255, 0)); } String filename = "c: //users//administrator//desktop//opencv//ouput.png"; System.out.println (String.Format ("Writing% S", nom de fichier)); Highgui.imwrite (nom de fichier, image); // Watermark (a, d, "c: //users//administrator//desktop//opencv//zzltm2.jpg", 0.7f); // // // // Lisez l'image sans modifier les informations d'origine de l'image // Mat Image1 = HighGui.ImRead (a); // Mat Image2 = highgui.imread (d); // Mat Mat1 = new Mat (); Mat Mat2 = new Mat (); // taille de taille = nouvelle taille (300, 300); // imgproc.resize (image1, mat1, taille); // imgproc.resize (image2, mat2, taille); // Mat Mat3 = new Mat (taille, cvtype.cv_64f); // Core.AddWeled (MAT1, 0,5, MAT2, 1, 0, MAT3); // // // // highgui.imwrite ("c: //users//administrator//desktop//opencv//add.jpg", mat3); // // MergesImple (imageo.read (nouveau fichier (a)), // imageo.read (nouveau fichier (d)), 0,0, // nouveau fichier ("c: //users//administrator//desktop//opencv//add.jpg")); }}Effet final: il y a une bordure verte à côté du visage, et l'image de bordure verte peut être capturée pour générer une image de visage
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.