使用Java和OpenCV调用YOLOv3完成实施目标检测,识别到目标就将包含目标的图片保存下来,没有目标就不保存。详细代码以及步骤。
第一步:在IDEA中完成对OpenCV包的导入
从官网上下载OpenCV:Releases - OpenCV。选择window版本下载,解压之后
把 opencv\build\目录下的java文件整个复制到项目文件下,名字随意。
File>Project Structure>Libraries ,选择+号,选择java,之后选择jar包位置。导入即可。
这里我已经导入过了。最后再配置dll
Run>Edit Configurations ,选中你所要配置的java文件,填入以下内容:
-Djava.library.path=$PROJECT_DIR$\opencv\x64 (64位选x64,32位选x86)
第二步:完成目标检测
首先下载darknet:GitHub - pjreddie/darknet: Convolutional Neural Networks
为了方便操作,这里只需要将darknet的路径以及保存的图片路径修改为自己的即可。下边直接上代码。当然你也可以训练自己的YOLOv3模型来完成相关的操作。
主程序
import org.opencv.core.*;
import org.opencv.core.Point;
import org.opencv.dnn.Dnn;
import org.opencv.dnn.Net;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.videoio.VideoCapture;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import static org.opencv.dnn.Dnn.NMSBoxes;
import static org.opencv.highgui.HighGui.*;
import static org.opencv.highgui.HighGui.waitKey;
import static org.opencv.imgproc.Imgproc.*;
import static org.opencv.imgproc.Imgproc.FONT_HERSHEY_SIMPLEX;
public class VideoDet{
final static String ROOTDIR = "E:\\ZxxProject\\darknet-master"; // 根路径
final static float CONTHRES = 0.8f; // 置信度阈值
final static float NMSTHRES = 0.8f; // iou阈值
final static List<String> CLASSES = new ArrayList<>(); // 存放类别的列表集合(这里直接用的原模型,所以是80类)
public static int count=0;//标记,用来间隔多少次来保存图片
public static boolean judge=true;
public static void main(String[] args) {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);