本文实例为大家分享了 Javacv 实现人脸检测功能的具体代码 , 供大家参考 , 具体内容如下 具体内容如下
/ * * Copyright (C) 2010,2011.2012 Samuel Audet * * FACEPREVIEW - Eine Fusion der Camerapreview -Proben von OpenCV und Androids Camerapreview -Proben * mit Javacv + Javacpp als Klebstoff dazwischen. * * Diese Datei basierte auf Camerapreview.java, die mit den Beispielen für * Android SDK API 8, Revision 1 enthielt und die folgende Copyright -Bekanntmachung enthielt: * * Copyright (c) 2007 Das Android Open Source -Projekt * * Lizenziert unter der Apache -Lizenz, Version 2.0 ("Lizenz"); * Sie dürfen diese Datei nur in Übereinstimmung mit der Lizenz verwenden. * Sie können eine Kopie der Lizenz unter * * http://www.apache.org/licenses/license-2.0 * * * *, sofern nach geltendem Recht oder schriftlich gefordert oder schriftlich gefordert wird, Software *, die im Rahmen der Lizenz verteilt ist, auf "As "basis * ohne Gewährleistungen oder Bedingungen jeglicher Art verteilt oder implementiert. * Siehe die Lizenz für die spezifischen Sprachberechtigungen und * Einschränkungen im Rahmen der Lizenz. * * * Wichtig - Stellen Sie sicher, dass die Datei androidManifest.xml so aussieht: * * <? Xml Version = "1.0" coding = "utf -8"?> * <Manifest Xmlns: android = "http://schemas.android.com/res/android" * * * * "com.googlcode. Android: VersionCode = "1" * ANDROID: VersionName = "1.0"> * <use-sdk Android: minsdkversion = "4" /> * <use-permission android: name = "android.permission.camera" /> * <use-feature android: name = "android.hardware Android: label = "@string/app_name"> * <Aktivität * Android: name = "facepreview" * android: label = "@string/app_name" * android: screenorientation = "Landscape"> * <intent filter> * <action und name = "android.intent.Action.Action.Action.Main.Main"/> */> * <<Cegories: Android: name = "android.intent.category.launcher"/> * </intent-filter> * </acity> * </application> * </manifest> */package com.googlecode.javacv.facepreview; importieren android.app.Activity; importieren Android.app.Anertdialog; importieren android.content.context; importieren android.graphics.canvas; import android.graphics.color; importieren android.graphics.imageFormat; import android.graphics.paint; importieren android.hardware.camera; android.hardware.camera.Size importieren; importieren Android.os.bundle; android.view.Surfaceeholder importieren; importieren Sie Android.view.SurfaceView; android.view.view importieren; importieren Android.view.Window; Importieren Sie Android.view.WindowManager; importieren Android.widget.Framelayout; Import Java.io.file; importieren java.io.ioException; Import Java.nio.ByTebuffer; importieren java.util.list; com.googlecode.javacpp.loader importieren; import com.googlecode.javacv.cpp.opencv_objdetekte; Importieren Sie statische com.googlecode.javacv.cpp.opencv_core.*; statische com.googlecode.javacv.cpp.opencv_imgproc.*; statische com.googlecode.javacv.cpp.opencv_objdetekte.*; statische com.googlecode.javacv.cpp.opencv_highgui.*; //. private FaceView FaceView; private Vorschau mpreview; @Override Protected void OnCreate (Bündel SavedInstancestate) {// den Fenstertitel verbergen. RequestWindowFeature (Fenster.Feature_NO_Title); Super.oncreate (SavedInstancestate); getWindow (). addflags (windowManager.layoutParams.flag_fullscreen); // Erstellen Sie unsere Vorschau -Ansicht und setzen Sie sie als Inhalt unserer Aktivität fest. versuche {layout = neuer Framelayout (this); FaceView = New FaceView (this); mpreview = new preview (this, faceView); layout.AddView (mpreview); layout.AddView (FaceView); setContentView (Layout); } catch (ioException e) {e.printstacktrace (); neuer alertDialog.builder (this) .setMessage (e.getMessage ()). create (). show (); }}} // --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- privates Iplimage Grayimage; privater Klassifiziererin von CVHAARCLASSIFIERCADE; privates CVMemstorage -Speicher; Private CVSEQ -Gesichter; public faceView (facepreview context) löst IoException {Super (Kontext) aus; // Laden Sie die Klassifikatordatei aus Java -Ressourcen. Datei classifierFile = loader.extractresource (getClass (), "/com/googlecode/javacv/facepreview/HAARCASCADE_FRONTALFACE_ALT2.XML", context.getCachedir (), "klassifizierer", ".xml"); if (classifierFile == null || classifierFile.length () <= 0) {neue IOException werfen ("könnte die Klassifikatordatei nicht aus Java -Ressource extrahieren."); } // Das Modul openCV_OBJDECTECT vorladen, um einen bekannten Fehler zu bearbeiten. Loader.load (openCV_OBJDETECT.CLASS); klassifizier = neuer cvhaarclassifiercascade (cvload (classifierfile.getabsolutepath ()); classifierfile.delete (); if (klassifizier.isnull ()) {neue ioException ("konnte die Klassifikatordatei nicht laden."); } storate = cvMemStorage.create (); } public void onPreviewFrame (endgültig Byte [] Daten, endgültige Kamerakamera) {try {camera.size size = camera.getParameters (). getPreviewSize (); ProcessImage (Daten, Größe.width, Größe.Height); camera.addcallbackBuffer (Daten); } catch (RunTimeException e) {// Die Kamera wurde wahrscheinlich gerade veröffentlicht, ignorieren. }} Protected void ProcessImage (Byte [] Daten, int Breite, inthohe) {// DownSample unser Bild und konvertieren es in ein Graustufen -Iplimage int f = subSampling_factor; if (GrayImage == null || Grayimage.width ()! = width/f || Grayimage.Height ()! = Höhe/f) {Grayimage = iplimage.create (width/f, Höhe/f, ipl_depth_8u, 1); } int imagewidth = GrayImage.width (); int imageHeight = GrayImage.Height (); int datastride = f*width; int imagestrid = grayimage.widthSstep (); ByteBuffer imageBuffer = GrayImage.getByTebuffer (); für (int y = 0; y <imageHeight; y ++) {int dataline = y*datastrid; int Imagine = y*Imagestrid; für (int x = 0; x <ImageWidth; x ++) {imageBuffer.put (Bildlinie + x, data [dataline + f*x]); }} Iplimage GrayImaget = iplimage.create (Höhe/f, width/f, ipl_depth_8u, 1); //cvsaveimage("/storage/emuled/0/pictures/grayimage.jpg",grayimage); CVTRANSPLES (GRAYIMAGE, GRAYIMAGET); //cvsaveimage("/storage/emuled/0/pictures/grayimaget.jpg",grayimaget); cvflip (Grayimaget, Grayimaget, 0); //cvsaveimage("/storage/emuled/0/pictures/grayimaget_x.jpg",grayimaget); cvflip (Grayimaget, Grayimaget, 1); //cvsaveimage("/storage/emuled/0/pictures/grayimaget_y.jpg",grayimaget); cvclearMemstorage (Speicher); Gesichter = CVHAARDETECTOBJECS (Grayimaget, Klassifizierer, Speicher, 1.1, 3, cv_haar_do_canny_pruning); postinvalidat (); } @Override Protected void OnDraw (Canvas canvas) {Paint = new Paint (); Paint.SetColor (color.red); Paint.SetTextSize (20); String S = "FACEPREVIEW - diese Seite nach oben."; float textwidth = paint.measuretext (s); canvas.drawtext (s, (getwidth ()-textwidth)/2, 20, Farbe); if (files! = null) {paint.setStrokeWidth (2); Paint.SetStyle (Paint.Style.Stroke); float scalex = (float) getwidth ()/grayimage.width (); float scaly = (float) geteight ()/Grayimage.Height (); int total = faces.total (); für (int i = 0; i <total; i ++) {cvrect r = new cvrect (cvgetSeqelem (Gesichter, i)); int x = rx (), y = ry (), w = r.width (), h = r.Height (); canvas.drawrect (x*scalex, y*scaley, (x+w)*scalex, (y+h)*scaley, Farbe); }} else {canvas.drawtext ("meiyoujiancedao", (getwidth ()-textwidth)/2, 20, Farbe); }}} //. Kamera McAmera; Camera.previewCallback previewCallback; Vorschau (Kontextkontext, camera.previewCallback PreviewCallback) {Super (Kontext); this.previewCallback = previewCallback; // Installieren Sie einen Oberflächenhalter.Callback, damit wir benachrichtigt werden, wenn die zugrunde liegende Oberfläche erzeugt und zerstört wird. Mholderber = Getholder (); Mholdern.Addcallback (dies); mholder.setType (surfaceHolder.Surface_type_push_buffers); } public void surfacecreated (Oberflächeninhaber) {// Die Oberfläche wurde erstellt, erwerben Sie die Kamera und sagen Sie, wo // zu zeichnen ist. McAmera = camera.open (camera.camerainfo.camera_facing_front); try {mcamera.setPreviewDisplay (Holder); } catch (ioException -Ausnahme) {mcamera.release (); McAmera = null; // TODO: Fügen Sie hier weitere Ausnahmebehandlung Logik hinzu}} public void oberstedroyed (Oberflächenhalter) {// Oberfläche wird zerstört, wenn wir zurückkehren, also stoppen Sie die Vorschau. // Da das Cameradevice -Objekt keine gemeinsame Ressource ist, ist es sehr wichtig, es zu veröffentlichen, wenn die Aktivität angehalten wird. McAmera.stoppReview (); McAmera.Release (); McAmera = null; } private Größe getoptimalpreviewSize (List <Size> Größen, int w, int h) {Final Double Aspekt_tolerance = 0,05; doppelte targetRatio = (doppelt) w / h; if (Größen == null) return null; Größe optimalSize = null; double mindiff = double.max_value; int taretheight = h; // Versuchen Sie, ein Größe und Größe des Größenübereinstimmung für (Größengröße: Größen) zu finden. if (math.abs (Verhältnis - TargetRatio)> Aspekt_toleranz) Weiter; if (math.abs (size.height - taretheight) <mindiff) {optimalSize = size; mindiff = math.abs (size.height - taretheight); }} // nicht das übereinstimmende Seitenverhältnis finden, ignorieren Sie die Anforderung, wenn (optimalSize == null) {mindiff = double.max_value; für (Größengröße: Größen) {if (math.abs (size.height - taretHeight) <mindiff) {optimalSize = size; mindiff = math.abs (size.height - taretheight); }}} return optimalSize; } public void surfacechanged (Oberflächenhalter, int -Format, int w, int h) {// Jetzt, da die Größe bekannt ist, richten Sie die Kameraparameter ein und beginnen Sie // die Vorschau. Camera.Parameters parameter = mcamera.getParameters (); LIST <Size> Größen = Parameter.GetSupportedPreviewSizes (); Größe optimalSize = getOptimalpreviewSize (Größen, W, H); Parameter.SetPreviewSize (optimalSize.width, optimalSize.Height); McAmera.SetParameters (Parameter); if (previewCallback! Camera.size size = parameter.getPreviewSize (); byte [] data = new byte [size.width* size.height* imageFormat.getBitsperpixel (parameter.getPreviewFormat ())/8]; mcamera.addcallbackBuffer (Daten); } McAmera.StartPreview (); }}以上就是本文的全部内容 , 希望对大家的学习有所帮助 , 也希望大家多多支持武林网。 也希望大家多多支持武林网。