Artikel ini membagikan kode spesifik untuk Java untuk mewujudkan pengakuan wajah untuk referensi Anda. Konten spesifiknya adalah sebagai berikut
File unduhan dan instalasi resmi, ambil win7 sebagai contoh, unduh OpenCV-2.4.13.3-vc14.exe
Setelah instalasi, di direktori build, di direktori build, d:/opencv/build/java, dapatkan opencv-2413.jar, salin ke direktori proyek, dan juga memerlukan file DLL dan setiap file XML pengakuan untuk mengidentifikasi fitur yang berbeda (wajah, wajah samping, mata, dll.)
Dll Directory: D: /Opencv/Build/java/x64/opencv_java2413.dll
Direktori XML: D: /Opencv/sources/data/haarcascades/haarcascade_frontalface_alt.xml (ada berbagai file identifikasi di direktori)
Struktur Proyek:
Kode Khusus: Karena Anda perlu menggunakan file DLL OpenCV, itu dapat ditempatkan di jalur Perpustakaan Java atau di JRE LIB. Itu dapat ditempatkan di direktori System32 di bawah Windows, atau dapat dimuat secara dinamis dalam kode, sebagai berikut:
Paket OpenCV; impor com.sun.scenario.effect.imagedata; impor org.opencv.core.*; impor org.opencv.core.point; impor org.opencv.highgui.highgui; impor org.opencv.imgproc.imgproc; impor org.opencv.objdetect.cascadeclassifier; impor javax.imageio.imageio; impor javax.swing.*; impor java.awt.*; impor java.awt.image.bufferedimage; impor java.io.file; impor java.io.ioException; impor java.util.arrays; impor java.util.vector; /*** Dibuat oleh Administrator pada 2017/8/17. */tes kelas publik {static {// impor 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 (opencvpath + 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 asli, string target) melempar Exception {String ighercut = getCutpath (asli); String targetcut = getCutpath (target); if (detectFace (asli, originalcut) && detectFace (target, targetcut)) {}} public static boolean detectFace (String ImagePath, String Outfile) melempar Exception {System.out.println ("/nrunningFacEDeMo"); // Buat pengenal wajah dari file konfigurasi lbpcascade_frontalface.xml, yang terletak di direktori instalasi OpenCV. Cascadeclassifier facedetector = cascadeclassifier baru ("c: //users//administrator//desktop//opencv//haarcascade_frontalface_alt.xml"); Gambar mat = highgui.imread (imagepath); // Deteksi wajah dalam gambar facedetection matofrect = matofrect baru (); facedetector.detectmulciscale (gambar, facedetection); System.out.println (string.format ("FACES %S Detected %", facedetection.toArray (). Panjang)); Rect [] rect = facedetection.toArray (); if (rects! = null && rects.length> 1) {lempar runimeException baru ("lebih dari satu wajah"); } // Gambarlah kotak di sekitar setiap rect face rect yang dikenali = rects [0]; Core.rectangle (gambar, titik baru (rect.x-2, rect.y-2), titik baru (rect.x + rect.width, rect.y + rect.height), skalar baru (0, 255, 0)); Mat Sub = Image.submat (Rect); Mat mat = mat New (); Ukuran ukuran = ukuran baru (300, 300); Imgproc.resize (sub, mat, ukuran); // cari wajah dan simpan return highgui.imwrite (outfile, mat); // Simpan hasilnya ke file // string fileName = "c: //users//administrator//desktop//opencv//facedetection.png"; // System.out.println (string.format ("Writing %s", fileName)); // highgui.imwrite (nama file, gambar); } public static void setalpha (String ImagePath, String Outfile) { / *** Tambahkan item tes* Baca gambar dan gambarkan menjadi transparan* / coba {ImageIcon ImageIcon = ImageIcon baru (ImagePath); BufferedImage bufferedImage = BufferedImage baru (ImageIcon.geticonWidth (), Imageicon.geticonHeight (), bufferedImage.type_4byte_abgr); Graphics2d G2D = (Graphics2D) bufferedImage.getGraphics (); G2D.DrawImage (ImageIcon.getImage (), 0, 0, Imageicon.getImageObserver ()); // Loop setiap titik piksel dan ubah nilai alfa titik piksel int alpha = 100; untuk (int j1 = bufferedimage.getMiny (); j1 <bufferedimage.getheight (); j1 ++) {for (int j2 = bufferedimage.getMinx (); j2 <bufferedimage.getwidth (); j2 ++) {int rgb = bufferedimage.getrgb (j2 ++) {int rgb = bufferedimage.getrgb (j2 ++) {int rgb = bufferedimage.getrgb (j2 rgb = ((alpha + 1) << 24) | (RGB & 0x00FFFFFF); bufferedImage.setrgb (J2, J1, RGB); }} g2d.drawImage (bufferedImage, 0, 0, Imageicon.getImageObserver ()); // menghasilkan gambar sebagai png imageIO.write (bufferedImage, "png", file baru (outfile)); } catch (Exception e) {E.PrintStackTrace (); }} private static void watermark (String A, String B, String Outfile, Float Alpha) Melempar IoException {// Dapatkan peta dasar bufferedImage buffimg = imageo.read (file baru (a)); // Dapatkan peta layer bufferedImage waterimg = imageIo.read (file baru (b)); // Buat objek Graphics2D dan gambar pada objek peta dasar grafik2d g2d = buffimg.creategraphics (); int waterImgWidth = waterImg.getWidth();// Get layer map width int waterImgHeight = waterImg.getHeight();// Get layer map height// Implement mixing and transparent effects in graphics and images g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha)); // Gambar G2D.DrawImage (Waterimg, 0, 0, Waterimgwidth, Waterimgheight, Null); g2d.dispose (); // Lepaskan sumber daya sistem yang digunakan dalam konteks grafis // menghasilkan gambar sebagai png imageo.write (buffimg, "png", file baru (outfile)); } public static boolean mergeSimple (bufferedImage Image1, bufferedImage Image2, int posw, int posh, file fileoutput) {// gabungkan dua gambar int w1 = image1.getWidth (); int h1 = image1.getHeight (); int w2 = image2.getWidth (); int h2 = image2.getHeight (); BufferedImage ImageVed = BufferedImage baru (W1, H1, bufferedImage.type_int_argb); Graphics2d g2d = Imagesaved.creategraphics (); // Tambahkan kode berikut untuk membuat latar belakang transparan g2d.drawimage (gambar1, null, 0, 0); Image1 = g2d.getDeviceConfiguration (). CreateCompatibleImage (W1, W2, Transparency.translucent); g2d.dispose (); g2d = image1.creategraphics (); // akhir dari kode transparan latar belakang // untuk (int i = 0; i <w2; i ++) {// untuk (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); //} //} boolean b = false; coba {b = imageIo.write (ImageVed, "png", FileOutput); } catch (ioException IE) {ie.printstacktrace (); } return b; } public static void main (string [] args) melempar Exception {String A, B, C, D; a = "c: //users//administrator//desktop//opencv//zzl.jpg"; d = "c: //users//administrator//desktop//opencv//cgx.jpg"; // proses (a, d); a = "c: //users//administrator//desktop//opencv//zzlcut.jpg"; d = "c: //users//administrator//desktop//opencv//cgxcut.jpg"; Cascadeclassifier facedetector = cascadeclassifier baru ("c: //users//administrator//desktop//opencv//haarcascade_frontalface_alt.xml"); Cascadeclassifier eyedetector1 = cascadeclassifier baru ("c: //users//administrator//desktop//opencv//haarcascade_eye.xml"); Cascadeclassifier eyedetector2 = cascadeclassifier baru ("c: //users//administrator//desktop//opencv//haarcascade_eye_tree_eyeglasses.xml"); Gambar MAT = highgui.imread ("c: //users//administrator//desktop//opencv//gakki.jpg"); // Mendeteksi facedetection dalam gambar facedetection matofrect = matofrect baru (); //eyedetector2.detectMulciscale(Image, facedetections); Vektor <Rect> objek; Eyedetector1.DetectMulciscale (Image, Facedetections, 2.0,1,1, ukuran baru (20,20), ukuran baru (20,20)); Rect [] rect = facedetection.toArray (); Mata Rect, Eyeb; mata = rects [0]; eyeb = rects [1]; System.out.println ("a-center coordinate" + eye.x + "dan" + eye.y); System.out.println ("Koordinat B-Center" + Eyeb.x + "dan" + Eyeb.y); // Dapatkan sudut dua mata ganda dy = (eyeb.y-eyea.y); dx dx = (eyeb.x-eyea.x); double len = math.sqrt (dx*dx+dy*dy); System.out.println ("DX adalah"+dx); System.out.println ("dy is"+dy); System.out.println ("len is"+len); Double Angle = Math.atan2 (Math.Abs (DY), Math.ABS (DX))*180.0/Math.pi; System.out.println ("sudut adalah"+sudut); untuk (rect rect: facedetection.toArray ()) {core.rectangle (gambar, titik baru (rect.x, rect.y), titik baru (rect.x + rect.width, rect.y + rect.height), skalar baru (0, 255, 0)); } String filename = "c: //users//administrator//desktop//opencv//ouput.png"; System.out.println (string.format ("Writing %s", fileName)); Highgui.imwrite (nama file, gambar); // watermark (a, d, "c: //users//administrator//desktop//opencv//zzltm2.jpg", 0.7f); // // // // Baca gambar tanpa mengubah informasi asli dari gambar // mat gambar1 = highgui.imread (a); // mat image2 = highgui.imread (d); // Mat MAT1 = MAT baru (); Mat2 MAT2 = MAT baru (); // ukuran ukuran = ukuran baru (300, 300); // imgproc.ressize (Image1, Mat1, size); // imgproc.ressize (image2, mat2, size); // MAT MAT3 = Mat baru (ukuran, cvtype.cv_64f); // core.addweighted (MAT1, 0,5, MAT2, 1, 0, MAT3); // // // // highgui.imwrite ("c: //users//administrator//desktop//opencv//add.jpg", mat3); // // mergeimple (imageo.read (file baru (a)), // imageo.read (file baru (d)), 0,0, // file baru ("c: //users//administrator//desktop//opencv//add.jpg")); }}Efek Akhir: Ada perbatasan hijau di sebelah wajah, dan gambar perbatasan hijau dapat ditangkap untuk menghasilkan gambar wajah
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.