<!DOCTYPE html>
|
<html class="writer-html5" lang="en" >
|
<head>
|
<meta charset="utf-8" />
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="author" content="岱特智能科技(上海)有限公司" />
|
<link rel="shortcut icon" href="../../../img/favicon.ico" />
|
<title>人脸识别服务安装说明 - DT-HA</title>
|
<link rel="stylesheet" href="../../../css/theme.css" />
|
<link rel="stylesheet" href="../../../css/theme_extra.css" />
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/github.min.css" />
|
|
<script>
|
// Current page data
|
var mkdocs_page_name = "\u4eba\u8138\u8bc6\u522b\u670d\u52a1\u5b89\u88c5\u8bf4\u660e";
|
var mkdocs_page_input_path = "Usages\\QA\\\u4eba\u8138\u8bc6\u522b\u670d\u52a1\u5b89\u88c5\u8bf4\u660e.md";
|
var mkdocs_page_url = null;
|
</script>
|
|
<!--[if lt IE 9]>
|
<script src="../../../js/html5shiv.min.js"></script>
|
<![endif]-->
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js"></script>
|
<script>hljs.highlightAll();</script>
|
</head>
|
|
<body class="wy-body-for-nav" role="document">
|
|
<div class="wy-grid-for-nav">
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side stickynav">
|
<div class="wy-side-scroll">
|
<div class="wy-side-nav-search">
|
<a href="../../.." class="icon icon-home"> DT-HA
|
</a><div role="search">
|
<form id ="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
|
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" title="Type search term here" />
|
</form>
|
</div>
|
</div>
|
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
<ul>
|
<li class="toctree-l1"><a class="reference internal" href="../../..">首页</a>
|
</li>
|
</ul>
|
<ul>
|
<li class="toctree-l1"><a class="reference internal" href="../../../about/">关于</a>
|
</li>
|
</ul>
|
<p class="caption"><span class="caption-text">使用教程</span></p>
|
<ul class="current">
|
<li class="toctree-l1"><a class="reference internal" href="../../../install-guide/installHa/">安装</a>
|
</li>
|
<li class="toctree-l1"><a class="reference internal" >使用</a>
|
<ul>
|
<li class="toctree-l2"><a class="reference internal" href="../../usage/">使用概述</a>
|
</li>
|
<li class="toctree-l2"><a class="reference internal" href="../../netconfig/netconfig/">配置网络</a>
|
</li>
|
<li class="toctree-l2"><a class="reference internal" href="../../initConfig/initConfig/">系统初始化配置</a>
|
</li>
|
</ul>
|
</li>
|
<li class="toctree-l1 current"><a class="reference internal current" >Q/A</a>
|
<ul class="current">
|
<li class="toctree-l2"><a class="reference internal" href="../%E9%80%8F%E6%9E%90%E4%B8%AD%E5%BF%83HA%E7%8E%AF%E5%A2%83%E6%B8%A9%E5%BA%A6%E5%8F%91%E9%80%81%E5%88%B0%E8%83%9C%E9%80%8F%E7%9A%84%E6%93%8D%E4%BD%9C%E6%8C%87%E5%8D%97/">透析中心HA环境温度发送到胜透的操作指南</a>
|
</li>
|
<li class="toctree-l2"><a class="reference internal" href="../errorsQA/">errorsQA</a>
|
</li>
|
<li class="toctree-l2"><a class="reference internal" href="../HA-%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0%E7%8A%B6%E6%80%81%E5%8F%8D%E8%BD%AC/">HA-如何实现状态反转</a>
|
</li>
|
<li class="toctree-l2"><a class="reference internal" href="../TS88%E9%80%8F%E6%9E%90%E6%9C%BA%E8%81%94%E6%9C%BA%E9%80%9A%E4%BF%A1-%E4%B8%AD%E6%96%87%E7%89%88/">TS88透析机联机通信-中文版</a>
|
</li>
|
<li class="toctree-l2"><a class="reference internal" href="../VMware-ESXi%E6%89%A9%E5%B1%95HomeAssistant%E7%A1%AC%E7%9B%98%E6%8C%87%E5%8D%97/">VMware-ESXi扩展HomeAssistant硬盘指南</a>
|
</li>
|
<li class="toctree-l2"><a class="reference internal" href="../%E5%A6%82%E4%BD%95%E9%9B%86%E6%88%90%E5%92%8C%E9%A3%8E%E5%A4%A9%E6%B0%94%E7%BB%84%E4%BB%B6%E5%88%B0HA/">如何集成和风天气组件到HA</a>
|
</li>
|
<li class="toctree-l2"><a class="reference internal" href="../%E5%A6%82%E5%8E%95%E9%A3%8E%E9%99%A9-%E4%BA%BA%E5%AD%98%E5%9C%A8%E4%BC%A0%E6%84%9F%E5%99%A8%E9%85%8D%E7%BD%AE%E6%96%B9%E6%B3%95/">如厕风险-人存在传感器配置方法</a>
|
</li>
|
<li class="toctree-l2"><a class="reference internal" href="../ubunte-desktop%E6%A1%8C%E9%9D%A2%E7%B3%BB%E7%BB%9F%E5%A6%82%E4%BD%95%E9%85%8D%E7%BD%AE%E5%BC%80%E5%90%AF%E8%BF%9C%E7%A8%8B%E5%8D%8F%E5%8A%A9/">Ubuntu-desktop桌面系统如何配置开启远程协助</a>
|
</li>
|
<li class="toctree-l2"><a class="reference internal" href="../%E5%A6%82%E4%BD%95%E7%A6%BB%E7%BA%BF%E5%AE%89%E8%A3%85Docker%28ubunt24.04%29/">如何离线安装Docker(ubuntu24.04)</a>
|
</li>
|
<li class="toctree-l2"><a class="reference internal" href="../%E5%A6%82%E4%BD%95%E5%9C%A8%E7%BA%BFDocker%E4%B8%80%E9%94%AE%E5%AE%89%E8%A3%85%E8%A3%85HomeAssistant/">如何在线Docker一键安装HomeAssistant</a>
|
</li>
|
<li class="toctree-l2"><a class="reference internal" href="../%E5%A6%82%E4%BD%95%E7%A6%BB%E7%BA%BFDocker%E4%B8%80%E9%94%AE%E5%AE%89%E8%A3%85HomeAssistant/">如何离线Docker一键安装HomeAssistant</a>
|
</li>
|
<li class="toctree-l2"><a class="reference internal" href="../%E5%9F%BA%E4%BA%8EDocker%E7%9A%84%E6%96%B9%E5%BC%8F%E5%AE%89%E8%A3%85HomeAssistant/">基于Docker的方式安装HomeAssistant</a>
|
</li>
|
<li class="toctree-l2"><a class="reference internal" href="../%E5%A6%82%E4%BD%95%E5%BF%AB%E9%80%9F%E9%83%A8%E7%BD%B2frpc%E6%9C%8D%E5%8A%A1/">如何快速部署frpc服务</a>
|
</li>
|
<li class="toctree-l2"><a class="reference internal" href="../windows%E4%B8%8D%E8%83%BD%E8%AE%BF%E9%97%AEHA%E7%9A%84%E5%85%B1%E4%BA%AB%E9%85%8D%E7%BD%AE%E7%9B%AE%E5%BD%95%E7%9A%84%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95/">windows不能访问HA的共享配置目录的解决办法</a>
|
</li>
|
<li class="toctree-l2"><a class="reference internal" href="../%E8%AF%AD%E9%9F%B3%E5%90%88%E6%88%90%E4%B8%8E%E8%AF%86%E5%88%AB%E6%9C%8D%E5%8A%A1Docker-%E9%83%A8%E7%BD%B2%E8%AF%B4%E6%98%8E/">语音合成与识别服务Docker-部署说明</a>
|
</li>
|
<li class="toctree-l2 current"><a class="reference internal current" href="#">人脸识别服务安装说明</a>
|
<ul class="current">
|
<li class="toctree-l3"><a class="reference internal" href="#1">1. 简介</a>
|
</li>
|
<li class="toctree-l3"><a class="reference internal" href="#2">2. 安装部署</a>
|
</li>
|
<li class="toctree-l3"><a class="reference internal" href="#3">3. 使用说明</a>
|
<ul>
|
<li class="toctree-l4"><a class="reference internal" href="#31">3.1 启动服务</a>
|
</li>
|
<li class="toctree-l4"><a class="reference internal" href="#32">3.2 停止服务</a>
|
</li>
|
<li class="toctree-l4"><a class="reference internal" href="#33">3.3 查看日志</a>
|
</li>
|
<li class="toctree-l4"><a class="reference internal" href="#34-api">3.4 人脸识别API接口说明</a>
|
</li>
|
<li class="toctree-l4"><a class="reference internal" href="#35">3.5 简要使用说明</a>
|
</li>
|
<li class="toctree-l4"><a class="reference internal" href="#36">3.6 人脸识别服务简要测试办法</a>
|
</li>
|
<li class="toctree-l4"><a class="reference internal" href="#37">3.7 常见问题</a>
|
</li>
|
<li class="toctree-l4"><a class="reference internal" href="#38">3.8 性能测试报告</a>
|
</li>
|
<li class="toctree-l4"><a class="reference internal" href="#39">3.9 总结</a>
|
</li>
|
</ul>
|
</li>
|
</ul>
|
</li>
|
</ul>
|
</li>
|
</ul>
|
<p class="caption"><span class="caption-text">其它教程</span></p>
|
<ul>
|
<li class="toctree-l1"><a class="reference internal" >Node-red相关</a>
|
<ul>
|
<li class="toctree-l2"><a class="reference internal" href="../../../node-reds/%E5%AE%89%E8%A3%85node-red%E8%AE%B0%E5%BD%95/">安装node-red记录</a>
|
</li>
|
<li class="toctree-l2"><a class="reference internal" href="../../../node-reds/%E5%A6%82%E4%BD%95%E6%8A%8Anode-red%E5%AE%89%E8%A3%85%E5%88%B0orangepiZero3/">如何把node-red安装到orangepiZero</a>
|
</li>
|
<li class="toctree-l2"><a class="reference internal" href="../../../node-reds/ModbusPoll-v7.0.0%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/">ModbusPoll-v7.0.0使用教程</a>
|
</li>
|
<li class="toctree-l2"><a class="reference internal" href="../../../node-reds/node-red%E5%B8%B8%E7%94%A8%E7%BB%84%E4%BB%B6%E5%88%97%E8%A1%A8/">node-red常用组件列表</a>
|
</li>
|
<li class="toctree-l2"><a class="reference internal" href="../../../node-reds/node-red%E5%A6%82%E4%BD%95%E8%BF%9E%E6%8E%A5modbus%20_slave%E8%AE%BE%E5%A4%87/">node-red如何连接modbus _slave设备</a>
|
</li>
|
</ul>
|
</li>
|
</ul>
|
</div>
|
</div>
|
</nav>
|
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
<nav class="wy-nav-top" role="navigation" aria-label="Mobile navigation menu">
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
<a href="../../..">DT-HA</a>
|
|
</nav>
|
<div class="wy-nav-content">
|
<div class="rst-content"><div role="navigation" aria-label="breadcrumbs navigation">
|
<ul class="wy-breadcrumbs">
|
<li><a href="../../.." class="icon icon-home" aria-label="Docs"></a></li>
|
<li class="breadcrumb-item">使用教程</li>
|
<li class="breadcrumb-item">Q/A</li>
|
<li class="breadcrumb-item active">人脸识别服务安装说明</li>
|
<li class="wy-breadcrumbs-aside">
|
</li>
|
</ul>
|
<hr/>
|
</div>
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
<div class="section" itemprop="articleBody">
|
|
<h1 id="docker">人脸识别服务DOCKER安装说明<a class="headerlink" href="#docker" title="Permanent link">¶</a></h1>
|
<h2 id="1">1. 简介<a class="headerlink" href="#1" title="Permanent link">¶</a></h2>
|
<p>本项目基于dlib库实现了一个简单的人脸识别服务,使用FastAPI框架构建API接口,支持通过HTTP请求进行人脸注册和识别。
|
该服务可以部署在Docker容器中,方便用户快速搭建和使用人脸识别功能。</p>
|
<h2 id="2">2. 安装部署<a class="headerlink" href="#2" title="Permanent link">¶</a></h2>
|
<p><a href="../%E5%9C%A8%E7%BA%BF%E4%BA%BA%E8%84%B8%E8%AF%86%E5%88%AB%E5%AE%89%E8%A3%85%E6%9C%8D%E5%8A%A1docker/">在线安装</a></p>
|
<p><a href="../%E7%A6%BB%E7%BA%BF%E4%BA%BA%E8%84%B8%E8%AF%86%E5%88%AB%E5%AE%89%E8%A3%85%E6%9C%8D%E5%8A%A1docker/">离线安装</a></p>
|
<p><a href="../%E5%9F%BA%E4%BA%8EDLIB%E7%9A%84%E4%BA%BA%E8%84%B8%E8%AF%86%E5%88%AB%E6%9C%8D%E5%8A%A1-%E6%89%8B%E5%B7%A5%E9%83%A8%E7%BD%B2%E8%AF%B4%E6%98%8E/">手工部署</a></p>
|
<h2 id="3">3. 使用说明<a class="headerlink" href="#3" title="Permanent link">¶</a></h2>
|
<h3 id="31">3.1 启动服务<a class="headerlink" href="#31" title="Permanent link">¶</a></h3>
|
<p>进入服务部署目录,执行以下命令启动服务:</p>
|
<div class="codehilite"><pre><span></span><code>docker-compose<span class="w"> </span>up<span class="w"> </span>-d
|
</code></pre></div>
|
|
<h3 id="32">3.2 停止服务<a class="headerlink" href="#32" title="Permanent link">¶</a></h3>
|
<div class="codehilite"><pre><span></span><code>docker-compose<span class="w"> </span>down
|
</code></pre></div>
|
|
<h3 id="33">3.3 查看日志<a class="headerlink" href="#33" title="Permanent link">¶</a></h3>
|
<div class="codehilite"><pre><span></span><code>docker-compose<span class="w"> </span>logs<span class="w"> </span>-f<span class="w"> </span>facerec
|
</code></pre></div>
|
|
<h3 id="34-api">3.4 人脸识别API接口说明<a class="headerlink" href="#34-api" title="Permanent link">¶</a></h3>
|
<p>本文档详细描述了人脸识别服务提供的各个API接口,包括接口地址、请求方式、参数说明、返回结果等信息。</p>
|
<h4 id="341">3.4.1 人脸识别接口<a class="headerlink" href="#341" title="Permanent link">¶</a></h4>
|
<h5 id="_1">接口地址<a class="headerlink" href="#_1" title="Permanent link">¶</a></h5>
|
<p><code>POST /api/identifyFace</code></p>
|
<h5 id="_2">功能说明<a class="headerlink" href="#_2" title="Permanent link">¶</a></h5>
|
<p>上传图片进行人脸识别,返回匹配的用户信息。</p>
|
<h5 id="_3">请求参数<a class="headerlink" href="#_3" title="Permanent link">¶</a></h5>
|
<table>
|
<thead>
|
<tr>
|
<th>参数名</th>
|
<th>类型</th>
|
<th>必填</th>
|
<th>说明</th>
|
</tr>
|
</thead>
|
<tbody>
|
<tr>
|
<td>image</td>
|
<td>file</td>
|
<td>是</td>
|
<td>包含人脸的图片文件</td>
|
</tr>
|
</tbody>
|
</table>
|
<h5 id="_4">返回结果<a class="headerlink" href="#_4" title="Permanent link">¶</a></h5>
|
<div class="codehilite"><pre><span></span><code><span class="p">{</span>
|
<span class="w"> </span><span class="nt">"code"</span><span class="p">:</span><span class="w"> </span><span class="mi">200</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
|
<span class="w"> </span><span class="nt">"msg"</span><span class="p">:</span><span class="w"> </span><span class="s2">"success"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"errno"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
|
<span class="w"> </span><span class="nt">"result"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
|
<span class="w"> </span><span class="p">{</span>
|
<span class="w"> </span><span class="nt">"score"</span><span class="p">:</span><span class="w"> </span><span class="mf">95.5</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"group_id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"group"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"user_id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"用户名"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"Uid"</span><span class="p">:</span><span class="w"> </span><span class="s2">"用户编码"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"Name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"用户姓名"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"IdNum"</span><span class="p">:</span><span class="w"> </span><span class="s2">"身份证号"</span>
|
<span class="w"> </span><span class="p">}</span>
|
<span class="w"> </span><span class="p">],</span>
|
<span class="w"> </span><span class="nt">"log_id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"时间戳"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"face_token"</span><span class="p">:</span><span class="w"> </span><span class="s2">"唯一标识符"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"result_num"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span>
|
<span class="w"> </span><span class="p">}</span>
|
<span class="w"> </span><span class="p">},</span>
|
<span class="w"> </span><span class="nt">"message"</span><span class="p">:</span><span class="w"> </span><span class="s2">"SUCCESS"</span>
|
<span class="p">}</span>
|
</code></pre></div>
|
|
<h5 id="_5">示例<a class="headerlink" href="#_5" title="Permanent link">¶</a></h5>
|
<div class="codehilite"><pre><span></span><code>curl<span class="w"> </span>-X<span class="w"> </span>POST<span class="w"> </span><span class="s2">"http://localhost:12316/api/identifyFace"</span><span class="w"> </span><span class="se">\</span>
|
<span class="w"> </span>-H<span class="w"> </span><span class="s2">"Content-Type: multipart/form-data"</span><span class="w"> </span><span class="se">\</span>
|
<span class="w"> </span>-F<span class="w"> </span><span class="s2">"image=@test.jpg"</span>
|
</code></pre></div>
|
|
<h4 id="342">3.4.2 添加人脸数据接口<a class="headerlink" href="#342" title="Permanent link">¶</a></h4>
|
<h5 id="_6">接口地址<a class="headerlink" href="#_6" title="Permanent link">¶</a></h5>
|
<p><code>POST /api/addFace</code></p>
|
<h5 id="_7">功能说明<a class="headerlink" href="#_7" title="Permanent link">¶</a></h5>
|
<p>添加新的人脸数据到系统中,用于后续的人脸识别。</p>
|
<h5 id="_8">请求参数<a class="headerlink" href="#_8" title="Permanent link">¶</a></h5>
|
<table>
|
<thead>
|
<tr>
|
<th>参数名</th>
|
<th>类型</th>
|
<th>必填</th>
|
<th>说明</th>
|
</tr>
|
</thead>
|
<tbody>
|
<tr>
|
<td>image</td>
|
<td>file</td>
|
<td>是</td>
|
<td>包含人脸的图片文件</td>
|
</tr>
|
<tr>
|
<td>userCode</td>
|
<td>string</td>
|
<td>是</td>
|
<td>用户编码</td>
|
</tr>
|
<tr>
|
<td>userName</td>
|
<td>string</td>
|
<td>否</td>
|
<td>用户姓名,默认使用userCode</td>
|
</tr>
|
<tr>
|
<td>idNum</td>
|
<td>string</td>
|
<td>否</td>
|
<td>身份证号,默认使用userCode</td>
|
</tr>
|
</tbody>
|
</table>
|
<h5 id="_9">返回结果<a class="headerlink" href="#_9" title="Permanent link">¶</a></h5>
|
<div class="codehilite"><pre><span></span><code><span class="p">{</span>
|
<span class="w"> </span><span class="nt">"code"</span><span class="p">:</span><span class="w"> </span><span class="mi">200</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
|
<span class="w"> </span><span class="nt">"msg"</span><span class="p">:</span><span class="w"> </span><span class="s2">"success"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"errno"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
|
<span class="w"> </span><span class="nt">"log_id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"时间戳"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"message"</span><span class="p">:</span><span class="w"> </span><span class="s2">"用户数据添加成功"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"faceUrl"</span><span class="p">:</span><span class="w"> </span><span class="s2">"http://localhost:12316/images/userCode.jpg"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"faceUrl_Placeholder"</span><span class="p">:</span><span class="w"> </span><span class="s2">"http://^API_BASE_URL^/images/userCode.jpg"</span>
|
<span class="w"> </span><span class="p">}</span>
|
<span class="w"> </span><span class="p">},</span>
|
<span class="w"> </span><span class="nt">"message"</span><span class="p">:</span><span class="w"> </span><span class="s2">"SUCCESS"</span>
|
<span class="p">}</span>
|
</code></pre></div>
|
|
<h5 id="_10">示例<a class="headerlink" href="#_10" title="Permanent link">¶</a></h5>
|
<div class="codehilite"><pre><span></span><code>curl<span class="w"> </span>-X<span class="w"> </span>POST<span class="w"> </span><span class="s2">"http://localhost:12316/api/addFace"</span><span class="w"> </span><span class="se">\</span>
|
<span class="w"> </span>-H<span class="w"> </span><span class="s2">"Content-Type: multipart/form-data"</span><span class="w"> </span><span class="se">\</span>
|
<span class="w"> </span>-F<span class="w"> </span><span class="s2">"image=@user.jpg"</span><span class="w"> </span><span class="se">\</span>
|
<span class="w"> </span>-F<span class="w"> </span><span class="s2">"userCode=USER001"</span><span class="w"> </span><span class="se">\</span>
|
<span class="w"> </span>-F<span class="w"> </span><span class="s2">"userName=张三"</span><span class="w"> </span><span class="se">\</span>
|
<span class="w"> </span>-F<span class="w"> </span><span class="s2">"idNum=110101199001011234"</span>
|
</code></pre></div>
|
|
<h4 id="343">3.4.3 人脸检测接口<a class="headerlink" href="#343" title="Permanent link">¶</a></h4>
|
<h5 id="_11">接口地址<a class="headerlink" href="#_11" title="Permanent link">¶</a></h5>
|
<p><code>POST /api/detectFace</code></p>
|
<h5 id="_12">功能说明<a class="headerlink" href="#_12" title="Permanent link">¶</a></h5>
|
<p>检测图片中的人脸位置信息,不进行身份识别。</p>
|
<h5 id="_13">请求参数<a class="headerlink" href="#_13" title="Permanent link">¶</a></h5>
|
<table>
|
<thead>
|
<tr>
|
<th>参数名</th>
|
<th>类型</th>
|
<th>必填</th>
|
<th>说明</th>
|
</tr>
|
</thead>
|
<tbody>
|
<tr>
|
<td>image</td>
|
<td>file</td>
|
<td>是</td>
|
<td>图片文件</td>
|
</tr>
|
</tbody>
|
</table>
|
<h5 id="_14">返回结果<a class="headerlink" href="#_14" title="Permanent link">¶</a></h5>
|
<div class="codehilite"><pre><span></span><code><span class="p">{</span>
|
<span class="w"> </span><span class="nt">"code"</span><span class="p">:</span><span class="w"> </span><span class="mi">200</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
|
<span class="w"> </span><span class="nt">"faces"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
|
<span class="w"> </span><span class="p">{</span>
|
<span class="w"> </span><span class="nt">"location"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
|
<span class="w"> </span><span class="nt">"left"</span><span class="p">:</span><span class="w"> </span><span class="mi">100</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"top"</span><span class="p">:</span><span class="w"> </span><span class="mi">100</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"width"</span><span class="p">:</span><span class="w"> </span><span class="mi">200</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"height"</span><span class="p">:</span><span class="w"> </span><span class="mi">200</span>
|
<span class="w"> </span><span class="p">}</span>
|
<span class="w"> </span><span class="p">}</span>
|
<span class="w"> </span><span class="p">],</span>
|
<span class="w"> </span><span class="nt">"face_num"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span>
|
<span class="w"> </span><span class="p">},</span>
|
<span class="w"> </span><span class="nt">"message"</span><span class="p">:</span><span class="w"> </span><span class="s2">"SUCCESS"</span>
|
<span class="p">}</span>
|
</code></pre></div>
|
|
<p><strong>坐标信息说明:</strong>
|
- <code>left</code>: 人脸框左上角距离图片左边界的像素距离
|
- <code>top</code>: 人脸框左上角距离图片上边界的像素距离
|
- <code>width</code>: 人脸框的宽度(像素)
|
- <code>height</code>: 人脸框的高度(像素)
|
这些坐标信息基于图片的左上角为原点(0,0),向右为X轴正方向,向下为Y轴正方向的坐标系。</p>
|
<h5 id="_15">示例<a class="headerlink" href="#_15" title="Permanent link">¶</a></h5>
|
<div class="codehilite"><pre><span></span><code>curl<span class="w"> </span>-X<span class="w"> </span>POST<span class="w"> </span><span class="s2">"http://localhost:12316/api/detectFace"</span><span class="w"> </span><span class="se">\</span>
|
<span class="w"> </span>-H<span class="w"> </span><span class="s2">"Content-Type: multipart/form-data"</span><span class="w"> </span><span class="se">\</span>
|
<span class="w"> </span>-F<span class="w"> </span><span class="s2">"image=@test.jpg"</span>
|
</code></pre></div>
|
|
<h4 id="344-url">3.4.4 获取用户人脸图像URL接口<a class="headerlink" href="#344-url" title="Permanent link">¶</a></h4>
|
<h5 id="_16">接口地址<a class="headerlink" href="#_16" title="Permanent link">¶</a></h5>
|
<p><code>POST /api/getUserFaceUrl</code></p>
|
<h5 id="_17">功能说明<a class="headerlink" href="#_17" title="Permanent link">¶</a></h5>
|
<p>根据用户编码获取用户人脸图像的访问URL。</p>
|
<h5 id="_18">请求参数<a class="headerlink" href="#_18" title="Permanent link">¶</a></h5>
|
<table>
|
<thead>
|
<tr>
|
<th>参数名</th>
|
<th>类型</th>
|
<th>必填</th>
|
<th>说明</th>
|
</tr>
|
</thead>
|
<tbody>
|
<tr>
|
<td>userCode</td>
|
<td>string</td>
|
<td>是</td>
|
<td>用户编码</td>
|
</tr>
|
</tbody>
|
</table>
|
<h5 id="_19">返回结果<a class="headerlink" href="#_19" title="Permanent link">¶</a></h5>
|
<div class="codehilite"><pre><span></span><code><span class="p">{</span>
|
<span class="w"> </span><span class="nt">"code"</span><span class="p">:</span><span class="w"> </span><span class="mi">200</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"data"</span><span class="p">:</span><span class="w"> </span><span class="s2">"http://localhost:12316/images/userCode.jpg"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"message"</span><span class="p">:</span><span class="w"> </span><span class="s2">"SUCCESS"</span>
|
<span class="p">}</span>
|
</code></pre></div>
|
|
<h5 id="_20">示例<a class="headerlink" href="#_20" title="Permanent link">¶</a></h5>
|
<div class="codehilite"><pre><span></span><code>curl<span class="w"> </span>-X<span class="w"> </span>POST<span class="w"> </span><span class="s2">"http://localhost:12316/api/getUserFaceUrl"</span><span class="w"> </span><span class="se">\</span>
|
<span class="w"> </span>-d<span class="w"> </span><span class="s2">"userCode=USER001"</span>
|
</code></pre></div>
|
|
<h4 id="345">3.4.5 删除人脸数据接口<a class="headerlink" href="#345" title="Permanent link">¶</a></h4>
|
<h5 id="_21">接口地址<a class="headerlink" href="#_21" title="Permanent link">¶</a></h5>
|
<p><code>POST /api/delFace</code></p>
|
<h5 id="_22">功能说明<a class="headerlink" href="#_22" title="Permanent link">¶</a></h5>
|
<p>根据用户编码删除指定的人脸数据。</p>
|
<h5 id="_23">请求参数<a class="headerlink" href="#_23" title="Permanent link">¶</a></h5>
|
<table>
|
<thead>
|
<tr>
|
<th>参数名</th>
|
<th>类型</th>
|
<th>必填</th>
|
<th>说明</th>
|
</tr>
|
</thead>
|
<tbody>
|
<tr>
|
<td>userCode</td>
|
<td>string</td>
|
<td>是</td>
|
<td>用户编码</td>
|
</tr>
|
</tbody>
|
</table>
|
<h5 id="_24">返回结果<a class="headerlink" href="#_24" title="Permanent link">¶</a></h5>
|
<div class="codehilite"><pre><span></span><code><span class="p">{</span>
|
<span class="w"> </span><span class="nt">"code"</span><span class="p">:</span><span class="w"> </span><span class="mi">200</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
|
<span class="w"> </span><span class="nt">"msg"</span><span class="p">:</span><span class="w"> </span><span class="s2">"success"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"errno"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
|
<span class="w"> </span><span class="nt">"log_id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"时间戳"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"message"</span><span class="p">:</span><span class="w"> </span><span class="s2">"用户数据删除成功"</span>
|
<span class="w"> </span><span class="p">}</span>
|
<span class="w"> </span><span class="p">},</span>
|
<span class="w"> </span><span class="nt">"message"</span><span class="p">:</span><span class="w"> </span><span class="s2">"SUCCESS"</span>
|
<span class="p">}</span>
|
</code></pre></div>
|
|
<h5 id="_25">示例<a class="headerlink" href="#_25" title="Permanent link">¶</a></h5>
|
<div class="codehilite"><pre><span></span><code>curl<span class="w"> </span>-X<span class="w"> </span>POST<span class="w"> </span><span class="s2">"http://localhost:12316/api/delFace"</span><span class="w"> </span><span class="se">\</span>
|
<span class="w"> </span>-d<span class="w"> </span><span class="s2">"userCode=USER001"</span>
|
</code></pre></div>
|
|
<h4 id="346">3.4.6 重新加载特征数据接口<a class="headerlink" href="#346" title="Permanent link">¶</a></h4>
|
<h5 id="_26">接口地址<a class="headerlink" href="#_26" title="Permanent link">¶</a></h5>
|
<p><code>POST /api/reloadFeatures</code></p>
|
<h5 id="_27">功能说明<a class="headerlink" href="#_27" title="Permanent link">¶</a></h5>
|
<p>重新从数据库加载所有人脸特征数据到内存中。</p>
|
<h5 id="_28">请求参数<a class="headerlink" href="#_28" title="Permanent link">¶</a></h5>
|
<p>无</p>
|
<h5 id="_29">返回结果<a class="headerlink" href="#_29" title="Permanent link">¶</a></h5>
|
<div class="codehilite"><pre><span></span><code><span class="p">{</span>
|
<span class="w"> </span><span class="nt">"code"</span><span class="p">:</span><span class="w"> </span><span class="mi">200</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
|
<span class="w"> </span><span class="nt">"msg"</span><span class="p">:</span><span class="w"> </span><span class="s2">"success"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"errno"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
|
<span class="w"> </span><span class="nt">"log_id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"时间戳"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"message"</span><span class="p">:</span><span class="w"> </span><span class="s2">"特征数据重新加载成功"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"count"</span><span class="p">:</span><span class="w"> </span><span class="mi">10</span>
|
<span class="w"> </span><span class="p">}</span>
|
<span class="w"> </span><span class="p">},</span>
|
<span class="w"> </span><span class="nt">"message"</span><span class="p">:</span><span class="w"> </span><span class="s2">"SUCCESS"</span>
|
<span class="p">}</span>
|
</code></pre></div>
|
|
<h5 id="_30">示例<a class="headerlink" href="#_30" title="Permanent link">¶</a></h5>
|
<div class="codehilite"><pre><span></span><code>curl<span class="w"> </span>-X<span class="w"> </span>POST<span class="w"> </span><span class="s2">"http://localhost:12316/api/reloadFeatures"</span>
|
</code></pre></div>
|
|
<h4 id="347">3.4.7 查询所有人员数据接口<a class="headerlink" href="#347" title="Permanent link">¶</a></h4>
|
<h5 id="_31">接口地址<a class="headerlink" href="#_31" title="Permanent link">¶</a></h5>
|
<p><code>POST /api/getAllUsers</code></p>
|
<h5 id="_32">功能说明<a class="headerlink" href="#_32" title="Permanent link">¶</a></h5>
|
<p>获取系统中所有已注册用户的信息。</p>
|
<h5 id="_33">请求参数<a class="headerlink" href="#_33" title="Permanent link">¶</a></h5>
|
<p>无</p>
|
<h5 id="_34">返回结果<a class="headerlink" href="#_34" title="Permanent link">¶</a></h5>
|
<div class="codehilite"><pre><span></span><code><span class="p">{</span>
|
<span class="w"> </span><span class="nt">"code"</span><span class="p">:</span><span class="w"> </span><span class="mi">200</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
|
<span class="w"> </span><span class="nt">"msg"</span><span class="p">:</span><span class="w"> </span><span class="s2">"success"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"errno"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
|
<span class="w"> </span><span class="nt">"users"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
|
<span class="w"> </span><span class="p">{</span>
|
<span class="w"> </span><span class="nt">"userCode"</span><span class="p">:</span><span class="w"> </span><span class="s2">"USER001"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"userName"</span><span class="p">:</span><span class="w"> </span><span class="s2">"张三"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"idNum"</span><span class="p">:</span><span class="w"> </span><span class="s2">"110101199001011234"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"faceUrl"</span><span class="p">:</span><span class="w"> </span><span class="s2">"http://localhost:12316/images/USER001.jpg"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"faceUrl_Placeholder"</span><span class="p">:</span><span class="w"> </span><span class="s2">"http://^API_BASE_URL^/images/USER001.jpg"</span>
|
<span class="w"> </span><span class="p">}</span>
|
<span class="w"> </span><span class="p">],</span>
|
<span class="w"> </span><span class="nt">"count"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span>
|
<span class="w"> </span><span class="p">}</span>
|
<span class="w"> </span><span class="p">},</span>
|
<span class="w"> </span><span class="nt">"message"</span><span class="p">:</span><span class="w"> </span><span class="s2">"SUCCESS"</span>
|
<span class="p">}</span>
|
</code></pre></div>
|
|
<h5 id="_35">示例<a class="headerlink" href="#_35" title="Permanent link">¶</a></h5>
|
<div class="codehilite"><pre><span></span><code>curl<span class="w"> </span>-X<span class="w"> </span>POST<span class="w"> </span><span class="s2">"http://localhost:12316/api/getAllUsers"</span>
|
</code></pre></div>
|
|
<h4 id="348">3.4.8 静态图像文件服务<a class="headerlink" href="#348" title="Permanent link">¶</a></h4>
|
<h5 id="_36">接口地址<a class="headerlink" href="#_36" title="Permanent link">¶</a></h5>
|
<p><code>GET /images/{filename}</code></p>
|
<h5 id="_37">功能说明<a class="headerlink" href="#_37" title="Permanent link">¶</a></h5>
|
<p>提供用户人脸图像的静态文件访问服务。</p>
|
<h5 id="_38">请求参数<a class="headerlink" href="#_38" title="Permanent link">¶</a></h5>
|
<table>
|
<thead>
|
<tr>
|
<th>参数名</th>
|
<th>类型</th>
|
<th>必填</th>
|
<th>说明</th>
|
</tr>
|
</thead>
|
<tbody>
|
<tr>
|
<td>filename</td>
|
<td>string</td>
|
<td>是</td>
|
<td>图像文件名</td>
|
</tr>
|
</tbody>
|
</table>
|
<h5 id="_39">返回结果<a class="headerlink" href="#_39" title="Permanent link">¶</a></h5>
|
<p>图像文件二进制数据</p>
|
<h5 id="_40">示例<a class="headerlink" href="#_40" title="Permanent link">¶</a></h5>
|
<div class="codehilite"><pre><span></span><code>curl<span class="w"> </span>-X<span class="w"> </span>GET<span class="w"> </span><span class="s2">"http://localhost:12316/images/USER001.jpg"</span><span class="w"> </span>-o<span class="w"> </span>user_image.jpg
|
</code></pre></div>
|
|
<h3 id="35">3.5 简要使用说明<a class="headerlink" href="#35" title="Permanent link">¶</a></h3>
|
<p>本服务是使用DLIB本的模型进行人脸识别的,精度和速度都比较适中,适合一般的应用场景。使用sqlite数据库存储人脸特征数据,方便部署和维护。
|
在使用过程中,请注意以下几点:
|
- 确保上传的图片质量较好,避免模糊或遮挡严重的图片。
|
- 人脸识别的准确率受多种因素影响,如光照、角度、表情等,建议在多种条件下测试和优化。
|
- 定期备份数据库文件,防止数据丢失。
|
- 如果需要更高的识别精度,可以考虑使用更复杂的模型或增加训练数据。</p>
|
<p>服务在启动时,先把数据库中所有的人脸特征数据加载到内存中,识别时直接在内存中进行比对,速度较快。如果添加或删除了人脸数据,需要调用<code>/api/reloadFeatures</code>接口重新加载特征数据。人脸特征数据存储在<code>rec.db</code>文件中,位于服务的工作目录下data/db。如需导出,可以直接找到容器的挂载目录下的该文件进行备份或导出。</p>
|
<p>人脸特征,采用了采集128个特征点保存,即128维的浮点数数组,存储在数据库中。识别时,计算上传图片的人脸特征与数据库中所有特征的欧氏距离,距离越小表示相似度越高。可以根据实际需求调整识别阈值。</p>
|
<p>人脸特征库表每个记录约131个字段,其不适合存储大量人脸数据。如果需要存储更多人脸数据,建议使用更专业的数据库系统,如MySQL、PostgreSQL等。因为本项目就动时需要据有的人脸数据加载到内存中,所以,人脸数据量不宜过大,建议控制在几千人以内。</p>
|
<h3 id="36">3.6 人脸识别服务简要测试办法<a class="headerlink" href="#36" title="Permanent link">¶</a></h3>
|
<p>本人脸识别服务,提供了一个简单的HTML页面用于测试人脸识别功能。可以通过浏览器访问该页面,上传图片进行测试。</p>
|
<p>下载地址: </p>
|
<div class="codehilite"><pre><span></span><code>[测试网页压缩包](https://datacdn.data-it.tech/faceRec/face-dt/face-test.zip)
|
|
[测试网页-未压缩](https://datacdn.data-it.tech/faceRec/face-dt/face-test.html)
|
</code></pre></div>
|
|
<p>解压后,将<code>face-test.html</code>文件放在任意目录下,使用浏览器打开该文件。页面中有一个文件上传控件,可以选择包含人脸的图片进行测试。上传后,页面会调用人脸识别服务的API接口,显示识别结果。</p>
|
<p>如果需要把网页部署到nginx等web服务器上,可以将<code>face-test.html</code>文件放在服务器的指定目录下,然后通过浏览器访问服务器的地址即可。
|
但时要注意,因为网页中调用了摄像头视频,在没有https证书的情况下,只有localhost可开启了权限白名单的情况下,才能正常使用摄像头功能。</p>
|
<p><strong><em>本地测试如何开启权限</em></strong></p>
|
<div class="codehilite"><pre><span></span><code>Edge
|
edge://flags/#unsafely-treat-insecure-origin-as-secure
|
Chrome
|
chrome://flags/#unsafely-treat-insecure-origin-as-secure
|
将 Insecure origins treated as secure 设置为 Enabled
|
</code></pre></div>
|
|
<p>如果不想开启权限白名单,可以把网页放在nginx等web服务器上,并配置https证书,这样浏览器会认为是安全的来源,就可以正常使用摄像头功能。 </p>
|
<h3 id="37">3.7 常见问题<a class="headerlink" href="#37" title="Permanent link">¶</a></h3>
|
<ul>
|
<li><strong>问题1</strong>: 上传图片后,识别结果为空或不准确。</li>
|
<li><strong>解决办法</strong>: 确保上传的图片质量较好,避免模糊或遮挡严重的图片。可以尝试不同的图片进行测试。 </li>
|
<li><strong>问题2</strong>: 添加人脸数据时,提示用户已存在。<ul>
|
<li><strong>解决办法</strong>: 确认用户编码是否唯一,如果需要更新用户信息,可以先删除旧数据,再添加新数据。</li>
|
</ul>
|
</li>
|
<li><strong>问题3</strong>: 服务启动失败或无法访问。</li>
|
<li><strong>解决办法</strong>: 检查Docker容器是否正常运行,确认端口是否被正确映射。查看日志获取更多信息。</li>
|
<li><strong>问题4</strong>: 数据库文件损坏或丢失。</li>
|
<li><strong>解决办法</strong>: 如果有备份,可以恢复备份文件。否则需要重新添加人脸数据。</li>
|
<li><strong>问题5</strong>: 识别速度较慢。</li>
|
<li><strong>解决办法</strong>: 确认服务器性能是否足够,减少人脸数据量,或优化图片大小和质量。</li>
|
<li><strong>问题6</strong>: 如何调整识别阈值?</li>
|
<li><strong>解决办法</strong>: 目前代码中没有提供直接调整阈值的接口,可以在代码中修改识别逻辑,调整欧氏距离的阈值。</li>
|
</ul>
|
<h3 id="38">3.8 性能测试报告<a class="headerlink" href="#38" title="Permanent link">¶</a></h3>
|
<p><img alt="" src="https://qncdn.tairongkj.com/docs/images/20250930170146.png" />
|
上图为配笔记本电脑环境测</p>
|
<p>下图为公司的前置工控机环境测试
|
<img alt="" src="https://qncdn.tairongkj.com/docs/images/c63bc4d2c02a4a8f6676f77d75cca0f6.png" /></p>
|
<p>经过反复测试,平均响应时间在200-300ms之间,峰值时段也能保持在500ms以内,满足一般应用需求。
|
同时并发要控制在4个以内,同一时间进行识别请求,超过4个时,响应时间会明显增加,延迟响应,响应时间有可能超过秒。如果需要更高的并发处理能力,可以考虑增加服务器资源,部署多个服务做负载均衡。,但对同一个中心,一般一个服务就足够了,毕竟同时识可的可能性太少了。</p>
|
<h3 id="39">3.9 总结<a class="headerlink" href="#39" title="Permanent link">¶</a></h3>
|
<p>本项目提供了一个基于DLIB的人脸识别服务,使用FastAPI框架,支持Docker部署。通过RESTful API接口,用户可以方便地进行人脸注册和识别操作。服务性能良好,适合一般应用场景。用户可以根据实际需求进行扩展和优化。</p>
|
|
</div>
|
</div><footer>
|
<div class="rst-footer-buttons" role="navigation" aria-label="Footer Navigation">
|
<a href="../%E8%AF%AD%E9%9F%B3%E5%90%88%E6%88%90%E4%B8%8E%E8%AF%86%E5%88%AB%E6%9C%8D%E5%8A%A1Docker-%E9%83%A8%E7%BD%B2%E8%AF%B4%E6%98%8E/" class="btn btn-neutral float-left" title="语音合成与识别服务Docker-部署说明"><span class="icon icon-circle-arrow-left"></span> Previous</a>
|
<a href="../../../node-reds/%E5%AE%89%E8%A3%85node-red%E8%AE%B0%E5%BD%95/" class="btn btn-neutral float-right" title="安装node-red记录">Next <span class="icon icon-circle-arrow-right"></span></a>
|
</div>
|
|
<hr/>
|
|
<div role="contentinfo">
|
<!-- Copyright etc -->
|
</div>
|
|
Built with <a href="https://www.mkdocs.org/">MkDocs</a> using a <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
</footer>
|
|
</div>
|
</div>
|
|
</section>
|
|
</div>
|
|
<div class="rst-versions" role="note" aria-label="Versions">
|
<span class="rst-current-version" data-toggle="rst-current-version">
|
|
<span>
|
<a href="http://dh.leon056.com:7499/r/Embedded/HomeAssistantPtoject.git" class="fa fa-code-fork" style="color: #fcfcfc"> Dh</a>
|
</span>
|
|
|
<span><a href="../%E8%AF%AD%E9%9F%B3%E5%90%88%E6%88%90%E4%B8%8E%E8%AF%86%E5%88%AB%E6%9C%8D%E5%8A%A1Docker-%E9%83%A8%E7%BD%B2%E8%AF%B4%E6%98%8E/" style="color: #fcfcfc">« Previous</a></span>
|
|
|
<span><a href="../../../node-reds/%E5%AE%89%E8%A3%85node-red%E8%AE%B0%E5%BD%95/" style="color: #fcfcfc">Next »</a></span>
|
|
</span>
|
</div>
|
<script src="../../../js/jquery-3.6.0.min.js"></script>
|
<script>var base_url = "../../..";</script>
|
<script src="../../../js/theme_extra.js"></script>
|
<script src="../../../js/theme.js"></script>
|
<script src="../../../search/main.js"></script>
|
<script>
|
jQuery(function () {
|
SphinxRtdTheme.Navigation.enable(true);
|
});
|
</script>
|
|
</body>
|
</html>
|