调用摄像头
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();}
}