文章目录 调用摄像头 录制视频 录制带音频的视频 人脸识别 人脸64关键点
调用摄像头
public class Camera { public static void main ( String [ ] args) throws FrameGrabber. Exception { OpenCVFrameGrabber grabber = new OpenCVFrameGrabber ( 0 ) ; grabber. start ( ) ; CanvasFrame canvasFrame = new CanvasFrame ( "OpenCV Frame" ) ; canvasFrame. setDefaultCloseOperation ( JFrame . DISPOSE_ON_CLOSE ) ; canvasFrame. setAlwaysOnTop ( true ) ; canvasFrame. setCanvasSize ( 800 , 600 ) ; while ( canvasFrame. isVisible ( ) ) { canvasFrame. showImage ( grabber. grab ( ) ) ; } grabber. close ( ) ; }
}
录制视频
public class Recording { private static final String FILE_NAME = "D://recording.mp4" ; @SuppressWarnings ( "resource" ) public static void main ( String [ ] args) throws FrameGrabber. Exception , FrameRecorder. Exception { OpenCVFrameGrabber grabber = new OpenCVFrameGrabber ( 0 ) ; grabber. start ( ) ; OpenCVFrameConverter < IplImage > converter = new OpenCVFrameConverter. ToIplImage ( ) ; IplImage iplImage = converter. convertToIplImage ( grabber. grab ( ) ) ; OpenCVFrameRecorder recorder = new OpenCVFrameRecorder ( FILE_NAME , iplImage. width ( ) , iplImage. height ( ) ) ; recorder. setVideoCodec ( avcodec. AV_CODEC_ID_MPEG4 ) ; recorder. setFormat ( "mp4" ) ; recorder. start ( ) ; CanvasFrame canvasFrame = new CanvasFrame ( "OpenCV Frame" ) ; canvasFrame. setDefaultCloseOperation ( JFrame . DISPOSE_ON_CLOSE ) ; canvasFrame. setAlwaysOnTop ( true ) ; canvasFrame. setCanvasSize ( iplImage. width ( ) , iplImage. height ( ) ) ; Frame image; while ( canvasFrame. isVisible ( ) ) { image = grabber. grab ( ) ; canvasFrame. showImage ( image) ; recorder. record ( image) ; } recorder. close ( ) ; grabber. close ( ) ; }
}
录制带音频的视频
public class Audio { private final static int SAMPLE_RATE = 44100 ; private final static int CHANNEL_NUM = 2 ; private static final String FILE_NAME = "D://recording.mp4" ; @SuppressWarnings ( "resource" ) public static void main ( String [ ] args) throws FrameGrabber. Exception , FrameRecorder. Exception , LineUnavailableException { AudioFormat audioFormat = new AudioFormat ( SAMPLE_RATE , 16 , CHANNEL_NUM , true , false ) ; DataLine. Info dataLineInfo = new DataLine. Info ( TargetDataLine . class , audioFormat) ; TargetDataLine line = ( TargetDataLine ) AudioSystem . getLine ( dataLineInfo) ; line. open ( audioFormat) ; line. start ( ) ; final int audioBufferSize = SAMPLE_RATE * CHANNEL_NUM ; byte [ ] audioBytes = new byte [ audioBufferSize] ; OpenCVFrameGrabber grabber = new OpenCVFrameGrabber ( 0 ) ; grabber. start ( ) ; OpenCVFrameConverter < IplImage > converter = new OpenCVFrameConverter. ToIplImage ( ) ; IplImage iplImage = converter. convertToIplImage ( grabber. grab ( ) ) ; FFmpegFrameRecorder recorder = new FFmpegFrameRecorder ( FILE_NAME , iplImage. width ( ) , iplImage. height ( ) ) ; recorder. setVideoCodec ( avcodec. AV_CODEC_ID_MPEG4 ) ; recorder. setFormat ( "mp4" ) ; recorder. setAudioOption ( "crf" , "0" ) ; recorder. setAudioQuality ( 0 ) ; recorder. setAudioBitrate ( 192000 ) ; recorder. setSampleRate ( SAMPLE_RATE ) ; recorder. setAudioChannels ( 2 ) ; recorder. setAudioCodec ( avcodec. AV_CODEC_ID_AAC ) ; recorder. start ( ) ; CanvasFrame canvasFrame = new CanvasFrame ( "OpenCV Frame" ) ; canvasFrame. setDefaultCloseOperation ( JFrame . DISPOSE_ON_CLOSE ) ; canvasFrame. setAlwaysOnTop ( true ) ; canvasFrame. setCanvasSize ( iplImage. width ( ) , iplImage. height ( ) ) ; Frame image; while ( canvasFrame. isVisible ( ) ) { image = grabber. grab ( ) ; canvasFrame. showImage ( image) ; recorder. record ( image) ; int nBytesRead = line. read ( audioBytes, 0 , line. available ( ) ) ; int nSamplesRead = nBytesRead / 2 ; short [ ] samples = new short [ nSamplesRead] ; ByteBuffer . wrap ( audioBytes) . order ( ByteOrder . LITTLE_ENDIAN ) . asShortBuffer ( ) . get ( samples) ; ShortBuffer sBuff = ShortBuffer . wrap ( samples, 0 , nSamplesRead) ; recorder. recordSamples ( SAMPLE_RATE , CHANNEL_NUM , sBuff) ; } recorder. close ( ) ; grabber. close ( ) ; }
}
人脸识别
public class Face { @SuppressWarnings ( "resource" ) public static void main ( String [ ] args) throws FrameGrabber. Exception { CascadeClassifier cascadeClassifier = new CascadeClassifier ( "D:\\Workspace\\javacv-demo\\src\\main\\resources\\haarcascade_frontalface_alt.xml" ) ; OpenCVFrameGrabber grabber = new OpenCVFrameGrabber ( 0 ) ; grabber. start ( ) ; OpenCVFrameConverter. ToIplImage imageConverter = new OpenCVFrameConverter. ToIplImage ( ) ; Frame grab = grabber. grab ( ) ; IplImage iplImage = imageConverter. convertToIplImage ( grab) ; OpenCVFrameConverter. ToMat converter = new OpenCVFrameConverter. ToMat ( ) ; CanvasFrame canvasFrame = new CanvasFrame ( "OpenCV Frame" ) ; canvasFrame. setDefaultCloseOperation ( JFrame . DISPOSE_ON_CLOSE ) ; canvasFrame. setAlwaysOnTop ( true ) ; canvasFrame. setCanvasSize ( iplImage. width ( ) , iplImage. height ( ) ) ; Frame frame; while ( canvasFrame. isVisible ( ) ) { frame = grabber. grab ( ) ; Mat image = converter. convertToMat ( frame) ; RectVector faces = new RectVector ( ) ; cascadeClassifier. detectMultiScale ( image, faces) ; for ( int i = 0 ; i < faces. size ( ) ; i++ ) { opencv_imgproc. rectangle ( image, faces. get ( i) , new Scalar ( ) . green ( 255 ) ) ; } canvasFrame. showImage ( frame) ; } grabber. close ( ) ; }
}
人脸64关键点
public class FacemarkDemo { @SuppressWarnings ( "resource" ) public static void main ( String [ ] args) throws FrameGrabber. Exception { CascadeClassifier cascadeClassifier = new CascadeClassifier ( "D:\\Workspace\\javacv-demo\\src\\main\\resources\\haarcascade_frontalface_alt.xml" ) ; Facemark facemark = createFacemarkLBF ( ) ; facemark. loadModel ( "D:\\Workspace\\javacv-demo\\src\\main\\resources\\lbfmodel.yaml" ) ; OpenCVFrameGrabber grabber = new OpenCVFrameGrabber ( 0 ) ; grabber. start ( ) ; OpenCVFrameConverter. ToIplImage imageConverter = new OpenCVFrameConverter. ToIplImage ( ) ; Frame grab = grabber. grab ( ) ; IplImage iplImage = imageConverter. convertToIplImage ( grab) ; OpenCVFrameConverter. ToMat converter = new OpenCVFrameConverter. ToMat ( ) ; CanvasFrame canvasFrame = new CanvasFrame ( "OpenCV Frame" ) ; canvasFrame. setDefaultCloseOperation ( JFrame . DISPOSE_ON_CLOSE ) ; canvasFrame. setCanvasSize ( iplImage. width ( ) , iplImage. height ( ) ) ; Frame frame; while ( canvasFrame. isVisible ( ) ) { frame = grabber. grab ( ) ; Mat image = converter. convertToMat ( frame) ; RectVector faces = new RectVector ( ) ; cascadeClassifier. detectMultiScale ( image, faces) ; Point2fVectorVector landmarks = new Point2fVectorVector ( ) ; if ( ! image. empty ( ) && faces. size ( ) > 0 ) { facemark. fit ( image, faces, landmarks) ; for ( int i = 0 ; i < landmarks. size ( ) ; i++ ) { drawFacemarks ( image, landmarks. get ( i) , new Scalar ( ) . red ( 255 ) ) ; } } for ( int i = 0 ; i < faces. size ( ) ; i++ ) { opencv_imgproc. rectangle ( image, faces. get ( i) , new Scalar ( ) . green ( 255 ) ) ; } canvasFrame. showImage ( frame) ; } grabber. close ( ) ; }
}