当前位置: 首页 > news >正文

京东的网站规划与建设市场分析网页设计代码动漫

京东的网站规划与建设市场分析,网页设计代码动漫,asp.net做织梦网站,网页与网站的区别与联系1 OpenCV 环境的准备 这个项目中需要用到 opencv 进行图片的读取与处理操作#xff0c;因此我们需要先配置一下 opencv 在 java 中运行的配置。 首先前往 opencv 官网下载 opencv-4.6 #xff1a;点此下载#xff1b;下载好后仅选择路径后即可完成安装。 此时将 opencv\b…1 OpenCV 环境的准备 这个项目中需要用到 opencv 进行图片的读取与处理操作因此我们需要先配置一下 opencv 在 java 中运行的配置。 首先前往 opencv 官网下载 opencv-4.6 点此下载下载好后仅选择路径后即可完成安装。 此时将 opencv\build\java\x64 路径下的 opencv_java460.dll 复制到 C:\Windows\System32 中再将 D:\Tools\opencv\opencv\build\java 下的 opencv-460.jar 放到我们 Springboot 项目 resources 文件夹下的 lib 文件夹下。 本文所需 ONNX 文件请 点此下载 。 JAVA使用YOLOV7进行 目标检测 请转至 Java使用OnnxRuntime及OpenCV实现YoloV7目标检测 项目代码可前往 项目主页 查看。 2 Maven 配置 引入 onnxruntime 和 opencv 这两个依赖即可。值得注意的是引 opencv 时systemPath记得与上文说的opencv-460.jar所在路径保持一致。 dependencygroupIdcom.microsoft.onnxruntime/groupIdartifactIdonnxruntime/artifactIdversion1.12.1/version /dependencydependencygroupIdorg.opencv/groupIdartifactIdopencv/artifactIdversion4.6.0/versionscopesystem/scopesystemPath${project.basedir}/src/main/resources/lib/opencv-460.jar/systemPath /dependency3 Config 3.1 PEPlotConfig.java 在此配置一些画图时用到的超参数 package cn.halashuo.config;import org.opencv.core.Scalar;import java.util.ArrayList; import java.util.Arrays; import java.util.List;public final class PEPlotConfig {public static final ListScalar palette new ArrayList(Arrays.asList(new Scalar( 255, 128, 0 ),new Scalar( 255, 153, 51 ),new Scalar( 255, 178, 102 ),new Scalar( 230, 230, 0 ),new Scalar( 255, 153, 255 ),new Scalar( 153, 204, 255 ),new Scalar( 255, 102, 255 ),new Scalar( 255, 51, 255 ),new Scalar( 102, 178, 255 ),new Scalar( 51, 153, 255 ),new Scalar( 255, 153, 153 ),new Scalar( 255, 102, 102 ),new Scalar( 255, 51, 51 ),new Scalar( 153, 255, 153 ),new Scalar( 102, 255, 102 ),new Scalar( 51, 255, 51 ),new Scalar( 0, 255, 0 ),new Scalar( 0, 0, 255 ),new Scalar( 255, 0, 0 ),new Scalar( 255, 255, 255 )));public static final int[][] skeleton {{16, 14}, {14, 12}, {17, 15}, {15, 13}, {12, 13}, {6, 12},{7, 13}, {6, 7}, {6, 8}, {7, 9}, {8, 10}, {9, 11}, {2, 3},{1, 2}, {1, 3}, {2, 4}, {3, 5}, {4, 6}, {5, 7}};public static final ListScalar poseLimbColor new ArrayList(Arrays.asList(palette.get(9), palette.get(9), palette.get(9), palette.get(9), palette.get(7),palette.get(7), palette.get(7), palette.get(0), palette.get(0), palette.get(0),palette.get(0), palette.get(0), palette.get(16), palette.get(16), palette.get(16),palette.get(16), palette.get(16), palette.get(16), palette.get(16)));public static final ListScalar poseKptColor new ArrayList(Arrays.asList(palette.get(16), palette.get(16), palette.get(16), palette.get(16), palette.get(16),palette.get(0), palette.get(0), palette.get(0), palette.get(0), palette.get(0),palette.get(0), palette.get(9), palette.get(9), palette.get(9), palette.get(9),palette.get(9), palette.get(9)));} 4 Utils 3.1 Letterbox.java 这个类负责调整图像大小和填充图像使满足步长约束并记录参数。 package cn.halashuo.utils;import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.core.Size; import org.opencv.imgproc.Imgproc;public class Letterbox {private final Size newShape new Size(1280, 1280);private final double[] color new double[]{114,114,114};private final Boolean auto false;private final Boolean scaleUp true;private final Integer stride 32;private double ratio;private double dw;private double dh;public double getRatio() {return ratio;}public double getDw() {return dw;}public Integer getWidth() {return (int) this.newShape.width;}public Integer getHeight() {return (int) this.newShape.height;}public double getDh() {return dh;}public Mat letterbox(Mat im) { // 调整图像大小和填充图像使满足步长约束并记录参数int[] shape {im.rows(), im.cols()}; // 当前形状 [height, width]// Scale ratio (new / old)double r Math.min(this.newShape.height / shape[0], this.newShape.width / shape[1]);if (!this.scaleUp) { // 仅缩小不扩大一起为了mAPr Math.min(r, 1.0);}// Compute paddingSize newUnpad new Size(Math.round(shape[1] * r), Math.round(shape[0] * r));double dw this.newShape.width - newUnpad.width, dh this.newShape.height - newUnpad.height; // wh 填充if (this.auto) { // 最小矩形dw dw % this.stride;dh dh % this.stride;}dw / 2; // 填充的时候两边都填充一半使图像居于中心dh / 2;if (shape[1] ! newUnpad.width || shape[0] ! newUnpad.height) { // resizeImgproc.resize(im, im, newUnpad, 0, 0, Imgproc.INTER_LINEAR);}int top (int) Math.round(dh - 0.1), bottom (int) Math.round(dh 0.1);int left (int) Math.round(dw - 0.1), right (int) Math.round(dw 0.1);// 将图像填充为正方形Core.copyMakeBorder(im, im, top, bottom, left, right, Core.BORDER_CONSTANT, new org.opencv.core.Scalar(this.color));this.ratio r;this.dh dh;this.dw dw;return im;} }3.2 NMS.java 这个类负责进行非极大值抑制以筛选检测到的人。 package cn.halashuo.utils;import cn.halashuo.domain.PEResult;import java.util.ArrayList; import java.util.List;public class NMS {public static ListPEResult nms(ListPEResult boxes, float iouThreshold) {// 根据score从大到小对List进行排序boxes.sort((b1, b2) - Float.compare(b2.getScore(), b1.getScore()));ListPEResult resultList new ArrayList();for (int i 0; i boxes.size(); i) {PEResult box boxes.get(i);boolean keep true;// 从i1开始遍历之后的所有boxes移除与box的IOU大于阈值的元素for (int j i 1; j boxes.size(); j) {PEResult otherBox boxes.get(j);float iou getIntersectionOverUnion(box, otherBox);if (iou iouThreshold) {keep false;break;}}if (keep) {resultList.add(box);}}return resultList;}private static float getIntersectionOverUnion(PEResult box1, PEResult box2) {float x1 Math.max(box1.getX0(), box2.getX0());float y1 Math.max(box1.getY0(), box2.getY0());float x2 Math.min(box1.getX1(), box2.getX1());float y2 Math.min(box1.getY1(), box2.getY1());float intersectionArea Math.max(0, x2 - x1) * Math.max(0, y2 - y1);float box1Area (box1.getX1() - box1.getX0()) * (box1.getY1() - box1.getY0());float box2Area (box2.getX1() - box2.getX0()) * (box2.getY1() - box2.getY0());float unionArea box1Area box2Area - intersectionArea;return intersectionArea / unionArea;} }5 domain 5.1 KeyPoint.java 记录关键点信息的实体类。 package cn.halashuo.domain;public class KeyPoint {private Integer id;private Float x;private Float y;private Float score;public KeyPoint(Integer id, Float x, Float y, Float score) {this.id id;this.x x;this.y y;this.score score;}public Integer getId() {return id;}public Float getX() {return x;}public Float getY() {return y;}public Float getScore() {return score;}Overridepublic String toString() {return 第 (id1) 个关键点: x x y y c score \n;} } 5.2 PEResult.java 记录所有人物检测信息的实体类。 package cn.halashuo.domain;import java.util.ArrayList; import java.util.List;public class PEResult {private Float x0;private Float y0;private Float x1;private Float y1;private Float score;private Integer clsId;private ListKeyPoint keyPointList;public PEResult(float[] peResult) {float x peResult[0];float y peResult[1];float w peResult[2]/2.0f;float h peResult[3]/2.0f;this.x0 x-w;this.y0 y-h;this.x1 xw;this.y1 yh;this.score peResult[4];this.clsId (int) peResult[5];this.keyPointList new ArrayList();int keyPointNum (peResult.length-6)/3;for (int i0;ikeyPointNum;i) {this.keyPointList.add(new KeyPoint(i, peResult[63*i], peResult[63*i1], peResult[63*i2]));}}public Float getX0() {return x0;}public Float getY0() {return y0;}public Float getX1() {return x1;}public Float getY1() {return y1;}public Float getScore() {return score;}public Integer getClsId() {return clsId;}public ListKeyPoint getKeyPointList() {return keyPointList;}Overridepublic String toString() {String result PEResult: x0 x0 , y0 y0 , x1 x1 , y1 y1 , score score , clsId clsId \n;for (KeyPoint x : keyPointList) {result result x.toString();}return result;} } 6 PoseEstimation.java 设置好 ONNX 文件路径及需要识别的图片路径即可。如有需要也可设置 CUDA 作为运行环境大幅提升 FPS。 package cn.halashuo;import ai.onnxruntime.OnnxTensor; import ai.onnxruntime.OrtEnvironment; import ai.onnxruntime.OrtException; import ai.onnxruntime.OrtSession; import cn.halashuo.domain.KeyPoint; import cn.halashuo.domain.PEResult; import cn.halashuo.utils.Letterbox; import cn.halashuo.utils.NMS; import cn.halashuo.config.PEPlotConfig; import org.opencv.core.*; import org.opencv.highgui.HighGui; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc.Imgproc;import java.nio.FloatBuffer; import java.util.ArrayList; import java.util.HashMap; import java.util.List;public class PoseEstimation {static{//在使用OpenCV前必须加载Core.NATIVE_LIBRARY_NAME类,否则会报错System.loadLibrary(Core.NATIVE_LIBRARY_NAME);}public static void main(String[] args) throws OrtException {// 加载ONNX模型OrtEnvironment environment OrtEnvironment.getEnvironment();OrtSession.SessionOptions sessionOptions new OrtSession.SessionOptions();OrtSession session environment.createSession(src\\main\\resources\\model\\yolov7-w6-pose.onnx, sessionOptions);// 输出基本信息session.getInputInfo().keySet().forEach(x - {try {System.out.println(input name x);System.out.println(session.getInputInfo().get(x).getInfo().toString());} catch (OrtException e) {throw new RuntimeException(e);}});// 读取 imageMat img Imgcodecs.imread(src\\main\\resources\\image\\bus.jpg);Imgproc.cvtColor(img, img, Imgproc.COLOR_BGR2RGB);Mat image img.clone();// 在这里先定义下线的粗细、关键的半径(按比例设置大小粗细比较好一些)int minDwDh Math.min(img.width(), img.height());int thickness minDwDh / 333;int radius minDwDh / 168;// 更改 image 尺寸Letterbox letterbox new Letterbox();letterbox.setNewShape(new Size(960, 960));letterbox.setStride(64);image letterbox.letterbox(image);double ratio letterbox.getRatio();double dw letterbox.getDw();double dh letterbox.getDh();int rows letterbox.getHeight();int cols letterbox.getWidth();int channels image.channels();// 将Mat对象的像素值赋值给Float[]对象float[] pixels new float[channels * rows * cols];for (int i 0; i rows; i) {for (int j 0; j cols; j) {double[] pixel image.get(j, i);for (int k 0; k channels; k) {// 这样设置相当于同时做了image.transpose((2, 0, 1))操作pixels[rows * cols * k j * cols i] (float) pixel[k] / 255.0f;}}}// 创建OnnxTensor对象long[] shape {1L, (long) channels, (long) rows, (long) cols};OnnxTensor tensor OnnxTensor.createTensor(environment, FloatBuffer.wrap(pixels), shape);HashMapString, OnnxTensor stringOnnxTensorHashMap new HashMap();stringOnnxTensorHashMap.put(session.getInputInfo().keySet().iterator().next(), tensor);// 运行模型OrtSession.Result output session.run(stringOnnxTensorHashMap);// 得到结果float[][] outputData ((float[][][]) output.get(0).getValue())[0];ListPEResult peResults new ArrayList();for (int i0;ioutputData.length;i){PEResult result new PEResult(outputData[i]);if (result.getScore()0.25f) {peResults.add(result);}}// 对结果进行非极大值抑制peResults NMS.nms(peResults, 0.65f);for (PEResult peResult: peResults) {System.out.println(peResult);// 画框Point topLeft new Point((peResult.getX0()-dw)/ratio, (peResult.getY0()-dh)/ratio);Point bottomRight new Point((peResult.getX1()-dw)/ratio, (peResult.getY1()-dh)/ratio);Imgproc.rectangle(img, topLeft, bottomRight, new Scalar(255,0,0), thickness);ListKeyPoint keyPoints peResult.getKeyPointList();// 画点keyPoints.forEach(keyPoint-{if (keyPoint.getScore()0.50f) {Point center new Point((keyPoint.getX()-dw)/ratio, (keyPoint.getY()-dh)/ratio);Scalar color PEPlotConfig.poseKptColor.get(keyPoint.getId());Imgproc.circle(img, center, radius, color, -1); //-1表示实心}});// 画线for (int i0;iPEPlotConfig.skeleton.length;i){int indexPoint1 PEPlotConfig.skeleton[i][0]-1;int indexPoint2 PEPlotConfig.skeleton[i][1]-1;if ( keyPoints.get(indexPoint1).getScore()0.5f keyPoints.get(indexPoint2).getScore()0.5f ) {Scalar coler PEPlotConfig.poseLimbColor.get(i);Point point1 new Point((keyPoints.get(indexPoint1).getX()-dw)/ratio,(keyPoints.get(indexPoint1).getY()-dh)/ratio);Point point2 new Point((keyPoints.get(indexPoint2).getX()-dw)/ratio,(keyPoints.get(indexPoint2).getY()-dh)/ratio);Imgproc.line(img, point1, point2, coler, thickness);}}}Imgproc.cvtColor(img, img, Imgproc.COLOR_RGB2BGR);// 保存图像// Imgcodecs.imwrite(image.jpg, img);HighGui.imshow(Display Image, img);// 等待按下任意键继续执行程序HighGui.waitKey();} } 运行结果 input name images TensorInfo(javaTypeFLOAT,onnxTypeONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT,shape[1, 3, 960, 960]) PEResult: x0164.1142, y0357.69672, x1341.0573, y1800.42975, score0.7534131, clsId0第 1 个关键点: x246.95715 y397.0772 c0.9736327第 2 个关键点: x252.17633 y389.2904 c0.8335564第 3 个关键点: x238.11848 y389.0014 c0.96936846第 4 个关键点: x256.3179 y395.70413 c0.26490688第 5 个关键点: x217.58188 y395.21817 c0.9350542第 6 个关键点: x261.88034 y443.02286 c0.9898272第 7 个关键点: x197.16116 y444.8831 c0.9871879第 8 个关键点: x288.0304 y506.67032 c0.96026266第 9 个关键点: x232.06883 y506.9636 c0.97538215第 10 个关键点: x239.84201 y521.9722 c0.9516981第 11 个关键点: x277.70163 y489.83765 c0.970703第 12 个关键点: x257.0904 y574.55255 c0.9929459第 13 个关键点: x208.6877 y576.3064 c0.9918982第 14 个关键点: x271.411 y667.6743 c0.98325074第 15 个关键点: x203.27112 y671.0604 c0.98317075第 16 个关键点: x285.6367 y760.895 c0.91636044第 17 个关键点: x184.19543 y757.7814 c0.91179585PEResult: x0316.40674, y0360.82706, x1426.57, y1759.98706, score0.2713838, clsId0第 1 个关键点: x381.07776 y401.219 c0.97289705第 2 个关键点: x386.32465 y393.87543 c0.8813406第 3 个关键点: x372.7825 y394.40253 c0.9677005第 4 个关键点: x392.475 y397.61212 c0.38852227第 5 个关键点: x358.659 y399.40833 c0.90877795第 6 个关键点: x402.89664 y442.8764 c0.9850693第 7 个关键点: x344.9049 y448.23697 c0.98851293第 8 个关键点: x414.33658 y491.29187 c0.932391第 9 个关键点: x342.81982 y514.2552 c0.97218585第 10 个关键点: x372.42307 y471.12778 c0.9217508第 11 个关键点: x355.56168 y568.59796 c0.9616347第 12 个关键点: x395.88492 y558.541 c0.98994935第 13 个关键点: x356.53287 y560.3552 c0.99083第 14 个关键点: x402.41013 y636.82916 c0.97681665第 15 个关键点: x356.1795 y645.22626 c0.9832493第 16 个关键点: x363.65356 y694.9054 c0.92282534第 17 个关键点: x358.54623 y727.66455 c0.93670356PEResult: x0120.30354, y0488.97424, x1189.55516, y1765.24194, score0.2625065, clsId0第 1 个关键点: x128.37527 y496.36432 c0.039970636第 2 个关键点: x129.2826 y488.29858 c0.01759991第 3 个关键点: x129.88588 y487.7059 c0.023388624第 4 个关键点: x128.1956 y486.87085 c0.022539705第 5 个关键点: x129.61555 y486.93362 c0.026325405第 6 个关键点: x124.60656 y506.1516 c0.11605239第 7 个关键点: x124.11076 y506.29758 c0.1002911第 8 个关键点: x129.53989 y577.0432 c0.39045402第 9 个关键点: x129.05757 y578.36163 c0.4030531第 10 个关键点: x161.94182 y651.2286 c0.51389414第 11 个关键点: x162.66849 y654.58966 c0.54413426第 12 个关键点: x128.37022 y633.2864 c0.12599188第 13 个关键点: x128.395 y635.9184 c0.110325515第 14 个关键点: x128.9154 y668.3744 c0.098092705第 15 个关键点: x129.4807 y669.07947 c0.08956778第 16 个关键点: x128.86487 y750.24927 c0.09377599第 17 个关键点: x127.63382 y751.3636 c0.086484134PEResult: x0710.87134, y0352.32605, x1839.29944, y1781.6887, score0.2580245, clsId0第 1 个关键点: x815.21063 y390.9094 c0.37949353第 2 个关键点: x819.77454 y382.87204 c0.34996593第 3 个关键点: x816.6579 y382.68045 c0.0947094第 4 个关键点: x831.6544 y386.69308 c0.3775956第 5 个关键点: x830.4774 y386.01678 c0.044245332第 6 个关键点: x828.6047 y435.97873 c0.62260723第 7 个关键点: x838.1829 y433.01996 c0.32877648第 8 个关键点: x817.08154 y511.3317 c0.7232578第 9 个关键点: x824.0419 y505.8941 c0.21007198第 10 个关键点: x773.95953 y496.15784 c0.80840695第 11 个关键点: x790.11487 y490.05597 c0.33966026第 12 个关键点: x826.98004 y571.4592 c0.6694445第 13 个关键点: x830.14514 y567.2725 c0.508251第 14 个关键点: x796.26184 y655.2373 c0.81898046第 15 个关键点: x802.0529 y650.5082 c0.6584172第 16 个关键点: x762.1977 y747.01917 c0.6550461第 17 个关键点: x763.58057 y741.5452 c0.5072014 使用 yolov7-w6-pose 的官方模型训练并转化成 onnx 后得到的结果维度为 n × 57 n\times 57 n×57。其中前六个元素分别是 x、y、w、h、score、classId。关键点信息由x、y、score三个元素构成共有17个关键点因此每个人体监测信息共计 3 × 17 6 57 3\times 17 6 57 3×17657 个元素。
http://www.dnsts.com.cn/news/11323.html

