JAVA调用OPENCV中DNN.Darknet接口进行目标检测测试(代码备份)
来源:互联网 发布:数据库审计价格 编辑:程序博客网 时间:2024/06/06 16:45
测试使用的是最新版opencv-3.3.1,dnn模块中加入了很多深度学习库的接口,可直接读取配置文件进行预测,对于面向应用的程序设计很有意义。
import org.opencv.core.*;import org.opencv.dnn.*;import org.opencv.imgproc.*;import org.opencv.imgcodecs.*;public class Main { static String[] names = new String[]{ "aeroplane","bicycle","bird","boat","bottle", "bus","car","cat","chair","cow", "diningtable","dog","horse","motorbike","person", "pottedplant","sheep","sofa","train","tvmonitor" }; public static void main(String[] args) { System.loadLibrary( Core.NATIVE_LIBRARY_NAME ); Net net = Dnn.readNetFromDarknet("tiny-yolo-voc.cfg", "tiny-yolo-voc.weights"); if ( net.empty() ) { System.out.println("Reading Net error"); } String image_file = "dog.jpg";//IMG_9452.JPG Mat im = Imgcodecs.imread(image_file, Imgcodecs.IMREAD_COLOR); if( im.empty() ) { System.out.println("Reading Image error"); } Mat frame = new Mat(); Size sz1 = new Size(im.cols(),im.rows()); Imgproc.resize(im, frame, sz1); Mat resized = new Mat(); Size sz = new Size(416,416); Imgproc.resize(im, resized, sz); float scale = 1.0F / 255.0F; Mat inputBlob = Dnn.blobFromImage(im, scale, sz, new Scalar(0), false, false); net.setInput(inputBlob, "data"); Mat detectionMat = net.forward("detection_out"); if( detectionMat.empty() ) { System.out.println("No result"); } for (int i = 0; i < detectionMat.rows(); i++) { int probability_index = 5; int size = (int) (detectionMat.cols() * detectionMat.channels()); float[] data = new float[size]; detectionMat.get(i, 0, data); float confidence = -1; int objectClass = -1; for (int j=0; j < detectionMat.cols();j++) { if (j>=probability_index && confidence<data[j]) { confidence = data[j]; objectClass = j-probability_index; } } if (confidence > 0.3) { System.out.println("Result Object: "+i); for (int j=0; j < detectionMat.cols();j++) System.out.print(" "+j+":"+ data[j]); System.out.println(""); float x = data[0]; float y = data[1]; float width = data[2]; float height = data[3]; float xLeftBottom = (x - width / 2) * frame.cols(); float yLeftBottom = (y - height / 2) * frame.rows(); float xRightTop = (x + width / 2) * frame.cols(); float yRightTop = (y + height / 2) * frame.rows(); System.out.println("Class: "+ names[objectClass]); System.out.println("Confidence: "+confidence); System.out.println("ROI: "+xLeftBottom+" "+yLeftBottom+" "+xRightTop+" "+yRightTop+"\n"); Imgproc.rectangle(frame, new Point(xLeftBottom, yLeftBottom), new Point(xRightTop,yRightTop),new Scalar(0, 255, 0),3); } } Imgcodecs.imwrite("out.jpg", frame ); }}
2017-10-31日更新:
备忘:若开发WEB应用程序,opencv-*.dll需放置到Tomcat运行所需JRE的BIN目录下,否则无法加载和调用相关库。
阅读全文
0 0
- JAVA调用OPENCV中DNN.Darknet接口进行目标检测测试(代码备份)
- 【目标检测】OpenCV中dnn模块的SSD demo运行
- Opencv基础代码:根据颜色进行目标检测
- Darknet—yolo实时目标检测
- opencv-根据颜色进行目标检测
- opencv-根据颜色进行目标检测
- Opencv对视频进行目标检测
- 使用OpenCV进行目标检测的注意事项
- IOS 中调用opencv进行人脸检测
- Java调用OpenCV进行Hough变换直线检测
- OpenCV 3.3.0中DNN模块测试记录
- darknet中im2col代码分析
- 利用OpenCV的Haar特征目标检测方法进行人脸识别的尝试(一)
- opencv cascade训练LBP特征进行目标检测
- opencv鼠标选定感兴趣区域进行目标检测
- Opencv目标检测之级联分类器训练与测试
- Java代码调用Net接口进行Webservices对接
- opencv学习---运动目标(前景)检测
- 第九周—大学生学费(接口)
- 2017年10月29日训练总结
- python if __name__ = '__main__'
- 概率学习线路
- ICCV 2017:训练GAN的16个技巧,2400+星(PPT)
- JAVA调用OPENCV中DNN.Darknet接口进行目标检测测试(代码备份)
- 1.AJAX
- [noip2012]借教室 题解
- this关键字的应用
- Linux联网配置
- PickUpObj_Interactiable(拾取东西)
- JavaScript的原型对象(prototype)——函数的&对象的
- C++面试之虚函数
- leetcode 两有序数列连接求中值