{"id":118380,"date":"2026-10-27T02:17:13","date_gmt":"2026-10-26T18:17:13","guid":{"rendered":"https:\/\/www.wsisp.com\/helps\/118380.html"},"modified":"2026-10-27T02:17:13","modified_gmt":"2026-10-26T18:17:13","slug":"%e8%ae%a1%e7%ae%97%e6%9c%ba%e6%af%95%e4%b8%9a%e8%ae%be%e8%ae%a1%e9%80%89%e9%a2%98%e6%8e%a8%e8%8d%90%e5%9f%ba%e4%ba%8e%e6%b7%b1%e5%ba%a6%e5%ad%a6%e4%b9%a0%e7%9a%84%e5%bb%ba%e7%ad%91%e5%b7%a5%e5%9c%b0","status":"publish","type":"post","link":"https:\/\/www.wsisp.com\/helps\/118380.html","title":{"rendered":"\u8ba1\u7b97\u673a\u6bd5\u4e1a\u8bbe\u8ba1\u9009\u9898\u63a8\u8350:\u57fa\u4e8e\u6df1\u5ea6\u5b66\u4e60\u7684\u5efa\u7b51\u5de5\u5730\u4e2a\u4eba\u9632\u62a4\u88c5\u5907\u5408\u89c4\u6027\u68c0\u6d4b\u4e0e\u7f3a\u5931\u8bc6\u522b\u7814\u7a76\u3001\u6bd5\u4e1a\u8bbe\u8ba1\u9009\u9898\u3001\u9009\u9898\u63a8\u8350\u3001\u6df1\u5ea6\u5b66\u4e60\u9879\u76ee\u3001\u9ad8\u8d28\u91cf\u9879\u76ee\u3001\u6bd5\u8bbe\u6307\u5bfc\u3001\u9879\u76ee\u5b9a\u5236\u3001\u5168\u5957\u6e90\u7801\u3001\u8bb2\u89e3\u6587\u6863"},"content":{"rendered":"<p>&#x1f496;&#x1f496;\u4f5c\u8005&#xff1a;\u8ba1\u7b97\u673a\u7f16\u7a0b\u5c0f\u5496 &#x1f499;&#x1f499;\u4e2a\u4eba\u7b80\u4ecb&#xff1a;\u66fe\u957f\u671f\u4ece\u4e8b\u8ba1\u7b97\u673a\u4e13\u4e1a\u57f9\u8bad\u6559\u5b66&#xff0c;\u672c\u4eba\u4e5f\u70ed\u7231\u4e0a\u8bfe\u6559\u5b66&#xff0c;\u8bed\u8a00\u64c5\u957fJava\u3001\u5fae\u4fe1\u5c0f\u7a0b\u5e8f\u3001Python\u3001Golang\u3001\u5b89\u5353Android\u7b49&#xff0c;\u5f00\u53d1\u9879\u76ee\u5305\u62ec\u5927\u6570\u636e\u3001\u6df1\u5ea6\u5b66\u4e60\u3001\u7f51\u7ad9\u3001\u5c0f\u7a0b\u5e8f\u3001\u5b89\u5353\u3001\u7b97\u6cd5\u3002\u5e73\u5e38\u4f1a\u505a\u4e00\u4e9b\u9879\u76ee\u5b9a\u5236\u5316\u5f00\u53d1\u3001\u4ee3\u7801\u8bb2\u89e3\u3001\u7b54\u8fa9\u6559\u5b66\u3001\u6587\u6863\u7f16\u5199\u3001\u4e5f\u61c2\u4e00\u4e9b\u964d\u91cd\u65b9\u9762\u7684\u6280\u5de7\u3002\u5e73\u5e38\u559c\u6b22\u5206\u4eab\u4e00\u4e9b\u81ea\u5df1\u5f00\u53d1\u4e2d\u9047\u5230\u7684\u95ee\u9898\u7684\u89e3\u51b3\u529e\u6cd5&#xff0c;\u4e5f\u559c\u6b22\u4ea4\u6d41\u6280\u672f&#xff0c;\u5927\u5bb6\u6709\u6280\u672f\u4ee3\u7801\u8fd9\u4e00\u5757\u7684\u95ee\u9898\u53ef\u4ee5\u95ee\u6211&#xff01; &#x1f49b;&#x1f49b;\u60f3\u8bf4\u7684\u8bdd&#xff1a;\u611f\u8c22\u5927\u5bb6\u7684\u5173\u6ce8\u4e0e\u652f\u6301&#xff01; &#x1f49c;&#x1f49c; \u7f51\u7ad9\u5b9e\u6218\u9879\u76ee \u5b89\u5353\/\u5c0f\u7a0b\u5e8f\u5b9e\u6218\u9879\u76ee \u5927\u6570\u636e\u5b9e\u6218\u9879\u76ee \u6df1\u5ea6\u5b66\u4e60\u5b9e\u6218\u9879\u76ee<\/p>\n<\/p>\n<h4>\u76ee\u5f55<\/h4>\n<ul>\n<li>\u5efa\u7b51\u5de5\u5730\u4e2a\u4eba\u9632\u62a4\u88c5\u5907\u5408\u89c4\u6027\u68c0\u6d4b\u4e0e\u7f3a\u5931\u8bc6\u522b\u7814\u7a76\u7cfb\u7edf\u4ecb\u7ecd<\/li>\n<li>\u5efa\u7b51\u5de5\u5730\u4e2a\u4eba\u9632\u62a4\u88c5\u5907\u5408\u89c4\u6027\u68c0\u6d4b\u4e0e\u7f3a\u5931\u8bc6\u522b\u7814\u7a76\u7cfb\u7edf\u6f14\u793a\u89c6\u9891<\/li>\n<li>\u5efa\u7b51\u5de5\u5730\u4e2a\u4eba\u9632\u62a4\u88c5\u5907\u5408\u89c4\u6027\u68c0\u6d4b\u4e0e\u7f3a\u5931\u8bc6\u522b\u7814\u7a76\u7cfb\u7edf\u6f14\u793a\u56fe\u7247<\/li>\n<li>\u5efa\u7b51\u5de5\u5730\u4e2a\u4eba\u9632\u62a4\u88c5\u5907\u5408\u89c4\u6027\u68c0\u6d4b\u4e0e\u7f3a\u5931\u8bc6\u522b\u7814\u7a76\u7cfb\u7edf\u4ee3\u7801\u5c55\u793a<\/li>\n<li>\u5efa\u7b51\u5de5\u5730\u4e2a\u4eba\u9632\u62a4\u88c5\u5907\u5408\u89c4\u6027\u68c0\u6d4b\u4e0e\u7f3a\u5931\u8bc6\u522b\u7814\u7a76\u7cfb\u7edf\u6587\u6863\u5c55\u793a<\/li>\n<\/ul>\n<h2>\u5efa\u7b51\u5de5\u5730\u4e2a\u4eba\u9632\u62a4\u88c5\u5907\u5408\u89c4\u6027\u68c0\u6d4b\u4e0e\u7f3a\u5931\u8bc6\u522b\u7814\u7a76\u7cfb\u7edf\u4ecb\u7ecd<\/h2>\n<p>\u672c\u7cfb\u7edf\u540d\u4e3a\u300a\u57fa\u4e8e\u6df1\u5ea6\u5b66\u4e60\u7684\u5efa\u7b51\u5de5\u5730\u4e2a\u4eba\u9632\u62a4\u88c5\u5907\u5408\u89c4\u6027\u68c0\u6d4b\u4e0e\u7f3a\u5931\u8bc6\u522b\u7814\u7a76\u300b&#xff0c;\u4e3b\u8981\u9762\u5411\u5efa\u7b51\u5de5\u5730\u91cc\u5b89\u5168\u5e3d\u3001\u53cd\u5149\u8863\u7b49\u4e2a\u4eba\u9632\u62a4\u88c5\u5907\u7684\u5408\u89c4\u68c0\u67e5\u548c\u7f3a\u5931\u8bc6\u522b&#xff0c;\u5f00\u53d1\u8bed\u8a00\u7528Python&#xff0c;\u6df1\u5ea6\u5b66\u4e60\u90e8\u5206\u7528PyTorch\u548cUltralytics YOLO&#xff0c;\u68c0\u6d4b\u6a21\u578b\u8d70YOLOv8s\u3001YOLO26m\u8fd9\u7c7bYOLO\u7cfb\u5217&#xff0c;\u5206\u7c7b\u90e8\u5206\u7528ConvNeXt-Tiny\u3001ResNet\u7b49\u9aa8\u5e72\u7f51\u7edc\u505a\u6d77\u9009&#xff0c;\u8bad\u7ec3\u65f6\u6309\u77ed\u8bad\u6d77\u9009\u3001LR Finder\u3001seed\/warmup\/cosine\/EMA\/AMP\u3001EarlyStopping\u8fd9\u5957\u914d\u65b9\u5f97\u5230best.pt&#xff0c;\u518d\u901a\u8fc7export_run.py\u5bfc\u51faONNX&#xff08;opset 17\u3001simplify\u3001NMS end2end&#xff09;&#xff0c;\u540e\u7aefDjango\u542f\u52a8\u65f6\u52a0\u8f7dbest.onnx\u5b8c\u6210\u63a8\u7406\u3002\u7cfb\u7edf\u91cc\u6709\u56fe\u7247\u8bc6\u522b\u3001\u89c6\u9891\u8bc6\u522b\u3001\u6444\u50cf\u5934\u8bc6\u522b\u4e09\u79cd\u5165\u53e3&#xff0c;\u8bc6\u522b\u7ed3\u679c\u4f1a\u843d\u5230MySQL\u91cc\u5f62\u6210\u8bc6\u522b\u8bb0\u5f55\u548c\u5386\u53f2\u6570\u636e&#xff0c;\u524d\u7aef\u7528Vue\u3001ElementUI\u3001ECharts\u4ee5\u53caHTML\u3001CSS\u3001JavaScript\u3001jQuery\u505a\u4ea4\u4e92&#xff0c;ECharts\u6570\u636e\u5927\u5c4f\u7528dark\u4e3b\u9898\u5c55\u793aclassBar\u7b49\u516d\u7c7b\u56fe\u8868\u3002\u7cfb\u7edf\u8fd8\u5e26\u7528\u6237\u7ba1\u7406\u3001\u4e2a\u4eba\u4fe1\u606f\u3001\u4fee\u6539\u5bc6\u7801\u8fd9\u4e9b\u8d26\u53f7\u7ef4\u62a4\u529f\u80fd&#xff0c;\u6574\u4f53\u60f3\u628a\u6570\u636e\u6807\u7b7e\u3001\u6a21\u578b\u8bad\u7ec3\u3001ONNX\u5bfc\u51fa\u3001Django\u540e\u7aef\u52a0\u8f7d\u548cVue\u9875\u9762\u5c55\u793a\u4e32\u6210\u4e00\u4e2a\u80fd\u6f14\u793a\u3001\u80fd\u67e5\u8bb0\u5f55\u3001\u80fd\u770b\u7edf\u8ba1\u7684\u6bd5\u8bbe\u7cfb\u7edf\u3002<\/p>\n<h2>\u5efa\u7b51\u5de5\u5730\u4e2a\u4eba\u9632\u62a4\u88c5\u5907\u5408\u89c4\u6027\u68c0\u6d4b\u4e0e\u7f3a\u5931\u8bc6\u522b\u7814\u7a76\u7cfb\u7edf\u6f14\u793a\u89c6\u9891<\/h2>\n<p>\u70b9\u51fb\u94fe\u63a5\u89c2\u770b\u9879\u76ee\u6f14\u793a\u89c6\u9891<\/p>\n<h2>\u5efa\u7b51\u5de5\u5730\u4e2a\u4eba\u9632\u62a4\u88c5\u5907\u5408\u89c4\u6027\u68c0\u6d4b\u4e0e\u7f3a\u5931\u8bc6\u522b\u7814\u7a76\u7cfb\u7edf\u6f14\u793a\u56fe\u7247<\/h2>\n<p><img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/10\/20261026181658-6adf991ab6860.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/> <img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/10\/20261026181700-6adf991c7c510.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/> <img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/10\/20261026181701-6adf991de10ea.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/> <img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/10\/20261026181703-6adf991fe74a0.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/> <img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/10\/20261026181705-6adf9921a8364.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/> <img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/10\/20261026181707-6adf99235c2a5.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/> <img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/10\/20261026181708-6adf9924ab935.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/> <img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/10\/20261026181710-6adf992693d7a.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<h2>\u5efa\u7b51\u5de5\u5730\u4e2a\u4eba\u9632\u62a4\u88c5\u5907\u5408\u89c4\u6027\u68c0\u6d4b\u4e0e\u7f3a\u5931\u8bc6\u522b\u7814\u7a76\u7cfb\u7edf\u4ee3\u7801\u5c55\u793a<\/h2>\n<p><span class=\"token keyword\">from<\/span> pyspark<span class=\"token punctuation\">.<\/span>sql <span class=\"token keyword\">import<\/span> SparkSession<span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">import<\/span> os<span class=\"token punctuation\">,<\/span>time<span class=\"token punctuation\">,<\/span>json<span class=\"token punctuation\">,<\/span>cv2<span class=\"token punctuation\">,<\/span>onnxruntime <span class=\"token keyword\">as<\/span> ort<br \/>\nspark <span class=\"token operator\">&#061;<\/span> SparkSession<span class=\"token punctuation\">.<\/span>builder<span class=\"token punctuation\">.<\/span>appName<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;ppe_compliance_history&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>master<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;local[*]&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>config<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;spark.sql.shuffle.partitions&#034;<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;2&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>getOrCreate<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">recognize_ppe_image<\/span><span class=\"token punctuation\">(<\/span>request<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    image_file <span class=\"token operator\">&#061;<\/span> request<span class=\"token punctuation\">.<\/span>FILES<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;image&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token keyword\">not<\/span> image_file<span class=\"token punctuation\">:<\/span> <span class=\"token keyword\">return<\/span> JsonResponse<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;code&#034;<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">400<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;msg&#034;<\/span><span class=\"token punctuation\">:<\/span><span class=\"token string\">&#034;\u8bf7\u4e0a\u4f20\u56fe\u7247&#034;<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span>status<span class=\"token operator\">&#061;<\/span><span class=\"token number\">400<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    ext <span class=\"token operator\">&#061;<\/span> os<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">.<\/span>splitext<span class=\"token punctuation\">(<\/span>image_file<span class=\"token punctuation\">.<\/span>name<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>lower<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> ext <span class=\"token keyword\">not<\/span> <span class=\"token keyword\">in<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;.jpg&#034;<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;.jpeg&#034;<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;.png&#034;<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;.bmp&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token keyword\">return<\/span> JsonResponse<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;code&#034;<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">400<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;msg&#034;<\/span><span class=\"token punctuation\">:<\/span><span class=\"token string\">&#034;\u56fe\u7247\u683c\u5f0f\u4e0d\u652f\u6301&#034;<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span>status<span class=\"token operator\">&#061;<\/span><span class=\"token number\">400<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    save_dir <span class=\"token operator\">&#061;<\/span> os<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">.<\/span>join<span class=\"token punctuation\">(<\/span>settings<span class=\"token punctuation\">.<\/span>MEDIA_ROOT<span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;ppe_images&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    os<span class=\"token punctuation\">.<\/span>makedirs<span class=\"token punctuation\">(<\/span>save_dir<span class=\"token punctuation\">,<\/span>exist_ok<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    save_name <span class=\"token operator\">&#061;<\/span> <span class=\"token string-interpolation\"><span class=\"token string\">f&#034;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>request<span class=\"token punctuation\">.<\/span>user<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">id<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">_<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token builtin\">int<\/span><span class=\"token punctuation\">(<\/span>time<span class=\"token punctuation\">.<\/span>time<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>ext<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><br \/>\n    save_path <span class=\"token operator\">&#061;<\/span> os<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">.<\/span>join<span class=\"token punctuation\">(<\/span>save_dir<span class=\"token punctuation\">,<\/span>save_name<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">with<\/span> <span class=\"token builtin\">open<\/span><span class=\"token punctuation\">(<\/span>save_path<span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;wb&#043;&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">as<\/span> f<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> chunk <span class=\"token keyword\">in<\/span> image_file<span class=\"token punctuation\">.<\/span>chunks<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span> f<span class=\"token punctuation\">.<\/span>write<span class=\"token punctuation\">(<\/span>chunk<span class=\"token punctuation\">)<\/span><br \/>\n    session <span class=\"token operator\">&#061;<\/span> ort<span class=\"token punctuation\">.<\/span>InferenceSession<span class=\"token punctuation\">(<\/span>os<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">.<\/span>join<span class=\"token punctuation\">(<\/span>settings<span class=\"token punctuation\">.<\/span>BASE_DIR<span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;weights&#034;<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;best.onnx&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>providers<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;CPUExecutionProvider&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    img <span class=\"token operator\">&#061;<\/span> cv2<span class=\"token punctuation\">.<\/span>imread<span class=\"token punctuation\">(<\/span>save_path<span class=\"token punctuation\">)<\/span><br \/>\n    blob <span class=\"token operator\">&#061;<\/span> cv2<span class=\"token punctuation\">.<\/span>dnn<span class=\"token punctuation\">.<\/span>blobFromImage<span class=\"token punctuation\">(<\/span>img<span class=\"token punctuation\">,<\/span><span class=\"token number\">1<\/span><span class=\"token operator\">\/<\/span><span class=\"token number\">255.0<\/span><span class=\"token punctuation\">,<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">640<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">640<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>swapRB<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span>crop<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    input_name <span class=\"token operator\">&#061;<\/span> session<span class=\"token punctuation\">.<\/span>get_inputs<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>name<br \/>\n    outputs <span class=\"token operator\">&#061;<\/span> session<span class=\"token punctuation\">.<\/span>run<span class=\"token punctuation\">(<\/span><span class=\"token boolean\">None<\/span><span class=\"token punctuation\">,<\/span><span class=\"token punctuation\">{<\/span>input_name<span class=\"token punctuation\">:<\/span>blob<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    detections <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n    <span class=\"token keyword\">for<\/span> out <span class=\"token keyword\">in<\/span> outputs<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> row <span class=\"token keyword\">in<\/span> out<span class=\"token punctuation\">.<\/span>reshape<span class=\"token punctuation\">(<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span>out<span class=\"token punctuation\">.<\/span>shape<span class=\"token punctuation\">[<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            conf <span class=\"token operator\">&#061;<\/span> <span class=\"token builtin\">float<\/span><span class=\"token punctuation\">(<\/span>row<span class=\"token punctuation\">[<\/span><span class=\"token number\">4<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> conf <span class=\"token operator\">&lt;<\/span> <span class=\"token number\">0.35<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token keyword\">continue<\/span><br \/>\n            cls_id <span class=\"token operator\">&#061;<\/span> <span class=\"token builtin\">int<\/span><span class=\"token punctuation\">(<\/span>row<span class=\"token punctuation\">[<\/span><span class=\"token number\">5<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">if<\/span> <span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>row<span class=\"token punctuation\">)<\/span><span class=\"token operator\">&gt;<\/span><span class=\"token number\">5<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token number\">0<\/span><br \/>\n            x1<span class=\"token punctuation\">,<\/span>y1<span class=\"token punctuation\">,<\/span>x2<span class=\"token punctuation\">,<\/span>y2 <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token builtin\">int<\/span><span class=\"token punctuation\">(<\/span>v<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">for<\/span> v <span class=\"token keyword\">in<\/span> row<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">4<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">]<\/span><br \/>\n            detections<span class=\"token punctuation\">.<\/span>append<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;label&#034;<\/span><span class=\"token punctuation\">:<\/span>PPE_CLASS_NAMES<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span>cls_id<span class=\"token punctuation\">,<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>cls_id<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;conf&#034;<\/span><span class=\"token punctuation\">:<\/span><span class=\"token builtin\">round<\/span><span class=\"token punctuation\">(<\/span>conf<span class=\"token punctuation\">,<\/span><span class=\"token number\">4<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;box&#034;<\/span><span class=\"token punctuation\">:<\/span><span class=\"token punctuation\">[<\/span>x1<span class=\"token punctuation\">,<\/span>y1<span class=\"token punctuation\">,<\/span>x2<span class=\"token punctuation\">,<\/span>y2<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    labels <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span>d<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;label&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token keyword\">for<\/span> d <span class=\"token keyword\">in<\/span> detections<span class=\"token punctuation\">]<\/span><br \/>\n    missing <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span>x <span class=\"token keyword\">for<\/span> x <span class=\"token keyword\">in<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;helmet&#034;<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;vest&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token keyword\">if<\/span> x <span class=\"token keyword\">not<\/span> <span class=\"token keyword\">in<\/span> labels<span class=\"token punctuation\">]<\/span><br \/>\n    record <span class=\"token operator\">&#061;<\/span> PpeRecord<span class=\"token punctuation\">.<\/span>objects<span class=\"token punctuation\">.<\/span>create<span class=\"token punctuation\">(<\/span>user<span class=\"token operator\">&#061;<\/span>request<span class=\"token punctuation\">.<\/span>user<span class=\"token punctuation\">,<\/span>source_type<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;image&#034;<\/span><span class=\"token punctuation\">,<\/span>file_path<span class=\"token operator\">&#061;<\/span>save_name<span class=\"token punctuation\">,<\/span>result_json<span class=\"token operator\">&#061;<\/span>json<span class=\"token punctuation\">.<\/span>dumps<span class=\"token punctuation\">(<\/span>detections<span class=\"token punctuation\">,<\/span>ensure_ascii<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>missing_json<span class=\"token operator\">&#061;<\/span>json<span class=\"token punctuation\">.<\/span>dumps<span class=\"token punctuation\">(<\/span>missing<span class=\"token punctuation\">,<\/span>ensure_ascii<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>is_compliant<span class=\"token operator\">&#061;<\/span><span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>missing<span class=\"token punctuation\">)<\/span><span class=\"token operator\">&#061;&#061;<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> JsonResponse<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;code&#034;<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">200<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;record_id&#034;<\/span><span class=\"token punctuation\">:<\/span>record<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">id<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;detections&#034;<\/span><span class=\"token punctuation\">:<\/span>detections<span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;missing&#034;<\/span><span class=\"token punctuation\">:<\/span>missing<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">recognize_ppe_video<\/span><span class=\"token punctuation\">(<\/span>request<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    video_file <span class=\"token operator\">&#061;<\/span> request<span class=\"token punctuation\">.<\/span>FILES<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;video&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token keyword\">not<\/span> video_file<span class=\"token punctuation\">:<\/span> <span class=\"token keyword\">return<\/span> JsonResponse<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;code&#034;<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">400<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;msg&#034;<\/span><span class=\"token punctuation\">:<\/span><span class=\"token string\">&#034;\u8bf7\u4e0a\u4f20\u89c6\u9891&#034;<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span>status<span class=\"token operator\">&#061;<\/span><span class=\"token number\">400<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    ext <span class=\"token operator\">&#061;<\/span> os<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">.<\/span>splitext<span class=\"token punctuation\">(<\/span>video_file<span class=\"token punctuation\">.<\/span>name<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>lower<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> ext <span class=\"token keyword\">not<\/span> <span class=\"token keyword\">in<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;.mp4&#034;<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;.avi&#034;<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;.mov&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token keyword\">return<\/span> JsonResponse<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;code&#034;<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">400<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;msg&#034;<\/span><span class=\"token punctuation\">:<\/span><span class=\"token string\">&#034;\u89c6\u9891\u683c\u5f0f\u4e0d\u652f\u6301&#034;<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span>status<span class=\"token operator\">&#061;<\/span><span class=\"token number\">400<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    save_dir <span class=\"token operator\">&#061;<\/span> os<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">.<\/span>join<span class=\"token punctuation\">(<\/span>settings<span class=\"token punctuation\">.<\/span>MEDIA_ROOT<span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;ppe_videos&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    os<span class=\"token punctuation\">.<\/span>makedirs<span class=\"token punctuation\">(<\/span>save_dir<span class=\"token punctuation\">,<\/span>exist_ok<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    save_name <span class=\"token operator\">&#061;<\/span> <span class=\"token string-interpolation\"><span class=\"token string\">f&#034;<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>request<span class=\"token punctuation\">.<\/span>user<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">id<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">_<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token builtin\">int<\/span><span class=\"token punctuation\">(<\/span>time<span class=\"token punctuation\">.<\/span>time<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>ext<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">&#034;<\/span><\/span><br \/>\n    save_path <span class=\"token operator\">&#061;<\/span> os<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">.<\/span>join<span class=\"token punctuation\">(<\/span>save_dir<span class=\"token punctuation\">,<\/span>save_name<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">with<\/span> <span class=\"token builtin\">open<\/span><span class=\"token punctuation\">(<\/span>save_path<span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;wb&#043;&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">as<\/span> f<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> chunk <span class=\"token keyword\">in<\/span> video_file<span class=\"token punctuation\">.<\/span>chunks<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span> f<span class=\"token punctuation\">.<\/span>write<span class=\"token punctuation\">(<\/span>chunk<span class=\"token punctuation\">)<\/span><br \/>\n    session <span class=\"token operator\">&#061;<\/span> ort<span class=\"token punctuation\">.<\/span>InferenceSession<span class=\"token punctuation\">(<\/span>os<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">.<\/span>join<span class=\"token punctuation\">(<\/span>settings<span class=\"token punctuation\">.<\/span>BASE_DIR<span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;weights&#034;<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;best.onnx&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>providers<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;CPUExecutionProvider&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    cap <span class=\"token operator\">&#061;<\/span> cv2<span class=\"token punctuation\">.<\/span>VideoCapture<span class=\"token punctuation\">(<\/span>save_path<span class=\"token punctuation\">)<\/span><br \/>\n    frame_index <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><br \/>\n    bad_frames <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n    all_labels <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n    <span class=\"token keyword\">while<\/span> cap<span class=\"token punctuation\">.<\/span>isOpened<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        ok<span class=\"token punctuation\">,<\/span>frame <span class=\"token operator\">&#061;<\/span> cap<span class=\"token punctuation\">.<\/span>read<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token keyword\">not<\/span> ok<span class=\"token punctuation\">:<\/span> <span class=\"token keyword\">break<\/span><br \/>\n        frame_index <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token number\">1<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> frame_index <span class=\"token operator\">%<\/span> <span class=\"token number\">5<\/span> <span class=\"token operator\">!&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token keyword\">continue<\/span><br \/>\n        blob <span class=\"token operator\">&#061;<\/span> cv2<span class=\"token punctuation\">.<\/span>dnn<span class=\"token punctuation\">.<\/span>blobFromImage<span class=\"token punctuation\">(<\/span>frame<span class=\"token punctuation\">,<\/span><span class=\"token number\">1<\/span><span class=\"token operator\">\/<\/span><span class=\"token number\">255.0<\/span><span class=\"token punctuation\">,<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">640<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">640<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>swapRB<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span>crop<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        outputs <span class=\"token operator\">&#061;<\/span> session<span class=\"token punctuation\">.<\/span>run<span class=\"token punctuation\">(<\/span><span class=\"token boolean\">None<\/span><span class=\"token punctuation\">,<\/span><span class=\"token punctuation\">{<\/span>session<span class=\"token punctuation\">.<\/span>get_inputs<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>name<span class=\"token punctuation\">:<\/span>blob<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        labels <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> out <span class=\"token keyword\">in<\/span> outputs<span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> row <span class=\"token keyword\">in<\/span> out<span class=\"token punctuation\">.<\/span>reshape<span class=\"token punctuation\">(<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span>out<span class=\"token punctuation\">.<\/span>shape<span class=\"token punctuation\">[<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                <span class=\"token keyword\">if<\/span> <span class=\"token builtin\">float<\/span><span class=\"token punctuation\">(<\/span>row<span class=\"token punctuation\">[<\/span><span class=\"token number\">4<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&lt;<\/span> <span class=\"token number\">0.35<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token keyword\">continue<\/span><br \/>\n                cls_id <span class=\"token operator\">&#061;<\/span> <span class=\"token builtin\">int<\/span><span class=\"token punctuation\">(<\/span>row<span class=\"token punctuation\">[<\/span><span class=\"token number\">5<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">if<\/span> <span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>row<span class=\"token punctuation\">)<\/span><span class=\"token operator\">&gt;<\/span><span class=\"token number\">5<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token number\">0<\/span><br \/>\n                labels<span class=\"token punctuation\">.<\/span>append<span class=\"token punctuation\">(<\/span>PPE_CLASS_NAMES<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span>cls_id<span class=\"token punctuation\">,<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>cls_id<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        all_labels<span class=\"token punctuation\">.<\/span>extend<span class=\"token punctuation\">(<\/span>labels<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token string\">&#034;helmet&#034;<\/span> <span class=\"token keyword\">not<\/span> <span class=\"token keyword\">in<\/span> labels <span class=\"token keyword\">or<\/span> <span class=\"token string\">&#034;vest&#034;<\/span> <span class=\"token keyword\">not<\/span> <span class=\"token keyword\">in<\/span> labels<span class=\"token punctuation\">:<\/span> bad_frames<span class=\"token punctuation\">.<\/span>append<span class=\"token punctuation\">(<\/span>frame_index<span class=\"token punctuation\">)<\/span><br \/>\n    cap<span class=\"token punctuation\">.<\/span>release<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    missing <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span>x <span class=\"token keyword\">for<\/span> x <span class=\"token keyword\">in<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;helmet&#034;<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;vest&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token keyword\">if<\/span> x <span class=\"token keyword\">not<\/span> <span class=\"token keyword\">in<\/span> all_labels<span class=\"token punctuation\">]<\/span><br \/>\n    record <span class=\"token operator\">&#061;<\/span> PpeRecord<span class=\"token punctuation\">.<\/span>objects<span class=\"token punctuation\">.<\/span>create<span class=\"token punctuation\">(<\/span>user<span class=\"token operator\">&#061;<\/span>request<span class=\"token punctuation\">.<\/span>user<span class=\"token punctuation\">,<\/span>source_type<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;video&#034;<\/span><span class=\"token punctuation\">,<\/span>file_path<span class=\"token operator\">&#061;<\/span>save_name<span class=\"token punctuation\">,<\/span>result_json<span class=\"token operator\">&#061;<\/span>json<span class=\"token punctuation\">.<\/span>dumps<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;bad_frames&#034;<\/span><span class=\"token punctuation\">:<\/span>bad_frames<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">200<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;labels&#034;<\/span><span class=\"token punctuation\">:<\/span><span class=\"token builtin\">list<\/span><span class=\"token punctuation\">(<\/span><span class=\"token builtin\">set<\/span><span class=\"token punctuation\">(<\/span>all_labels<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span>ensure_ascii<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>missing_json<span class=\"token operator\">&#061;<\/span>json<span class=\"token punctuation\">.<\/span>dumps<span class=\"token punctuation\">(<\/span>missing<span class=\"token punctuation\">,<\/span>ensure_ascii<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>is_compliant<span class=\"token operator\">&#061;<\/span><span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>bad_frames<span class=\"token punctuation\">)<\/span><span class=\"token operator\">&#061;&#061;<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> JsonResponse<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;code&#034;<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">200<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;record_id&#034;<\/span><span class=\"token punctuation\">:<\/span>record<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">id<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;bad_frames&#034;<\/span><span class=\"token punctuation\">:<\/span>bad_frames<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">50<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;missing&#034;<\/span><span class=\"token punctuation\">:<\/span>missing<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">ppe_history_statistics<\/span><span class=\"token punctuation\">(<\/span>request<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    jdbc_url <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;jdbc:mysql:\/\/127.0.0.1:3306\/ppe_db?useSSL&#061;false&amp;serverTimezone&#061;Asia\/Shanghai&#034;<\/span><br \/>\n    df <span class=\"token operator\">&#061;<\/span> spark<span class=\"token punctuation\">.<\/span>read<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">format<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;jdbc&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>option<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;url&#034;<\/span><span class=\"token punctuation\">,<\/span>jdbc_url<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>option<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;dbtable&#034;<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;ppe_record&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>option<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;user&#034;<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;root&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>option<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;password&#034;<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;123456&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>option<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;driver&#034;<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;com.mysql.cj.jdbc.Driver&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>load<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    df<span class=\"token punctuation\">.<\/span>createOrReplaceTempView<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;ppe_record&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    class_rows <span class=\"token operator\">&#061;<\/span> spark<span class=\"token punctuation\">.<\/span>sql<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;select source_type, count(1) as total, sum(case when is_compliant&#061;1 then 1 else 0 end) as ok_count from ppe_record group by source_type&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>collect<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    missing_rows <span class=\"token operator\">&#061;<\/span> spark<span class=\"token punctuation\">.<\/span>sql<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;select missing_json, count(1) as cnt from ppe_record group by missing_json order by cnt desc limit 6&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>collect<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    trend_rows <span class=\"token operator\">&#061;<\/span> spark<span class=\"token punctuation\">.<\/span>sql<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;select date(create_time) as day, count(1) as total from ppe_record group by date(create_time) order by day&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>collect<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    class_bar <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;name&#034;<\/span><span class=\"token punctuation\">:<\/span>r<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;source_type&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;total&#034;<\/span><span class=\"token punctuation\">:<\/span>r<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;total&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;ok&#034;<\/span><span class=\"token punctuation\">:<\/span>r<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;ok_count&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">for<\/span> r <span class=\"token keyword\">in<\/span> class_rows<span class=\"token punctuation\">]<\/span><br \/>\n    missing_pie <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;name&#034;<\/span><span class=\"token punctuation\">:<\/span>r<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;missing_json&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;value&#034;<\/span><span class=\"token punctuation\">:<\/span>r<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;cnt&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">for<\/span> r <span class=\"token keyword\">in<\/span> missing_rows<span class=\"token punctuation\">]<\/span><br \/>\n    trend_line <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;day&#034;<\/span><span class=\"token punctuation\">:<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>r<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;day&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;total&#034;<\/span><span class=\"token punctuation\">:<\/span>r<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;total&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">for<\/span> r <span class=\"token keyword\">in<\/span> trend_rows<span class=\"token punctuation\">]<\/span><br \/>\n    recent_records <span class=\"token operator\">&#061;<\/span> <span class=\"token builtin\">list<\/span><span class=\"token punctuation\">(<\/span>PpeRecord<span class=\"token punctuation\">.<\/span>objects<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">filter<\/span><span class=\"token punctuation\">(<\/span>user<span class=\"token operator\">&#061;<\/span>request<span class=\"token punctuation\">.<\/span>user<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>order_by<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;-create_time&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>values<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;id&#034;<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;source_type&#034;<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;is_compliant&#034;<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;create_time&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">20<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> JsonResponse<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;code&#034;<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">200<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;classBar&#034;<\/span><span class=\"token punctuation\">:<\/span>class_bar<span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;missingPie&#034;<\/span><span class=\"token punctuation\">:<\/span>missing_pie<span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;trendLine&#034;<\/span><span class=\"token punctuation\">:<\/span>trend_line<span class=\"token punctuation\">,<\/span><span class=\"token string\">&#034;recentRecords&#034;<\/span><span class=\"token punctuation\">:<\/span>recent_records<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<h2>\u5efa\u7b51\u5de5\u5730\u4e2a\u4eba\u9632\u62a4\u88c5\u5907\u5408\u89c4\u6027\u68c0\u6d4b\u4e0e\u7f3a\u5931\u8bc6\u522b\u7814\u7a76\u7cfb\u7edf\u6587\u6863\u5c55\u793a<\/h2>\n<p><img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/10\/20261026181712-6adf99280207a.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<p>&#x1f496;&#x1f496;\u4f5c\u8005&#xff1a;\u8ba1\u7b97\u673a\u7f16\u7a0b\u5c0f\u5496 &#x1f499;&#x1f499;\u4e2a\u4eba\u7b80\u4ecb&#xff1a;\u66fe\u957f\u671f\u4ece\u4e8b\u8ba1\u7b97\u673a\u4e13\u4e1a\u57f9\u8bad\u6559\u5b66&#xff0c;\u672c\u4eba\u4e5f\u70ed\u7231\u4e0a\u8bfe\u6559\u5b66&#xff0c;\u8bed\u8a00\u64c5\u957fJava\u3001\u5fae\u4fe1\u5c0f\u7a0b\u5e8f\u3001Python\u3001Golang\u3001\u5b89\u5353Android\u7b49&#xff0c;\u5f00\u53d1\u9879\u76ee\u5305\u62ec\u5927\u6570\u636e\u3001\u6df1\u5ea6\u5b66\u4e60\u3001\u7f51\u7ad9\u3001\u5c0f\u7a0b\u5e8f\u3001\u5b89\u5353\u3001\u7b97\u6cd5\u3002\u5e73\u5e38\u4f1a\u505a\u4e00\u4e9b\u9879\u76ee\u5b9a\u5236\u5316\u5f00\u53d1\u3001\u4ee3\u7801\u8bb2\u89e3\u3001\u7b54\u8fa9\u6559\u5b66\u3001\u6587\u6863\u7f16\u5199\u3001\u4e5f\u61c2\u4e00\u4e9b\u964d\u91cd\u65b9\u9762\u7684\u6280\u5de7\u3002\u5e73\u5e38\u559c\u6b22\u5206\u4eab\u4e00\u4e9b\u81ea\u5df1\u5f00\u53d1\u4e2d\u9047\u5230\u7684\u95ee\u9898\u7684\u89e3\u51b3\u529e\u6cd5&#xff0c;\u4e5f\u559c\u6b22\u4ea4\u6d41\u6280\u672f&#xff0c;\u5927\u5bb6\u6709\u6280\u672f\u4ee3\u7801\u8fd9\u4e00\u5757\u7684\u95ee\u9898\u53ef\u4ee5\u95ee\u6211&#xff01; &#x1f49b;&#x1f49b;\u60f3\u8bf4\u7684\u8bdd&#xff1a;\u611f\u8c22\u5927\u5bb6\u7684\u5173\u6ce8\u4e0e\u652f\u6301&#xff01; &#x1f49c;&#x1f49c; \u7f51\u7ad9\u5b9e\u6218\u9879\u76ee \u5b89\u5353\/\u5c0f\u7a0b\u5e8f\u5b9e\u6218\u9879\u76ee \u5927\u6570\u636e\u5b9e\u6218\u9879\u76ee \u6df1\u5ea6\u5b66\u4e60\u5b9e\u6218\u9879\u76ee<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#x1f496;&#x1f496;\u4f5c\u8005&#xff1a;\u8ba1\u7b97\u673a\u7f16\u7a0b\u5c0f\u5496 &#x1f499;&#x1f499;\u4e2a\u4eba\u7b80\u4ecb&#xff1a;\u66fe\u957f\u671f\u4ece\u4e8b\u8ba1\u7b97\u673a\u4e13\u4e1a\u57f9\u8bad\u6559\u5b66&#xff0c;\u672c\u4eba\u4e5f\u70ed\u7231\u4e0a\u8bfe\u6559\u5b66&#xff0c;\u8bed\u8a00\u64c5\u957fJava\u3001\u5fae\u4fe1\u5c0f\u7a0b\u5e8f\u3001Python\u3001Golang\u3001\u5b89\u5353Android\u7b49&#xff0c;\u5f00\u53d1\u9879\u76ee\u5305\u62ec\u5927\u6570\u636e\u3001\u6df1\u5ea6\u5b66\u4e60\u3001\u7f51\u7ad9\u3001\u5c0f\u7a0b\u5e8f\u3001\u5b89\u5353\u3001\u7b97\u6cd5\u3002\u5e73\u5e38\u4f1a\u505a\u4e00\u4e9b\u9879\u76ee\u5b9a\u5236\u5316\u5f00\u53d1\u3001\u4ee3\u7801\u8bb2\u89e3\u3001\u7b54\u8fa9\u6559\u5b66\u3001\u6587\u6863\u7f16\u5199\u3001\u4e5f\u61c2\u4e00\u4e9b\u964d\u91cd\u65b9\u9762\u7684\u6280\u5de7\u3002\u5e73\u5e38\u559c\u6b22\u5206\u4eab\u4e00\u4e9b\u81ea\u5df1\u5f00\u53d1\u4e2d\u9047\u5230\u7684\u95ee\u9898\u7684<\/p>\n","protected":false},"author":2,"featured_media":118371,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[9098,13082,50,86,2937,938],"topic":[],"class_list":["post-118380","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-server","tag-it","tag-13082","tag-50","tag-86","tag-2937","tag-938"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u8ba1\u7b97\u673a\u6bd5\u4e1a\u8bbe\u8ba1\u9009\u9898\u63a8\u8350:\u57fa\u4e8e\u6df1\u5ea6\u5b66\u4e60\u7684\u5efa\u7b51\u5de5\u5730\u4e2a\u4eba\u9632\u62a4\u88c5\u5907\u5408\u89c4\u6027\u68c0\u6d4b\u4e0e\u7f3a\u5931\u8bc6\u522b\u7814\u7a76\u3001\u6bd5\u4e1a\u8bbe\u8ba1\u9009\u9898\u3001\u9009\u9898\u63a8\u8350\u3001\u6df1\u5ea6\u5b66\u4e60\u9879\u76ee\u3001\u9ad8\u8d28\u91cf\u9879\u76ee\u3001\u6bd5\u8bbe\u6307\u5bfc\u3001\u9879\u76ee\u5b9a\u5236\u3001\u5168\u5957\u6e90\u7801\u3001\u8bb2\u89e3\u6587\u6863 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.wsisp.com\/helps\/118380.html\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u8ba1\u7b97\u673a\u6bd5\u4e1a\u8bbe\u8ba1\u9009\u9898\u63a8\u8350:\u57fa\u4e8e\u6df1\u5ea6\u5b66\u4e60\u7684\u5efa\u7b51\u5de5\u5730\u4e2a\u4eba\u9632\u62a4\u88c5\u5907\u5408\u89c4\u6027\u68c0\u6d4b\u4e0e\u7f3a\u5931\u8bc6\u522b\u7814\u7a76\u3001\u6bd5\u4e1a\u8bbe\u8ba1\u9009\u9898\u3001\u9009\u9898\u63a8\u8350\u3001\u6df1\u5ea6\u5b66\u4e60\u9879\u76ee\u3001\u9ad8\u8d28\u91cf\u9879\u76ee\u3001\u6bd5\u8bbe\u6307\u5bfc\u3001\u9879\u76ee\u5b9a\u5236\u3001\u5168\u5957\u6e90\u7801\u3001\u8bb2\u89e3\u6587\u6863 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"og:description\" content=\"&#x1f496;&#x1f496;\u4f5c\u8005&#xff1a;\u8ba1\u7b97\u673a\u7f16\u7a0b\u5c0f\u5496 &#x1f499;&#x1f499;\u4e2a\u4eba\u7b80\u4ecb&#xff1a;\u66fe\u957f\u671f\u4ece\u4e8b\u8ba1\u7b97\u673a\u4e13\u4e1a\u57f9\u8bad\u6559\u5b66&#xff0c;\u672c\u4eba\u4e5f\u70ed\u7231\u4e0a\u8bfe\u6559\u5b66&#xff0c;\u8bed\u8a00\u64c5\u957fJava\u3001\u5fae\u4fe1\u5c0f\u7a0b\u5e8f\u3001Python\u3001Golang\u3001\u5b89\u5353Android\u7b49&#xff0c;\u5f00\u53d1\u9879\u76ee\u5305\u62ec\u5927\u6570\u636e\u3001\u6df1\u5ea6\u5b66\u4e60\u3001\u7f51\u7ad9\u3001\u5c0f\u7a0b\u5e8f\u3001\u5b89\u5353\u3001\u7b97\u6cd5\u3002\u5e73\u5e38\u4f1a\u505a\u4e00\u4e9b\u9879\u76ee\u5b9a\u5236\u5316\u5f00\u53d1\u3001\u4ee3\u7801\u8bb2\u89e3\u3001\u7b54\u8fa9\u6559\u5b66\u3001\u6587\u6863\u7f16\u5199\u3001\u4e5f\u61c2\u4e00\u4e9b\u964d\u91cd\u65b9\u9762\u7684\u6280\u5de7\u3002\u5e73\u5e38\u559c\u6b22\u5206\u4eab\u4e00\u4e9b\u81ea\u5df1\u5f00\u53d1\u4e2d\u9047\u5230\u7684\u95ee\u9898\u7684\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.wsisp.com\/helps\/118380.html\" \/>\n<meta property=\"og:site_name\" content=\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-26T18:17:13+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/10\/20261026181658-6adf991ab6860.png\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/118380.html\",\"url\":\"https:\/\/www.wsisp.com\/helps\/118380.html\",\"name\":\"\u8ba1\u7b97\u673a\u6bd5\u4e1a\u8bbe\u8ba1\u9009\u9898\u63a8\u8350:\u57fa\u4e8e\u6df1\u5ea6\u5b66\u4e60\u7684\u5efa\u7b51\u5de5\u5730\u4e2a\u4eba\u9632\u62a4\u88c5\u5907\u5408\u89c4\u6027\u68c0\u6d4b\u4e0e\u7f3a\u5931\u8bc6\u522b\u7814\u7a76\u3001\u6bd5\u4e1a\u8bbe\u8ba1\u9009\u9898\u3001\u9009\u9898\u63a8\u8350\u3001\u6df1\u5ea6\u5b66\u4e60\u9879\u76ee\u3001\u9ad8\u8d28\u91cf\u9879\u76ee\u3001\u6bd5\u8bbe\u6307\u5bfc\u3001\u9879\u76ee\u5b9a\u5236\u3001\u5168\u5957\u6e90\u7801\u3001\u8bb2\u89e3\u6587\u6863 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"isPartOf\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\"},\"datePublished\":\"2026-10-26T18:17:13+00:00\",\"dateModified\":\"2026-10-26T18:17:13+00:00\",\"author\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/118380.html#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.wsisp.com\/helps\/118380.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/118380.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.wsisp.com\/helps\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u8ba1\u7b97\u673a\u6bd5\u4e1a\u8bbe\u8ba1\u9009\u9898\u63a8\u8350:\u57fa\u4e8e\u6df1\u5ea6\u5b66\u4e60\u7684\u5efa\u7b51\u5de5\u5730\u4e2a\u4eba\u9632\u62a4\u88c5\u5907\u5408\u89c4\u6027\u68c0\u6d4b\u4e0e\u7f3a\u5931\u8bc6\u522b\u7814\u7a76\u3001\u6bd5\u4e1a\u8bbe\u8ba1\u9009\u9898\u3001\u9009\u9898\u63a8\u8350\u3001\u6df1\u5ea6\u5b66\u4e60\u9879\u76ee\u3001\u9ad8\u8d28\u91cf\u9879\u76ee\u3001\u6bd5\u8bbe\u6307\u5bfc\u3001\u9879\u76ee\u5b9a\u5236\u3001\u5168\u5957\u6e90\u7801\u3001\u8bb2\u89e3\u6587\u6863\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\",\"url\":\"https:\/\/www.wsisp.com\/helps\/\",\"name\":\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"description\":\"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"contentUrl\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"caption\":\"admin\"},\"sameAs\":[\"http:\/\/wp.wsisp.com\"],\"url\":\"https:\/\/www.wsisp.com\/helps\/author\/admin\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u8ba1\u7b97\u673a\u6bd5\u4e1a\u8bbe\u8ba1\u9009\u9898\u63a8\u8350:\u57fa\u4e8e\u6df1\u5ea6\u5b66\u4e60\u7684\u5efa\u7b51\u5de5\u5730\u4e2a\u4eba\u9632\u62a4\u88c5\u5907\u5408\u89c4\u6027\u68c0\u6d4b\u4e0e\u7f3a\u5931\u8bc6\u522b\u7814\u7a76\u3001\u6bd5\u4e1a\u8bbe\u8ba1\u9009\u9898\u3001\u9009\u9898\u63a8\u8350\u3001\u6df1\u5ea6\u5b66\u4e60\u9879\u76ee\u3001\u9ad8\u8d28\u91cf\u9879\u76ee\u3001\u6bd5\u8bbe\u6307\u5bfc\u3001\u9879\u76ee\u5b9a\u5236\u3001\u5168\u5957\u6e90\u7801\u3001\u8bb2\u89e3\u6587\u6863 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.wsisp.com\/helps\/118380.html","og_locale":"zh_CN","og_type":"article","og_title":"\u8ba1\u7b97\u673a\u6bd5\u4e1a\u8bbe\u8ba1\u9009\u9898\u63a8\u8350:\u57fa\u4e8e\u6df1\u5ea6\u5b66\u4e60\u7684\u5efa\u7b51\u5de5\u5730\u4e2a\u4eba\u9632\u62a4\u88c5\u5907\u5408\u89c4\u6027\u68c0\u6d4b\u4e0e\u7f3a\u5931\u8bc6\u522b\u7814\u7a76\u3001\u6bd5\u4e1a\u8bbe\u8ba1\u9009\u9898\u3001\u9009\u9898\u63a8\u8350\u3001\u6df1\u5ea6\u5b66\u4e60\u9879\u76ee\u3001\u9ad8\u8d28\u91cf\u9879\u76ee\u3001\u6bd5\u8bbe\u6307\u5bfc\u3001\u9879\u76ee\u5b9a\u5236\u3001\u5168\u5957\u6e90\u7801\u3001\u8bb2\u89e3\u6587\u6863 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","og_description":"&#x1f496;&#x1f496;\u4f5c\u8005&#xff1a;\u8ba1\u7b97\u673a\u7f16\u7a0b\u5c0f\u5496 &#x1f499;&#x1f499;\u4e2a\u4eba\u7b80\u4ecb&#xff1a;\u66fe\u957f\u671f\u4ece\u4e8b\u8ba1\u7b97\u673a\u4e13\u4e1a\u57f9\u8bad\u6559\u5b66&#xff0c;\u672c\u4eba\u4e5f\u70ed\u7231\u4e0a\u8bfe\u6559\u5b66&#xff0c;\u8bed\u8a00\u64c5\u957fJava\u3001\u5fae\u4fe1\u5c0f\u7a0b\u5e8f\u3001Python\u3001Golang\u3001\u5b89\u5353Android\u7b49&#xff0c;\u5f00\u53d1\u9879\u76ee\u5305\u62ec\u5927\u6570\u636e\u3001\u6df1\u5ea6\u5b66\u4e60\u3001\u7f51\u7ad9\u3001\u5c0f\u7a0b\u5e8f\u3001\u5b89\u5353\u3001\u7b97\u6cd5\u3002\u5e73\u5e38\u4f1a\u505a\u4e00\u4e9b\u9879\u76ee\u5b9a\u5236\u5316\u5f00\u53d1\u3001\u4ee3\u7801\u8bb2\u89e3\u3001\u7b54\u8fa9\u6559\u5b66\u3001\u6587\u6863\u7f16\u5199\u3001\u4e5f\u61c2\u4e00\u4e9b\u964d\u91cd\u65b9\u9762\u7684\u6280\u5de7\u3002\u5e73\u5e38\u559c\u6b22\u5206\u4eab\u4e00\u4e9b\u81ea\u5df1\u5f00\u53d1\u4e2d\u9047\u5230\u7684\u95ee\u9898\u7684","og_url":"https:\/\/www.wsisp.com\/helps\/118380.html","og_site_name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","article_published_time":"2026-10-26T18:17:13+00:00","og_image":[{"url":"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/10\/20261026181658-6adf991ab6860.png"}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"admin","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"5 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.wsisp.com\/helps\/118380.html","url":"https:\/\/www.wsisp.com\/helps\/118380.html","name":"\u8ba1\u7b97\u673a\u6bd5\u4e1a\u8bbe\u8ba1\u9009\u9898\u63a8\u8350:\u57fa\u4e8e\u6df1\u5ea6\u5b66\u4e60\u7684\u5efa\u7b51\u5de5\u5730\u4e2a\u4eba\u9632\u62a4\u88c5\u5907\u5408\u89c4\u6027\u68c0\u6d4b\u4e0e\u7f3a\u5931\u8bc6\u522b\u7814\u7a76\u3001\u6bd5\u4e1a\u8bbe\u8ba1\u9009\u9898\u3001\u9009\u9898\u63a8\u8350\u3001\u6df1\u5ea6\u5b66\u4e60\u9879\u76ee\u3001\u9ad8\u8d28\u91cf\u9879\u76ee\u3001\u6bd5\u8bbe\u6307\u5bfc\u3001\u9879\u76ee\u5b9a\u5236\u3001\u5168\u5957\u6e90\u7801\u3001\u8bb2\u89e3\u6587\u6863 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","isPartOf":{"@id":"https:\/\/www.wsisp.com\/helps\/#website"},"datePublished":"2026-10-26T18:17:13+00:00","dateModified":"2026-10-26T18:17:13+00:00","author":{"@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41"},"breadcrumb":{"@id":"https:\/\/www.wsisp.com\/helps\/118380.html#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.wsisp.com\/helps\/118380.html"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.wsisp.com\/helps\/118380.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.wsisp.com\/helps"},{"@type":"ListItem","position":2,"name":"\u8ba1\u7b97\u673a\u6bd5\u4e1a\u8bbe\u8ba1\u9009\u9898\u63a8\u8350:\u57fa\u4e8e\u6df1\u5ea6\u5b66\u4e60\u7684\u5efa\u7b51\u5de5\u5730\u4e2a\u4eba\u9632\u62a4\u88c5\u5907\u5408\u89c4\u6027\u68c0\u6d4b\u4e0e\u7f3a\u5931\u8bc6\u522b\u7814\u7a76\u3001\u6bd5\u4e1a\u8bbe\u8ba1\u9009\u9898\u3001\u9009\u9898\u63a8\u8350\u3001\u6df1\u5ea6\u5b66\u4e60\u9879\u76ee\u3001\u9ad8\u8d28\u91cf\u9879\u76ee\u3001\u6bd5\u8bbe\u6307\u5bfc\u3001\u9879\u76ee\u5b9a\u5236\u3001\u5168\u5957\u6e90\u7801\u3001\u8bb2\u89e3\u6587\u6863"}]},{"@type":"WebSite","@id":"https:\/\/www.wsisp.com\/helps\/#website","url":"https:\/\/www.wsisp.com\/helps\/","name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","description":"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41","name":"admin","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/","url":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","contentUrl":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","caption":"admin"},"sameAs":["http:\/\/wp.wsisp.com"],"url":"https:\/\/www.wsisp.com\/helps\/author\/admin"}]}},"_links":{"self":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/118380","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/comments?post=118380"}],"version-history":[{"count":0,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/118380\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media\/118371"}],"wp:attachment":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media?parent=118380"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/categories?post=118380"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/tags?post=118380"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/topic?post=118380"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}