相关文章:

  • 推荐商城网站建设成都微信网站建设多少钱
  • 成都高端网站开发永久免费的培训学校管理软件
  • 哪些网站可以发布免费招聘信息朝阳网站开发联系电话
  • ui培训班哪里比较好百度网站建设优化
  • 网站建设了Wordpress回复邮件通知
  • 宜昌做网站公司有哪些网站做网站可以没有框架吗
  • 浙江五联建设有限公司网站只做公司网站方案
  • 山东工艺美术学院网站建设公司wordpress页面转文章
  • 沈阳网站制作系统深圳哪家装修公司口碑最好
  • 惠州企业建站系统建设网站那家公司好
  • 网站推广方法渠道网页版视频网站建设需要多少钱
  • 网站推广效果分析呼和浩特百度公司
  • 制作充值网站广告公司好做吗
  • 徐州建站模板公司做网站需要招什么条件
  • 网站备案需要营业执照吗移动网站开发试验报告
  • html5手机网站建设所见即所得的网站开发软件
  • wordpress火车头发布接口深圳优化网站
  • 艺术设计与制作关键词网站建设优化
  • 做网站设计和推广医疗网站建设讯息
  • 品牌网站和优化网站装饰设计是什么
  • 学校网站建设招聘重庆在线开放平台
  • 网站建设搭配西安网优项目公司
  • 网站开发后怎么进入互联网wordpress正文目录
  • 做加盟代理的网站网站建设维护网页设计
  • 彭州做网站的公司做传媒网站公司名称
  • p2p网站建设方案书南充高端网站建设
  • 抽纸网站建设摘要排名优化工具
  • 营销型网站策划 建设的考试题金华网站如何制作
  • 南宁模板建站定制网站江苏建站服务
  • 营销型网站用什么系统杭州企业宣传画册制作公司