文章目录
1.背景
从mp4视频中抓取照片,发送照片到百度api对比进行人脸识别匹配。由于百度api识别人脸按次数收费,为了节省接口费用,本地服务器抓取视频照片后,调用javacv识别是否人脸,识别到人脸后再调用百度api能够节省一半以上的接口费用。
2.目标
- 从mp4抓取视频,每秒钟抓取1张照片保存到本地硬盘。
- 根据上一步抓取的视频,判断是否包含人脸。
- 包含人脸的照片保存带有检测框的图片。
3.依赖引入javacv
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv-platform</artifactId>
<version>1.5.9</version>
</dependency>
4.下载人脸检测分类器 haarcascade_frontalface_default.xml
下载地址:https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xml
如果人脸识别不理想,考虑换成其它的分类器,参考: 算法优化二——如何提高人脸检测正确率
5.视频准备
使用笔记本电脑自带的摄像头拍摄一个11秒长的视频:先不包含人脸,然后人脸移入视频中,然后静止2秒,人脸再移出到视频外。
6.完整代码
import org.bytedeco.javacv.*;
import org.bytedeco.opencv.global.opencv_imgcodecs;
import org.bytedeco.opencv.global.opencv_imgproc;
import org.bytedeco.opencv.opencv_core.Mat;
import org.bytedeco.opencv.opencv_core.RectVector;
import org.bytedeco.opencv.opencv_objdetect.CascadeClassifier;
/**
* 功能描述
*
* @author: zenghaiwen
* @date: 2024年07月23日 11:10
*/
public class VideoThumbnailExtractor {
public static void extractThumbnail(String video