help.bak1.html 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width,initial-scale=1">
  6. <title>帮助手册 - 车牌识别系统</title>
  7. <style>
  8. *{box-sizing:border-box;margin:0;padding:0}
  9. body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;background:#f0f2f5;color:#333}
  10. .navbar{background:#1a1a2e;color:#fff;padding:12px 20px;display:flex;align-items:center;gap:20px;box-shadow:0 2px 8px rgba(0,0,0,0.15)}
  11. .navbar a{color:#ccc;text-decoration:none;padding:6px 12px;border-radius:4px;font-size:14px}
  12. .navbar a:hover,.navbar a.active{background:rgba(255,255,255,0.15);color:#fff}
  13. .navbar .brand{font-size:16px;font-weight:bold;color:#4fc3f7;margin-right:10px}
  14. .container{max-width:960px;margin:20px auto;padding:0 16px}
  15. .card{background:#fff;border-radius:8px;margin-bottom:16px;box-shadow:0 1px 4px rgba(0,0,0,0.08);overflow:hidden}
  16. .card-title{background:#263238;color:#fff;padding:10px 16px;font-size:14px;font-weight:600;display:flex;align-items:center;justify-content:space-between;cursor:pointer;user-select:none}
  17. .card-title:hover{background:#37474f}
  18. .card-title .arrow{transition:transform 0.2s;font-size:12px}
  19. .card-title.collapsed .arrow{transform:rotate(-90deg)}
  20. .card-body{padding:16px 20px;line-height:1.8;font-size:14px}
  21. .card-body.hidden{display:none}
  22. h3{color:#1a1a2e;margin:16px 0 8px;font-size:15px;border-left:3px solid #667eea;padding-left:10px}
  23. h4{color:#333;margin:12px 0 6px;font-size:14px}
  24. table{width:100%;border-collapse:collapse;margin:8px 0 16px;font-size:13px}
  25. th{background:#f5f5f5;padding:8px 10px;text-align:left;font-weight:600;border-bottom:2px solid #e0e0e0;white-space:nowrap}
  26. td{padding:8px 10px;border-bottom:1px solid #f0f0f0;vertical-align:top}
  27. td:first-child{font-family:monospace;color:#d32f2f;white-space:nowrap;font-size:12px}
  28. code{background:#f5f5f5;padding:2px 6px;border-radius:3px;font-size:12px;color:#d32f2f;font-family:monospace}
  29. .tip{background:#e8f5e9;border-left:4px solid #4caf50;padding:10px 14px;margin:8px 0;border-radius:0 4px 4px 0;font-size:13px}
  30. .warn{background:#fff3e0;border-left:4px solid #ff9800;padding:10px 14px;margin:8px 0;border-radius:0 4px 4px 0;font-size:13px}
  31. .note{background:#e3f2fd;border-left:4px solid #2196f3;padding:10px 14px;margin:8px 0;border-radius:0 4px 4px 0;font-size:13px}
  32. ul{padding-left:20px;margin:6px 0}
  33. li{margin:4px 0;font-size:13px;line-height:1.7}
  34. .toc{background:#fff;border-radius:8px;padding:16px 24px;margin-bottom:16px;box-shadow:0 1px 4px rgba(0,0,0,0.08)}
  35. .toc h2{font-size:16px;color:#1a1a2e;margin-bottom:10px;border-bottom:2px solid #667eea;padding-bottom:6px}
  36. .toc ol{padding-left:20px;columns:2;column-gap:30px}
  37. .toc li{margin:4px 0;font-size:13px;break-inside:avoid}
  38. .toc a{color:#667eea;text-decoration:none}
  39. .toc a:hover{text-decoration:underline}
  40. @media(max-width:768px){
  41. .navbar{flex-wrap:wrap;gap:8px;padding:10px 14px}
  42. .navbar .brand{font-size:14px;width:100%}
  43. .navbar a{font-size:12px;padding:4px 8px}
  44. .container{padding:0 10px;margin:10px auto}
  45. .toc ol{columns:1}
  46. table{font-size:12px;display:block;overflow-x:auto}
  47. th,td{padding:6px 8px}
  48. td:first-child{font-size:11px}
  49. }
  50. @media(max-width:480px){
  51. .navbar .brand{font-size:13px}
  52. .navbar a{font-size:11px;padding:3px 6px}
  53. .card-body{padding:12px 14px}
  54. }
  55. </style>
  56. </head>
  57. <body>
  58. <nav class="navbar">
  59. <span class="brand">🚛 车牌识别系统</span>
  60. <a href="/">监控首页</a>
  61. <a href="/video">视频预览</a>
  62. <a href="/locks">锁定管理</a>
  63. <a href="/help" class="active">帮助手册</a>
  64. </nav>
  65. <div class="container">
  66. <div class="toc">
  67. <h2>📋 目录</h2>
  68. <ol>
  69. <li><a href="#sec1">系统概述</a></li>
  70. <li><a href="#sec2">快速部署指南</a></li>
  71. <li><a href="#sec3">config.ini 完整配置说明</a></li>
  72. <li><a href="#sec4">RTSP 摄像头配置</a></li>
  73. <li><a href="#sec5">车牌识别上传流程</a></li>
  74. <li><a href="#sec6">MQTT 数据上报配置</a></li>
  75. <li><a href="#sec7">称重系统对接</a></li>
  76. <li><a href="#sec8">ROI 区域识别配置</a></li>
  77. <li><a href="#sec9">交替锁定机制</a></li>
  78. <li><a href="#sec10">登录认证与权限</a></li>
  79. <li><a href="#sec11">frpc 内网穿透</a></li>
  80. <li><a href="#sec12">SSL/HTTPS 配置</a></li>
  81. <li><a href="#sec13">系统监控与日志</a></li>
  82. <li><a href="#sec14">Web 管理功能</a></li>
  83. <li><a href="#sec15">数据库与备份</a></li>
  84. <li><a href="#sec16">常见问题 FAQ</a></li>
  85. </ol>
  86. </div>
  87. <!-- 1. 系统概述 -->
  88. <div class="card" id="sec1">
  89. <div class="card-title" onclick="toggleCard(this)">1. 系统概述 <span class="arrow">▼</span></div>
  90. <div class="card-body">
  91. <h3>系统简介</h3>
  92. <p>车牌识别系统(PlateRecApp)是一款基于 HyperLPR3 的实时车牌识别应用,运行在树莓派 5 (aarch64) 上,支持:</p>
  93. <ul>
  94. <li>多路 RTSP 摄像头实时抓拍识别(进场/出场/侧面进/侧面出)</li>
  95. <li>车牌识别结果自动上传至云端 API</li>
  96. <li>称重系统对接(TCP 协议),自动关联车牌与称重数据</li>
  97. <li>MQTT 协议实时推送识别结果</li>
  98. <li>飞书群消息通知(异常报警)</li>
  99. <li>Web 管理界面(监控首页、视频预览、系统配置、锁定管理等)</li>
  100. <li>frpc 内网穿透管理</li>
  101. <li>登录认证与角色权限控制</li>
  102. </ul>
  103. <h3>运行环境</h3>
  104. <table>
  105. <tr><th>项目</th><th>要求</th></tr>
  106. <tr><td>硬件</td><td>树莓派 5 8GB(推荐)</td></tr>
  107. <tr><td>系统</td><td>Debian 13 (trixie) / Ubuntu 24.04 aarch64</td></tr>
  108. <tr><td>依赖</td><td>HyperLPR3 SDK、FFmpeg、libcurl、OpenSSL、cJSON、Mosquitto</td></tr>
  109. <tr><td>反向代理</td><td>Nginx(HTTPS 对外服务)</td></tr>
  110. </table>
  111. <h3>目录结构</h3>
  112. <table>
  113. <tr><th>路径</th><th>说明</th></tr>
  114. <tr><td>PlateRecApp</td><td>主程序二进制</td></tr>
  115. <tr><td>config.ini</td><td>主配置文件</td></tr>
  116. <tr><td>config.txt</td><td>MD5 校验配置</td></tr>
  117. <tr><td>hyperlpr3/</td><td>HyperLPR3 SDK 模型文件</td></tr>
  118. <tr><td>assets/web/</td><td>Web 页面文件(HTML/CSS/JS)</td></tr>
  119. <tr><td>data/</td><td>数据库目录(auth.db、upload_records.db)</td></tr>
  120. <tr><td>photos/</td><td>抓拍图片存储目录</td></tr>
  121. </table>
  122. </div>
  123. </div>
  124. <!-- 2. 快速部署指南 -->
  125. <div class="card" id="sec2">
  126. <div class="card-title" onclick="toggleCard(this)">2. 快速部署指南 <span class="arrow">▼</span></div>
  127. <div class="card-body">
  128. <h3>编译部署</h3>
  129. <ol>
  130. <li>解压代码包:<code>tar xzf fix24_vXX.tar.gz</code></li>
  131. <li>编译:<code>cd fix24/build && cmake .. && make -j4</code></li>
  132. <li>部署文件到安装目录(如 <code>/opt/openAI/project/003.PlateRecAPP/</code>)</li>
  133. <li>复制 HTML 文件:<code>cp -r assets/web/ /安装目录/assets/web/</code></li>
  134. <li>配置 sudoers(frpc 管理需要):<code>sudo bash scripts/setup_frpc_sudoers.sh</code></li>
  135. <li>修改 <code>config.ini</code> 配置(参考下文各节)</li>
  136. <li>启动服务:<code>sudo systemctl restart PlateRecApp</code></li>
  137. </ol>
  138. <h3>systemd 服务配置</h3>
  139. <p>服务文件路径:<code>/etc/systemd/system/PlateRecApp.service</code></p>
  140. <div class="tip">关键配置:User=stevenroc(非 root 运行),需要 sudoers 授权 frpc 管理权限。WorkingDirectory 应指向安装目录。</div>
  141. <h3>密码重置</h3>
  142. <p>如忘记管理员密码,运行:<code>python3 reset_passwords.py</code></p>
  143. </div>
  144. </div>
  145. <!-- 3. config.ini 完整配置 -->
  146. <div class="card" id="sec3">
  147. <div class="card-title" onclick="toggleCard(this)">3. config.ini 完整配置说明 <span class="arrow">▼</span></div>
  148. <div class="card-body">
  149. <p>配置文件路径:<code>&lt;安装目录&gt;/config.ini</code>,ini 格式,section 和 key 均不区分大小写。</p>
  150. <h3>[config] 核心识别配置</h3>
  151. <table>
  152. <tr><th>参数</th><th>类型</th><th>默认值</th><th>说明</th></tr>
  153. <tr><td>project_name</td><td>string</td><td>-</td><td>项目名称</td></tr>
  154. <tr><td>point_number</td><td>string</td><td>-</td><td>站点编号</td></tr>
  155. <tr><td>throughway</td><td>string</td><td>-</td><td>通道名称</td></tr>
  156. <tr><td>rtsp_url_front_in</td><td>string</td><td>-</td><td>前侧进场摄像头 RTSP 地址</td></tr>
  157. <tr><td>rtsp_url_front_out</td><td>string</td><td>-</td><td>前侧出场摄像头 RTSP 地址</td></tr>
  158. <tr><td>rtsp_url_side_in</td><td>string</td><td>-</td><td>侧面进场摄像头 RTSP 地址</td></tr>
  159. <tr><td>rtsp_url_side_out</td><td>string</td><td>-</td><td>侧面出场摄像头 RTSP 地址</td></tr>
  160. <tr><td>app_api</td><td>string</td><td>-</td><td>云端上传 API 地址</td></tr>
  161. <tr><td>app_key</td><td>string</td><td>-</td><td>API 认证 Key</td></tr>
  162. <tr><td>app_secret</td><td>string</td><td>-</td><td>API 认证 Secret</td></tr>
  163. <tr><td>DEBUG_LOG</td><td>int</td><td>0</td><td>调试日志开关(0=关闭,1=开启)</td></tr>
  164. <tr><td>TestFlag</td><td>int</td><td>0</td><td>测试模式开关</td></tr>
  165. <tr><td>wType</td><td>int</td><td>0</td><td>称重类型(0=禁用,1=启用)</td></tr>
  166. <tr><td>TIME_WINDOW</td><td>int</td><td>5</td><td>识别时间窗口(分钟),同一车牌在窗口内不重复上传</td></tr>
  167. <tr><td>MAX_PHOTO_GROUPS</td><td>int</td><td>100</td><td>最大照片组数缓存</td></tr>
  168. <tr><td>in_out_interval</td><td>int</td><td>5</td><td>⚠️ 单位是<strong>分钟</strong>!交替锁定间隔(同一车牌进出最短时间),内部转为秒存储</td></tr>
  169. <tr><td>PLATE_CONFIDENCE_THRESHOLD</td><td>float</td><td>0.7</td><td>车牌识别置信度阈值(0~1),低于此值不上传</td></tr>
  170. <tr><td>PLATE_LOG_THRESHOLD</td><td>float</td><td>0.5</td><td>日志记录置信度阈值</td></tr>
  171. <tr><td>AlternatingMerge</td><td>int</td><td>0</td><td>交替合并开关(0=关闭,1=开启)</td></tr>
  172. <tr><td>hw_decode_mode</td><td>string</td><td>auto</td><td>硬件解码模式:auto/soft/drm</td></tr>
  173. <tr><td>hw_decode_device</td><td>string</td><td>/dev/dri/renderD128</td><td>硬件解码设备路径</td></tr>
  174. <tr><td>rtsp_transport</td><td>string</td><td>tcp</td><td>RTSP 传输协议:tcp/udp</td></tr>
  175. <tr><td>PhotoMaxCapacityMB</td><td>int</td><td>1024</td><td>照片目录最大容量(MB),超限自动清理旧照片</td></tr>
  176. <tr><td>LogRetentionDays</td><td>int</td><td>30</td><td>日志保留天数</td></tr>
  177. </table>
  178. <h3>[config] ROI 区域配置</h3>
  179. <table>
  180. <tr><th>参数</th><th>说明</th></tr>
  181. <tr><td>roi_in_x / roi_in_y</td><td>进场 ROI 区域左上角坐标</td></tr>
  182. <tr><td>roi_in_w / roi_in_h</td><td>进场 ROI 区域宽高</td></tr>
  183. <tr><td>roi_in_enabled</td><td>进场 ROI 开关(0/1)</td></tr>
  184. <tr><td>roi_out_x / roi_out_y</td><td>出场 ROI 区域左上角坐标</td></tr>
  185. <tr><td>roi_out_w / roi_out_h</td><td>出场 ROI 区域宽高</td></tr>
  186. <tr><td>roi_out_enabled</td><td>出场 ROI 开关(0/1)</td></tr>
  187. <tr><td>roi_debug_enabled</td><td>ROI 调试模式开关(0/1)</td></tr>
  188. </table>
  189. <div class="tip">ROI 可通过 Web 首页的可视化工具拖拽设置,也可在 config.ini 中手动填写坐标值。</div>
  190. <h3>[server] Web 服务配置</h3>
  191. <table>
  192. <tr><th>参数</th><th>说明</th></tr>
  193. <tr><td>ip</td><td>Web 服务监听地址(含端口),如 <code>0.0.0.0:8080</code></td></tr>
  194. </table>
  195. <h3>[mqtt] MQTT 上报配置</h3>
  196. <table>
  197. <tr><th>参数</th><th>默认值</th><th>说明</th></tr>
  198. <tr><td>MQTT_HOST</td><td>-</td><td>MQTT Broker 地址(填写后自动启用 MQTT)</td></tr>
  199. <tr><td>MQTT_PORT</td><td>1883</td><td>MQTT Broker 端口</td></tr>
  200. <tr><td>MQTT_USER</td><td>-</td><td>MQTT 用户名</td></tr>
  201. <tr><td>MQTT_PASS</td><td>-</td><td>MQTT 密码</td></tr>
  202. <tr><td>MQTT_TOPIC</td><td>-</td><td>推送主题</td></tr>
  203. <tr><td>MQTT_CLIENT_ID</td><td>-</td><td>客户端 ID</td></tr>
  204. <tr><td>PLATE_COLOR</td><td>-</td><td>车牌颜色标识</td></tr>
  205. <tr><td>VEHICLE_TYPE</td><td>-</td><td>车辆类型标识</td></tr>
  206. </table>
  207. <h3>[feishu] 飞书通知配置</h3>
  208. <table>
  209. <tr><th>参数</th><th>说明</th></tr>
  210. <tr><td>APP_ID</td><td>飞书应用 App ID</td></tr>
  211. <tr><td>APP_SECRET</td><td>飞书应用 App Secret</td></tr>
  212. <tr><td>CHAT_ID</td><td>飞书群聊 ID</td></tr>
  213. <tr><td>TIMEOUT_SECOND</td><td>请求超时时间(秒)</td></tr>
  214. <tr><td>WarningSigns</td><td>抑制紧急报警(1=抑制,0=正常)</td></tr>
  215. </table>
  216. <h3>[weight] 称重系统配置</h3>
  217. <table>
  218. <tr><th>参数</th><th>默认值</th><th>说明</th></tr>
  219. <tr><td>flagWeight</td><td>0</td><td>称重系统开关(0/1)</td></tr>
  220. <tr><td>weight_server_ip</td><td>-</td><td>称重服务器 IP</td></tr>
  221. <tr><td>weight_server_port</td><td>-</td><td>称重服务器端口</td></tr>
  222. <tr><td>weight_threshold_in</td><td>0</td><td>进场称重阈值(吨)</td></tr>
  223. <tr><td>weight_threshold_out</td><td>0</td><td>出场称重阈值(吨)</td></tr>
  224. <tr><td>default_entry_weight</td><td>0</td><td>默认进场重量</td></tr>
  225. <tr><td>default_exit_weight</td><td>0</td><td>默认出场重量</td></tr>
  226. <tr><td>weight_detection_time</td><td>5000</td><td>称重检测时间(毫秒)</td></tr>
  227. <tr><td>tcp_connect_timeout</td><td>3000</td><td>TCP 连接超时(毫秒)</td></tr>
  228. <tr><td>MAX_WEIGHT</td><td>100</td><td>最大称重值(吨)</td></tr>
  229. <tr><td>STABLE_SAMPLE_COUNT</td><td>5</td><td>稳定采样次数</td></tr>
  230. <tr><td>STABLE_THRESHOLD_KG</td><td>50</td><td>稳定判定阈值(公斤)</td></tr>
  231. <tr><td>CANDIDATE_DATA_COUNT</td><td>3</td><td>候选数据次数</td></tr>
  232. <tr><td>MAX_UPLOAD_RETRIES</td><td>3</td><td>上传最大重试次数</td></tr>
  233. <tr><td>RETRY_DELAY_MS</td><td>1000</td><td>重试延迟(毫秒)</td></tr>
  234. </table>
  235. <h3>[auth] 登录认证配置</h3>
  236. <table>
  237. <tr><th>参数</th><th>默认值</th><th>说明</th></tr>
  238. <tr><td>enabled</td><td>1</td><td>认证开关(0=关闭,1=开启)</td></tr>
  239. <tr><td>db_path</td><td>data/auth.db</td><td>认证数据库路径(相对安装目录)</td></tr>
  240. <tr><td>session_idle_timeout</td><td>1800</td><td>Session 空闲超时(秒)</td></tr>
  241. <tr><td>session_max_timeout</td><td>28800</td><td>Session 最大超时(秒)</td></tr>
  242. <tr><td>session_remember_timeout</td><td>604800</td><td>记住登录超时(秒)</td></tr>
  243. <tr><td>bcrypt_cost</td><td>12</td><td>bcrypt 加密轮数(10~14)</td></tr>
  244. <tr><td>max_failed_attempts</td><td>5</td><td>最大登录失败次数</td></tr>
  245. <tr><td>lockout_duration</td><td>900</td><td>锁定时长(秒)</td></tr>
  246. <tr><td>rate_limit_max</td><td>5</td><td>速率限制最大请求</td></tr>
  247. <tr><td>rate_limit_window</td><td>300</td><td>速率限制窗口(秒)</td></tr>
  248. </table>
  249. <h3>[ssl] HTTPS 配置</h3>
  250. <table>
  251. <tr><th>参数</th><th>说明</th></tr>
  252. <tr><td>enabled</td><td>SSL 开关(0/1)</td></tr>
  253. <tr><td>cert_path</td><td>SSL 证书路径</td></tr>
  254. <tr><td>key_path</td><td>SSL 私钥路径</td></tr>
  255. </table>
  256. <h3>[system] 系统监控配置(v37 启用历史存储)</h3>
  257. <table>
  258. <tr><th>参数</th><th>默认值</th><th>说明</th></tr>
  259. <tr><td>monitor_interval</td><td>2</td><td>监控采集间隔(秒),通过 delta 法计算 CPU 使用率</td></tr>
  260. <tr><td>temp_alert_threshold</td><td>70</td><td>温度告警阈值(°C)</td></tr>
  261. <tr><td>cpu_alert_threshold</td><td>90</td><td>CPU 告警阈值(%)</td></tr>
  262. <tr><td>db_path</td><td>data/system_metrics.db</td><td>监控数据库路径(SQLite)</td></tr>
  263. <tr><td>history_retention_days</td><td>7</td><td>原始数据保留天数</td></tr>
  264. <tr><td>aggregation_retention_days</td><td>365</td><td>聚合数据(小时/日)保留天数</td></tr>
  265. <tr><td>flush_time</td><td>23:20</td><td>每日定时刷盘时间(HH:MM),内存监控数据写入数据库</td></tr>
  266. </table>
  267. <h3>[frpc] 内网穿透配置</h3>
  268. <table>
  269. <tr><th>参数</th><th>默认值</th><th>说明</th></tr>
  270. <tr><td>config_path</td><td>-</td><td>frpc.toml 配置文件路径</td></tr>
  271. <tr><td>backup_path</td><td>-</td><td>配置备份路径</td></tr>
  272. <tr><td>protected_tunnels</td><td>-</td><td>受保护隧道名称(逗号分隔)</td></tr>
  273. <tr><td>restart_check_timeout</td><td>3</td><td>重启后检查超时(秒)</td></tr>
  274. <tr><td>auto_rollback</td><td>1</td><td>自动回滚开关(0/1)</td></tr>
  275. <tr><td>web_enabled</td><td>1</td><td>frpc Web 管理开关</td></tr>
  276. <tr><td>admin_addr</td><td>127.0.0.1</td><td>frpc Admin API 地址</td></tr>
  277. <tr><td>admin_port</td><td>7400</td><td>frpc Admin API 端口</td></tr>
  278. <tr><td>admin_user</td><td>-</td><td>frpc Admin 用户名</td></tr>
  279. <tr><td>admin_password</td><td>-</td><td>frpc Admin 密码</td></tr>
  280. </table>
  281. <h3>[terminal] 终端/SSH 配置</h3>
  282. <table>
  283. <tr><th>参数</th><th>默认值</th><th>说明</th></tr>
  284. <tr><td>ttyd_port</td><td>7681</td><td>ttyd Web 终端端口</td></tr>
  285. <tr><td>ttyd_credential</td><td>-</td><td>ttyd 登录凭据(user:password)</td></tr>
  286. <tr><td>ttyd_max_clients</td><td>5</td><td>ttyd 最大客户端数</td></tr>
  287. <tr><td>ssh_keys_path</td><td>-</td><td>SSH 公钥存储路径</td></tr>
  288. </table>
  289. <h3>[log] 日志配置(v36 内存缓冲)</h3>
  290. <table>
  291. <tr><th>参数</th><th>默认值</th><th>说明</th></tr>
  292. <tr><td>enabled</td><td>1</td><td>内存缓冲模式开关(1=内存缓冲,0=直写文件)</td></tr>
  293. <tr><td>log_file</td><td>PlateRecApp.log</td><td>日志文件路径</td></tr>
  294. <tr><td>buffer_size_mb</td><td>20</td><td>内存缓冲区上限(MB),满时丢弃最旧日志</td></tr>
  295. <tr><td>flush_time</td><td>23:20</td><td>每日定时刷盘时间(HH:MM),内存日志写入磁盘文件</td></tr>
  296. <tr><td>retention_days</td><td>30</td><td>日志文件保留天数,超期自动清理</td></tr>
  297. <tr><td>redirect_stdout</td><td>1</td><td>捕获 stdout/stderr 到内存缓冲区(0/1)</td></tr>
  298. <tr><td>auto_flush_on_exit</td><td>1</td><td>程序退出(SIGTERM/SIGINT)时立即刷盘(0/1)</td></tr>
  299. </table>
  300. <p><strong>v36 说明:</strong>启用内存缓冲后,所有日志先写入内存环形缓冲区,Web 日志页面直接从内存读取(零磁盘 I/O)。每日到达 <code>flush_time</code> 时批量写入 <code>PlateRecApp_YYYYMMDD.log</code>。设 <code>enabled=0</code> 可回退到传统直写文件模式。</p>
  301. </div>
  302. </div>
  303. <!-- 4. RTSP 摄像头配置 -->
  304. <div class="card" id="sec4">
  305. <div class="card-title" onclick="toggleCard(this)">4. RTSP 摄像头配置 <span class="arrow">▼</span></div>
  306. <div class="card-body">
  307. <h3>摄像头地址格式</h3>
  308. <p>标准 RTSP 地址格式:</p>
  309. <code>rtsp://用户名:密码@摄像头IP:554/stream</code>
  310. <h3>四路摄像头说明</h3>
  311. <table>
  312. <tr><th>参数</th><th>方向</th><th>说明</th></tr>
  313. <tr><td>rtsp_url_front_in</td><td>前→进</td><td>前方摄像头,捕捉进场车辆</td></tr>
  314. <tr><td>rtsp_url_front_out</td><td>前→出</td><td>前方摄像头,捕捉出场车辆</td></tr>
  315. <tr><td>rtsp_url_side_in</td><td>侧→进</td><td>侧面摄像头,捕捉进场车辆</td></tr>
  316. <tr><td>rtsp_url_side_out</td><td>侧→出</td><td>侧面摄像头,捕捉出场车辆</td></tr>
  317. </table>
  318. <h3>共享捕获模式</h3>
  319. <p>当 <code>rtsp_url_front_in</code> 与 <code>rtsp_url_front_out</code> 指向同一摄像头时,系统自动启用共享捕获模式,节省解码资源。</p>
  320. <h3>硬件解码</h3>
  321. <table>
  322. <tr><th>模式</th><th>值</th><th>说明</th></tr>
  323. <tr><td>自动</td><td>auto</td><td>优先硬件解码,不可用则回退软件</td></tr>
  324. <tr><td>软件解码</td><td>soft</td><td>CPU 解码,兼容性最好</td></tr>
  325. <tr><td>DRM 硬件</td><td>drm</td><td>使用 DRM 硬件加速解码(树莓派5推荐)</td></tr>
  326. </table>
  327. <div class="tip">树莓派 5 推荐配置:<code>hw_decode_mode=drm</code>,<code>hw_decode_device=/dev/dri/renderD128</code>,<code>rtsp_transport=tcp</code></div>
  328. </div>
  329. </div>
  330. <!-- 5. 车牌识别上传流程 -->
  331. <div class="card" id="sec5">
  332. <div class="card-title" onclick="toggleCard(this)">5. 车牌识别上传完整流程 <span class="arrow">▼</span></div>
  333. <div class="card-body">
  334. <h3>识别流程</h3>
  335. <ol>
  336. <li><strong>摄像头抓拍</strong>:RTSP 视频流实时解码,检测到车辆运动时触发抓拍</li>
  337. <li><strong>车牌识别</strong>:HyperLPR3 引擎识别车牌号,返回车牌文本 + 置信度</li>
  338. <li><strong>置信度过滤</strong>:识别结果低于 <code>PLATE_CONFIDENCE_THRESHOLD</code> 则丢弃</li>
  339. <li><strong>时间窗口去重</strong>:同一车牌在 <code>TIME_WINDOW</code> 分钟内不重复上传</li>
  340. <li><strong>交替锁定检查</strong>:同一车牌进出间隔低于 <code>in_out_interval</code> 分钟则锁定</li>
  341. <li><strong>ROI 过滤</strong>:如启用 ROI,只识别指定区域内的车牌</li>
  342. <li><strong>数据上传</strong>:通过 HTTP POST 将识别结果 + 抓拍照片上传至 <code>app_api</code></li>
  343. <li><strong>MQTT 推送</strong>:如启用 MQTT,同步推送识别结果</li>
  344. <li><strong>飞书通知</strong>:异常情况(识别失败、系统异常)发送飞书群消息</li>
  345. </ol>
  346. <h3>上传 API 请求格式</h3>
  347. <p>POST <code>app_api</code>,Headers 包含 <code>app_key</code> 和 <code>app_secret</code> 认证。</p>
  348. <div class="note">上传数据包含:车牌号、置信度、车牌颜色、抓拍时间、摄像头方向、照片文件(Base64 或 multipart)。</div>
  349. <h3>照片存储与清理</h3>
  350. <ul>
  351. <li>照片保存在 <code>photos/</code> 目录下,按日期分目录</li>
  352. <li>当照片总容量超过 <code>PhotoMaxCapacityMB</code> 时,自动清理最旧的照片</li>
  353. <li>清理时优先保留最近的照片,从最旧的日期目录开始删除</li>
  354. </ul>
  355. </div>
  356. </div>
  357. <!-- 6. MQTT 数据上报 -->
  358. <div class="card" id="sec6">
  359. <div class="card-title" onclick="toggleCard(this)">6. MQTT 数据上报配置 <span class="arrow">▼</span></div>
  360. <div class="card-body">
  361. <h3>启用条件</h3>
  362. <p>在 <code>[mqtt]</code> 段中填写 <code>MQTT_HOST</code> 即自动启用 MQTT 推送。</p>
  363. <h3>推送内容</h3>
  364. <p>每次车牌识别成功后,MQTT 推送 JSON 格式数据,包含:</p>
  365. <ul>
  366. <li>车牌号、车牌颜色、车辆类型</li>
  367. <li>识别置信度</li>
  368. <li>摄像头方向(进/出)</li>
  369. <li>识别时间戳</li>
  370. <li>站点编号</li>
  371. </ul>
  372. <h3>配置示例</h3>
  373. <pre style="background:#f5f5f5;padding:10px;border-radius:4px;font-size:12px;overflow-x:auto">[mqtt]
  374. MQTT_HOST=mqtt.example.com
  375. MQTT_PORT=1883
  376. MQTT_USER=username
  377. MQTT_PASS=password
  378. MQTT_TOPIC=plate/recognition
  379. MQTT_CLIENT_ID=plate_rec_station_01
  380. PLATE_COLOR=yellow
  381. VEHICLE_TYPE=truck</pre>
  382. <div class="warn">注意:MQTT 连接失败时系统会自动重连,不影响识别和上传功能。</div>
  383. </div>
  384. </div>
  385. <!-- 7. 称重系统 -->
  386. <div class="card" id="sec7">
  387. <div class="card-title" onclick="toggleCard(this)">7. 称重系统对接 <span class="arrow">▼</span></div>
  388. <div class="card-body">
  389. <h3>工作原理</h3>
  390. <p>称重系统通过 TCP 协议与称重地磅通信:</p>
  391. <ol>
  392. <li>车牌识别成功后,系统连接称重服务器</li>
  393. <li>读取当前称重数据</li>
  394. <li>将车牌与重量数据关联后一起上传</li>
  395. </ol>
  396. <h3>重量判定逻辑</h3>
  397. <ul>
  398. <li>连续 <code>STABLE_SAMPLE_COUNT</code> 次读数变化 < <code>STABLE_THRESHOLD_KG</code> 公斤,视为稳定</li>
  399. <li>稳定后取 <code>CANDIDATE_DATA_COUNT</code> 次读数的中值作为最终重量</li>
  400. <li>重量超过 <code>MAX_WEIGHT</code> 吨视为异常,丢弃</li>
  401. </ul>
  402. <h3>阈值说明</h3>
  403. <ul>
  404. <li><code>weight_threshold_in</code>:进场最低重量(吨),低于此值可能表示空车</li>
  405. <li><code>weight_threshold_out</code>:出场最低重量(吨)</li>
  406. <li><code>default_entry_weight</code>:无法获取称重数据时的默认进场重量</li>
  407. <li><code>default_exit_weight</code>:无法获取称重数据时的默认出场重量</li>
  408. </ul>
  409. </div>
  410. </div>
  411. <!-- 8. ROI -->
  412. <div class="card" id="sec8">
  413. <div class="card-title" onclick="toggleCard(this)">8. ROI 区域识别配置 <span class="arrow">▼</span></div>
  414. <div class="card-body">
  415. <h3>ROI 概念</h3>
  416. <p>ROI(Region of Interest)即感兴趣区域,用于限定车牌识别的有效区域,减少误识别。</p>
  417. <h3>配置方式</h3>
  418. <ul>
  419. <li><strong>Web 可视化</strong>:首页连接状态面板中可拖拽设置 ROI 区域</li>
  420. <li><strong>手动配置</strong>:在 config.ini 的 <code>[config]</code> 段填写坐标值</li>
  421. </ul>
  422. <h3>参数说明</h3>
  423. <table>
  424. <tr><th>参数</th><th>说明</th></tr>
  425. <tr><td>roi_in_x, roi_in_y</td><td>进场区域左上角坐标(像素)</td></tr>
  426. <tr><td>roi_in_w, roi_in_h</td><td>进场区域宽高(像素)</td></tr>
  427. <tr><td>roi_in_enabled</td><td>1=启用进场 ROI,0=关闭</td></tr>
  428. <tr><td>roi_out_x, roi_out_y</td><td>出场区域左上角坐标</td></tr>
  429. <tr><td>roi_out_w, roi_out_h</td><td>出场区域宽高</td></tr>
  430. <tr><td>roi_out_enabled</td><td>1=启用出场 ROI</td></tr>
  431. <tr><td>roi_debug_enabled</td><td>1=在抓拍图上绘制 ROI 框(调试用)</td></tr>
  432. </table>
  433. <div class="tip">开启 <code>roi_debug_enabled=1</code> 后,抓拍照片上会显示红色 ROI 框线,便于确认区域位置是否准确。</div>
  434. </div>
  435. </div>
  436. <!-- 9. 交替锁定 -->
  437. <div class="card" id="sec9">
  438. <div class="card-title" onclick="toggleCard(this)">9. 交替锁定机制 <span class="arrow">▼</span></div>
  439. <div class="card-body">
  440. <h3>机制说明</h3>
  441. <p>交替锁定防止同一车牌短时间内进出频繁触发(如车辆在门口调头)。同一车牌从"进"切换到"出"(或反之),必须间隔 <code>in_out_interval</code> 分钟以上。</p>
  442. <h3>工作流程</h3>
  443. <ol>
  444. <li>车牌 A 被识别为"进"方向</li>
  445. <li>5 分钟内(默认)车牌 A 再次被识别为"出"方向</li>
  446. <li>系统判定为异常,创建交替锁定记录</li>
  447. <li>锁定期间该车牌不会被上传</li>
  448. <li>超过 2 小时锁定自动清零,或手动在"锁定管理"页面清除</li>
  449. </ol>
  450. <h3>配置</h3>
  451. <table>
  452. <tr><th>参数</th><th>默认值</th><th>说明</th></tr>
  453. <tr><td>in_out_interval</td><td>5</td><td>交替锁定间隔(⚠️ 单位分钟),小于此间隔的进/出切换会被锁定</td></tr>
  454. <tr><td>AlternatingMerge</td><td>0</td><td>交替合并开关</td></tr>
  455. </table>
  456. <div class="warn"><code>in_out_interval</code> 单位是<strong>分钟</strong>,不是秒!config.ini 填 5 表示 5 分钟 = 300 秒。系统内部会自动 ×60 转换。</div>
  457. </div>
  458. </div>
  459. <!-- 10. 认证与权限 -->
  460. <div class="card" id="sec10">
  461. <div class="card-title" onclick="toggleCard(this)">10. 登录认证与权限 <span class="arrow">▼</span></div>
  462. <div class="card-body">
  463. <h3>角色定义</h3>
  464. <table>
  465. <tr><th>角色</th><th>Role值</th><th>可访问页面</th></tr>
  466. <tr><td>普通用户</td><td>0</td><td>首页、视频、称重、锁定管理</td></tr>
  467. <tr><td>管理员</td><td>1</td><td>普通用户 + 系统配置</td></tr>
  468. <tr><td>超级管理员</td><td>2</td><td>所有页面(含系统监控、frpc管理、SSH密钥、日志)</td></tr>
  469. </table>
  470. <h3>默认账号</h3>
  471. <table>
  472. <tr><th>用户名</th><th>密码</th><th>角色</th></tr>
  473. <tr><td>admin</td><td>zhongjin188A</td><td>超级管理员</td></tr>
  474. <tr><td>zhonjin</td><td>zhonjin</td><td>普通用户</td></tr>
  475. </table>
  476. <h3>安全特性</h3>
  477. <ul>
  478. <li>密码使用 bcrypt 加密存储(cost=12)</li>
  479. <li>连续 <code>max_failed_attempts</code> 次登录失败后锁定账号</li>
  480. <li>CSRF Token 防护所有状态变更请求</li>
  481. <li>Session 超时自动失效</li>
  482. <li>登录速率限制</li>
  483. </ul>
  484. <h3>密码重置</h3>
  485. <p>运行 <code>python3 reset_passwords.py</code>,脚本会自动查找 <code>data/auth.db</code> 并重置所有用户密码为默认值。</p>
  486. </div>
  487. </div>
  488. <!-- 11. frpc -->
  489. <div class="card" id="sec11">
  490. <div class="card-title" onclick="toggleCard(this)">11. frpc 内网穿透 <span class="arrow">▼</span></div>
  491. <div class="card-body">
  492. <h3>功能说明</h3>
  493. <p>系统内置 frpc 管理,支持:</p>
  494. <ul>
  495. <li>查看 frpc 运行状态和隧道列表</li>
  496. <li>在线编辑 frpc.toml 配置(自动备份)</li>
  497. <li>一键重启 frpc 服务(需 sudoers 配置)</li>
  498. <li>重启失败自动回滚配置</li>
  499. <li>受保护隧道标记,防止误删</li>
  500. </ul>
  501. <h3>sudoers 配置</h3>
  502. <p>PlateRecApp 以非 root 用户运行时,需要配置 sudoers 授权 frpc 管理权限:</p>
  503. <pre style="background:#f5f5f5;padding:10px;border-radius:4px;font-size:12px">sudo bash scripts/setup_frpc_sudoers.sh [运行用户名]</pre>
  504. </div>
  505. </div>
  506. <!-- 12. SSL -->
  507. <div class="card" id="sec12">
  508. <div class="card-title" onclick="toggleCard(this)">12. SSL/HTTPS 配置 <span class="arrow">▼</span></div>
  509. <div class="card-body">
  510. <h3>两种方式</h3>
  511. <ul>
  512. <li><strong>应用内置 SSL</strong>:在 <code>[ssl]</code> 段配置证书和私钥路径,PlateRecApp 直接提供 HTTPS</li>
  513. <li><strong>Nginx 反向代理</strong>(推荐):PlateRecApp 监听 HTTP,Nginx 处理 SSL 终止</li>
  514. </ul>
  515. <h3>config.ini 配置</h3>
  516. <pre style="background:#f5f5f5;padding:10px;border-radius:4px;font-size:12px">[ssl]
  517. enabled=1
  518. cert_path=/path/to/cert.pem
  519. key_path=/path/to/key.pem</pre>
  520. </div>
  521. </div>
  522. <!-- 13. 监控与日志 -->
  523. <div class="card" id="sec13">
  524. <div class="card-title" onclick="toggleCard(this)">13. 系统监控与日志 <span class="arrow">▼</span></div>
  525. <div class="card-body">
  526. <h3>系统监控(实时)</h3>
  527. <ul>
  528. <li>CPU 使用率(含每核使用率、1/5/15分钟负载均值)</li>
  529. <li>内存使用率(总量/已用/可用)</li>
  530. <li>磁盘使用率(根分区容量/已用/可用)</li>
  531. <li>CPU 温度监控,超阈值告警(阈值由 <code>temp_alert_threshold</code> 配置)</li>
  532. <li>CPU 使用率告警(阈值由 <code>cpu_alert_threshold</code> 配置)</li>
  533. <li>PlateRecApp 进程资源占用(RSS 内存、CPU 占用)</li>
  534. <li>frpc 运行状态</li>
  535. <li>MQTT 连接状态</li>
  536. <li>称重系统连接状态</li>
  537. </ul>
  538. <p>数据来源:通过读取 <code>/proc</code>、<code>/sys</code>、<code>statvfs</code> 等系统接口实时采集,页面每 2 秒自动刷新。</p>
  539. <h3>历史监控数据(v37 新增)</h3>
  540. <p>系统自动采集并存储监控数据到 SQLite 数据库(<code>data/system_metrics.db</code>),支持历史趋势查询。</p>
  541. <ul>
  542. <li><strong>采集间隔</strong>:<code>monitor_interval</code>(默认 2 秒),通过 delta 法计算 CPU 使用率,不阻塞采集线程</li>
  543. <li><strong>定时刷盘</strong>:每日 <code>flush_time</code>(默认 23:20)将内存监控数据批量写入 <code>system_metrics.db</code>,减少 SD 卡写入次数(v38 起)</li>
  544. <li><strong>三级存储</strong>:原始数据(2秒间隔)→ 小时聚合 → 日聚合,自动降采样</li>
  545. <li><strong>自动清理</strong>:全量数据保留 <code>history_retention_days</code> 天(默认 7 天),聚合数据保留 <code>aggregation_retention_days</code> 天(默认 365 天)</li>
  546. <li><strong>历史查询 API</strong>:<code>/api/monitor/history?range=1h|6h|24h|7d|30d</code>,自动选择合适的数据粒度</li>
  547. <li><strong>统计接口</strong>:<code>/api/monitor/stats</code> 返回数据库记录数和运行状态</li>
  548. </ul>
  549. <div class="tip">💡 历史数据页面路径:<code>/history</code>,可查看 CPU、内存、温度、磁盘等指标的趋势图表。</div>
  550. <h3>SD 卡写入保护策略(v38)</h3>
  551. <p>系统针对树莓派 SD 卡/eMMC 写入寿命问题,统一采用<strong>"内存缓冲 + 每日定时写盘"</strong>策略:</p>
  552. <ul>
  553. <li><strong>系统监控</strong>:采集数据全部缓存在内存(~5MB),每天 23:20 一次性写入 <code>system_metrics.db</code>。相比每 30 秒写盘,每日写入从 <strong>2880 次降至 1 次</strong></li>
  554. <li><strong>运行日志</strong>:stdout/stderr 通过 pipe 重定向到内存环形缓冲区,Web 日志页面实时从内存读取。每天 23:20 写入 <code>PlateRecApp_YYYYMMDD.log</code></li>
  555. <li><strong>旧版日志清理自动禁用</strong>:内存模式启用时,凌晨 2 点的旧版 <code>daily_log_cleanup()</code>(copytruncate)自动跳过,避免无意义的 SD 卡读写</li>
  556. <li><strong>退出安全刷盘</strong>:程序退出(SIGTERM/SIGINT)时自动执行最后一次刷盘,防止数据丢失</li>
  557. </ul>
  558. <div class="note">💡 两个子系统的 <code>flush_time</code> 均配置为 <code>23:20</code>,分别在 <code>[log]</code> 和 <code>[system]</code> 段中设置,可独立调整。</div>
  559. <h3>日志管理(v36 内存缓冲)</h3>
  560. <ul>
  561. <li><strong>内存缓冲模式</strong>(<code>enabled=1</code>,默认):所有日志写入内存环形缓冲区,Web 日志页面直接从内存读取,零磁盘 I/O</li>
  562. <li><strong>直写文件模式</strong>(<code>enabled=0</code>):传统模式,日志直接写入文件</li>
  563. <li><strong>定时刷盘</strong>:每日 <code>flush_time</code>(默认 23:20)自动将内存日志批量写入 <code>PlateRecApp_YYYYMMDD.log</code></li>
  564. <li><strong>退出刷盘</strong>:<code>auto_flush_on_exit=1</code> 时,收到 SIGTERM/SIGINT 信号立即刷盘,防止日志丢失</li>
  565. <li><strong>stdout 捕获</strong>:<code>redirect_stdout=1</code> 时,stdout/stderr 通过 pipe 重定向到内存缓冲区,统一收集</li>
  566. <li>Web 界面实时查看日志(支持 Tail 模式),显示内存使用率和缓冲状态</li>
  567. <li>超期日志文件自动清理(由 <code>retention_days</code> 控制)</li>
  568. <li>支持手动触发刷盘(Web 页面操作)</li>
  569. </ul>
  570. </div>
  571. </div>
  572. <!-- 14. Web管理 -->
  573. <div class="card" id="sec14">
  574. <div class="card-title" onclick="toggleCard(this)">14. Web 管理功能 <span class="arrow">▼</span></div>
  575. <div class="card-body">
  576. <h3>页面列表</h3>
  577. <table>
  578. <tr><th>页面</th><th>路径</th><th>权限</th><th>说明</th></tr>
  579. <tr><td>监控首页</td><td>/</td><td>所有用户</td><td>实时监控、识别记录、连接状态、ROI设置</td></tr>
  580. <tr><td>视频预览</td><td>/video</td><td>所有用户</td><td>实时视频流预览</td></tr>
  581. <tr><td>称重记录</td><td>/weight</td><td>所有用户</td><td>称重数据查看</td></tr>
  582. <tr><td>锁定管理</td><td>/locks</td><td>所有用户</td><td>交替锁定记录查看和清除</td></tr>
  583. <tr><td>帮助手册</td><td>/help</td><td>超级管理员</td><td>系统配置文档</td></tr>
  584. <tr><td>系统配置</td><td>/config</td><td>管理员+</td><td>config.ini 在线编辑</td></tr>
  585. <tr><td>系统监控</td><td>/system</td><td>超级管理员</td><td>CPU/内存/温度/磁盘监控</td></tr>
  586. <tr><td>frpc 管理</td><td>/frpc</td><td>超级管理员</td><td>内网穿透状态和配置</td></tr>
  587. <tr><td>SSH 密钥</td><td>/ssh-keys</td><td>超级管理员</td><td>SSH 公钥管理</td></tr>
  588. <tr><td>日志管理</td><td>/logs</td><td>超级管理员</td><td>系统日志查看</td></tr>
  589. <tr><td>登录</td><td>/login</td><td>公开</td><td>用户登录页面</td></tr>
  590. </table>
  591. </div>
  592. </div>
  593. <!-- 15. 数据库 -->
  594. <div class="card" id="sec15">
  595. <div class="card-title" onclick="toggleCard(this)">15. 数据库与备份 <span class="arrow">▼</span></div>
  596. <div class="card-body">
  597. <h3>数据库文件</h3>
  598. <table>
  599. <tr><th>文件</th><th>路径</th><th>说明</th></tr>
  600. <tr><td>认证数据库</td><td>data/auth.db</td><td>用户账号、密码、Session</td></tr>
  601. <tr><td>识别记录</td><td>data/upload_records.db</td><td>车牌识别上传记录</td></tr>
  602. <tr><td>系统监控</td><td>data/system_metrics.db</td><td>性能监控时序数据(原始+小时聚合+日聚合)</td></tr>
  603. </table>
  604. <div class="tip">v29 版本起,所有数据库统一存放在 data/ 目录下。系统首次启动时会自动将旧路径数据库迁移到新位置(旧文件保留为备份)。</div>
  605. <h3>备份建议</h3>
  606. <ul>
  607. <li>定期备份 <code>data/</code> 目录和 <code>config.ini</code></li>
  608. <li>frpc 配置修改时会自动备份到 <code>backup_path</code> 指定位置</li>
  609. <li>照片数据在 <code>PhotoMaxCapacityMB</code> 限制内自动管理</li>
  610. </ul>
  611. </div>
  612. </div>
  613. <!-- 16. FAQ -->
  614. <div class="card" id="sec16">
  615. <div class="card-title" onclick="toggleCard(this)">16. 常见问题 FAQ <span class="arrow">▼</span></div>
  616. <div class="card-body">
  617. <h3>Q: 摄像头连接失败怎么办?</h3>
  618. <p>A: 检查以下几点:</p>
  619. <ul>
  620. <li>确认 RTSP 地址格式正确,在 VLC 中测试能否播放</li>
  621. <li>检查网络连通性:<code>ping 摄像头IP</code></li>
  622. <li>尝试修改 <code>rtsp_transport=tcp</code>(比 UDP 更稳定)</li>
  623. <li>查看日志:<code>tail -f PlateRecApp.log</code></li>
  624. </ul>
  625. <h3>Q: 识别率低怎么办?</h3>
  626. <p>A: 优化建议:</p>
  627. <ul>
  628. <li>启用 ROI 区域,缩小识别范围到车道区域</li>
  629. <li>调整 <code>PLATE_CONFIDENCE_THRESHOLD</code>(适当降低可增加识别率,但可能增加误识别)</li>
  630. <li>确保摄像头角度和光照条件良好</li>
  631. <li>开启 <code>roi_debug_enabled=1</code> 确认 ROI 区域位置</li>
  632. </ul>
  633. <h3>Q: frpc 重启失败?</h3>
  634. <p>A: 检查:</p>
  635. <ul>
  636. <li>确认已配置 sudoers:<code>sudo bash scripts/setup_frpc_sudoers.sh</code></li>
  637. <li>检查 frpc.toml 配置语法是否正确</li>
  638. <li>查看 frpc 服务状态:<code>systemctl status frpc</code></li>
  639. <li>查看 frpc 日志:<code>journalctl -u frpc -n 50</code></li>
  640. </ul>
  641. <h3>Q: 登录后页面显示 403?</h3>
  642. <p>A: 这是因为当前用户角色没有该页面的访问权限。普通用户无法访问配置和管理页面,需要管理员或超级管理员账号。</p>
  643. <h3>Q: 如何修改密码?</h3>
  644. <p>A: 目前通过命令行重置:</p>
  645. <pre style="background:#f5f5f5;padding:10px;border-radius:4px;font-size:12px">python3 reset_passwords.py</pre>
  646. <h3>Q: 数据库路径错误怎么办?</h3>
  647. <p>A: v29 版本起数据库统一在 <code>data/</code> 目录。如果是从旧版升级,启动时会自动迁移。如迁移失败,手动将 <code>upload_records.db</code> 和 <code>upload_records_auth.db</code> 复制到 <code>data/</code> 目录并重命名。</p>
  648. <h3>Q: in_out_interval 填 5 是 5 秒还是 5 分钟?</h3>
  649. <p>A: <strong>5 分钟</strong>。这个参数的单位是分钟,不是秒。系统内部会自动乘以 60 转换为秒。填 5 = 300 秒。</p>
  650. </div>
  651. </div>
  652. </div>
  653. <script>
  654. function toggleCard(el) {
  655. el.classList.toggle('collapsed');
  656. var body = el.nextElementSibling;
  657. body.classList.toggle('hidden');
  658. }
  659. </script>
  660. </body>
  661. </html>