From be35a90b836fe7652aad4181bea8685d27373e5c Mon Sep 17 00:00:00 2001 From: ZhaiSoul <842607283@qq.com> Date: Tue, 29 Apr 2025 21:20:14 +0800 Subject: [PATCH] add docs chinese i18n --- docs/docusaurus.config.ts | 16 + docs/i18n/zh/code.json | 444 +++++++ .../current.json | 662 +++++++++++ .../current/configuration/advanced.md | 211 ++++ .../current/configuration/audio_detectors.md | 77 ++ .../current/configuration/authentication.md | 106 ++ .../current/configuration/autotracking.md | 173 +++ .../configuration/bird_classification.md | 72 ++ .../current/configuration/birdseye.md | 114 ++ .../current/configuration/camera_specific.md | 232 ++++ .../current/configuration/cameras.md | 139 +++ .../current/configuration/face_recognition.md | 142 +++ .../current/configuration/ffmpeg_presets.md | 79 ++ .../current/configuration/genai.md | 230 ++++ .../configuration/hardware_acceleration.md | 348 ++++++ .../current/configuration/index.md | 263 ++++ .../license_plate_recognition.md | 308 +++++ .../current/configuration/live.md | 242 ++++ .../current/configuration/masks.md | 85 ++ .../current/configuration/metrics.md | 99 ++ .../current/configuration/motion_detection.md | 105 ++ .../current/configuration/notifications.md | 75 ++ .../current/configuration/object_detectors.md | 1056 +++++++++++++++++ .../current/configuration/object_filters.md | 57 + .../current/configuration/objects.md | 28 + .../current/configuration/pwa.md | 24 + .../current/configuration/record.md | 192 +++ .../current/configuration/reference.md | 912 ++++++++++++++ .../current/configuration/restream.md | 167 +++ .../current/configuration/review.md | 75 ++ .../current/configuration/semantic_search.md | 116 ++ .../current/configuration/snapshots.md | 12 + .../configuration/stationary_objects.md | 54 + .../current/configuration/tls.md | 72 ++ .../current/configuration/zones.md | 176 +++ .../development/contributing-boards.md | 93 ++ .../current/development/contributing.md | 244 ++++ .../current/frigate/camera_setup.md | 39 + .../current/frigate/glossary.md | 57 + .../current/frigate/hardware.md | 206 ++++ .../current/frigate/index.md | 29 + .../current/frigate/installation.md | 437 +++++++ .../current/frigate/video_pipeline.md | 69 ++ .../current/guides/configuring_go2rtc.md | 118 ++ .../current/guides/getting_started.md | 317 +++++ .../current/guides/ha_network_storage.md | 40 + .../current/guides/ha_notifications.md | 50 + .../current/guides/reverse_proxy.md | 179 +++ .../current/integrations/api.md | 0 .../current/integrations/home-assistant.md | 278 +++++ .../current/integrations/mqtt.md | 391 ++++++ .../current/integrations/plus.md | 78 ++ .../integrations/third_party_extensions.md | 28 + .../current/mdx.md | 17 + .../current/plus/faq.md | 34 + .../current/plus/first_model.md | 69 ++ .../current/plus/improving_model.md | 54 + .../current/plus/index.md | 88 ++ .../current/troubleshooting/edgetpu.md | 84 ++ .../current/troubleshooting/faqs.md | 112 ++ .../current/troubleshooting/recordings.md | 82 ++ .../zh/docusaurus-theme-classic/footer.json | 18 + .../zh/docusaurus-theme-classic/navbar.json | 26 + 63 files changed, 10400 insertions(+) create mode 100644 docs/i18n/zh/code.json create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current.json create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/advanced.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/audio_detectors.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/authentication.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/autotracking.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/bird_classification.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/birdseye.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/camera_specific.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/cameras.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/face_recognition.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/ffmpeg_presets.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/genai.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/hardware_acceleration.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/index.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/license_plate_recognition.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/live.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/masks.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/metrics.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/motion_detection.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/notifications.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/object_detectors.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/object_filters.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/objects.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/pwa.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/record.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/reference.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/restream.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/review.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/semantic_search.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/snapshots.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/stationary_objects.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/tls.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/zones.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/development/contributing-boards.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/development/contributing.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/frigate/camera_setup.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/frigate/glossary.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/frigate/hardware.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/frigate/index.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/frigate/installation.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/frigate/video_pipeline.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/guides/configuring_go2rtc.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/guides/getting_started.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/guides/ha_network_storage.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/guides/ha_notifications.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/guides/reverse_proxy.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/integrations/api.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/integrations/home-assistant.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/integrations/mqtt.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/integrations/plus.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/integrations/third_party_extensions.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/mdx.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/plus/faq.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/plus/first_model.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/plus/improving_model.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/plus/index.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/edgetpu.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/faqs.md create mode 100644 docs/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/recordings.md create mode 100644 docs/i18n/zh/docusaurus-theme-classic/footer.json create mode 100644 docs/i18n/zh/docusaurus-theme-classic/navbar.json diff --git a/docs/docusaurus.config.ts b/docs/docusaurus.config.ts index 865cb53d2..39d8369e7 100644 --- a/docs/docusaurus.config.ts +++ b/docs/docusaurus.config.ts @@ -17,6 +17,18 @@ const config: Config = { markdown: { mermaid: true, }, + i18n: { + defaultLocale: 'en', + locales: ['en', 'zh'], + localeConfigs: { + en: { + label: 'English', + }, + zh: { + label: '简体中文', + }, + }, + }, themeConfig: { algolia: { appId: 'WIURGBNBPY', @@ -82,6 +94,10 @@ const config: Config = { label: 'Demo', position: 'right', }, + { + type: 'localeDropdown', + position: 'right', + }, { href: 'https://github.com/blakeblackshear/frigate', label: 'GitHub', diff --git a/docs/i18n/zh/code.json b/docs/i18n/zh/code.json new file mode 100644 index 000000000..9e366efaa --- /dev/null +++ b/docs/i18n/zh/code.json @@ -0,0 +1,444 @@ +{ + "theme.ErrorPageContent.title": { + "message": "页面崩溃", + "description": "页面崩溃时显示的标题" + }, + "theme.blog.archive.title": { + "message": "归档", + "description": "博客归档页面的标题" + }, + "theme.blog.archive.description": { + "message": "归档", + "description": "博客归档页面的描述" + }, + "theme.BackToTopButton.buttonAriaLabel": { + "message": "返回顶部", + "description": "返回顶部按钮的ARIA标签" + }, + "theme.blog.paginator.navAriaLabel": { + "message": "博客列表导航", + "description": "博客分页导航的ARIA标签" + }, + "theme.blog.paginator.newerEntries": { + "message": "更新的文章", + "description": "导航到较新博客文章的标签" + }, + "theme.blog.paginator.olderEntries": { + "message": "更早的文章", + "description": "导航到较旧博客文章的标签" + }, + "theme.blog.post.paginator.navAriaLabel": { + "message": "博客文章导航", + "description": "博客文章分页导航的ARIA标签" + }, + "theme.blog.post.paginator.newerPost": { + "message": "更新的文章", + "description": "导航到较新博客文章的按钮标签" + }, + "theme.blog.post.paginator.olderPost": { + "message": "更早的文章", + "description": "导航到较旧博客文章的按钮标签" + }, + "theme.colorToggle.ariaLabel": { + "message": "切换暗色/亮色模式(当前为{mode})", + "description": "导航栏颜色模式切换的ARIA标签" + }, + "theme.colorToggle.ariaLabel.mode.dark": { + "message": "暗色模式", + "description": "暗色模式的名称" + }, + "theme.colorToggle.ariaLabel.mode.light": { + "message": "亮色模式", + "description": "亮色模式的名称" + }, + "theme.docs.breadcrumbs.navAriaLabel": { + "message": "面包屑导航", + "description": "面包屑导航的ARIA标签" + }, + "theme.docs.DocCard.categoryDescription.plurals": { + "message": "1个项目|{count}个项目", + "description": "分类卡片默认描述,显示该分类包含的项目数量" + }, + "theme.docs.paginator.navAriaLabel": { + "message": "文档页面导航", + "description": "文档分页导航的ARIA标签" + }, + "theme.docs.paginator.previous": { + "message": "上一篇", + "description": "导航到上一篇文档的标签" + }, + "theme.docs.paginator.next": { + "message": "下一篇", + "description": "导航到下一篇文档的标签" + }, + "theme.tags.tagsPageLink": { + "message": "查看所有标签", + "description": "指向标签列表页面的链接标签" + }, + "theme.docs.tagDocListPageTitle.nDocsTagged": { + "message": "1篇文档标记|{count}篇文档标记", + "description": "\"{count}篇文档标记\"的复数化标签" + }, + "theme.docs.tagDocListPageTitle": { + "message": "{nDocsTagged} \"{tagName}\"", + "description": "文档标签页面的标题" + }, + "theme.docs.versionBadge.label": { + "message": "版本: {versionLabel}" + }, + "theme.docs.versions.unreleasedVersionLabel": { + "message": "这是{siteTitle} {versionLabel}版本的未发布文档。", + "description": "告知用户正在浏览未发布文档版本的标签" + }, + "theme.docs.versions.unmaintainedVersionLabel": { + "message": "这是{siteTitle} {versionLabel}版本的文档,已不再积极维护。", + "description": "告知用户正在浏览未维护文档版本的标签" + }, + "theme.docs.versions.latestVersionSuggestionLabel": { + "message": "查看最新文档,请访问{latestVersionLink}({versionLabel})。", + "description": "建议用户查看最新版本的标签" + }, + "theme.docs.versions.latestVersionLinkLabel": { + "message": "最新版本", + "description": "最新版本建议链接的标签" + }, + "theme.common.editThisPage": { + "message": "编辑此页", + "description": "编辑当前页面的链接标签" + }, + "theme.common.headingLinkTitle": { + "message": "直达{heading}", + "description": "指向标题的链接标题" + }, + "theme.lastUpdated.atDate": { + "message": "于{date}", + "description": "描述页面最后更新日期的词语" + }, + "theme.lastUpdated.byUser": { + "message": "由{user}", + "description": "描述页面最后更新者的词语" + }, + "theme.lastUpdated.lastUpdatedAtBy": { + "message": "最后更新{atDate}{byUser}", + "description": "显示页面最后更新时间和更新者的句子" + }, + "theme.NotFound.title": { + "message": "页面未找到", + "description": "404页面的标题" + }, + "theme.navbar.mobileVersionsDropdown.label": { + "message": "版本", + "description": "移动视图下导航栏版本下拉菜单的标签" + }, + "theme.tags.tagsListLabel": { + "message": "标签:", + "description": "标签列表旁的标签" + }, + "theme.AnnouncementBar.closeButtonAriaLabel": { + "message": "关闭", + "description": "公告栏关闭按钮的ARIA标签" + }, + "theme.admonition.caution": { + "message": "注意", + "description": "Caution警告框(:::caution)的默认标签" + }, + "theme.admonition.danger": { + "message": "危险", + "description": "Danger警告框(:::danger)的默认标签" + }, + "theme.admonition.info": { + "message": "信息", + "description": "Info提示框(:::info)的默认标签" + }, + "theme.admonition.note": { + "message": "备注", + "description": "Note提示框(:::note)的默认标签" + }, + "theme.admonition.tip": { + "message": "提示", + "description": "Tip提示框(:::tip)的默认标签" + }, + "theme.admonition.warning": { + "message": "警告", + "description": "Warning警告框(:::warning)的默认标签" + }, + "theme.blog.sidebar.navAriaLabel": { + "message": "博客最新文章导航", + "description": "博客侧边栏最新文章的ARIA标签" + }, + "theme.CodeBlock.copied": { + "message": "已复制", + "description": "代码块复制按钮的标签" + }, + "theme.CodeBlock.copyButtonAriaLabel": { + "message": "复制代码到剪贴板", + "description": "代码块复制按钮的ARIA标签" + }, + "theme.CodeBlock.copy": { + "message": "复制", + "description": "代码块复制按钮的标签" + }, + "theme.CodeBlock.wordWrapToggle": { + "message": "切换自动换行", + "description": "代码块自动换行切换按钮的标题属性" + }, + "theme.DocSidebarItem.expandCategoryAriaLabel": { + "message": "展开侧边栏分类'{label}'", + "description": "展开侧边栏分类的ARIA标签" + }, + "theme.DocSidebarItem.collapseCategoryAriaLabel": { + "message": "折叠侧边栏分类'{label}'", + "description": "折叠侧边栏分类的ARIA标签" + }, + "theme.NavBar.navAriaLabel": { + "message": "主导航", + "description": "主导航的ARIA标签" + }, + "theme.NotFound.p1": { + "message": "找不到您要访问的内容。", + "description": "404页面的第一段文字" + }, + "theme.NotFound.p2": { + "message": "请联系该网站所有者,告知他们原始URL的链接已失效。", + "description": "404页面的第二段文字" + }, + "theme.navbar.mobileLanguageDropdown.label": { + "message": "语言", + "description": "移动端语言切换下拉菜单的标签" + }, + "theme.TOCCollapsible.toggleButtonLabel": { + "message": "本页目录", + "description": "可折叠目录组件的按钮标签" + }, + "theme.blog.post.readMore": { + "message": "阅读更多", + "description": "博客文章摘要中链接到全文的标签" + }, + "theme.blog.post.readMoreLabel": { + "message": "阅读更多关于{title}", + "description": "从摘要链接到完整博客文章的ARIA标签" + }, + "theme.blog.post.readingTime.plurals": { + "message": "1分钟阅读|{readingTime}分钟阅读", + "description": "\"{readingTime}分钟阅读\"的复数化标签" + }, + "theme.docs.breadcrumbs.home": { + "message": "首页", + "description": "面包屑导航中首页的ARIA标签" + }, + "theme.docs.sidebar.collapseButtonTitle": { + "message": "收起侧边栏", + "description": "文档侧边栏收起按钮的标题属性" + }, + "theme.docs.sidebar.collapseButtonAriaLabel": { + "message": "收起侧边栏", + "description": "文档侧边栏收起按钮的ARIA标签" + }, + "theme.docs.sidebar.navAriaLabel": { + "message": "文档侧边栏", + "description": "侧边栏导航的ARIA标签" + }, + "theme.docs.sidebar.closeSidebarButtonAriaLabel": { + "message": "关闭导航栏", + "description": "移动端侧边栏关闭按钮的ARIA标签" + }, + "theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": { + "message": "← 返回主菜单", + "description": "移动端导航栏二级菜单中返回主菜单的按钮标签" + }, + "theme.docs.sidebar.toggleSidebarButtonAriaLabel": { + "message": "切换导航栏", + "description": "移动端导航汉堡菜单按钮的ARIA标签" + }, + "theme.docs.sidebar.expandButtonTitle": { + "message": "展开侧边栏", + "description": "文档侧边栏展开按钮的标题和ARIA标签" + }, + "theme.docs.sidebar.expandButtonAriaLabel": { + "message": "展开侧边栏", + "description": "文档侧边栏展开按钮的ARIA标签" + }, + "theme.SearchBar.seeAll": { + "message": "查看全部{count}个结果" + }, + "theme.SearchPage.documentsFound.plurals": { + "message": "找到1篇文档|找到{count}篇文档", + "description": "\"{count}篇文档\"的复数化标签" + }, + "theme.SearchPage.existingResultsTitle": { + "message": "搜索\"{query}\"的结果", + "description": "非空查询的搜索页面标题" + }, + "theme.SearchPage.emptyResultsTitle": { + "message": "搜索文档", + "description": "空查询的搜索页面标题" + }, + "theme.SearchPage.inputPlaceholder": { + "message": "输入搜索内容", + "description": "搜索页面输入框的占位符" + }, + "theme.SearchPage.inputLabel": { + "message": "搜索", + "description": "搜索页面输入框的ARIA标签" + }, + "theme.SearchPage.algoliaLabel": { + "message": "由Algolia提供搜索", + "description": "Algolia标识的ARIA标签" + }, + "theme.SearchPage.noResultsText": { + "message": "未找到结果", + "description": "空搜索结果的提示文本" + }, + "theme.SearchPage.fetchingNewResults": { + "message": "正在获取新结果...", + "description": "获取新搜索结果的提示文本" + }, + "theme.SearchBar.label": { + "message": "搜索", + "description": "搜索按钮的ARIA标签和占位符" + }, + "theme.SearchModal.searchBox.resetButtonTitle": { + "message": "清空搜索", + "description": "搜索框重置按钮的标签和ARIA标签" + }, + "theme.SearchModal.searchBox.cancelButtonText": { + "message": "取消", + "description": "搜索框取消按钮的标签和ARIA标签" + }, + "theme.SearchModal.startScreen.recentSearchesTitle": { + "message": "最近搜索", + "description": "最近搜索的标题" + }, + "theme.SearchModal.startScreen.noRecentSearchesText": { + "message": "无最近搜索记录", + "description": "无最近搜索时的提示文本" + }, + "theme.SearchModal.startScreen.saveRecentSearchButtonTitle": { + "message": "保存此搜索", + "description": "保存最近搜索按钮的标签" + }, + "theme.SearchModal.startScreen.removeRecentSearchButtonTitle": { + "message": "从历史记录中移除", + "description": "移除最近搜索按钮的标签" + }, + "theme.SearchModal.startScreen.favoriteSearchesTitle": { + "message": "收藏搜索", + "description": "收藏搜索的标题" + }, + "theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle": { + "message": "从收藏中移除", + "description": "移除收藏搜索按钮的标签" + }, + "theme.SearchModal.errorScreen.titleText": { + "message": "无法获取结果", + "description": "搜索模态框错误界面的标题" + }, + "theme.SearchModal.errorScreen.helpText": { + "message": "请检查您的网络连接。", + "description": "搜索模态框错误界面的帮助文本" + }, + "theme.SearchModal.footer.selectText": { + "message": "选择", + "description": "回车键功能的说明文本" + }, + "theme.SearchModal.footer.selectKeyAriaLabel": { + "message": "回车键", + "description": "选择功能的回车键ARIA标签" + }, + "theme.SearchModal.footer.navigateText": { + "message": "导航", + "description": "上下箭头键功能的说明文本" + }, + "theme.SearchModal.footer.navigateUpKeyAriaLabel": { + "message": "上箭头键", + "description": "向上导航的上箭头键ARIA标签" + }, + "theme.SearchModal.footer.navigateDownKeyAriaLabel": { + "message": "下箭头键", + "description": "向下导航的下箭头键ARIA标签" + }, + "theme.SearchModal.footer.closeText": { + "message": "关闭", + "description": "ESC键功能的说明文本" + }, + "theme.SearchModal.footer.closeKeyAriaLabel": { + "message": "ESC键", + "description": "关闭模态框的ESC键ARIA标签" + }, + "theme.SearchModal.footer.searchByText": { + "message": "搜索由", + "description": "Algolia搜索标识的说明文本" + }, + "theme.SearchModal.noResultsScreen.noResultsText": { + "message": "没有找到", + "description": "无搜索结果时的提示文本前缀" + }, + "theme.SearchModal.noResultsScreen.suggestedQueryText": { + "message": "尝试搜索", + "description": "无结果时建议查询的提示文本" + }, + "theme.SearchModal.noResultsScreen.reportMissingResultsText": { + "message": "认为应该有搜索结果?", + "description": "报告缺失结果的问题文本" + }, + "theme.SearchModal.noResultsScreen.reportMissingResultsLinkText": { + "message": "告诉我们。", + "description": "报告缺失结果的链接文本" + }, + "theme.SearchModal.placeholder": { + "message": "搜索文档", + "description": "文档搜索弹出框输入框的占位符" + }, + "theme.blog.post.plurals": { + "message": "1篇文章|{count}篇文章", + "description": "\"{count}篇文章\"的复数化标签" + }, + "theme.blog.tagTitle": { + "message": "{nPosts}篇\"{tagName}\"标签的文章", + "description": "博客标签页面的标题" + }, + "theme.blog.author.pageTitle": { + "message": "{authorName} - {nPosts}篇文章", + "description": "博客作者页面的标题" + }, + "theme.blog.authorsList.pageTitle": { + "message": "作者列表", + "description": "作者列表页面的标题" + }, + "theme.blog.authorsList.viewAll": { + "message": "查看所有作者", + "description": "博客作者列表页面的链接标签" + }, + "theme.blog.author.noPosts": { + "message": "该作者尚未发表任何文章。", + "description": "作者无文章时的提示文本" + }, + "theme.contentVisibility.unlistedBanner.title": { + "message": "未列出页面", + "description": "未列出内容横幅的标题" + }, + "theme.contentVisibility.unlistedBanner.message": { + "message": "此页面未列出。搜索引擎不会索引它,只有拥有直接链接的用户可以访问。", + "description": "未列出内容横幅的消息" + }, + "theme.contentVisibility.draftBanner.title": { + "message": "草稿页面", + "description": "草稿内容横幅的标题" + }, + "theme.contentVisibility.draftBanner.message": { + "message": "此页面是草稿。仅在开发环境可见,不会包含在生产构建中。", + "description": "草稿内容横幅的消息" + }, + "theme.ErrorPageContent.tryAgain": { + "message": "重试", + "description": "React错误边界捕获错误后重试渲染的按钮标签" + }, + "theme.common.skipToMainContent": { + "message": "跳至主内容", + "description": "无障碍访问的跳过导航标签,允许通过键盘快速导航到主要内容" + }, + "theme.tags.tagsPageTitle": { + "message": "标签", + "description": "标签列表页面的标题" + } +} \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current.json b/docs/i18n/zh/docusaurus-plugin-content-docs/current.json new file mode 100644 index 000000000..8056f11cc --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current.json @@ -0,0 +1,662 @@ +{ + "version.label": { + "message": "Next", + "description": "当前版本标签" + }, + "sidebar.docs.category.Frigate": { + "message": "Frigate", + "description": "文档侧边栏Frigate分类标签" + }, + "sidebar.docs.category.Guides": { + "message": "指南", + "description": "文档侧边栏指南分类标签" + }, + "sidebar.docs.category.Configuration": { + "message": "配置", + "description": "文档侧边栏配置分类标签" + }, + "sidebar.docs.category.Configuration Files": { + "message": "配置文件", + "description": "文档侧边栏配置文件分类标签" + }, + "sidebar.docs.category.Detectors": { + "message": "检测器", + "description": "文档侧边栏检测器分类标签" + }, + "sidebar.docs.category.Enrichments": { + "message": "增强功能", + "description": "文档侧边栏增强功能分类标签" + }, + "sidebar.docs.category.Cameras": { + "message": "摄像头", + "description": "文档侧边栏摄像头分类标签" + }, + "sidebar.docs.category.Objects": { + "message": "对象检测", + "description": "文档侧边栏对象检测分类标签" + }, + "sidebar.docs.category.Extra Configuration": { + "message": "扩展配置", + "description": "文档侧边栏扩展配置分类标签" + }, + "sidebar.docs.category.Integrations": { + "message": "集成", + "description": "文档侧边栏集成分类标签" + }, + "sidebar.docs.category.HTTP API": { + "message": "HTTP API", + "description": "文档侧边栏HTTP API分类标签" + }, + "sidebar.docs.category.HTTP API.link.generated-index.title": { + "message": "Frigate HTTP API", + "description": "HTTP API分类索引页标题" + }, + "sidebar.docs.category.HTTP API.link.generated-index.description": { + "message": "HTTP API接口文档", + "description": "HTTP API分类索引页描述" + }, + "sidebar.docs.category.Auth": { + "message": "认证", + "description": "文档侧边栏认证分类标签" + }, + "sidebar.docs.category.Events": { + "message": "事件", + "description": "文档侧边栏事件分类标签" + }, + "sidebar.docs.category.Review": { + "message": "事件回顾", + "description": "文档侧边栏事件回顾分类标签" + }, + "sidebar.docs.category.App": { + "message": "应用", + "description": "文档侧边栏应用分类标签" + }, + "sidebar.docs.category.Logs": { + "message": "日志", + "description": "文档侧边栏日志分类标签" + }, + "sidebar.docs.category.Preview": { + "message": "预览", + "description": "文档侧边栏预览分类标签" + }, + "sidebar.docs.category.Notifications": { + "message": "通知", + "description": "文档侧边栏通知分类标签" + }, + "sidebar.docs.category.Export": { + "message": "导出", + "description": "文档侧边栏导出分类标签" + }, + "sidebar.docs.category.Media": { + "message": "媒体", + "description": "文档侧边栏媒体分类标签" + }, + "sidebar.docs.category.Schemas": { + "message": "数据模型", + "description": "文档侧边栏数据模型分类标签" + }, + "sidebar.docs.category.Frigate+": { + "message": "Frigate+", + "description": "文档侧边栏Frigate+分类标签" + }, + "sidebar.docs.category.Troubleshooting": { + "message": "故障排除", + "description": "文档侧边栏故障排除分类标签" + }, + "sidebar.docs.category.Development": { + "message": "开发", + "description": "文档侧边栏开发分类标签" + }, + "sidebar.docs.link.Go2RTC Configuration Reference": { + "message": "Go2RTC配置参考", + "description": "侧边栏Go2RTC配置参考链接标签" + }, + "sidebar.docs.doc.Auth": { + "message": "认证状态", + "description": "认证API文档标签" + }, + "sidebar.docs.doc.Profile": { + "message": "用户资料", + "description": "用户资料API文档标签" + }, + "sidebar.docs.doc.Logout": { + "message": "退出登录", + "description": "退出登录API文档标签" + }, + "sidebar.docs.doc.Login": { + "message": "用户登录", + "description": "登录API文档标签" + }, + "sidebar.docs.doc.Get Users": { + "message": "获取用户列表", + "description": "获取用户API文档标签" + }, + "sidebar.docs.doc.Create User": { + "message": "创建用户", + "description": "创建用户API文档标签" + }, + "sidebar.docs.doc.Delete User": { + "message": "删除用户", + "description": "删除用户API文档标签" + }, + "sidebar.docs.doc.Update Password": { + "message": "更新密码", + "description": "更新密码API文档标签" + }, + "sidebar.docs.doc.Update Role": { + "message": "更新角色", + "description": "更新角色API文档标签" + }, + "sidebar.docs.doc.Get Faces": { + "message": "获取人脸数据", + "description": "获取人脸API文档标签" + }, + "sidebar.docs.doc.Reclassify Face": { + "message": "重新分类人脸", + "description": "人脸重分类API文档标签" + }, + "sidebar.docs.doc.Train Face": { + "message": "训练人脸模型", + "description": "人脸训练API文档标签" + }, + "sidebar.docs.doc.Create Face": { + "message": "创建人脸数据", + "description": "创建人脸API文档标签" + }, + "sidebar.docs.doc.Register Face": { + "message": "注册人脸特征", + "description": "人脸注册API文档标签" + }, + "sidebar.docs.doc.Recognize Face": { + "message": "识别人脸", + "description": "人脸识别API文档标签" + }, + "sidebar.docs.doc.Deregister Faces": { + "message": "注销人脸特征", + "description": "人脸注销API文档标签" + }, + "sidebar.docs.doc.Reprocess License Plate": { + "message": "重新处理车牌", + "description": "车牌重处理API文档标签" + }, + "sidebar.docs.doc.Reindex Embeddings": { + "message": "重建特征索引", + "description": "特征索引重建API文档标签" + }, + "sidebar.docs.doc.Events": { + "message": "事件查询", + "description": "事件查询API文档标签" + }, + "sidebar.docs.doc.Events Explore": { + "message": "事件探索", + "description": "事件探索API文档标签" + }, + "sidebar.docs.doc.Event Ids": { + "message": "事件ID列表", + "description": "事件ID获取API文档标签" + }, + "sidebar.docs.doc.Events Search": { + "message": "事件搜索", + "description": "事件搜索API文档标签" + }, + "sidebar.docs.doc.Events Summary": { + "message": "事件摘要", + "description": "事件摘要API文档标签" + }, + "sidebar.docs.doc.Event": { + "message": "事件详情", + "description": "单个事件详情API文档标签" + }, + "sidebar.docs.doc.Delete Event": { + "message": "删除事件", + "description": "事件删除API文档标签" + }, + "sidebar.docs.doc.Set Retain": { + "message": "设置保留标记", + "description": "事件保留标记设置API文档标签" + }, + "sidebar.docs.doc.Delete Retain": { + "message": "清除保留标记", + "description": "事件保留标记清除API文档标签" + }, + "sidebar.docs.doc.Send To Plus": { + "message": "发送至Plus", + "description": "事件发送至Plus服务API文档标签" + }, + "sidebar.docs.doc.False Positive": { + "message": "误报标记", + "description": "标记事件为误报的API文档标签" + }, + "sidebar.docs.doc.Set Sub Label": { + "message": "设置子标签", + "description": "设置事件子分类标签的API文档标签" + }, + "sidebar.docs.doc.Set Description": { + "message": "设置描述", + "description": "设置事件描述的API文档标签" + }, + "sidebar.docs.doc.Regenerate Description": { + "message": "重新生成描述", + "description": "重新生成事件描述的API文档标签" + }, + "sidebar.docs.doc.Delete Events": { + "message": "批量删除事件", + "description": "批量删除事件的API文档标签" + }, + "sidebar.docs.doc.Create Event": { + "message": "创建事件", + "description": "手动创建事件的API文档标签" + }, + "sidebar.docs.doc.End Event": { + "message": "结束事件", + "description": "手动结束事件的API文档标签" + }, + "sidebar.docs.doc.Review": { + "message": "审核列表", + "description": "获取待审核事件的API文档标签" + }, + "sidebar.docs.doc.Review Ids": { + "message": "审核ID列表", + "description": "获取待审核事件ID的API文档标签" + }, + "sidebar.docs.doc.Review Summary": { + "message": "审核摘要", + "description": "获取审核统计信息的API文档标签" + }, + "sidebar.docs.doc.Set Multiple Reviewed": { + "message": "批量标记已审", + "description": "批量标记事件已审核的API文档标签" + }, + "sidebar.docs.doc.Delete Reviews": { + "message": "批量删除审核", + "description": "批量删除审核记录的API文档标签" + }, + "sidebar.docs.doc.Motion Activity": { + "message": "移动活动", + "description": "获取移动活动数据的API文档标签" + }, + "sidebar.docs.doc.Get Review From Event": { + "message": "获取事件审核", + "description": "通过事件ID获取审核的API文档标签" + }, + "sidebar.docs.doc.Get Review": { + "message": "获取审核详情", + "description": "获取单个审核详情的API文档标签" + }, + "sidebar.docs.doc.Set Not Reviewed": { + "message": "标记未审核", + "description": "将审核状态改为未审的API文档标签" + }, + "sidebar.docs.doc.Is Healthy": { + "message": "健康检查", + "description": "系统健康状态检查的API文档标签" + }, + "sidebar.docs.doc.Config Schema": { + "message": "配置模式", + "description": "获取配置模式的API文档标签" + }, + "sidebar.docs.doc.Go2Rtc Streams": { + "message": "Go2RTC流列表", + "description": "获取所有Go2RTC流的API文档标签" + }, + "sidebar.docs.doc.Go2Rtc Camera Stream": { + "message": "摄像头Go2RTC流", + "description": "获取指定摄像头Go2RTC流的API文档标签" + }, + "sidebar.docs.doc.Version": { + "message": "版本信息", + "description": "获取系统版本的API文档标签" + }, + "sidebar.docs.doc.Stats": { + "message": "实时统计", + "description": "获取实时统计数据的API文档标签" + }, + "sidebar.docs.doc.Stats History": { + "message": "历史统计", + "description": "获取历史统计数据的API文档标签" + }, + "sidebar.docs.doc.Metrics": { + "message": "性能指标", + "description": "获取性能指标的API文档标签" + }, + "sidebar.docs.doc.Config": { + "message": "获取配置", + "description": "获取当前配置的API文档标签" + }, + "sidebar.docs.doc.Config Raw": { + "message": "原始配置", + "description": "获取原始配置文件的API文档标签" + }, + "sidebar.docs.doc.Config Save": { + "message": "保存配置", + "description": "保存配置的API文档标签" + }, + "sidebar.docs.doc.Config Set": { + "message": "设置配置", + "description": "设置配置项的API文档标签" + }, + "sidebar.docs.doc.Ffprobe": { + "message": "FFprobe信息", + "description": "获取FFprobe信息的API文档标签" + }, + "sidebar.docs.doc.Vainfo": { + "message": "VAAPI信息", + "description": "获取VAAPI硬件信息的API文档标签" + }, + "sidebar.docs.doc.Nvinfo": { + "message": "NVDEC信息", + "description": "获取NVIDIA解码器信息的API文档标签" + }, + "sidebar.docs.doc.Logs": { + "message": "日志查询", + "description": "查询系统日志的API文档标签" + }, + "sidebar.docs.doc.Restart": { + "message": "重启服务", + "description": "重启系统服务的API文档标签" + }, + "sidebar.docs.doc.Get Labels": { + "message": "获取标签列表", + "description": "获取所有检测标签的API文档标签" + }, + "sidebar.docs.doc.Get Sub Labels": { + "message": "获取子标签", + "description": "获取子分类标签的API文档标签" + }, + "sidebar.docs.doc.Plusmodels": { + "message": "Plus模型", + "description": "获取Plus模型列表的API文档标签" + }, + "sidebar.docs.doc.Get Recognized License Plates": { + "message": "获取识别车牌", + "description": "获取已识别车牌列表的API文档标签" + }, + "sidebar.docs.doc.Timeline": { + "message": "时间线数据", + "description": "获取事件时间线的API文档标签" + }, + "sidebar.docs.doc.Hourly Timeline": { + "message": "小时时间线", + "description": "按小时统计时间线的API文档标签" + }, + "sidebar.docs.doc.Preview Ts": { + "message": "时间戳预览", + "description": "按时间戳获取预览的API文档标签" + }, + "sidebar.docs.doc.Preview Hour": { + "message": "小时预览", + "description": "按小时获取预览的API文档标签" + }, + "sidebar.docs.doc.Get Preview Frames From Cache": { + "message": "从缓存获取预览帧", + "description": "从缓存获取预览帧序列的API文档标签" + }, + "sidebar.docs.doc.Get Vapid Pub Key": { + "message": "获取VAPID公钥", + "description": "获取通知服务公钥的API文档标签" + }, + "sidebar.docs.doc.Register Notifications": { + "message": "注册通知", + "description": "注册推送通知的API文档标签" + }, + "sidebar.docs.doc.Get Exports": { + "message": "获取导出列表", + "description": "获取所有导出记录的API文档标签" + }, + "sidebar.docs.doc.Export Recording": { + "message": "导出录像", + "description": "导出指定时段录像的API文档标签" + }, + "sidebar.docs.doc.Export Rename": { + "message": "重命名导出", + "description": "重命名导出记录的API文档标签" + }, + "sidebar.docs.doc.Export Delete": { + "message": "删除导出", + "description": "删除导出文件的API文档标签" + }, + "sidebar.docs.doc.Get Export": { + "message": "获取导出详情", + "description": "获取单个导出详情的API文档标签" + }, + "sidebar.docs.doc.Mjpeg Feed": { + "message": "MJPEG流", + "description": "获取摄像头MJPEG流的API文档标签" + }, + "sidebar.docs.doc.Camera Ptz Info": { + "message": "摄像头PTZ信息", + "description": "获取摄像头云台信息的API文档标签" + }, + "sidebar.docs.doc.Latest Frame": { + "message": "最新帧", + "description": "获取摄像头最新画面的API文档标签" + }, + "sidebar.docs.doc.Get Snapshot From Recording": { + "message": "从录像获取快照", + "description": "从录像中提取快照的API文档标签" + }, + "sidebar.docs.doc.Submit Recording Snapshot To Plus": { + "message": "提交录像快照至Plus", + "description": "向Plus服务提交快照的API文档标签" + }, + "sidebar.docs.doc.Get Recordings Storage Usage": { + "message": "获取录像存储用量", + "description": "获取录像存储空间统计的API文档标签" + }, + "sidebar.docs.doc.All Recordings Summary": { + "message": "全部录像摘要", + "description": "获取所有摄像头录像统计的API文档标签" + }, + "sidebar.docs.doc.Recordings Summary": { + "message": "录像摘要", + "description": "获取单个摄像头录像统计的API文档标签" + }, + "sidebar.docs.doc.Recordings": { + "message": "录像记录", + "description": "获取摄像头录像记录的API文档标签" + }, + "sidebar.docs.doc.Recording Clip": { + "message": "录像片段", + "description": "获取指定时段录像片段的API文档标签" + }, + "sidebar.docs.doc.Vod Ts": { + "message": "点播流(时间戳)", + "description": "按时间戳获取点播视频流的API文档标签" + }, + "sidebar.docs.doc.Vod Hour No Timezone": { + "message": "点播流(小时/无时区)", + "description": "按小时获取无时区点播流的API文档标签" + }, + "sidebar.docs.doc.Vod Hour": { + "message": "点播流(小时)", + "description": "按小时获取点播视频流的API文档标签" + }, + "sidebar.docs.doc.Vod Event": { + "message": "事件点播流", + "description": "获取事件关联点播流的API文档标签" + }, + "sidebar.docs.doc.Event Snapshot": { + "message": "事件快照", + "description": "获取事件JPG格式快照的API文档标签" + }, + "sidebar.docs.doc.Event Thumbnail": { + "message": "事件缩略图", + "description": "获取事件缩略图的API文档标签" + }, + "sidebar.docs.doc.Grid Snapshot": { + "message": "网格快照", + "description": "获取摄像头网格布局快照的API文档标签" + }, + "sidebar.docs.doc.Event Snapshot Clean": { + "message": "事件纯净快照", + "description": "获取无标注事件快照的API文档标签" + }, + "sidebar.docs.doc.Event Clip": { + "message": "事件片段", + "description": "获取事件MP4格式片段的API文档标签" + }, + "sidebar.docs.doc.Event Preview": { + "message": "事件预览", + "description": "获取事件GIF预览的API文档标签" + }, + "sidebar.docs.doc.Preview Gif": { + "message": "GIF预览", + "description": "获取指定时段GIF预览的API文档标签" + }, + "sidebar.docs.doc.Preview Mp4": { + "message": "MP4预览", + "description": "获取指定时段MP4预览的API文档标签" + }, + "sidebar.docs.doc.Review Preview": { + "message": "审核预览", + "description": "获取审核事件预览的API文档标签" + }, + "sidebar.docs.doc.Preview Thumbnail": { + "message": "预览缩略图", + "description": "获取预览文件缩略图的API文档标签" + }, + "sidebar.docs.doc.Label Thumbnail": { + "message": "标签缩略图", + "description": "获取最佳标签缩略图的API文档标签" + }, + "sidebar.docs.doc.Label Clip": { + "message": "标签片段", + "description": "获取标签关联视频片段的API文档标签" + }, + "sidebar.docs.doc.Label Snapshot": { + "message": "标签快照", + "description": "获取标签快照的API文档标签" + }, + "sidebar.docs.doc.AppConfigSetBody": { + "message": "应用配置设置体", + "description": "应用配置设置数据结构的文档标签" + }, + "sidebar.docs.doc.AppPostLoginBody": { + "message": "登录请求体", + "description": "登录请求数据结构的文档标签" + }, + "sidebar.docs.doc.AppPostUsersBody": { + "message": "用户创建体", + "description": "用户创建数据结构的文档标签" + }, + "sidebar.docs.doc.AppPutPasswordBody": { + "message": "密码更新体", + "description": "密码更新数据结构的文档标签" + }, + "sidebar.docs.doc.AppPutRoleBody": { + "message": "角色更新体", + "description": "角色更新数据结构的文档标签" + }, + "sidebar.docs.doc.Body_recognize_face_faces_recognize_post": { + "message": "人脸识别请求体", + "description": "人脸识别请求数据结构的文档标签" + }, + "sidebar.docs.doc.Body_register_face_faces__name__register_post": { + "message": "人脸注册请求体", + "description": "人脸注册请求数据结构的文档标签" + }, + "sidebar.docs.doc.DayReview": { + "message": "每日审核", + "description": "每日审核数据结构的文档标签" + }, + "sidebar.docs.doc.EventCreateResponse": { + "message": "事件创建响应", + "description": "事件创建响应数据结构的文档标签" + }, + "sidebar.docs.doc.EventMultiDeleteResponse": { + "message": "批量删除响应", + "description": "事件批量删除响应数据结构的文档标签" + }, + "sidebar.docs.doc.EventResponse": { + "message": "事件响应", + "description": "事件响应数据结构的文档标签" + }, + "sidebar.docs.doc.EventUploadPlusResponse": { + "message": "Plus上传响应", + "description": "事件上传Plus服务响应数据结构的文档标签" + }, + "sidebar.docs.doc.EventsCreateBody": { + "message": "事件创建体", + "description": "事件创建请求数据结构的文档标签" + }, + "sidebar.docs.doc.EventsDeleteBody": { + "message": "事件删除体", + "description": "事件删除请求数据结构的文档标签" + }, + "sidebar.docs.doc.EventsDescriptionBody": { + "message": "事件描述体", + "description": "事件描述设置数据结构的文档标签" + }, + "sidebar.docs.doc.EventsEndBody": { + "message": "事件结束体", + "description": "事件结束请求数据结构的文档标签" + }, + "sidebar.docs.doc.EventsSubLabelBody": { + "message": "子标签设置体", + "description": "事件子标签设置数据结构的文档标签" + }, + "sidebar.docs.doc.ExportRecordingsBody": { + "message": "录像导出体", + "description": "录像导出请求数据结构的文档标签" + }, + "sidebar.docs.doc.ExportRenameBody": { + "message": "导出重命名体", + "description": "导出文件重命名数据结构的文档标签" + }, + "sidebar.docs.doc.Extension": { + "message": "文件扩展名", + "description": "文件扩展名类型的文档标签" + }, + "sidebar.docs.doc.GenericResponse": { + "message": "通用响应", + "description": "通用响应数据结构的文档标签" + }, + "sidebar.docs.doc.HTTPValidationError": { + "message": "HTTP验证错误", + "description": "HTTP请求验证错误数据结构的文档标签" + }, + "sidebar.docs.doc.Last24HoursReview": { + "message": "24小时审核", + "description": "最近24小时审核数据结构的文档标签" + }, + "sidebar.docs.doc.PlaybackFactorEnum": { + "message": "播放倍速枚举", + "description": "视频播放倍速选项的文档标签" + }, + "sidebar.docs.doc.PlaybackSourceEnum": { + "message": "播放源枚举", + "description": "视频播放源类型的文档标签" + }, + "sidebar.docs.doc.RegenerateDescriptionEnum": { + "message": "描述再生枚举", + "description": "事件描述再生选项的文档标签" + }, + "sidebar.docs.doc.ReviewActivityMotionResponse": { + "message": "移动活动响应", + "description": "审核移动活动响应数据结构的文档标签" + }, + "sidebar.docs.doc.ReviewModifyMultipleBody": { + "message": "批量修改体", + "description": "审核批量修改请求数据结构的文档标签" + }, + "sidebar.docs.doc.ReviewSegmentResponse": { + "message": "审核片段响应", + "description": "审核视频片段响应数据结构的文档标签" + }, + "sidebar.docs.doc.ReviewSummaryResponse": { + "message": "审核摘要响应", + "description": "审核摘要响应数据结构的文档标签" + }, + "sidebar.docs.doc.SeverityEnum": { + "message": "严重程度枚举", + "description": "事件严重程度等级的文档标签" + }, + "sidebar.docs.doc.SubmitPlusBody": { + "message": "Plus提交体", + "description": "提交至Plus服务请求数据结构的文档标签" + }, + "sidebar.docs.doc.ValidationError": { + "message": "验证错误", + "description": "数据验证错误数据结构的文档标签" + } +} \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/advanced.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/advanced.md new file mode 100644 index 000000000..5b9803c1c --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/advanced.md @@ -0,0 +1,211 @@ +--- +id: advanced +title: 高级配置选项 +sidebar_label: 高级选项 +--- + +### 日志配置 + +#### Frigate日志设置 + +可调整日志级别用于故障排查。 + +```yaml +logger: + # 可选:默认日志级别(默认如下) + default: info + # 可选:按模块设置日志级别 + logs: + frigate.mqtt: error +``` + +可用日志级别:`debug`, `info`, `warning`, `error`, `critical` + +可配置模块示例: +- `frigate.app` +- `frigate.mqtt` +- `frigate.object_detection` +- `detector.<检测器名称>` +- `watchdog.<摄像头名称>` +- `ffmpeg.<摄像头名称>.<角色>` 注意:所有FFmpeg日志均以`error`级别记录 + +#### Go2RTC日志设置 + +参考[go2rtc文档](https://github.com/AlexxIT/go2rtc?tab=readme-ov-file#module-log)配置日志 + +```yaml +go2rtc: + streams: + # ... + log: + exec: trace +``` + +### 环境变量 + +此配置项适用于无法直接修改容器环境的情况(如Home Assistant OS)。 + +示例: +```yaml +environment_vars: + 变量名: 变量值 +``` + +### 数据库配置 + +追踪对象和录像信息存储在`/config/frigate.db`的SQLite数据库中。若删除该数据库,录像文件将变为孤立文件需手动清理,且不会显示在Home Assistant的媒体浏览器中。 + +若使用网络存储(SMB/NFS等),启动时可能出现`database is locked`错误。可自定义数据库路径: + +```yaml +database: + path: /自定义路径/frigate.db +``` + +### 模型配置 + +使用自定义模型时需指定宽高尺寸。 + +自定义模型可能需要不同的输入张量格式。支持RGB、BGR或YUV色彩空间转换。输入张量形状参数需与模型要求匹配。 + +| 张量维度 | 描述 | +|---------|-------------| +| N | 批量大小 | +| H | 模型高度 | +| W | 模型宽度 | +| C | 色彩通道数 | + +| 可用输入张量形状 | +|----------------| +| "nhwc" | +| "nchw" | + +```yaml +model: + path: /模型路径 + width: 320 + height: 320 + input_tensor: "nhwc" + input_pixel_format: "bgr" +``` + +#### 标签映射 + +:::warning +自定义标签映射后需同步调整[警报标签](/configuration/review.md#限制警报的标签类型)配置 +::: + +可自定义标签映射,常见场景是合并易混淆的物体类型(如car/truck)。默认已将truck重命名为car。 + +```yaml +model: + labelmap: + 2: vehicle + 3: vehicle + 5: vehicle + 7: vehicle + 15: animal + 16: animal + 17: animal +``` + +:::warning +部分标签有特殊处理逻辑: +- `person`关联`face`和`amazon` +- `car`关联`license_plate`, `ups`, `fedex`, `amazon` +::: + +## 网络配置 + +可通过绑定挂载nginx.conf文件修改内部网络配置: + +```yaml +services: + frigate: + volumes: + - /自定义路径/nginx.conf:/usr/local/nginx/conf/nginx.conf +``` + +### 启用IPv6 + +默认禁用IPv6,需修改listen.gotmpl文件: + +原始配置: +``` +listen 8971; +``` + +修改为: +``` +listen [::]:8971 ipv6only=off; +``` + +## 基础路径 + +默认运行在根路径(`/`),反向代理场景可能需要自定义路径前缀(如`/frigate`)。 + +### 通过HTTP头设置 + +推荐方式是在反向代理中设置`X-Ingress-Path`头: + +Nginx示例: +``` +location /frigate { + proxy_set_header X-Ingress-Path /frigate; + proxy_pass http://frigate_backend; +} +``` + +### 通过环境变量设置 + +```yaml +services: + frigate: + environment: + - FRIGATE_BASE_PATH=/frigate +``` + +## 自定义依赖 + +### 自定义FFmpeg + +将静态编译的`ffmpeg`和`ffprobe`放入`/config/custom-ffmpeg/bin`: + +1. 下载FFmpeg并解压到`/config/custom-ffmpeg` +2. 更新配置: +```yaml +ffmpeg: + path: /config/custom-ffmpeg +``` +3. 重启Frigate + +### 自定义go2rtc版本 + +1. 下载go2rtc到`/config`目录 +2. 重命名为`go2rtc` +3. 添加执行权限 +4. 重启Frigate + +## 配置文件验证 + +更新配置时可通过以下方式验证: + +### 通过API验证 + +```bash +curl -X POST http://frigate_host:5000/api/config/save -d @config.json +``` + +或使用yq转换yaml: +```bash +yq r -j config.yml | curl -X POST http://frigate_host:5000/api/config/save -d @- +``` + +### 命令行验证 + +```bash +docker run -v $(pwd)/config.yml:/config/config.yml \ + --entrypoint python3 \ + ghcr.io/blakeblackshear/frigate:stable \ + -u -m frigate --validate-config +``` \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/audio_detectors.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/audio_detectors.md new file mode 100644 index 000000000..8e8b8afbc --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/audio_detectors.md @@ -0,0 +1,77 @@ +--- +id: audio_detectors +title: 音频检测器 +--- + +:::tip +本文使用DeepSeek AI进行翻译,仅做参考。 +::: + +Frigate内置了音频检测功能,该功能运行在CPU上。相比图像对象检测,音频检测的计算量要小得多,因此完全可以在CPU上高效运行。 + +## 配置 + +音频事件通过检测特定类型的音频并创建事件来工作,当该类型音频在配置的时间内未被检测到时,事件将结束。音频事件会在事件开始时保存快照,并在整个事件过程中保存录音。录音使用配置的录制保留设置进行保留。 + +### 启用音频事件 + +可以为所有摄像头或仅特定摄像头启用音频事件。 + +```yaml +audio: # <- 为所有摄像头启用音频事件 + enabled: True + +cameras: + front_camera: + ffmpeg: + ... + audio: + enabled: True # <- 为front_camera启用音频事件 +``` + +如果使用多个流,则必须在用于音频检测的流上设置`audio`角色,这可以是任何流,但该流必须包含音频。 + +:::note + +用于捕获音频的ffmpeg进程将与分配给摄像头的其他角色一起建立到摄像头的单独连接,因此建议使用go2rtc重新流式传输来实现此目的。更多信息请参阅[重新流式传输文档](/configuration/restream.md)。 + +::: + +```yaml +cameras: + front_camera: + ffmpeg: + inputs: + - path: rtsp://.../main_stream + roles: + - record + - path: rtsp://.../sub_stream # <- 此流必须启用音频 + roles: + - audio + - detect +``` + +### 配置最小音量 + +音频检测器使用音量级别的方式与摄像头画面中的运动用于对象检测的方式相同。这意味着除非音频音量高于配置的水平,否则Frigate不会运行音频检测以减少资源使用。不同摄像头型号的音量水平可能有很大差异,因此进行测试以了解音量水平非常重要。可以使用MQTT浏览器查看音频主题以了解检测到的音量水平。 + +:::tip + +音量被视为录制的运动,这意味着当`record -> retain -> mode`设置为`motion`时,任何音频音量> min_volume的时刻,该摄像头的录制片段都将被保留。 + +::: + +### 配置音频事件 + +内置音频模型可以检测[500多种不同类型](https://github.com/blakeblackshear/frigate/blob/dev/audio-labelmap.txt)的音频,其中许多并不实用。默认情况下启用`bark`(狗叫)、`fire_alarm`(火警)、`scream`(尖叫)、`speech`(说话)和`yell`(喊叫),但这些可以自定义。 + +```yaml +audio: + enabled: True + listen: + - bark + - fire_alarm + - scream + - speech + - yell +``` \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/authentication.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/authentication.md new file mode 100644 index 000000000..91f2a9c18 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/authentication.md @@ -0,0 +1,106 @@ +--- +id: authentication +title: 身份认证 +--- + +# 身份认证 + +Frigate 将用户信息存储在数据库中,采用 PBKDF2-SHA256 算法(60万次迭代)生成密码哈希值。登录成功后,系统会签发带有过期时间的 JWT 令牌并设置为 Cookie,该 Cookie 会自动刷新。此 JWT 令牌也可通过 Authorization 头部的 Bearer Token 方式传递。 + +用户管理入口:设置 > 用户 + +Frigate Web UI 访问端口说明: + +| 端口 | 描述 | +| ------ | ------------------------------------------------------------------- | +| `8971` | 需认证的 UI 和 API 端口,建议反向代理使用此端口 | +| `5000` | 内部免认证端口,应限制访问范围。专为 Docker 网络内无需认证的集成服务设计 | + +## 初始设置 + +启动时会生成管理员账号密码并打印在日志中。首次登录后建议立即在"设置 > 用户"中修改默认密码。 + +## 重置管理员密码 + +若被锁定时,可通过配置文件强制重置密码(下次启动时生效): + +```yaml +auth: + reset_admin_password: true +``` + +## 登录失败限流 + +为防止暴力破解,支持多级速率限制(基于 SlowApi 实现)。例如 `1/second;5/minute;20/hour` 表示: + +- 每秒不超过 1 次失败 +- 每分钟不超过 5 次失败 +- 每小时不超过 20 次失败 + +重启服务会重置计数器。若使用反向代理,需配置可信代理 IP 段: + +```yaml +auth: + failed_login_rate_limit: "1/second;5/minute;20/hour" + trusted_proxies: + - 172.18.0.0/16 # Docker 内部网络段 +``` + +## JWT 密钥管理 + +安全要求: +1. 至少 64 位加密随机字符串 +2. 生成命令:`python3 -c 'import secrets; print(secrets.token_hex(64))'` + +密钥加载优先级: +1. 环境变量 `FRIGATE_JWT_SECRET` +2. Docker 密钥文件 `/run/secrets/FRIGATE_JWT_SECRET` +3. Home Assistant 插件配置 +4. 配置文件目录下的 `.jwt_secret` 文件 + +(注:修改密钥会使现有令牌失效) + +## 代理集成配置 + +### 基础配置 +```yaml +auth: + enabled: False # 禁用内置认证 + +proxy: + auth_secret: "<随机密钥>" # 代理通信密钥 +``` + +### 头映射 +支持从代理头中提取用户信息: +```yaml +proxy: + header_map: + user: x-forwarded-user # 用户名头 + role: x-forwarded-role # 角色头 +``` + +端口差异: +- **8971 端口**:强制角色验证(admin/viewer) +- **5000 端口**:始终视为 admin 权限 + +### 登录跳转 +支持自动识别代理返回的 401/302/307 跳转地址。 + +### 自定义登出 +```yaml +proxy: + logout_url: "https://example.com/logout" # 代理登出地址 +``` + +## 用户角色体系 + +### 角色类型 +- **admin**:完全控制权限(含用户管理) +- **viewer**:只读权限 + +### 权限控制 +- 通过 8971 端口访问时强制验证角色 +- 通过 5000 端口访问时默认获得 admin 权限 + +(角色管理入口:设置 > 用户) \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/autotracking.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/autotracking.md new file mode 100644 index 000000000..705bc54cd --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/autotracking.md @@ -0,0 +1,173 @@ +--- +id: autotracking +title: 摄像头自动追踪 +--- + +支持ONVIF协议且具备PTZ(云台变焦)功能的摄像头,如果支持视野(FOV)内相对移动,可以配置为自动追踪移动对象并将其保持在画面中央。 + +![自动追踪示例(含变焦)](/img/frigate-autotracking-example.gif) + +## 自动追踪行为 + +当Frigate确认对象不是误报且已进入指定区域后,自动追踪器会移动PTZ摄像头将对象保持在画面中央,直到对象移出画面、PTZ无法继续移动或Frigate丢失追踪目标。 + +丢失追踪后,Frigate会在目标消失区域扫描`timeout`秒。如果发现同类型对象,Frigate会继续追踪该新对象。 + +追踪结束后,摄像头会返回配置中`return_preset`指定的预设位置。 + +## 检查ONVIF摄像头支持 + +Frigate自动追踪功能需要PTZ摄像头支持视野内相对移动(符合[ONVIF规范](https://www.onvif.org/specs/srv/ptz/ONVIF-PTZ-Service-Spec-v1712.pdf)中的`RelativePanTiltTranslationSpace`和`TranslationSpaceFov`条目)。 + +许多廉价或老旧PTZ可能不支持此标准。如果您的PTZ不支持,Frigate会在日志中报告错误并禁用自动追踪功能。 + +您也可以下载并运行[这个简单的Python脚本](https://gist.github.com/hawkeye217/152a1d4ba80760dac95d46e143d37112),替换第4行的摄像头IP地址、ONVIF端口、用户名和密码来检查您的摄像头。 + +用户报告支持Frigate自动追踪的摄像头品牌和型号列表可在[这里](cameras.md)查看。 + +## 配置方法 + +首先在摄像头固件中设置PTZ预设位置并命名。如果不确定如何操作,请参考摄像头厂商的固件文档。常见品牌教程:[Amcrest](https://www.youtube.com/watch?v=lJlE9-krmrM)、[Reolink](https://www.youtube.com/watch?v=VAnxHUY5i5w)、[Dahua](https://www.youtube.com/watch?v=7sNbc5U-k54)。 + +编辑Frigate配置文件,填写摄像头的ONVIF参数。指定要追踪的对象类型、触发自动追踪的必需区域,以及追踪结束后返回的预设位置名称。可选配置追踪结束前的延迟时间(秒)。 + +自动追踪功能需要[ONVIF连接](cameras.md)。建议为摄像头时间戳和任何叠加文本设置[运动掩膜](masks.md),确保摄像头移动时这些区域完全排除在场景变化计算之外。 + +注意`autotracking`默认禁用,可通过配置文件或MQTT启用。 + +```yaml +cameras: + ptzcamera: + ... + onvif: + # 必填: 摄像头主机地址 + # 注意: 默认使用HTTP协议;如需HTTPS需明确指定,如:"https://0.0.0.0" + host: 0.0.0.0 + # 可选: ONVIF端口(默认如下) + port: 8000 + # 可选: 登录用户名 + # 注意: 部分设备需要管理员权限访问ONVIF + user: admin + # 可选: 登录密码 + password: admin + # 可选: 跳过ONVIF服务器的TLS验证(默认如下) + tls_insecure: False + # 可选: PTZ摄像头自动追踪功能 + # 通过移动PTZ摄像头将移动对象保持在画面中央 + autotracking: + # 可选: 启用/禁用对象自动追踪(默认如下) + enabled: False + # 可选: 启动时校准摄像头(默认如下) + # 校准会分步移动PTZ并测量移动时间 + # 结果用于帮助估算摄像头移动后追踪对象的位置 + # 校准完成后Frigate会自动更新配置文件 + # 添加摄像头的"movement_weights"参数,之后应将calibrate_on_startup设为False + calibrate_on_startup: False + # 可选: 自动追踪时的变焦模式(默认如下) + # 可用选项: disabled, absolute, relative + # disabled - 仅平移/倾斜,不变焦 + # absolute - 使用绝对变焦(多数PTZ摄像头支持) + # relative - 使用相对变焦(非所有PTZ支持,但可实现同步平移/倾斜/变焦) + zooming: disabled + # 可选: 改变自动追踪对象变焦行为的参数(默认如下) + # 较低值会在追踪对象周围保留更多场景 + # 较高值会更大程度放大追踪对象,但可能更快丢失追踪 + # 值应在0.1到0.75之间 + zoom_factor: 0.3 + # 可选: 要追踪的对象列表(来自labelmap.txt)(默认如下) + track: + - person + # 必填: 当对象进入以下任一区域时开始自动追踪 + required_zones: + - zone_name + # 必填: 追踪结束后返回的ONVIF预设位置名称(默认如下) + return_preset: home + # 可选: 返回预设位置前的延迟秒数(默认如下) + timeout: 10 + # 可选: 摄像头校准自动生成的值,请勿手动修改(默认如下) + movement_weights: [] +``` + +## 校准流程 + +PTZ电机运行速度各不相同。执行校准会让Frigate测量各种移动的速度,用这些测量值更好地预测保持自动追踪对象在画面中央所需的移动量。 + +校准是可选的,但能极大帮助Frigate追踪在摄像头视野中快速移动的对象。 + +开始校准:将摄像头配置中的`calibrate_on_startup`设为`True`并重启Frigate。Frigate会让摄像头进行一系列小幅和大幅移动。校准过程中请勿手动移动PTZ。完成后,摄像头移动将停止,配置文件会自动更新`movement_weights`参数用于移动计算。请勿手动修改此参数。 + +校准结束后,PTZ会移动到`return_preset`指定的预设位置。 + +:::note + +校准过程中Frigate网页界面和其他摄像头将无响应。这是正常现象,以避免校准时产生过多网络流量或CPU使用。大多数PTZ校准约需两分钟。Frigate日志会显示校准进度和任何错误。 + +::: + +此时Frigate会继续运行,并在PTZ自动追踪移动时不断获取测量值,自动更新配置文件中的`movement_weights`参数。 + +重启Frigate前,应将配置文件中的`calibrate_on_startup`设为`False`,否则您优化后的`movement_weights`会被覆盖,再次启动时会重新校准。 + +如需重新校准,可删除`movement_weights`参数,将`calibrate_on_startup`设为`True`后重启Frigate。如果自动追踪不稳定,可能需要重新校准或完全删除配置中的`movement_weights`。如果更改了`return_preset`或摄像头的检测`fps`值,也建议重新校准。 + +如果初始校准时禁用变焦,之后启用变焦,也应重新校准。 + +## 最佳实践与注意事项 + +每款PTZ摄像头都不同,自动追踪可能无法在所有情况下理想工作。此实验性功能最初基于EmpireTech/Dahua SD1A404XB-GNR开发。 + +Frigate中的对象追踪器会估算PTZ移动,在摄像头移动时保持追踪对象。大多数情况下5fps足够,但如需追踪更快移动的对象,可适当提高帧率。过高帧率(>10fps)会拖慢Frigate和运动估算器,可能导致丢帧,特别是使用实验性变焦功能时。 + +建议使用快速的[检测器](object_detectors.md)。CPU检测器性能不佳或完全无法工作。可通过Frigate的调试视图查看当前自动追踪对象周围较厚的彩色边框。 + +![自动追踪调试视图](/img/autotracking-debug.gif) + +不建议在`required_zones`中使用全画面区域,特别是摄像头已校准且配置中包含`movement_weights`时。Frigate会持续追踪已进入`required_zones`的对象,即使它移出该区域。 + +部分用户发现调整区域`inertia`值有帮助。详见[配置参考](index.md)。 + +## 变焦功能 + +变焦是非常实验性的功能,追踪对象时可能比仅平移/倾斜消耗更多CPU资源。 + +绝对变焦使变焦移动独立于平移/倾斜移动。多数PTZ摄像头支持绝对变焦。绝对变焦设计保守,以适应各种摄像头和场景。绝对变焦通常只在对象停止或缓慢移动时进行。 + +相对变焦尝试在平移/倾斜移动同时进行变焦。测试适用于部分Dahua和Amcrest PTZ。但ONVIF规范指出,使用相对变焦时,通用变焦范围如何映射到放大倍数、视野或其他物理变焦尺寸没有标准。如果相对变焦行为不稳定或无效,请尝试绝对变焦。 + +可在配置文件中调整摄像头的`zoom_factor`参数。较低值会在追踪对象周围保留更多场景空间,较高值会让摄像头更大程度放大对象。但请注意,Frigate需要追踪对象边界框外足够多的像素和场景细节来估算摄像头移动。如果对象占据画面过大,Frigate将无法估算摄像头移动而丢失目标。 + +此参数范围0.1到0.75。默认值0.3较为保守,适合多数用户。由于每款PTZ和场景不同,您应实验确定最佳值。 + +## 应用场景 + +安防监控中,常将"观察"摄像头与PTZ配合使用。当固定观察摄像头检测到对象时,可通过Home Assistant等自动化平台将PTZ移动到特定预设位置,使Frigate开始自动追踪。例如:住宅东西两侧安装固定摄像头监控街道,当西侧观察摄像头检测到人员时,Home Assistant自动化可将PTZ转向西方预设位置。对象进入指定区域后,Frigate自动追踪器可继续追踪离开固定摄像头视野的人员。 + +## 故障排除与常见问题 + +### 自动追踪丢失目标,为什么? + +可能原因很多。如果使用实验性变焦,`zoom_factor`值可能过高、对象移动过快、场景太暗、场景细节不足(如PTZ俯视单调背景的车道,缺乏足够边缘或角落)或场景不理想导致Frigate难以维持追踪。 + +摄像头快门速度可能设置过低导致运动模糊。检查摄像头固件能否提高快门速度。 + +查看Frigate调试视图有助于确定原因。自动追踪对象会有较厚的彩色边框。 + +### 日志显示摄像头"仍处于ONVIF'MOVING'状态"错误,什么意思? + +两个已知原因(可能还有其他未知原因):PTZ电机过慢或摄像头固件有bug。Frigate使用摄像头提供的ONVIF参数`MoveStatus`判断PTZ电机移动或空闲状态。据部分用户反馈,Hikvision PTZ(即使最新固件)在PTZ移动后不更新此值。由于Hikvision固件此bug无法解决,自动追踪功能无法正常工作,应在配置中禁用。使用Hikvision固件的其他品牌摄像头可能也有此问题。 + +### 尝试校准摄像头,但日志显示卡在0%且Frigate无法启动 + +通常原因同上 - 由于摄像头固件bug,`MoveStatus` ONVIF参数未变化。另请注意:校准过程中Frigate网页界面和其他摄像头无响应是正常现象。但如果日志中未每隔几秒显示校准进度,则您的摄像头不兼容自动追踪功能。 + +### 日志显示错误:"Autotracker: motion estimator couldn't get transformations",什么意思? + +为在PTZ移动时维持对象追踪,Frigate基于画面细节追踪摄像头移动。出现此消息可能因为`zoom_factor`设置过高、检测对象周围场景细节不足(如缺乏明显边缘或色彩变化),或摄像头快门速度过慢导致运动模糊。尝试降低`zoom_factor`、改变对象周围场景或调整摄像头快门速度。 + +### 校准似乎已完成,但摄像头未实际追踪对象,为什么? + +部分摄像头固件报告支持FOV RelativeMove(即Frigate用于自动追踪的ONVIF命令),但如果对象进入必需区域后摄像头不平移或倾斜,说明固件实际不支持FOV RelativeMove。例如Uniview IPC672LR-AX4DUPK摄像头,它实际移动的是变焦电机而非平移/倾斜,完全不符合ONVIF标准。 + +### Frigate报告校准失败错误,为什么? + +校准测量Frigate让PTZ进行一系列移动所需时间。如果这些值过高导致Frigate无法支持校准后的自动追踪,日志会记录此错误。通常原因是摄像头电机或网络连接过慢,或固件未及时报告电机状态。可尝试不校准运行(删除配置中的`movement_weights`行并重启),但如果校准失败,通常意味着自动追踪会表现不稳定。 \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/bird_classification.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/bird_classification.md new file mode 100644 index 000000000..f2dfe0569 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/bird_classification.md @@ -0,0 +1,72 @@ +--- +id: bird_classification +title: 鸟类识别功能 +--- + +鸟类识别功能使用量化Tensorflow模型识别已知鸟类品种。当识别到已知鸟类时,其通用名称将作为`sub_label`(子标签)添加。该信息会显示在用户界面、过滤器以及通知中。 + +## 最低系统要求 + +鸟类识别在CPU上运行轻量级tflite模型,系统要求与运行Frigate本身无显著差异。 + +## 识别模型 + +使用的分类模型是MobileNet INat鸟类识别模型,[可识别物种列表见此](https://raw.githubusercontent.com/google-coral/test_data/master/inat_bird_labels.txt)。 + +## 基础配置 + +鸟类识别功能默认禁用,需在配置文件中启用。此为全局配置选项。 + +```yaml +classification: + bird: + enabled: true # 启用鸟类识别 +``` + +## 高级配置选项 + +可通过以下参数微调识别精度: + +- `threshold`: 设定鸟类子标签所需的最低置信度分数 + - 默认值: `0.9` + - 建议范围: 0.8-0.95(值越高误报越少,但可能漏识部分品种) + +- `top_k`: 每次检测返回的最可能物种数量 + - 默认值: `3` + - 较高值可增加识别多样性,但会降低运行效率 + +- `cache`: 启用识别结果缓存(减少重复计算) + - 默认值: `true` + - 建议在设备性能有限时保持启用 + +完整配置示例: +```yaml +classification: + bird: + enabled: true + threshold: 0.85 + top_k: 5 + cache: false +``` + +## 使用建议 + +1. 庭院观鸟场景建议阈值设为0.8-0.85 +2. 科研监测场景可提高top_k至5-10 +3. 树莓派等设备建议启用cache +4. 识别结果可通过MQTT/webhook转发 + +## 性能优化 + +若识别延迟过高: +1. 降低top_k值 +2. 确保未启用debug日志 +3. 检查CPU温度是否过高 +4. 考虑使用更高效硬件 + +:::tip +常见问题: +- 识别为"unknown_bird"表示置信度低于阈值 +- 品种名称显示为拉丁学名属正常现象 +- 夜间拍摄可能无法触发识别 +::: \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/birdseye.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/birdseye.md new file mode 100644 index 000000000..531b3d1f5 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/birdseye.md @@ -0,0 +1,114 @@ +--- +id: birdseye +title: 鸟瞰视图 +--- + +# 鸟瞰视图 + +除了Frigate的实时摄像头仪表板外,鸟瞰视图提供了一个便携的全局视角,让您无需逐个查看可能没有活动的摄像头,就能掌握整个监控区域的动态。鸟瞰视图提供多种智能显示模式,可根据您关注的场景自动调整显示内容。 + +您可以通过在Web界面中将"Birdseye"摄像头添加到摄像头组来查看鸟瞰视图。在实时页面点击"+"图标创建摄像头组,并选择"Birdseye"作为其中一个摄像头。 + +鸟瞰视图也可用于Home Assistant仪表板、投屏到媒体设备等场景。 + +## 鸟瞰视图行为模式 + +### 显示模式 + +鸟瞰视图提供多种模式来自定义不同情况下显示的摄像头: + +- **continuous(持续模式)**:始终显示所有摄像头 +- **motion(运动模式)**:仅显示最近30秒内检测到运动的摄像头 +- **objects(对象模式)**:仅显示最近30秒内有活动对象被追踪的摄像头 + +### 自定义图标 + +您可以在Frigate的`media`文件夹中添加名为`custom.png`的180x180图片来自定义鸟瞰视图背景图标。图片必须是透明背景的PNG格式,所有非透明像素在鸟瞰视图中将显示为白色。 + +### 摄像头级别覆盖设置 + +如果希望特定摄像头只在特定情况下显示在鸟瞰视图中,或者完全不显示,可以在摄像头级别进行配置: + +```yaml +# 默认所有摄像头都显示在鸟瞰视图中 +birdseye: + enabled: True + mode: continuous + +cameras: + front: + # 仅当检测到对象时才显示前门摄像头 + birdseye: + mode: objects + back: + # 不显示后门摄像头 + birdseye: + enabled: False +``` + +### 非活动时间阈值 + +默认情况下,鸟瞰视图会显示过去30秒内有配置活动的摄像头,此时间可调整: + +```yaml +birdseye: + enabled: True + inactivity_threshold: 15 # 改为15秒 +``` + +## 鸟瞰视图布局 + +### 分辨率设置 + +可以配置鸟瞰视图的分辨率和宽高比。分辨率影响画质但不影响布局,而宽高比会影响摄像头的排列方式。 + +```yaml +birdseye: + enabled: True + width: 1280 # 宽度 + height: 720 # 高度 +``` + +### 摄像头排序 + +可以覆盖鸟瞰视图中摄像头的显示顺序。需要在摄像头级别设置排序值。 + +```yaml +birdseye: + enabled: True + mode: continuous + +cameras: + front: + birdseye: + order: 1 # 显示在第一位 + back: + birdseye: + order: 2 # 显示在第二位 +``` + +_注意_:默认情况下摄像头按名称排序以确保鸟瞰视图布局稳定。 + +### 最大摄像头数限制 + +可以限制鸟瞰视图一次显示的摄像头数量。启用此功能后,鸟瞰视图将显示最近活动的摄像头。设有冷却时间以防止摄像头切换过于频繁。 + +例如,以下配置仅显示最近活动的1个摄像头: + +```yaml +birdseye: + enabled: True + layout: + max_cameras: 1 # 最多显示1个摄像头 +``` + +### 缩放系数 + +默认情况下,鸟瞰视图尝试每行排列2个摄像头,然后按倍数缩放直到找到合适的布局。缩放系数可在1.0到5.0之间调整。 + +```yaml +birdseye: + enabled: True + layout: + scaling_factor: 3.0 # 缩放系数设为3.0 +``` \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/camera_specific.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/camera_specific.md new file mode 100644 index 000000000..e123859fe --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/camera_specific.md @@ -0,0 +1,232 @@ +--- +id: camera_specific +title: 摄像头品牌特定配置 +--- + +:::note + +本页面使用了FFmpeg参数的预设。有关预设的更多信息,请参阅[FFmpeg预设](/configuration/ffmpeg_presets)页面。 + +::: + +:::note + +许多摄像头支持影响实时视图体验的编码选项,更多信息请参阅[实时视图](/configuration/live)页面。 + +::: + +## MJPEG摄像头 + +注意MJPEG摄像头需要将视频编码为H264才能用于录制和重流角色。这将比直接支持H264的摄像头消耗更多CPU资源。建议使用重流角色创建H264重流,然后将其作为ffmpeg的输入源。 + +```yaml +go2rtc: + streams: + mjpeg_cam: "ffmpeg:http://your_mjpeg_stream_url#video=h264#hardware" # <- 使用硬件加速创建可用于其他组件的H264流 + +cameras: + ... + mjpeg_cam: + ffmpeg: + inputs: + - path: rtsp://127.0.0.1:8554/mjpeg_cam + roles: + - detect + - record +``` + +## JPEG流摄像头 + +使用实时变化JPEG图像的摄像头需要如下输入参数 + +```yaml +input_args: preset-http-jpeg-generic +``` + +流输出参数和注意事项与[MJPEG摄像头](#mjpeg-cameras)相同 + +## RTMP摄像头 + +RTMP摄像头需要调整输入参数 + +```yaml +ffmpeg: + input_args: preset-rtmp-generic +``` + +## 仅支持UDP的摄像头 + +如果您的摄像头不支持RTSP的TCP连接,可以使用UDP。 + +```yaml +ffmpeg: + input_args: preset-rtsp-udp +``` + +## 品牌/型号特定设置 + +### Amcrest & Dahua + +Amcrest和Dahua摄像头应使用以下格式通过RTSP连接: + +``` +rtsp://用户名:密码@摄像头IP/cam/realmonitor?channel=1&subtype=0 # 主码流 +rtsp://用户名:密码@摄像头IP/cam/realmonitor?channel=1&subtype=1 # 子码流,通常仅支持低分辨率 +rtsp://用户名:密码@摄像头IP/cam/realmonitor?channel=1&subtype=2 # 高端摄像头支持第三码流,中等分辨率(1280x720, 1920x1080) +rtsp://用户名:密码@摄像头IP/cam/realmonitor?channel=1&subtype=3 # 新款高端摄像头支持第四码流,另一中等分辨率(1280x720, 1920x1080) +``` + +### Annke C800 + +此摄像头仅支持H.265。要在某些设备(如MacOS或iPhone)上播放片段,需要使用`apple_compatibility`配置调整H.265流。 + +```yaml +cameras: + annkec800: # <------ 摄像头名称 + ffmpeg: + apple_compatibility: true # <- 增加与MacOS和iPhone的兼容性 + output_args: + record: preset-record-generic-audio-aac + + inputs: + - path: rtsp://用户名:密码@摄像头IP/H264/ch1/main/av_stream # <----- 根据您的摄像头更新 + roles: + - detect + - record + detect: + width: # <- 可选,默认Frigate会尝试自动检测分辨率 + height: # <- 可选,默认Frigate会尝试自动检测分辨率 +``` + +### Blue Iris RTSP摄像头 + +Blue Iris RTSP摄像头需要移除`nobuffer`标志 + +```yaml +ffmpeg: + input_args: preset-rtsp-blue-iris +``` + +### Hikvision摄像头 + +Hikvision摄像头应使用以下格式通过RTSP连接: + +``` +rtsp://用户名:密码@摄像头IP/streaming/channels/101 # 主码流 +rtsp://用户名:密码@摄像头IP/streaming/channels/102 # 子码流,通常仅支持低分辨率 +rtsp://用户名:密码@摄像头IP/streaming/channels/103 # 高端摄像头支持第三码流,中等分辨率(1280x720, 1920x1080) +``` + +:::note + +[部分用户报告](https://www.reddit.com/r/frigate_nvr/comments/1hg4ze7/hikvision_security_settings)新款Hikvision摄像头需要调整安全设置: + +``` +RTSP认证 - digest/basic +RTSP摘要算法 - MD5 +WEB认证 - digest/basic +WEB摘要算法 - MD5 +``` + +::: + +### Reolink摄像头 + +Reolink有旧款摄像头(如410和520)和新款摄像头(如520a和511wa),支持不同的选项子集。两种情况下都建议使用HTTP流。 +Frigate与配置了以下选项的新款Reolink摄像头配合使用效果更好: + +如果可用,推荐设置: +- `开启,流畅优先` - 这将摄像头设置为CBR(恒定比特率) +- `帧间空间1x` - 这将I帧间隔设置为与帧率相同 + +根据[此讨论](https://github.com/blakeblackshear/frigate/issues/3235#issuecomment-1135876973),HTTP视频流似乎是Reolink最可靠的选择。 + +通过Reolink NVR连接的摄像头可以使用HTTP流,在流URL中使用`channel[0..15]`表示附加通道。 +主码流也可以通过RTSP设置,但并非在所有硬件版本上都可靠。以下示例配置适用于最老的RLN16-410设备和多种类型的摄像头。 + +:::warning + +以下配置仅适用于流分辨率为5MP或更低的Reolink摄像头,8MP+摄像头需要使用RTSP,因为这种情况下不支持http-flv。 + +::: + +```yaml +go2rtc: + streams: + your_reolink_camera: + - "ffmpeg:http://reolink_ip/flv?port=1935&app=bcs&stream=channel0_main.bcs&user=username&password=password#video=copy#audio=copy#audio=opus" + your_reolink_camera_sub: + - "ffmpeg:http://reolink_ip/flv?port=1935&app=bcs&stream=channel0_ext.bcs&user=username&password=password" + your_reolink_camera_via_nvr: + - "ffmpeg:http://reolink_nvr_ip/flv?port=1935&app=bcs&stream=channel3_main.bcs&user=username&password=password" # 通道号为0-15 + - "ffmpeg:your_reolink_camera_via_nvr#audio=aac" + your_reolink_camera_via_nvr_sub: + - "ffmpeg:http://reolink_nvr_ip/flv?port=1935&app=bcs&stream=channel3_ext.bcs&user=username&password=password" + +cameras: + your_reolink_camera: + ffmpeg: + inputs: + - path: rtsp://127.0.0.1:8554/your_reolink_camera + input_args: preset-rtsp-restream + roles: + - record + - path: rtsp://127.0.0.1:8554/your_reolink_camera_sub + input_args: preset-rtsp-restream + roles: + - detect + reolink_via_nvr: + ffmpeg: + inputs: + - path: rtsp://127.0.0.1:8554/your_reolink_camera_via_nvr?video=copy&audio=aac + input_args: preset-rtsp-restream + roles: + - record + - path: rtsp://127.0.0.1:8554/your_reolink_camera_via_nvr_sub?video=copy + input_args: preset-rtsp-restream + roles: + - detect +``` + +#### Reolink门铃 + +Reolink门铃支持通过go2rtc和其他应用实现双向音频。重要的是为了稳定性仍要使用http-flv流,可以添加一个仅用于双向音频的辅助RTSP流。 + +确保在摄像头的高级网络设置中启用了HTTP。要使用Frigate的双向通话功能,请参阅[实时视图文档](/configuration/live#双向通话)。 + +```yaml +go2rtc: + streams: + your_reolink_doorbell: + - "ffmpeg:http://reolink_ip/flv?port=1935&app=bcs&stream=channel0_main.bcs&user=username&password=password#video=copy#audio=copy#audio=opus" + - rtsp://reolink_ip/Preview_01_sub + your_reolink_doorbell_sub: + - "ffmpeg:http://reolink_ip/flv?port=1935&app=bcs&stream=channel0_ext.bcs&user=username&password=password" +``` + +### Unifi Protect摄像头 + +Unifi Protect摄像头需要使用rtspx流与go2rtc配合。 +要使用Unifi Protect摄像头,将rtsps链接修改为以rtspx开头。 +此外,从Unifi链接末尾移除"?enableSrtp"。 + +```yaml +go2rtc: + streams: + front: + - rtspx://192.168.1.1:7441/abcdefghijk +``` + +[更多信息请参阅go2rtc文档](https://github.com/AlexxIT/go2rtc/tree/v1.9.9#source-rtsp) + +在Unifi 2.0更新中,Unifi Protect摄像头的音频采样率发生了变化,导致ffmpeg出现问题。如果直接与Unifi Protect配合使用,需要为录制设置输入采样率。 + +```yaml +ffmpeg: + output_args: + record: preset-record-ubiquiti +``` + +### TP-Link VIGI摄像头 + +TP-Link VIGI摄像头需要调整主码流设置以避免问题。需要将流配置为`H264`,并将`智能编码`设置为`关闭`。没有这些设置,在尝试观看录制片段时可能会出现问题。例如Firefox会在播放几秒后停止并显示以下错误信息:`媒体播放因损坏问题或媒体使用了浏览器不支持的功能而中止。`。 \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/cameras.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/cameras.md new file mode 100644 index 000000000..566012cee --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/cameras.md @@ -0,0 +1,139 @@ +--- +id: cameras +title: 摄像头配置 +--- + +## 设置摄像头输入源 + +可以为每个摄像头配置多个输入源,并根据需求混合搭配每个输入源的角色。这样您可以使用低分辨率视频流进行物体检测,同时使用高分辨率视频流进行录像,反之亦然。 + +默认情况下摄像头是启用的,但可以通过设置`enabled: False`来禁用。通过配置文件禁用的摄像头不会出现在Frigate用户界面中,也不会消耗系统资源。 + +每个角色在每个摄像头中只能分配给一个输入源。可用的角色选项如下: + +| 角色 | 描述 | +| -------- | ----------------------------------------------------------------------------------- | +| `detect` | 用于物体检测的主视频流。[文档](object_detectors.md) | +| `record` | 根据配置设置保存视频片段。[文档](record.md) | +| `audio` | 用于基于音频的检测。[文档](audio_detectors.md) | + +```yaml +mqtt: + host: mqtt.server.com +cameras: + back: # <- 摄像头名称,暂时只支持英文数字和下划线 + enabled: True + ffmpeg: + inputs: + # 摄像头rtsp流地址可查阅摄像头文档或互联网其他人分享的教程,下面的地址仅为范例 + - path: rtsp://viewer:{FRIGATE_RTSP_PASSWORD}@10.0.10.10:554/cam/realmonitor?channel=1&subtype=2 + roles: + - detect # <- 用于物体检测 + # 可以设置不同的流用于不同功能,例如上面的流为子码流,节省带宽,适合检测,能够降低检测器负担 + # 主码流画面清晰,适合录制 + - path: rtsp://viewer:{FRIGATE_RTSP_PASSWORD}@10.0.10.10:554/live + roles: + - record # <- 用于录像 + detect: + width: 1280 # <- 可选,默认Frigate会尝试自动检测分辨率 + height: 720 # <- 可选,默认Frigate会尝试自动检测分辨率 +``` + +只需在配置文件的`cameras`条目下添加更多摄像头即可。 + +```yaml +mqtt: ... +cameras: + back: ... + front: ... + side: ... +``` + +:::note + +如果您只定义了一个视频流输入且没有为其分配`detect`角色,Frigate会自动将其分配为`detect`角色。即使您在配置的`detect`部分中通过`enabled: False`禁用了物体检测,Frigate仍会解码视频流以支持运动检测、鸟瞰图、API图像端点和其他功能。 + +如果您计划仅使用Frigate进行录像,仍建议为低分辨率视频流定义`detect`角色,以减少所需视频流解码的资源消耗。 + +::: + +关于特定摄像头型号的设置,请查看[摄像头特定](camera_specific.md)信息。 + +## 设置摄像头PTZ控制 + +:::warning + +并非所有PTZ摄像头都支持ONVIF,这是Frigate用来与您的摄像头通信的标准协议。请检查[官方ONVIF兼容产品列表](https://www.onvif.org/conformant-products/)、您的摄像头文档或制造商网站,以确保您的PTZ支持ONVIF。同时,请确保您的摄像头运行最新的固件。 + +::: + +在配置文件的摄像头部分添加onvif配置: + +```yaml +cameras: + back: # <- 为名为back的摄像头配置ONVIF + ffmpeg: ... + onvif: + host: 10.0.10.10 + port: 8000 + user: admin + password: password +``` + +如果ONVIF连接成功,PTZ控制将在摄像头的Web界面中可用。 + +:::tip + +如果您的ONVIF摄像头不需要认证凭据,您可能仍需要为`user`和`password`指定空字符串,例如:`user: ""`和`password: ""`。 + +::: + +支持视野(FOV)内相对移动的ONVIF摄像头还可以配置为自动跟踪移动物体并将其保持在画面中央。关于自动跟踪的设置,请参阅[自动跟踪](autotracking.md)文档。 + +## ONVIF PTZ摄像头推荐 + +以下工作与非工作PTZ摄像头列表基于用户反馈。 + +| 品牌或具体型号 | PTZ控制 | 自动跟踪 | 备注 | +| ---------------------------- | :----------: | :----------: | ----------------------------------------------------------------------------------------------------------------------------------------------- | +| Amcrest | ✅ | ✅ | ⛔️ 一般来说Amcrest应该可以工作,但一些旧型号(如常见的IP2M-841)不支持自动跟踪 | +| Amcrest ASH21 | ✅ | ❌ | ONVIF服务端口: 80 | +| Amcrest IP4M-S2112EW-AI | ✅ | ❌ | 不支持FOV相对移动。 | +| Amcrest IP5M-1190EW | ✅ | ❌ | ONVIF端口: 80。不支持FOV相对移动。 | +| Ctronics PTZ | ✅ | ❌ | | +| Dahua | ✅ | ✅ | | +| Dahua DH-SD2A500HB | ✅ | ❌ | | +| Foscam R5 | ✅ | ❌ | | +| Hanwha XNP-6550RH | ✅ | ❌ | | +| Hikvision | ✅ | ❌ | ONVIF支持不完整(即使是最新固件MoveStatus也不会更新) - 在HWP-N4215IH-DE和DS-2DE3304W-DE型号上报告,但可能还有其他型号 | +| Hikvision DS-2DE3A404IWG-E/W | ✅ | ✅ | | +| Reolink 511WA | ✅ | ❌ | 仅支持缩放 | +| Reolink E1 Pro | ✅ | ❌ | | +| Reolink E1 Zoom | ✅ | ❌ | | +| Reolink RLC-823A 16x | ✅ | ❌ | | +| Speco O8P32X | ✅ | ❌ | | +| Sunba 405-D20X | ✅ | ❌ | 原始型号和4k型号报告ONVIF支持不完整。怀疑所有型号都不兼容。 | +| Tapo | ✅ | ❌ | 支持多种型号,ONVIF服务端口: 2020 | +| Uniview IPC672LR-AX4DUPK | ✅ | ❌ | 固件声称支持FOV相对移动,但在发送ONVIF命令时摄像头实际上不会移动 | +| Uniview IPC6612SR-X33-VG | ✅ | ✅ | 保持`calibrate_on_startup`为`False`。有用户报告使用`absolute`缩放是有效的。 | +| Vikylin PTZ-2804X-I2 | ❌ | ❌ | ONVIF支持不完整 | + +## 设置摄像头分组 + +:::tip + +建议使用用户界面设置摄像头分组。 + +::: + +摄像头可以分组并分配名称和图标,这样可以一起查看和筛选。始终会有一个包含所有摄像头的默认分组。 + +```yaml +camera_groups: + front: # <- 分组名称,暂时只支持英文数字和下划线 + cameras: + - driveway_cam # <- 摄像头名称 + - garage_cam # <- 摄像头名称 + icon: LuCar + order: 0 +``` \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/face_recognition.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/face_recognition.md new file mode 100644 index 000000000..a3d25c2c9 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/face_recognition.md @@ -0,0 +1,142 @@ +--- +id: face_recognition +title: 人脸识别 +--- + +人脸识别功能通过将检测到的人脸与预先学习的人脸数据进行匹配,来识别已知个体。当识别出已知人员时,他们的姓名将作为`sub_label`添加。这些信息会显示在UI界面、过滤器中,也会包含在通知中。 + +## 模型要求 + +### 人脸检测 + +当运行Frigate+模型(或任何原生支持人脸检测的自定义模型)时,应确保在[跟踪对象列表](../plus/#available-label-types)中添加`face`标签,可以是全局设置或针对特定摄像头。这将允许人脸检测与物体检测同时运行,提高效率。 + +当运行默认的COCO模型或其他不包含`face`作为可检测标签的模型时,人脸检测将通过CV2使用运行在CPU上的轻量级DNN模型进行。在这种情况下,您不应在跟踪对象列表中定义`face`。 + +### 人脸识别 + +Frigate支持两种人脸识别模型类型: + +- **small(小型)**: Frigate将运行FaceNet嵌入模型进行人脸识别,该模型在CPU上本地运行。此模型针对效率进行了优化,但准确性较低。 +- **large(大型)**: Frigate将运行大型ArcFace嵌入模型,该模型针对准确性进行了优化。建议仅在拥有集成或独立显卡时使用。 + +在这两种情况下,都会使用轻量级的人脸关键点检测模型在运行识别前对齐人脸。 + +## 最低系统要求 + +`small`模型针对效率进行了优化,可在CPU上运行,大多数CPU都能高效运行该模型。 + +`large`模型针对准确性进行了优化,强烈建议使用集成或独立GPU。 + +## 配置 + +人脸识别默认禁用,必须在UI界面或配置文件中启用后才能使用。人脸识别是全局配置设置。 + +```yaml +face_recognition: + enabled: true +``` + +## 高级配置 + +可通过以下可选参数微调人脸识别: + +### 检测 + +- `detection_threshold`: 运行识别前所需的人脸检测置信度分数: + - 默认值: `0.7` + - 注意: 此字段仅适用于独立的人脸检测模型,对于内置人脸检测的模型应使用`min_score`进行过滤。 +- `min_area`: 定义运行识别前人脸的最小尺寸(以像素为单位)。 + - 默认值: `500`像素。 + - 根据摄像头`detect`流的分辨率,可以增加此值以忽略过小或过远的人脸。 + +### 识别 + +- `model_size`: 使用的模型大小,可选`small`或`large` +- `unknown_score`: 将人员标记为潜在匹配的最低分数,低于此分数的匹配将被标记为未知。 + - 默认值: `0.8`。 +- `recognition_threshold`: 将人脸添加为对象子标签所需的识别置信度分数。 + - 默认值: `0.9`。 +- `save_attempts`: 保存用于训练的已识别人脸图像数量。 + - 默认值: `100`。 +- `blur_confidence_filter`: 启用计算人脸模糊程度并据此调整置信度的过滤器。 + - 默认值: `True`。 + +## 创建完备的训练集 + +人脸识别所需的足够训练集图像数量取决于多个因素: + +- 数据集的多样性:包含光照、姿态和面部表情变化的多样化数据集,每个人所需的图像数量会比多样性较低的数据集少。 +- 期望的准确性:期望的准确性越高,通常需要的图像越多。 + +以下是一些通用指导原则: + +- 最低要求:对于基本人脸识别任务,通常建议每人至少5-10张图像。 +- 推荐:对于更健壮和准确的系统,每人20-30张图像是一个良好的起点。 +- 理想情况:为了获得最佳性能,特别是在具有挑战性的条件下,每人50-100张图像会更有益。 + +人脸识别的准确性很大程度上取决于训练数据的质量。建议分阶段构建人脸训练库。 + +:::tip + +选择包含在人脸训练集中的图像时,建议始终遵循以下建议: + +- 如果难以辨认人物面部的细节,则对训练没有帮助。 +- 避免曝光过度/不足的图像。 +- 避免模糊/像素化的图像。 +- 避免使用红外线(灰度)图像进行训练。模型是在彩色图像上训练的,能够从灰度图像中提取特征。 +- 使用戴帽子/太阳镜的人物图像可能会混淆模型。 +- 不要一次性上传过多相似的图像,建议每人训练不超过4-6张相似图像,以避免过拟合。 + +::: + +### 第一步 - 建立坚实基础 + +首次启用人脸识别时,建立高质量的图像基础非常重要。建议首先为每个人上传1-5张"肖像"照片。确保照片中人物的面部是正面的,没有侧转,这将提供一个良好的起点。 + +然后建议使用Frigate中的`Face Library`选项卡,在检测到每个人时选择和训练图像。在建立坚实基础时,强烈建议仅训练正面图像。忽略从识别侧面人脸的摄像头获取的图像。 + +目标是平衡图像质量的同时,也要包含各种条件(白天/夜晚、不同天气、不同时间段等)的图像,以确保每个人的训练图像具有多样性,避免过拟合。 + +当一个人物在正面图像上能够被持续正确识别时,就可以进入下一步。 + +### 第二步 - 扩展数据集 + +当正面图像的识别表现良好后,开始选择稍微有角度的图像进行训练。重要的是仍然选择那些能看到足够面部细节以识别某人的图像。 + +## 常见问题 + +### 为什么不能批量上传照片? + +有方法地添加照片到库中非常重要,批量导入照片(特别是来自普通照片库)会导致特定场景下的过拟合,降低识别性能。 + +### 为什么不能批量重新处理人脸? + +人脸嵌入模型的工作原理是将人脸分解为不同的特征。这意味着当重新处理图像时,只有角度相似的图像才会影响其分数。 + +### 为什么未知人员的分数与已知人员相似? + +这可能由几个不同原因引起,但通常表明训练集需要改进。这通常与过拟合有关: + +- 如果每个人只训练少量图像,特别是这些图像非常相似时,识别模型会过度专门化于这些特定图像。 +- 当提供不同姿态、光照和表情的图像时,算法会提取这些变化中一致的特征。 +- 通过在多样化的图像集上训练,算法对输入图像中的微小变化和噪声变得不那么敏感。 + +### 在训练选项卡中看到分数超过阈值,但没有分配子标签? + +Frigate会考虑每个人物对象的所有识别尝试的分数。分数会根据人脸区域持续加权,只有当一个人物被持续自信地识别时,才会为其分配子标签。这避免了单次高置信度识别影响结果的情况。 + +### 可以同时使用其他人脸识别软件(如DoubleTake)和内置的人脸识别吗? + +不可以,使用其他人脸识别服务会干扰Frigate内置的人脸识别。当使用double-take时,如果还希望使用内置的人脸识别功能,必须禁用sub_label功能。 + +### 人脸识别会在录制流上运行吗? + +人脸识别不会在录制流上运行,这有很多不利原因: +1. 访问录制的延迟意味着通知中不会包含已识别人员的姓名,因为识别要到之后才能完成。 +2. 使用的嵌入模型在固定图像尺寸上运行,因此较大的图像会被缩小以匹配。 +3. 运动清晰度比额外像素重要得多,过度压缩和运动模糊对结果的影响比分辨率更大。 + +### 直接用iPhone拍照时出现未知错误 + +默认情况下iOS设备会使用HEIC(高效图像容器)格式存储图像,但此格式不支持上传。选择`large`格式而非`original`将使用JPG格式,这样可以正常工作。 \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/ffmpeg_presets.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/ffmpeg_presets.md new file mode 100644 index 000000000..7e8cc126c --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/ffmpeg_presets.md @@ -0,0 +1,79 @@ +--- +id: ffmpeg_presets +title: FFmpeg预设参数 +--- + +Frigate默认提供了一些FFmpeg参数预设,以简化配置流程。所有预设参数可在[此文件](https://github.com/blakeblackshear/frigate/blob/master/frigate/ffmpeg_presets.py)中查看。 + +### 硬件加速预设 + +强烈建议在配置中使用硬件加速预设。这些预设不仅能替代冗长的参数,还能让Frigate了解可用硬件信息,从而进行其他GPU优化(如鸟瞰图重流编码或非原生分辨率缩放)。 + +详见[硬件加速文档](/configuration/hardware_acceleration.md)获取GPU/iGPU设置指南。 + +| 预设名称 | 适用场景 | 注意事项 | +|---------------------|---------------------------|--------------------------| +| preset-rpi-64-h264 | 64位树莓派+h264流 | | +| preset-rpi-64-h265 | 64位树莓派+h265流 | | +| preset-vaapi | Intel/AMD VAAPI | 需确保选择正确的驱动程序 | +| preset-intel-qsv-h264 | Intel QSV+h264流 | 遇到问题建议改用vaapi预设 | +| preset-intel-qsv-h265 | Intel QSV+h265流 | 遇到问题建议改用vaapi预设 | +| preset-nvidia | NVIDIA显卡 | | +| preset-jetson-h264 | NVIDIA Jetson+h264流 | | +| preset-jetson-h265 | NVIDIA Jetson+h265流 | | +| preset-rk-h264 | 瑞芯微MPP+h264流 | 需使用*-rk后缀镜像和特权模式 | +| preset-rk-h265 | 瑞芯微MPP+h265流 | 需使用*-rk后缀镜像和特权模式 | + +### 输入参数预设 + +输入参数预设可提升配置可读性,并针对不同类型的视频流提供最佳兼容性方案。 + +详见[摄像头特定配置文档](/configuration/camera_specific.md)获取非标摄像头使用建议。 + +| 预设名称 | 适用场景 | 注意事项 | +|--------------------------|-----------------------|------------------------------------------------------------------------| +| preset-http-jpeg-generic | HTTP实时JPEG流 | 建议改用重流方式处理 | +| preset-http-mjpeg-generic | HTTP MJPEG流 | 建议改用重流方式处理 | +| preset-http-reolink | Reolink HTTP-FLV流 | 仅适用于原生HTTP流,不适用于RTSP重流 | +| preset-rtmp-generic | RTMP流 | | +| preset-rtsp-generic | RTSP流 | 未指定时的默认预设 | +| preset-rtsp-restream | RTSP重流源 | 适用于作为Frigate输入源的RTSP重流 | +| preset-rtsp-restream-low-latency | RTSP低延迟重流源 | 可降低延迟,但部分摄像头可能不兼容 | +| preset-rtsp-udp | UDP协议RTSP流 | 适用于仅支持UDP的摄像头 | +| preset-rtsp-blue-iris | Blue Iris RTSP流 | 适用于Blue Iris视频源 | + +:::warning +使用重流时需特别注意输入参数,不同协议不可混用。`http`和`rtmp`预设不能用于`rtsp`流。例如当使用Reolink摄像头的RTSP重流作为录制源时,若误用preset-http-reolink会导致崩溃。此时需要在流级别单独设置预设,参考以下示例: +::: + +```yaml +go2rtc: + streams: + reolink_cam: http://192.168.0.139/flv?port=1935&app=bcs&stream=channel0_main.bcs&user=admin&password=password + +cameras: + reolink_cam: + ffmpeg: + inputs: + - path: http://192.168.0.139/flv?port=1935&app=bcs&stream=channel0_ext.bcs&user=admin&password=password + input_args: preset-http-reolink + roles: + - detect + - path: rtsp://127.0.0.1:8554/reolink_cam + input_args: preset-rtsp-generic + roles: + - record +``` + +### 输出参数预设 + +输出参数预设可优化录制文件的生成逻辑,确保录制内容的一致性。 + +| 预设名称 | 适用场景 | 注意事项 | +|-----------------------------|-------------------------|------------------------------------------------------------------------| +| preset-record-generic | 无音频录制 | 未指定时的默认预设 | +| preset-record-generic-audio-copy | 保留原始音频录制 | 启用音频录制时使用 | +| preset-record-generic-audio-aac | 转码为AAC音频录制 | 源已是AAC编码时应改用preset-record-generic-audio-copy避免重复编码 | +| preset-record-mjpeg | MJPEG流录制 | 建议改用重流方式处理 | +| preset-record-jpeg | 实时JPEG录制 | 建议改用重流方式处理 | +| preset-record-ubiquiti | Ubiquiti非标音频流录制 | 适用于Ubiquiti设备的特殊音频格式 | \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/genai.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/genai.md new file mode 100644 index 000000000..17ac36cdc --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/genai.md @@ -0,0 +1,230 @@ +--- +id: genai +title: 生成式AI +--- + +生成式AI可用于根据跟踪对象的缩略图自动生成描述性文本。这有助于Frigate中的[语义搜索](/configuration/semantic_search),为跟踪对象提供更多上下文信息。描述可通过Frigate界面中的**浏览**页面访问,点击跟踪对象的缩略图即可查看。 + +描述请求会在跟踪对象生命周期结束时自动发送给您的AI提供商,也可以选择在帧发生显著变化后提前发送,例如用于更实时的通知场景。描述也可以通过Frigate界面手动重新生成。请注意,如果您在跟踪对象结束前手动输入描述,该描述将被生成的响应覆盖。 + +## 配置 + +生成式AI可以为所有摄像头启用,或仅为特定摄像头启用。目前有3种原生提供商可与Frigate集成。支持OpenAI标准API的其他提供商也可使用。请参阅下面的OpenAI部分。 + +要使用生成式AI,您必须在Frigate配置的全局层级定义一个提供商。如果您选择的提供商需要API密钥,可以直接将其粘贴在配置中,或存储在环境变量中(以`FRIGATE_`为前缀)。 + +```yaml +genai: + enabled: True + provider: gemini + api_key: "{FRIGATE_GEMINI_API_KEY}" + model: gemini-1.5-flash + +cameras: + front_camera: ... + indoor_camera: + genai: # <- 为室内摄像头禁用GenAI + enabled: False +``` + +## Ollama + +:::warning + +不建议在CPU上使用Ollama,高推理时间会使生成式AI变得不实用。 + +::: + +[Ollama](https://ollama.com/)允许您自托管大型语言模型并保持所有内容在本地运行。它在[llama.cpp](https://github.com/ggerganov/llama.cpp)上提供了一个很好的API。强烈建议在配备Nvidia显卡的机器或Apple silicon Mac上托管此服务器以获得最佳性能。 + +大多数7b参数的4位视觉模型都能在8GB显存中运行。也有可用的[Docker容器](https://hub.docker.com/r/ollama/ollama)。 + +并行请求也有一些注意事项。您需要设置`OLLAMA_NUM_PARALLEL=1`并选择适合您硬件和偏好的`OLLAMA_MAX_QUEUE`和`OLLAMA_MAX_LOADED_MODELS`值。请参阅[Ollama文档](https://github.com/ollama/ollama/blob/main/docs/faq.md#how-does-ollama-handle-concurrent-requests)。 + +### 支持的模型 + +您必须使用支持视觉的图生文模型。当前模型变体可在[其模型库](https://ollama.com/library)中找到。在撰写本文时,这包括`llava`、`llava-llama3`、`llava-phi3`和`moondream`。请注意,Frigate不会自动下载您在配置中指定的模型,您必须先将模型下载到您的Ollama本地实例,例如在Ollama服务器/Docker容器上运行`ollama pull llava:7b`。请注意,Frigate配置中指定的模型必须与下载的模型标签匹配。 + +:::note + +您应至少有8GB可用RAM(或在GPU上运行时为显存)来运行7B模型,16GB运行13B模型,32GB运行33B模型。 + +::: + +### 配置 + +```yaml +genai: + enabled: True + provider: ollama + base_url: http://localhost:11434 + model: llava:7b +``` + +## Google Gemini + +Google Gemini有一个免费层级,允许每分钟[15次查询](https://ai.google.dev/pricing)到API,这对于标准Frigate使用来说已经足够。 + +### 支持的模型 + +您必须使用支持视觉的图生文模型。当前模型变体可在[其文档](https://ai.google.dev/gemini-api/docs/models/gemini)中找到。在撰写本文时,这包括`gemini-1.5-pro`和`gemini-1.5-flash`。 + +### 获取API密钥 + +要开始使用Gemini,您必须首先从[Google AI Studio](https://aistudio.google.com)获取API密钥。 + +1. 接受服务条款 +2. 从右侧导航栏点击"获取API密钥" +3. 点击"在新项目中创建API密钥" +4. 复制API密钥用于您的配置 + +### 配置 + +```yaml +genai: + enabled: True + provider: gemini + api_key: "{FRIGATE_GEMINI_API_KEY}" + model: gemini-1.5-flash +``` + +## OpenAI + +OpenAI没有为其API提供免费层级。随着gpt-4o的发布,价格已经降低,如果您选择此路线,每次生成应该只需几分钱。 + +:::warning +请注意,如果您的摄像头位于公共领域(例如过道)等会检测过多对象的地方,过多的对象可能会很快耗尽您的资源包。请**务必不要开启**后付费模式! +::: + +### 支持的模型 + +您必须使用支持视觉的图生文模型。当前模型变体可在[其文档](https://platform.openai.com/docs/models)中找到。在撰写本文时 `gpt-4o` 和 `gpt-4-turbo` 都支持图生文功能。 + +:::note + +如果您选择国内兼容OpenAI API的大模型提供商,请注意选择支持**图生文**的模型。例如腾讯云的`hunyuan-vision`模型。DeepSeek官方目前未提供其图生文[`DeepSeek-VL2`](https://github.com/deepseek-ai/DeepSeek-VL2)模型的API,但可以在第三方服务商处获取由他们部署的版本。 + +::: + +### 获取API密钥 + +要开始使用OpenAI,您必须首先[创建API密钥](https://platform.openai.com/api-keys)并[配置计费](https://platform.openai.com/settings/organization/billing/overview)。 + +### 配置 + +```yaml +genai: + enabled: True + provider: openai + api_key: "{FRIGATE_OPENAI_API_KEY}" + model: gpt-4o +``` + +:::note + +要使用兼容OpenAI API的其他服务商(例如阿里云和腾讯云等国内云厂商),需要设置**环境变量** `OPENAI_BASE_URL` 为您的服务商的API endpoint。 + +例如腾讯云请设置为https://api.hunyuan.cloud.tencent.com/v1 +::: + +## Azure OpenAI + +微软通过Azure OpenAI提供了几种视觉模型。需要订阅。 + +### 支持的模型 + +您必须使用支持视觉的图生文模型。当前模型变体可在[其文档](https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/models)中找到。在撰写本文时,这包括`gpt-4o`和`gpt-4-turbo`。 + +### 创建资源并获取API密钥 + +要开始使用Azure OpenAI,您必须首先[创建资源](https://learn.microsoft.com/azure/cognitive-services/openai/how-to/create-resource?pivots=web-portal#create-a-resource)。您需要您的API密钥和资源URL,其中必须包含`api-version`参数(参见下面的示例)。配置中不需要模型字段,因为模型是您部署资源时选择的部署名称的一部分。 + +### 配置 + +```yaml +genai: + enabled: True + provider: azure_openai + base_url: https://example-endpoint.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2023-03-15-preview + api_key: "{FRIGATE_OPENAI_API_KEY}" +``` + +## 使用方法和最佳实践 + +Frigate的缩略图搜索擅长识别跟踪对象的特定细节 - 例如,使用"图像标题"方法查找"穿黄色背心的人"、"在草坪上奔跑的白狗"或"住宅街道上的红色汽车"。为了进一步增强这一点,Frigate的默认提示设计为询问您的AI提供商有关对象行为背后的意图,而不仅仅是描述其外观。 + +虽然生成检测对象的简单描述很有用,但理解意图提供了更深层次的洞察。Frigate的默认提示不仅识别场景中的"什么",还旨在推断"为什么"它可能在那里或"什么"它可能会做下一步。描述告诉您发生了什么,但意图提供了上下文。例如,一个人走向门可能看起来像访客,但如果他们在下班后快速移动,您可以推断潜在的闯入企图。检测到一个人在夜间在门附近徘徊可以比简单地注意到"一个人站在门旁"更快触发警报,帮助您根据情况上下文做出响应。 + +### 使用生成式AI进行通知 + +Frigate提供了一个[MQTT主题](/integrations/mqtt),`frigate/tracked_object_update`,当您的AI提供商返回跟踪对象的描述时,它会更新包含`event_id`和`description`的JSON有效负载。此描述可直接用于通知,例如发送警报到您的手机或进行音频公告。如果需要来自跟踪对象的其他详细信息,您可以使用[HTTP API](/integrations/api/event-events-event-id-get)查询`event_id`,例如:`http://frigate_ip:5000/api/events/`。 + +如果希望在对象停止被跟踪之前获得通知,可以配置`after_significant_updates`的附加发送触发器。 + +```yaml +genai: + send_triggers: + tracked_object_end: true # 默认 + after_significant_updates: 3 # 在发送图像前跟踪对象的更新次数 +``` + +## 自定义提示 + +Frigate将来自跟踪对象的多帧图像与提示一起发送给您的生成式AI提供商,要求其生成描述。默认提示如下: + +``` +请分析以下监控摄像头画面中的 “{label}” 元素,如果可以,请尽可能描述 “{label}” 的动作、以及它接下来可能会做什么,而不是描述其外观或周围环境。请注意引号内的名称可能为英文,请输出时将其翻译为中文。 +``` + +:::tip + +提示可以使用变量替换,如`{label}`、`{sub_label}`和`{camera}`,以将跟踪对象的信息替换为提示的一部分。 + +::: + +您也可以在配置中定义自定义提示。 + +```yaml +genai: + enabled: True + provider: ollama + base_url: http://localhost:11434 + model: llava + prompt: "分析来自{camera}安全摄像头的这些图像中的{label}。重点关注{label}的动作、行为和潜在意图,而不仅仅是描述其外观。" + object_prompts: + person: "请查看该监控画面中的主要人物。他们在做什么,他们的行为可能暗示什么意图(例如,接近门、离开区域、站立不动)?不要描述周围环境或静态细节。" + car: "观察这些图像中的主要车辆。重点关注其移动、方向或目的(例如,停车、接近、绕行)。如果是送货车辆,请提及公司名称。" +``` + +提示也可以在摄像头级别覆盖,以便为模型提供关于您特定摄像头的更详细提示(如果您希望)。默认情况下,将为所有跟踪对象和所有区域生成描述。但您也可以选择指定`objects`和`required_zones`,仅生成某些跟踪对象或区域的描述。 + +可选地,您可以通过将`use_snapshot`设置为`True`来使用快照生成描述(如果启用)。默认情况下,此设置为`False`,它会将对象生命周期内从`detect`流收集的未压缩图像发送给模型。一旦对象生命周期结束,仅保存一个压缩和裁剪的缩略图与跟踪对象。当您想要_重新生成_跟踪对象的描述时,使用快照可能很有用,因为它将为AI提供比裁剪/压缩的缩略图更高质量的图像(通常由AI本身缩小)。否则使用快照有一个权衡,即只向您的提供商发送单个图像,这将限制模型确定对象移动或方向的能力。 + +```yaml +cameras: + front_door: + genai: + use_snapshot: True + prompt: "分析来自{camera}前门安全摄像头的这些图像中的“{label}”。重点关注“{label}”的动作和潜在意图。请注意引号内的名称可能为英文,请输出时将其翻译为中文。" + object_prompts: + person: "检查这些图像中的人物。他们在做什么,他们的行为可能暗示什么目的(例如,递送东西、接近、离开)?如果他们携带或与包裹互动,请包括有关其来源或目的地的详细信息。" + cat: "观察这些图像中的猫。重点关注其移动和意图(例如,徘徊、狩猎、与物体互动)。如果猫靠近花盆或进行任何特定动作,请提及。" + objects: + - person + - cat + required_zones: + - steps +``` + +### 尝试不同的提示 + +许多提供商还为其模型提供公开的聊天界面。从Frigate下载几个不同的缩略图或快照,并在他们的聊天页面中尝试新内容,然后再更新Frigate中的提示以获得您喜欢的描述。 + +海外: +- OpenAI - [ChatGPT](https://chatgpt.com) +- Gemini - [Google AI Studio](https://aistudio.google.com) +- Ollama - [Open WebUI](https://docs.openwebui.com/) + +国内: +- 千问 - [阿里百炼](https://bailian.console.aliyun.com/) +- 豆包 - [火山引擎](https://console.volcengine.com/ark) \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/hardware_acceleration.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/hardware_acceleration.md new file mode 100644 index 000000000..3ea2408d9 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/hardware_acceleration.md @@ -0,0 +1,348 @@ +--- +id: hardware_acceleration +title: 硬件加速 +--- + +# 硬件加速 + +强烈建议在Frigate中使用GPU进行硬件加速。某些类型的硬件加速会被自动检测并使用,但您可能需要更新配置以在ffmpeg中启用硬件加速解码。 + +根据您的系统,这些参数可能不兼容。更多关于ffmpeg硬件加速解码的信息请参考:https://trac.ffmpeg.org/wiki/HWAccelIntro + +# 官方支持 + +## 树莓派3/4 + +确保为GPU分配至少128MB内存(通过`raspi-config` > 性能选项 > GPU内存设置)。 +如果使用Home Assistant插件,可能需要使用完全访问版本并关闭"保护模式"以启用硬件加速。 + +```yaml +# 解码h264流 +ffmpeg: + hwaccel_args: preset-rpi-64-h264 + +# 解码h265(hevc)流 +ffmpeg: + hwaccel_args: preset-rpi-64-h265 +``` + +:::note + +如果通过Docker运行Frigate,需要以特权模式运行或将`/dev/video*`设备映射到Frigate。使用Docker Compose添加: + +```yaml +services: + frigate: + ... + devices: + - /dev/video11:/dev/video11 +``` + +或使用`docker run`: + +```bash +docker run -d \ + --name frigate \ + ... + --device /dev/video11 \ + ghcr.io/blakeblackshear/frigate:stable +``` + +`/dev/video11`是正确的设备(树莓派4B)。可以通过以下命令检查: + +```bash +for d in /dev/video*; do + echo -e "---\n$d" + v4l2-ctl --list-formats-ext -d $d +done +``` + +或者映射所有`/dev/video*`设备。 + +::: + +## Intel显卡 + +:::info + +**推荐硬件加速预设** + +| CPU代数 | Intel驱动 | 推荐预设 | 说明 | +|---------|------------|----------|------| +| 1-7代 | i965 | preset-vaapi | 不支持qsv | +| 8-12代 | iHD | preset-vaapi | 也可使用preset-intel-qsv-* | +| 13代+ | iHD/Xe | preset-intel-qsv-* | | +| Intel Arc显卡 | iHD/Xe | preset-intel-qsv-* | | + +::: + +:::note + +默认驱动是`iHD`。如需要改为i965驱动,可能需要通过添加环境变量`LIBVA_DRIVER_NAME=i965`(在docker-compose文件中或[HA插件的config.yml](advanced.md#environment_vars)中)。 + +参考[Intel文档](https://www.intel.com/content/www/us/en/support/articles/000005505/processors.html)确认您的CPU是第几代的。 + +::: + +### 通过VAAPI + +VAAPI支持自动配置文件选择,可自动处理H.264和H.265流。 + +```yaml +ffmpeg: + hwaccel_args: preset-vaapi +``` + +### 通过QuickSync + +:::warning + +部分用户反馈使用`preset-intel-qsv-*`可能无法正常启动Frigate,这种情况建议使用VAAPI + +::: + +#### H.264流 + +```yaml +ffmpeg: + hwaccel_args: preset-intel-qsv-h264 +``` + +#### H.265流 + +```yaml +ffmpeg: + hwaccel_args: preset-intel-qsv-h265 +``` + +### Docker中配置Intel GPU统计 + +需要额外配置才能使Docker容器访问`intel_gpu_top`命令获取GPU统计信息。有两种方法: + +1. 以特权模式运行容器 +2. 添加`CAP_PERFMON`能力(注意:可能需要降低`perf_event_paranoid`值) + +#### 特权模式运行 + +这种方法有效但会赋予容器过多权限。 + +##### Docker Compose - 特权模式 + +```yaml +services: + frigate: + ... + privileged: true +``` + +##### Docker Run CLI - 特权模式 + +```bash +docker run -d \ + --name frigate \ + ... + --privileged \ + ghcr.io/blakeblackshear/frigate:stable +``` + +#### CAP_PERFMON + +只有较新版本的Docker支持`CAP_PERFMON`能力。可通过运行测试:`docker run --cap-add=CAP_PERFMON hello-world` + +##### Docker Compose - CAP_PERFMON + +```yaml +services: + frigate: + ... + cap_add: + - CAP_PERFMON +``` + +##### Docker Run CLI - CAP_PERFMON + +```bash +docker run -d \ + --name frigate \ + ... + --cap-add=CAP_PERFMON \ + ghcr.io/blakeblackshear/frigate:stable +``` + +#### perf_event_paranoid + +_注意:此设置需针对整个系统修改。_ + +关于不同发行版的值,参考:https://askubuntu.com/questions/1400874/what-does-perf-paranoia-level-four-do + +临时修改(重启后失效): +```bash +sudo sh -c 'echo 2 >/proc/sys/kernel/perf_event_paranoid' +``` + +永久修改: +```bash +sudo sh -c 'echo kernel.perf_event_paranoid=2 >> /etc/sysctl.d/local.conf' +``` + +#### SR-IOV设备统计 + +使用SR-IOV虚拟化GPU时,需要额外参数才能使GPU统计正常工作: + +```yaml +telemetry: + stats: + sriov: True +``` + +## AMD/ATI显卡(Radeon HD 2000及更新) + +VAAPI支持自动配置文件选择,可自动处理H.264和H.265流。 + +:::note + +需要通过环境变量`LIBVA_DRIVER_NAME=radeonsi`将驱动改为radeonsi(在docker-compose文件中或[HA插件的config.yml](advanced.md#environment_vars)中)。 + +::: + +```yaml +ffmpeg: + hwaccel_args: preset-vaapi +``` + +## NVIDIA显卡 + +建议使用现代支持的GPU。NVIDIA提供了[支持的GPU和功能矩阵](https://developer.nvidia.com/video-encode-and-decode-gpu-support-matrix-new)。如果您的显卡在列表中且支持CUVID/NVDEC,则很可能可用于解码。但必须使用[与FFmpeg兼容的驱动版本](https://github.com/FFmpeg/nv-codec-headers/blob/master/README)。 + +更完整的显卡和驱动兼容列表见[驱动发布说明](https://download.nvidia.com/XFree86/Linux-x86_64/525.85.05/README/supportedchips.html)。 + +### Docker中配置NVIDIA显卡 + +需要安装[NVIDIA容器工具包](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker)并指定GPU。 + +#### Docker Compose - NVIDIA显卡 + +```yaml +services: + frigate: + ... + deploy: + resources: + reservations: + devices: + - driver: nvidia + device_ids: ['0'] # 仅需在多GPU时指定 + count: 1 # GPU数量 + capabilities: [gpu] +``` + +#### Docker Run CLI - NVIDIA显卡 + +```bash +docker run -d \ + --name frigate \ + ... + --gpus=all \ + ghcr.io/blakeblackshear/frigate:stable +``` + +### 设置解码器 + +使用`preset-nvidia`时,ffmpeg会自动选择适合的配置文件,如果不支持会记录错误。 + +```yaml +ffmpeg: + hwaccel_args: preset-nvidia +``` + +验证硬件解码是否工作,运行`nvidia-smi`应显示`ffmpeg`进程: + +:::note + +由于Docker限制,`nvidia-smi`在容器内运行时可能不显示`ffmpeg`进程。 + +::: + +这些说明基于[Jellyfin文档](https://jellyfin.org/docs/general/administration/hardware-acceleration.html#nvidia-hardware-acceleration-on-docker-linux)。 + +# 社区支持 + +## NVIDIA Jetson系列 + +提供基于Jetpack/L4T的专用Docker镜像,包含使用Jetson专用媒体引擎的ffmpeg构建。Jetpack 6.0+主机使用`stable-tensorrt-jp6`标签镜像。注意Orin Nano没有视频编码器,将使用软件编码。 + +### Docker Run CLI - Jetson + +```bash +docker run -d \ + ... + --runtime nvidia + ghcr.io/blakeblackshear/frigate:stable-tensorrt-jp6 +``` + +### Docker Compose - Jetson + +```yaml +services: + frigate: + ... + image: ghcr.io/blakeblackshear/frigate:stable-tensorrt-jp6 + runtime: nvidia +``` + +:::note + +旧版docker-compose不支持`runtime:`标签。可改为在`/etc/docker/daemon.json`中添加`"default-runtime": "nvidia"`: + +```json +{ + "runtimes": { + "nvidia": { + "path": "nvidia-container-runtime", + "runtimeArgs": [] + } + }, + "default-runtime": "nvidia" +} +``` + +::: + +### 设置解码器 + +根据输入视频选择解码器(在容器内运行`ffmpeg -decoders | grep nvmpi`查看支持的解码器): + +```yaml +ffmpeg: + hwaccel_args: preset-jetson-h264 +``` + +验证硬件解码是否工作,运行`jtop`(`sudo pip3 install -U jetson-stats`)应显示NVDEC/NVDEC1在使用。 + +## Rockchip平台 + +所有Rockchip SoC都支持使用[Nyanmisaka的FFmpeg 6.1分支](https://github.com/nyanmisaka/ffmpeg-rockchip)进行硬件加速编解码。 + +### 前提条件 + +按照[Rockchip特定安装说明](/frigate/installation#rockchip平台)操作。 + +### 配置 + +在`config.yml`中添加以下预设之一: + +```yaml +# 解码h264流 +ffmpeg: + hwaccel_args: preset-rk-h264 + +# 解码h265(hevc)流 +ffmpeg: + hwaccel_args: preset-rk-h265 +``` + +:::note + +确保您的SoC支持输入流的硬件加速。例如,如果摄像头以h265编码和4K分辨率流式传输,您的SoC必须能够以4K或更高分辨率编解码h265。如果不确定,请查阅SoC数据手册。 + +::: \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/index.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/index.md new file mode 100644 index 000000000..3ff86afed --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/index.md @@ -0,0 +1,263 @@ +--- +id: index +title: Frigate 配置 +--- + +对于Home Assistant插件安装,配置文件应该位于`/addon_configs//config.yml`,其中``,其中``是特定于你正在运行的Frigate插件变体的。 + +| 插件变体 | 配置目录 | +| -------------------------- | -------------------------------------------- | +| Frigate | `/addon_configs/ccab4aaf_frigate` | +| Frigate (完全访问) | `/addon_configs/ccab4aaf_frigate-fa` | +| Frigate Beta | `/addon_configs/ccab4aaf_frigate-beta` | +| Frigate Beta (完全访问) | `/addon_configs/ccab4aaf_frigate-fa-beta` | + +**当你在文档中看到`/config`时,它指的是这个目录。** + +例如,如果你正在运行标准插件变体并使用[VS Code插件](https://github.com/hassio-addons/addon-vscode)浏览文件,你可以点击_文件_ > _打开文件夹..._并导航到`/addon_configs/ccab4aaf_frigate`来访问Frigate的`/config`目录并编辑`config.yaml`文件。你也可以使用Frigate UI中内置的文件编辑器来编辑配置文件。 + +## VS Code配置模式 + +VS Code支持JSON模式来自动验证配置文件。你可以通过在配置文件开头添加`# yaml-language-server: $schema=http://frigate_host:5000/api/config/schema.json`来启用此功能。将`frigate_host`替换为你的Frigate服务器的IP地址或主机名。如果你同时使用VS Code和Frigate作为插件,你应该使用`ccab4aaf-frigate`。当从另一台机器上的VS Code访问配置时,确保暴露内部未认证端口`5000`。 + +## 环境变量替换 + +Frigate仅在[参考配置](./reference.md)中特别指出的地方支持使用以`FRIGATE_`开头的环境变量。例如,以下值可以在运行时通过使用环境变量替换: + +```yaml +mqtt: + user: "{FRIGATE_MQTT_USER}" + password: "{FRIGATE_MQTT_PASSWORD}" +``` + +```yaml +- path: rtsp://{FRIGATE_RTSP_USER}:{FRIGATE_RTSP_PASSWORD}@10.0.10.10:8554/unicast +``` + +```yaml +onvif: + host: 10.0.10.10 + port: 8000 + user: "{FRIGATE_RTSP_USER}" + password: "{FRIGATE_RTSP_PASSWORD}" +``` + +```yaml +go2rtc: + rtsp: + username: "{FRIGATE_GO2RTC_RTSP_USERNAME}" + password: "{FRIGATE_GO2RTC_RTSP_PASSWORD}" +``` + +```yaml +genai: + api_key: "{FRIGATE_GENAI_API_KEY}" +``` + +## 常见配置示例 + +以下是一些常见的入门配置示例。有关所有配置值的详细信息,请参阅[参考配置](./reference.md)。 + +### 带USB Coral的树莓派Home Assistant插件 + +- 单个摄像头,720p,5fps检测流 +- MQTT连接到Home Assistant Mosquitto插件 +- 用于解码视频的硬件加速 +- USB Coral检测器 +- 保存所有包含任何可检测运动的视频7天,无论是否检测到任何对象 +- 如果视频符合警报或检测条件,继续保留30天 +- 保存快照30天 +- 摄像头时间戳的运动遮罩 + +```yaml +mqtt: + host: core-mosquitto + user: mqtt-user + password: xxxxxxxxxx + +ffmpeg: + hwaccel_args: preset-rpi-64-h264 + +detectors: + coral: + type: edgetpu + device: usb + +record: + enabled: True + retain: + days: 7 + mode: motion + alerts: + retain: + days: 30 + detections: + retain: + days: 30 + +snapshots: + enabled: True + retain: + default: 30 + +cameras: + name_of_your_camera: + detect: + width: 1280 + height: 720 + fps: 5 + ffmpeg: + inputs: + - path: rtsp://10.0.10.10:554/rtsp + roles: + - detect + motion: + mask: + - 0.000,0.427,0.002,0.000,0.999,0.000,0.999,0.781,0.885,0.456,0.700,0.424,0.701,0.311,0.507,0.294,0.453,0.347,0.451,0.400 +``` + +### 带USB Coral的独立Intel迷你PC + +- 单个摄像头,720p,5fps检测流 +- MQTT禁用(未与home assistant集成) +- VAAPI硬件加速用于解码视频 +- USB Coral检测器 +- 保存所有包含任何可检测运动的视频7天,无论是否检测到任何对象 +- 如果视频符合警报或检测条件,继续保留30天 +- 保存快照30天 +- 摄像头时间戳的运动遮罩 + +```yaml +mqtt: + enabled: False + +ffmpeg: + hwaccel_args: preset-vaapi + +detectors: + coral: + type: edgetpu + device: usb + +record: + enabled: True + retain: + days: 7 + mode: motion + alerts: + retain: + days: 30 + detections: + retain: + days: 30 + +snapshots: + enabled: True + retain: + default: 30 + +cameras: + name_of_your_camera: + detect: + width: 1280 + height: 720 + fps: 5 + ffmpeg: + inputs: + - path: rtsp://10.0.10.10:554/rtsp + roles: + - detect + motion: + mask: + - 0.000,0.427,0.002,0.000,0.999,0.000,0.999,0.781,0.885,0.456,0.700,0.424,0.701,0.311,0.507,0.294,0.453,0.347,0.451,0.400 +``` + +### 带OpenVino的Home Assistant集成Intel迷你PC + +- 单个摄像头,720p,5fps检测流 +- MQTT连接到与home assistant相同的mqtt服务器 +- VAAPI硬件加速用于解码视频 +- OpenVino检测器 +- 保存所有包含任何可检测运动的视频7天,无论是否检测到任何对象 +- 如果视频符合警报或检测条件,继续保留30天 +- 保存快照30天 +- 摄像头时间戳的运动遮罩 + +```yaml +mqtt: + host: 192.168.X.X # <---- 与home assistant使用相同的mqtt代理 + user: mqtt-user + password: xxxxxxxxxx + +ffmpeg: + hwaccel_args: preset-vaapi + +detectors: + ov: + type: openvino + device: AUTO + +model: + width: 300 + height: 300 + input_tensor: nhwc + input_pixel_format: bgr + path: /openvino-model/ssdlite_mobilenet_v2.xml + labelmap_path: /openvino-model/coco_91cl_bkgr.txt + +record: + enabled: True + retain: + days: 7 + mode: motion + alerts: + retain: + days: 30 + detections: + retain: + days: 30 + +snapshots: + enabled: True + retain: + default: 30 + +cameras: + name_of_your_camera: + detect: + width: 1280 + height: 720 + fps: 5 + ffmpeg: + inputs: + - path: rtsp://10.0.10.10:554/rtsp + roles: + - detect + motion: + mask: + - 0.000,0.427,0.002,0.000,0.999,0.000,0.999,0.781,0.885,0.456,0.700,0.424,0.701,0.311,0.507,0.294,0.453,0.347,0.451,0.400 +``` \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/license_plate_recognition.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/license_plate_recognition.md new file mode 100644 index 000000000..81f14a691 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/license_plate_recognition.md @@ -0,0 +1,308 @@ +--- +id: license_plate_recognition +title: 车牌识别(LPR) +--- + +:::warning + +车牌识别功能目前对中国大陆的车牌识别的支持并不完善,我们会在后面优化该功能。目前将不会对该文档进行精翻;本文使用DeepSeek AI进行翻译,仅做参考。 + +::: + +Frigate能够识别车辆上的车牌,并自动将检测到的字符添加到`recognized_license_plate`字段,或将已知名称作为`sub_label`添加到`car`类型的跟踪对象中。常见用例包括识别驶入车道的车辆或街道上经过车辆的车牌。 + +当车牌清晰可见时,LPR效果最佳。对于移动车辆,Frigate会持续优化识别过程,保留置信度最高的结果。但LPR不会对静止车辆运行。 + +当识别到车牌时,识别结果会: +- 作为`sub_label`(已知车牌)或`recognized_license_plate`字段(未知车牌)添加到跟踪对象 +- 在核查的 核查项细节 面板中可见(sub labels) +- 在浏览的 探测对象细节 面板中可见(sub labels和recognized_license_plate) +- 可通过浏览中的 更多筛选项 菜单进行过滤 +- 通过MQTT主题`frigate/events`发布,作为`car`跟踪对象的`sub_label`(已知)或`recognized_license_plate`(未知) + +## 模型要求 + +使用Frigate+模型(或任何原生支持车牌检测的自定义模型)的用户应确保在[跟踪对象列表](https://docs.frigate.video/plus/#available-label-types)中添加`license_plate`标签,可以是全局设置或针对特定摄像头。这将提高LPR模型的准确性和性能。 + +没有车牌检测模型的用户仍可运行LPR。Frigate使用轻量级YOLOv9车牌检测模型,可配置在CPU或GPU上运行。这种情况下,您不应在跟踪对象列表中定义`license_plate`。 + +:::note + +在默认模式下,Frigate的LPR需要先检测到`car`才能识别车牌。如果您使用专用LPR摄像头且视图放大到无法检测`car`的程度,仍可运行LPR,但配置参数与默认模式不同。详见下文[专用LPR摄像头](#专用lpr摄像头)部分。 + +::: + +## 最低系统要求 + +车牌识别通过在系统本地运行AI模型实现。这些模型相对轻量,可根据配置在CPU或GPU上运行。至少需要4GB内存。 + +## 配置 + +车牌识别默认禁用。在配置文件中启用: + +```yaml +lpr: + enabled: True +``` + +与其他Frigate增强功能一样,LPR必须全局启用。如果不想在某些摄像头上运行LPR,可在摄像头级别禁用: + +```yaml +cameras: + garage: + ... + lpr: + enabled: False +``` + +对于非专用LPR摄像头,请确保摄像头配置为检测`car`类型对象,且Frigate确实检测到了车辆。否则LPR不会运行。 + +与其他实时处理器一样,车牌识别运行在配置中`detect`角色定义的摄像头流上。为确保最佳性能,请在摄像头固件中选择适合您场景和需求的分辨率。 + +## 高级配置 + +在配置的全局层级使用这些可选参数微调LPR功能。唯一应在摄像头级别设置的可选参数是`enabled`、`min_area`和`enhancement`。 + +### 检测 + +- **`detection_threshold`**: 运行识别前所需的车牌检测置信度分数 + - 默认: `0.7` + - 注意: 此字段仅适用于独立车牌检测模型,对于内置车牌检测的模型(如Frigate+)应使用`threshold`和`min_score`对象过滤器 +- **`min_area`**: 定义运行识别前车牌的最小面积(像素单位) + - 默认: `1000`像素。注意:这是面积测量(长×宽),1000像素代表图像中约32×32像素的正方形 + - 根据摄像头`detect`流的分辨率,可增加此值以忽略过小或过远的车牌 +- **`device`**: 运行车牌识别模型的设备 + - 默认: `CPU` + - 可选`CPU`或`GPU`。对于没有原生车牌检测模型的用户,使用GPU可能提高模型性能,特别是YOLOv9车牌检测器模型 +- **`model_size`**: 用于检测车牌上文字的模型大小 + - 默认: `small` + - 可选`small`或`large`。`large`模型使用增强的文本检测器,能更准确地找到车牌上的文字但比`small`模型慢。对大多数用户推荐small模型。对于车牌有多行文字的国家,推荐large模型。注意:使用large模型不会改进文字识别,但可能改进文字检测 + +### 识别 + +- **`recognition_threshold`**: 将车牌作为`recognized_license_plate`和/或`sub_label`添加到对象所需的识别置信度分数 + - 默认: `0.9` +- **`min_plate_length`**: 指定检测到的车牌必须具有的最小字符数才能作为`recognized_license_plate`和/或`sub_label`添加到对象 + - 用于过滤短、不完整或不正确的检测 +- **`format`**: 定义预期车牌格式的正则表达式。不匹配此格式的车牌将被丢弃 + - `"^[A-Z]{1,3} [A-Z]{1,2} [0-9]{1,4}$"`匹配如"B AB 1234"或"M X 7"的车牌 + - `"^[A-Z]{2}[0-9]{2} [A-Z]{3}$"`匹配如"AB12 XYZ"或"XY68 ABC"的车牌 + - 可使用https://regex101.com/等网站测试正则表达式 + +### 匹配 + +- **`known_plates`**: 字符串或正则表达式列表,当识别到的车牌匹配已知值时,为`car`对象分配自定义`sub_label` + - 这些标签会显示在UI、过滤器和通知中 + - 未知车牌仍会保存,但添加到`recognized_license_plate`字段而非`sub_label` +- **`match_distance`**: 允许在匹配检测到的车牌与已知车牌时有微小变化(缺失/错误字符) + - 例如设置`match_distance: 1`允许车牌`ABCDE`匹配`ABCBE`或`ABCD` + - 此参数不适用于定义为正则表达式的已知车牌。要使用`match_distance`,应在`known_plates`中定义车牌的完整字符串 + +### 图像增强 + +- **`enhancement`**: 0到10之间的值,调整在识别前对捕获车牌应用的图像增强级别。此预处理步骤有时可提高准确性但也可能适得其反 + - 默认: `0`(无增强) + - 较高值会增加对比度、锐化细节并减少噪点,但过度增强会使字符模糊或失真,实际上使Frigate更难识别 + - 如果在多个摄像头上运行LPR,最好在摄像头级别调整此设置 + - 如果Frigate已能正确识别车牌,保持此设置为默认值`0`。但如果经常遇到字符问题或不完整车牌,而您自己已能轻松阅读车牌,可尝试从5开始逐步增加此值。您应观察不同增强级别对车牌的影响。使用`debug_save_plates`配置选项(见下文) + +### 调试 + +- **`debug_save_plates`**: 设为`True`保存检测到的车牌文字图像用于调试。这些图像存储在`/media/frigate/clips/lpr`,按`<摄像头>/<事件ID>`分子目录,基于捕获时间戳命名 + - 这些保存的图像不是完整车牌而是检测到的文字区域。文字检测模型有时会在车牌上找到多个文字区域是正常的。用它们分析Frigate识别了什么文字以及图像增强如何影响检测 + - 注意: Frigate不会自动删除这些调试图像。一旦LPR正常运行,应禁用此选项并手动删除保存的文件以释放存储空间 + +## 配置示例 + +这些配置参数可在配置的全局层级使用。唯一应在摄像头级别设置的可选参数是`enabled`、`min_area`和`enhancement`。 + +```yaml +lpr: + enabled: True + min_area: 1500 # 忽略面积小于1500像素的车牌 + min_plate_length: 4 # 仅识别4个或更多字符的车牌 + known_plates: + Wife's Car: + - "ABC-1234" + - "ABC-I234" # 考虑数字1(1)和大写字母I可能混淆的情况 + Johnny: + - "J*N-*234" # 匹配JHN-1234和JMN-I234,注意"*"匹配任意数量字符 + Sally: + - "[S5]LL 1234" # 匹配SLL 1234和5LL 1234 + Work Trucks: + - "EMP-[0-9]{3}[A-Z]" # 匹配如EMP-123A, EMP-456Z的车牌 +``` + +```yaml +lpr: + enabled: True + min_area: 4000 # 仅对较大车牌运行识别(4000像素代表图像中约63×63像素的正方形) + recognition_threshold: 0.85 + format: "^[A-Z]{2} [A-Z][0-9]{4}$" # 仅识别两个字母后跟空格、单个字母和4个数字的车牌 + match_distance: 1 # 允许车牌匹配中一个字符的变化 + known_plates: + Delivery Van: + - "RJ K5678" + - "UP A1234" + Supervisor: + - "MN D3163" +``` + +:::note + +如果想在摄像头上检测车辆但不想消耗资源在这些车辆上运行LPR,应禁用这些特定摄像头的LPR。 + +```yaml +cameras: + side_yard: + lpr: + enabled: False + ... +``` + +::: + +## 专用LPR摄像头 + +专用LPR摄像头是具有强大光学变焦的单用途摄像头,用于捕捉远处车辆的车牌,通常具有精细调校的设置以在夜间捕捉车牌。 + +要将摄像头标记为专用LPR摄像头,在摄像头配置中添加`type: "lpr"`。 + +用户可根据是否使用Frigate+(或原生`license_plate`检测)模型以两种不同方式配置Frigate的专用LPR模式: + +### 使用Frigate+(或原生`license_plate`检测)模型 + +使用Frigate+模型(或任何能原生检测`license_plate`的模型)的用户可利用`license_plate`检测功能。这使得车牌在专用LPR模式下被视为标准对象,意味着警报、检测、快照、区域和其他Frigate功能正常工作,车牌通过配置的对象检测器高效检测。 + +使用`license_plate`检测模型的专用LPR摄像头配置示例: + +```yaml +# LPR全局配置 +lpr: + enabled: True + device: CPU # 也可用GPU(如果可用) + +# 专用LPR摄像头配置 +cameras: + dedicated_lpr_camera: + type: "lpr" # 必需以使用专用LPR摄像头模式 + ffmpeg: ... # 添加您的流 + detect: + enabled: True + fps: 5 # 如果车辆快速移动可增至10。高于15不必要也不推荐 + min_initialized: 2 + width: 1920 + height: 1080 + objects: + track: + - license_plate + filters: + license_plate: + threshold: 0.7 + motion: + threshold: 30 + contour_area: 60 # 使用增大值过滤小的运动变化 + improve_contrast: false + mask: 0.704,0.007,0.709,0.052,0.989,0.055,0.993,0.001 # 确保摄像头时间戳被遮罩 + record: + enabled: True # 如果只想要快照可禁用录制 + snapshots: + enabled: True + review: + detections: + labels: + - license_plate +``` + +此设置下: +- 车牌被视为Frigate中的正常对象 +- 分数、警报、检测、快照、区域和对象遮罩按预期工作 +- 快照上会有车牌边界框 +- MQTT主题`frigate/events`会发布跟踪对象更新 +- 调试视图会显示`license_plate`边界框 +- 如果使用Frigate+模型并想提交专用LPR摄像头图像用于模型训练和微调,在Frigate+网站上标注快照中的`car`和`license_plate`,即使车辆几乎不可见 + +### 使用次级LPR管道(无Frigate+) + +如果没有使用Frigate+模型,可使用Frigate内置的次级专用LPR管道。在此模式下,Frigate绕过标准对象检测管道,在检测到运动时对全帧运行本地车牌检测器模型。 + +使用次级管道的专用LPR摄像头配置示例: + +```yaml +# LPR全局配置 +lpr: + enabled: True + device: CPU # 也可用GPU(如果可用) + detection_threshold: 0.7 # 必要时更改 + +# 专用LPR摄像头配置 +cameras: + dedicated_lpr_camera: + type: "lpr" # 必需以使用专用LPR摄像头模式 + lpr: + enabled: True + enhancement: 3 # 可选,在尝试识别字符前增强图像 + ffmpeg: ... # 添加您的流 + detect: + enabled: False # 禁用Frigate标准对象检测管道 + fps: 5 # 必要时增加,但高值可能减慢Frigate增强管道并使用大量CPU + width: 1920 + height: 1080 + objects: + track: [] # 无Frigate+模型的专用LPR模式必需 + motion: + threshold: 30 + contour_area: 60 # 使用增大值过滤小的运动变化 + improve_contrast: false + mask: 0.704,0.007,0.709,0.052,0.989,0.055,0.993,0.001 # 确保摄像头时间戳被遮罩 + record: + enabled: True # 如果只想要快照可禁用录制 + review: + detections: + enabled: True + retain: + default: 7 +``` + +此设置下: +- 绕过标准对象检测管道。专用LPR摄像头上检测到的任何车牌在Frigate中类似于手动事件处理。您必须不指定`license_plate`作为跟踪对象 +- 检测到运动时,车牌检测器在全帧上运行,并根据检测`fps`设置处理帧 +- Review项目始终分类为`detection` +- 始终保存快照 +- 不使用区域和对象遮罩 +- MQTT主题`frigate/events`不会发布带车牌边界框和分数的跟踪对象更新,但如果启用录制,`frigate/reviews`会发布。如果识别为已知车牌,会发布带更新`sub_label`字段的消息;如果识别出字符,会发布带更新`recognized_license_plate`字段的消息 +- 车牌快照在得分最高时刻保存并出现在Explore中 +- 调试视图不显示`license_plate`边界框 + +### 总结 + +| 功能 | 原生`license_plate`检测模型(如Frigate+) | 次级管道(无原生模型或Frigate+) | +|----------------------|----------------------------------------|------------------------------------------| +| 车牌检测 | 使用`license_plate`作为跟踪对象 | 运行专用LPR管道 | +| FPS设置 | 5(快速移动车辆可增加) | 5(快速移动车辆可增加,但可能使用更多CPU) | +| 对象检测 | 应用标准Frigate+检测 | 绕过标准对象检测 | +| 区域和对象遮罩 | 支持 | 不支持 | +| 调试视图 | 可能显示`license_plate`边界框 | 可能不显示`license_plate`边界框 | +| MQTT `frigate/events` | 发布跟踪对象更新 | 发布有限更新 | +| Explore | 识别的车牌在More Filters中可用 | 识别的车牌在More Filters中可用 | + +通过选择适当的配置,用户可根据是否使用Frigate+模型或次级LPR管道优化专用LPR摄像头。 + +### 使用专用LPR摄像头模式的最佳实践 + +- 调整运动检测并增加`contour_area`,直到只有车辆通过时创建较大的运动框(对于1920×1080检测流可能在50-90之间)。增加`contour_area`过滤小的运动区域,防止在没有车辆通过的帧中寻找车牌浪费资源 +- 禁用`improve_contrast`运动设置,特别是在夜间运行LPR且画面大部分黑暗时。这将防止小像素变化和小的运动区域触发车牌检测 +- 确保用运动遮罩覆盖摄像头时间戳,防止其被误检测为车牌 +- 对于非Frigate+用户,可能需要更改摄像头设置以获得更清晰的图像,或如果夜间车牌识别不准确,降低全局`recognition_threshold`配置 +- 次级管道模式在CPU或GPU(取决于`device`配置)上运行本地AI模型检测车牌。增加检测`fps`将按比例增加资源使用 + +## 常见问题 + +### 为什么我的车牌没有被检测和识别? + +确保: +- 摄像头有清晰、人眼可读、光照良好的车牌视图。如果您自己都看不清车牌字符,Frigate肯定也做不到,即使模型识别到了`license_plate`。根据场景和车辆速度,可能需要更改视频大小、质量或帧率设置 +- 车牌在图像中足够大(尝试调整`min_area`)或增加摄像头流的分辨率 +- 您的`enhancement`级别(如果已从默认值`0`更改)不过高。过度增强会进行过多降噪,导致车牌字符模糊难读 + +如果使用Frigate+模型或自定义车牌检测模型,确保在跟踪对象列表 \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/live.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/live.md new file mode 100644 index 000000000..10025df4d --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/live.md @@ -0,0 +1,242 @@ +--- +id: live +title: 实时视图 +--- + +Frigate智能地在实时视图仪表板上显示您的摄像头流。默认情况下,Frigate采用"智能流媒体"技术,当没有检测到活动时,摄像头图像每分钟更新一次以节省带宽和资源。一旦检测到任何运动或活动对象,摄像头会无缝切换到实时流。 + +### 实时视图技术 + +Frigate智能地使用三种不同的流媒体技术在仪表板和单摄像头视图上显示您的摄像头流,根据网络带宽、播放器错误或双向通话等功能需求在不同可用模式间切换。要获得最高质量和流畅度的实时视图,需要按照[逐步指南](/guides/configuring_go2rtc)配置内置的`go2rtc`。 + +jsmpeg实时视图会消耗更多浏览器和客户端GPU资源。强烈推荐使用go2rtc,它能提供更优质的体验。 + +| 来源 | 帧率 | 分辨率 | 音频 | 需要go2rtc | 说明 | +| ---- | --------------------------------- | ------ | ---------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| jsmpeg | 与`detect -> fps`相同,上限10fps | 720p | 无 | 否 | 分辨率可配置,但如需更高分辨率和更好帧率推荐使用go2rtc。未配置go2rtc时是Frigate的默认选项。 | +| mse | 原生 | 原生 | 是(取决于音频编解码器) | 是 | iPhone需要iOS 17.1+,Firefox仅支持h.264。配置go2rtc后是Frigate的默认选项。 | +| webrtc | 原生 | 原生 | 是(取决于音频编解码器) | 是 | 需要额外配置,不支持h.265。当MSE失败或使用摄像头双向通话功能时,Frigate会尝试使用WebRTC。 | + +### 摄像头设置建议 + +如果使用go2rtc,应在摄像头固件中调整以下设置以获得最佳实时视图体验: + +- 视频编解码器:**H.264** - 提供与所有实时视图技术和浏览器最兼容的视频编解码器。避免使用任何"智能编解码器"或"+"编解码器,如_H.264+_或_H.265+_,这些非标准编解码器会移除关键帧(见下文)。 +- 音频编解码器:**AAC** - 提供与所有支持音频的实时视图技术和浏览器最兼容的音频编解码器。 +- I帧间隔(有时称为关键帧间隔、帧间空间或GOP长度):匹配摄像头的帧率,或选择"1x"(对于Reolink摄像头的帧间空间)。例如,如果您的流输出20fps,I帧间隔应为20(或Reolink上的1x)。高于帧率的值会导致流开始播放时间更长。有关关键帧的更多信息,请参阅[此页面](https://gardinal.net/understanding-the-keyframe-interval/)。对于许多用户来说这可能不是问题,但应注意1x I帧间隔会导致更多存储使用(如果同时将该流用于`record`角色)。 + +摄像头的默认视频和音频编解码器可能不总是与您的浏览器兼容,这就是为什么建议将它们设置为H.264和AAC。有关编解码器支持信息,请参阅[go2rtc文档](https://github.com/AlexxIT/go2rtc?tab=readme-ov-file#codecs-madness)。 + +### 音频支持 + +MSE需要PCMA/PCMU或AAC音频,WebRTC需要PCMA/PCMU或opus音频。如果想同时支持MSE和WebRTC,则需要在重流配置中确保两者都启用。 + +```yaml +go2rtc: + streams: + rtsp_cam: # <- RTSP流 + - rtsp://192.168.1.5:554/live0 # <- 支持视频和AAC音频的流 + - "ffmpeg:rtsp_cam#audio=opus" # <- 将音频转码为缺失编解码器(通常是opus)的流副本 + http_cam: # <- HTTP流 + - http://192.168.50.155/flv?port=1935&app=bcs&stream=channel0_main.bcs&user=user&password=password # <- 支持视频和AAC音频的流 + - "ffmpeg:http_cam#audio=opus" # <- 将音频转码为缺失编解码器(通常是opus)的流副本 +``` + +如果摄像头不支持AAC音频或实时视图有问题,尝试直接转码为AAC音频: + +```yaml +go2rtc: + streams: + rtsp_cam: # <- RTSP流 + - "ffmpeg:rtsp://192.168.1.5:554/live0#video=copy#audio=aac" # <- 复制视频流并将音频转码为AAC + - "ffmpeg:rtsp_cam#audio=opus" # <- 提供WebRTC支持 +``` + +如果摄像头没有音频且实时视图有问题,应让go2rtc仅发送视频: + +```yaml +go2rtc: + streams: + no_audio_camera: + - ffmpeg:rtsp://192.168.1.5:554/live0#video=copy +``` + +### 为实时页面设置视频流 + +可以配置Frigate允许手动选择要在实时页面中查看的视频流。例如,您可能想在移动设备上查看摄像头的子流,而在桌面设备上查看全分辨率流。设置`live -> streams`列表将在页面的实时视图中填充一个下拉菜单,让您可以选择不同的流。此流设置是_每设备_的,并保存在浏览器的本地存储中。 + +此外,在界面中创建和编辑摄像头组时,可以选择要用于摄像头组实时仪表板的视频流。 + +:::note + +Frigate的默认仪表板("所有摄像头")在播放摄像头实时流时将始终使用您在`streams:`中定义的第一个条目。 + +::: + +使用"友好名称"后跟go2rtc流名称来配置`streams`选项。 + +使用Frigate内置版本的go2rtc是使用此功能的必要条件。不能在`streams`配置中指定路径,只能指定go2rtc流名称。 + +```yaml +go2rtc: + streams: + test_cam: + - rtsp://192.168.1.5:554/live_main # <- 支持视频和AAC音频的流 + - "ffmpeg:test_cam#audio=opus" # <- 将音频转码为opus以支持webrtc的流副本 + test_cam_sub: + - rtsp://192.168.1.5:554/live_sub # <- 支持视频和AAC音频的流 + test_cam_another_sub: + - rtsp://192.168.1.5:554/live_alt # <- 支持视频和AAC音频的流 + +cameras: + test_cam: + ffmpeg: + output_args: + record: preset-record-generic-audio-copy + inputs: + - path: rtsp://127.0.0.1:8554/test_cam # <--- 这里的名称必须与重流中的摄像头名称匹配 + input_args: preset-rtsp-restream + roles: + - record + - path: rtsp://127.0.0.1:8554/test_cam_sub # <--- 这里的名称必须与重流中的camera_sub名称匹配 + input_args: preset-rtsp-restream + roles: + - detect + live: + streams: # <--- Frigate 0.16及更高版本支持多流 + 主流: test_cam # <--- 指定"友好名称"后跟go2rtc流名称 + 子流: test_cam_sub + 特殊流: test_cam_another_sub +``` + +### WebRTC额外配置: + +WebRTC通过在端口`8555`上创建TCP或UDP连接工作。但是,它需要额外配置: + +- 对于外部访问(通过互联网),设置路由器将端口`8555`(TCP和UDP)转发到Frigate设备的端口`8555`。 +- 对于内部/本地访问,除非通过HA插件运行,否则还需要在go2rtc配置中设置WebRTC候选列表。例如,如果`192.168.1.10`是运行Frigate设备的本地IP: + + ```yaml title="config.yml" + go2rtc: + streams: + test_cam: ... + webrtc: + candidates: + - 192.168.1.10:8555 + - stun:8555 + ``` + +- 对于通过Tailscale的访问,必须将Frigate系统的Tailscale IP添加为WebRTC候选。Tailscale IP都以`100.`开头,并保留在`100.64.0.0/10` CIDR块中。 +- 注意WebRTC不支持H.265。 + +:::tip + +如果Frigate已作为Home Assistant插件安装,可能不需要此额外配置,因为Frigate使用Supervisor的API生成WebRTC候选。 + +但是,如果出现问题,建议手动定义候选。如果Frigate插件未能生成有效候选,您应该这样做。如果发生错误,您将在初始化期间的插件日志页面中看到类似以下的警告: + +```log +[WARN] 无法从supervisor获取IP地址 +[WARN] 无法从supervisor获取WebRTC端口 +``` + +::: + +:::note + +如果在让WebRTC工作时遇到困难,并且您正在使用docker运行Frigate,可以尝试更改容器网络模式: + +- `network: host`,在此模式下不需要转发任何端口。Frigate容器内的服务将完全访问主机机器的网络接口,就像它们原生运行而不是在容器中一样。任何端口冲突都需要解决。go2rtc推荐此网络模式,但我们建议仅在必要时使用。 +- `network: bridge`是默认网络驱动程序,桥接网络是转发网络段间流量的链路层设备。需要转发任何希望从主机IP访问的端口。 + +如果不在主机模式下运行,需要为容器映射端口8555: + +docker-compose.yml + +```yaml +services: + frigate: + ... + ports: + - "8555:8555/tcp" # WebRTC over tcp + - "8555:8555/udp" # WebRTC over udp +``` + +::: + +有关更多信息,请参阅[go2rtc WebRTC文档](https://github.com/AlexxIT/go2rtc/tree/v1.8.3#module-webrtc)。 + +### 双向通话 + +对于支持双向通话的设备,可以配置Frigate从Web UI的摄像头实时视图中使用该功能。您应该: + +- 设置go2rtc与[WebRTC](#webrtc-extra-configuration)。 +- 确保通过https访问Frigate(可能需要[打开端口8971](/frigate/installation/#端口))。 +- 对于Home Assistant Frigate卡片,[按照文档](https://github.com/dermotduffy/frigate-hass-card?tab=readme-ov-file#using-2-way-audio)获取正确的源。 + +要使用Reolink门铃的双向通话,应使用[推荐的Reolink配置](/configuration/camera_specific#reolink摄像头) + +### 摄像头组仪表板上的流媒体选项 + +Frigate在摄像头组编辑面板中提供了一个对话框,其中包含几个用于摄像头组仪表板上流媒体的选项。这些设置是_每设备_的,并保存在您设备的本地存储中。 + +- 使用`live -> streams`配置选项选择流(见上文_为实时UI设置流_) +- 流媒体类型: + - _无流媒体_:摄像头图像每分钟仅更新一次,不会进行实时流媒体。 + - _智能流媒体_(默认,推荐设置):当没有检测到活动时,智能流媒体每分钟更新一次摄像头图像以节省带宽和资源,因为静态图像与没有运动或对象的流媒体图像相同。当检测到运动或对象时,图像无缝切换到实时流。 + - _连续流媒体_:当在仪表板上可见时,摄像头图像始终是实时流,即使没有检测到活动。连续流媒体可能导致高带宽使用和性能问题。**谨慎使用。** +- _兼容模式_:仅当摄像头的实时流显示颜色伪影且图像右侧有对角线时才启用此选项。在启用之前,尝试将摄像头的`detect`宽度和高度设置为标准宽高比(例如:640x352变为640x360,800x443变为800x450,2688x1520变为2688x1512等)。根据您的浏览器和设备,可能不支持同时使用兼容模式的多个摄像头,因此只有在更改配置无法解决颜色伪影和对角线时才使用此选项。 + +:::note + +默认仪表板("所有摄像头")将始终使用智能流媒体和您在`streams`配置中设置的第一个条目(如果已定义)。如果想更改这些默认设置中的任何一个,请使用摄像头组。 + +::: + +### 禁用摄像头 + +可以通过Frigate页面和[MQTT](/integrations/mqtt#frigatecamera_nameenabledset)临时禁用摄像头以节省系统资源。禁用时,Frigate的ffmpeg进程终止 - 停止录制,暂停对象检测,实时仪表板显示禁用消息的空白图像。仍可通过UI访问禁用摄像头的回放条目、追踪对象和历史录像。 + +对于重流摄像头,go2rtc保持活动状态,但除非有外部客户端使用(如Home Assistant中的高级摄像头卡片使用go2rtc源),否则不会使用系统资源进行解码或处理。 + +注意通过配置文件禁用摄像头(`enabled: False`)会移除所有相关UI元素,包括历史录像访问。要保留访问权限同时禁用摄像头,请在配置中保持启用状态,并使用UI或MQTT临时禁用它。 + +## 实时视图常见问题 + +1. **为什么我的实时视图中没有音频?** + + 必须使用go2rtc才能在实时流中听到音频。如果已配置go2rtc,需要确保摄像头发送PCMA/PCMU或AAC音频。如果无法更改摄像头的音频编解码器,需要使用go2rtc[转码音频](https://github.com/AlexxIT/go2rtc?tab=readme-ov-file#source-ffmpeg)。 + + 请注意低带宽模式播放器是仅视频流。即使已设置go2rtc,也不应期望在低带宽模式下听到音频。 + +2. **Frigate显示我的实时流处于"低带宽模式"。这是什么意思?** + + Frigate根据多种因素(用户选择的模式如双向通话、摄像头设置、浏览器功能、可用带宽)智能选择实时流媒体技术,并优先尽可能快地显示摄像头流的最新实时视图。 + + 配置go2rtc后,实时视图最初尝试使用更清晰、流畅的流媒体技术(MSE)加载和播放流。初始超时、会导致流缓冲的低带宽条件或流中的解码错误将导致Frigate切换到由`detect`角色定义的流,使用jsmpeg格式。这就是UI标记为"低带宽模式"的内容。在实时仪表板上,当配置智能流媒体且活动停止时,模式会自动重置。连续流媒体模式没有自动重置机制,但可以使用_重置_选项强制重新加载流。 + + 如果使用连续流媒体或在仪表板上同时加载多个高分辨率流,浏览器可能在超时前难以开始播放流。Frigate始终优先尽可能快地显示实时流,即使是较低质量的jsmpeg流。可以使用"重置"链接/按钮尝试再次加载高分辨率流。 + + 如果Frigate仍然回退到低带宽模式,可能需要根据[上述建议](#camera_settings_recommendations)调整摄像头设置。 + +3. **我的摄像头似乎没有在实时仪表板上实时播放。为什么?** + + 在默认实时仪表板("所有摄像头")上,当没有检测到活动时,摄像头图像每分钟更新一次以节省带宽和资源。一旦检测到任何活动,摄像头无缝切换到全分辨率实时流。如果想自定义此行为,请使用摄像头组。 + +4. **我在实时视图上看到一条奇怪的对角线,但我的录像看起来很好。如何修复?** + + 这是由于`detect`宽度或高度设置不正确(或自动检测不正确)导致的,导致jsmpeg播放器的渲染引擎显示略微失真的图像。应将`detect`分辨率放大到标准宽高比(例如:640x352变为640x360,800x443变为800x450,2688x1520变为2688x1512等)。如果将分辨率更改为匹配标准(4:3、16:9或32:9等)宽高比无法解决问题,可以在摄像头组仪表板的流设置中启用"兼容模式"。根据您的浏览器和设备,可能不支持同时使用兼容模式的多个摄像头,因此只有在更改`detect`宽度和高度无法解决颜色伪影和对角线时才使用此选项。 + +5. **"智能流媒体"如何工作?** + + 因为场景的静态图像看起来与没有运动或活动的实时流完全相同,智能流媒体在没有检测到活动时每分钟更新一次摄像头图像以节省带宽和资源。一旦发生任何活动(运动或对象/音频检测),摄像头无缝切换到实时流。 + + 此静态图像从配置中`detect`角色定义的流中提取。当检测到活动时,`detect`流的图像立即开始以约5帧/秒的速度更新,以便您可以看到活动,直到实时播放器加载并开始播放。这通常只需要一两秒钟。如果实时播放器超时、缓冲或有流媒体错误,则加载jsmpeg播放器并从`detect`角色播放仅视频流。当活动结束时,销毁播放器并显示静态图像,直到再次检测到活动,然后重复此过程。 + + 智能流媒体依赖于正确调整摄像头的运动`threshold`和`contour_area`配置值。使用UI设置中的运动调谐器实时调整这些值。 + + 这是Frigate的默认和推荐设置,因为它能显著节省带宽,特别是对于高分辨率摄像头。 + +6. **我已取消静音某些仪表板上的摄像头,但听不到声音。为什么?** + + 如果您的摄像头正在流媒体(如右上角的红点所示,或设置为连续流媒体模式),您的浏览器可能会在您与页面交互前阻止音频播放。这是浏览器有意设计的限制。详见[这篇文章](https://developer.mozilla.org/en-US/docs/Web/Media/Autoplay_guide#autoplay_availability)。许多浏览器都有白名单功能可以更改此行为。 \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/masks.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/masks.md new file mode 100644 index 000000000..527a21d57 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/masks.md @@ -0,0 +1,85 @@ +--- +id: masks +title: 遮罩功能 +--- + +## 运动遮罩 + +运动遮罩用于防止不需要的运动类型触发检测。可以打开调试视图(设置 --> 调试)并启用"运动框"选项,观察哪些区域经常被误检测为运动。例如,您可能需要遮罩掉时间戳、天空、屋顶等区域。请注意,这种遮罩仅阻止运动检测,如果对象检测是由未遮罩区域的运动触发的,它不会阻止对象被检测到。运动信息也会在对象追踪过程中用于优化下一帧的对象检测区域。_过度使用遮罩会使对象追踪变得更加困难。_ + +关于为何可能不需要使用运动遮罩的[进一步说明](#进一步说明)见下文。 + +## 对象过滤遮罩 + +对象过滤遮罩用于根据位置过滤特定对象类型的误报。这些遮罩应该用于过滤掉不可能出现某类对象的区域。系统会评估检测对象边界框的底部中心点是否位于遮罩区域内。如果在遮罩区域内,则会被视为误报。例如,您可能需要对人物检测遮罩屋顶、墙壁、天空、树顶等区域。对于车辆,遮罩掉街道或车道以外的区域可以告诉Frigate院子里的任何检测都是误报。 + +对象过滤遮罩可用于过滤固定位置顽固的误报。例如,某棵树的底部可能经常被误检测为人。下图展示了一个对象过滤遮罩示例(红色阴影区域),覆盖了通常检测到底部中心点的位置,以精确过滤该位置的人物检测。 + +![对象遮罩](/img/bottom-center-mask.jpg) + +## 使用遮罩创建工具 + +创建多边形遮罩的步骤: + +1. 访问Web界面 +2. 点击齿轮图标打开"设置" +3. 选择"遮罩/区域编辑器" +4. 在右上角选择要创建遮罩或区域的摄像头 +5. 点击要创建的遮罩或区域类型下的加号图标 +6. 在摄像头最新画面上点击创建遮罩区域的多边形顶点。点击第一个顶点闭合多边形。 +7. 完成遮罩创建后,点击保存 +8. 重启Frigate应用更改 + +配置文件将更新为遮罩/区域的相对坐标: + +```yaml +motion: + mask: "0.000,0.427,0.002,0.000,0.999,0.000,0.999,0.781,0.885,0.456,0.700,0.424,0.701,0.311,0.507,0.294,0.453,0.347,0.451,0.400" +``` + +配置中可以列出多个遮罩: + +```yaml +motion: + mask: + - 0.239,1.246,0.175,0.901,0.165,0.805,0.195,0.802 + - 0.000,0.427,0.002,0.000,0.999,0.000,0.999,0.781,0.885,0.456 +``` + +### 进一步说明 + +这是对[Reddit上提出问题](https://www.reddit.com/r/homeautomation/comments/ppxdve/replacing_my_doorbell_with_a_security_camera_a_6/hd876w4?utm_source=share&utm_medium=web2x&context=3)的回应: + +了解Frigate如何结合使用运动检测和对象检测会很有帮助。 + +首先,Frigate使用运动检测作为初步检查,判断画面中是否有值得进行对象检测的活动。 + +一旦检测到运动,它会尝试将附近的运动区域分组,希望能识别出画面中值得检测的矩形区域。这些就是您在调试视图中看到的红色"运动框"。 + +确定运动区域后,Frigate会创建一个"区域"(调试视图中的绿色框)来运行对象检测。模型是在方形图像上训练的,所以这些区域总是正方形。它会在运动区域周围添加边距,希望能捕捉到填充大部分检测图像的运动对象裁剪视图,同时不会切断任何部分。如果正在追踪对象,它还会考虑前一帧边界框的位置。 + +运行对象检测后,如果检测到似乎被切断的对象,Frigate会重新调整区域并在同一帧上再次运行对象检测以获得更好的视角。 + +所有这些处理都会针对每个运动区域和追踪对象进行。 + +> 您是否只是说任何类型的检测的初始触发只会发生在未遮罩区域,但一旦触发发生,遮罩就变得无关紧要,对象检测优先? + +基本上是的。不过我不会描述为对象检测优先。运动遮罩只是阻止这些区域被计为运动。这些遮罩不会以任何方式修改传递给对象检测的区域,因此您绝对可以在运动遮罩区域中检测到对象。 + +> 如果是这样,这对我来说是完全预期和直观的行为。因为显然如果一只"脚"开始运动检测,相机应该能够检查它是否是一个完整的人,然后它完全进入区域。文档暗示这是行为,所以我也不能理解为什么这总体上对对象检测有害。 + +当只有一只脚触发运动时,Frigate会放大并只查看这只脚。如果这甚至符合一个人的特征,它会确定对象被切断并再次查看,直到放大到足以找到整个人。 + +这对Frigate追踪移动对象的方式也有害。前一帧边界框附近的运动用于智能确定下一帧中区域应该在哪里。遮罩过多会阻碍追踪,如果对象从未遮罩区域进入完全遮罩区域,它们基本上会消失,如果离开遮罩区域,将被视为"新"对象。这很重要,因为Frigate在追踪对象时使用分数历史记录来判断是否是误报。Frigate至少需要3帧才能确定它认为的对象类型,且中位数分数必须大于阈值。如果一个人在进入您的门廊前在人行道上达到此阈值,您将在他们单脚踏入区域的瞬间收到警报。 + +> 我认为这个功能的主要目的是减少不必要区域发生运动时的CPU使用。 + +是的,但"不必要"的定义各不相同。我想忽略那些我知道绝对不是由感兴趣对象触发的运动区域。时间戳、树木、天空、屋顶。我不想忽略我想要追踪并知道去向的对象的运动。 + +> 对我来说,给我的遮罩任何填充都会导致很多我不感兴趣的人物检测。我住在城市里,相机捕捉到很多人行道。人们经常走过我的前门,人行道和实际走上我的门廊之间的边缘非常薄,所以我基本上遮罩掉了门廊精确轮廓之外的所有区域。这导致非常整洁的检测,但这些信息一直让我困惑。我只是想太多了吗? + +这就是`必需区域`的用途。您应该定义一个区域(记住这是基于边界框底部中心评估的),并将其设为保存快照和片段所必需的(在0.9.0到0.13.0中称为事件,在0.14.0及以后称为回放条目)。您也可以在通知条件中使用它。 + +> 也许我的具体情况就需要这样。我一直很难理解这些信息的相关性 - 似乎这正是"遮罩"任何图像区域时所期望的。 + +对您来说可能是这样。Frigate肯定会更努力地追踪人行道上的人,以确保不会错过任何踏上您门廊的人。您现在的方式的权衡是对象识别速度较慢和可能的遗漏。根据您的需求,这可能是可以接受的。此外,如果您的检测流分辨率足够低,您的区域可能已经足够大,可以直接捕捉整个对象。 \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/metrics.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/metrics.md new file mode 100644 index 000000000..cb2d297a4 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/metrics.md @@ -0,0 +1,99 @@ +--- +id: metrics +title: 监控指标 +--- + +# 监控指标 + +Frigate 在 `/api/metrics` 端点提供 Prometheus 格式的监控指标,可用于监测 Frigate 实例的性能和运行状态。 + +## 可用指标 + +### 系统指标 +- `frigate_cpu_usage_percent{pid="", name="", process="", type="", cmdline=""}` - 进程CPU使用率百分比 +- `frigate_mem_usage_percent{pid="", name="", process="", type="", cmdline=""}` - 进程内存使用率百分比 +- `frigate_gpu_usage_percent{gpu_name=""}` - GPU利用率百分比 +- `frigate_gpu_mem_usage_percent{gpu_name=""}` - GPU显存使用率百分比 + +### 摄像头指标 +- `frigate_camera_fps{camera_name=""}` - 摄像头帧率 +- `frigate_detection_fps{camera_name=""}` - 每秒检测次数 +- `frigate_process_fps{camera_name=""}` - 每秒处理帧数 +- `frigate_skipped_fps{camera_name=""}` - 每秒跳过的帧数 +- `frigate_detection_enabled{camera_name=""}` - 摄像头检测功能启用状态 +- `frigate_audio_dBFS{camera_name=""}` - 音频dBFS值 +- `frigate_audio_rms{camera_name=""}` - 音频RMS值 + +### 检测器指标 +- `frigate_detector_inference_speed_seconds{name=""}` - 目标检测耗时(秒) +- `frigate_detection_start{name=""}` - 检测器启动时间(Unix时间戳) + +### 存储指标 +- `frigate_storage_free_bytes{storage=""}` - 存储剩余空间(字节) +- `frigate_storage_total_bytes{storage=""}` - 存储总容量(字节) +- `frigate_storage_used_bytes{storage=""}` - 存储已用空间(字节) +- `frigate_storage_mount_type{mount_type="", storage=""}` - 存储挂载类型信息 + +### 服务指标 +- `frigate_service_uptime_seconds` - 服务运行时间(秒) +- `frigate_service_last_updated_timestamp` - 指标更新时间(Unix时间戳) +- `frigate_device_temperature{device=""}` - 设备温度 + +### 事件指标 +- `frigate_camera_events{camera="", label=""}` - 自指标收集器启动以来的摄像头事件计数 + +## Prometheus配置 + +在Prometheus中添加以下配置来收集Frigate指标: + +```yaml +scrape_configs: + - job_name: 'frigate' + metrics_path: '/api/metrics' + static_configs: + - targets: ['frigate:5000'] + scrape_interval: 15s +``` + +## 查询示例 + +以下是几个实用的PromQL查询示例: + +```promql +# 所有进程的平均CPU使用率 +avg(frigate_cpu_usage_percent) + +# GPU显存总使用率 +sum(frigate_gpu_mem_usage_percent) + +# 指定摄像头的检测帧率(5分钟滑动窗口) +rate(frigate_detection_fps{camera_name="前门摄像头"}[5m]) + +# 存储空间使用百分比 +(frigate_storage_used_bytes / frigate_storage_total_bytes) * 100 + +# 过去1小时各摄像头的事件计数 +increase(frigate_camera_events[1h]) +``` + +## Grafana仪表板 + +您可以使用这些指标创建Grafana仪表板来监控Frigate实例,建议监控以下内容: + +- CPU、内存和GPU使用率趋势 +- 摄像头帧率和检测频率 +- 存储空间使用情况和趋势 +- 各摄像头事件计数 +- 系统温度监控 + +我们将在后续更新中提供示例Grafana仪表板的JSON配置。 + +## 指标类型 + +Frigate提供的指标采用以下Prometheus指标类型: + +- **计数器(Counter)**:只增不减的累计值(如`frigate_camera_events`) +- **仪表盘(Gauge)**:可升降的瞬时值(如`frigate_cpu_usage_percent`) +- **信息(Info)**:用于元数据的键值对(如`frigate_storage_mount_type`) + +有关Prometheus指标类型的更多信息,请参阅[Prometheus官方文档](https://prometheus.io/docs/concepts/metric_types/)。 \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/motion_detection.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/motion_detection.md new file mode 100644 index 000000000..698f48d2c --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/motion_detection.md @@ -0,0 +1,105 @@ +--- +id: motion_detection +title: 运动检测 +--- + +# 调优运动检测 + +Frigate使用运动检测作为第一道检查,判断画面中是否有值得进行物体检测的活动。 + +一旦检测到运动,它会尝试将附近的运动区域分组,希望能识别出画面中值得检测的矩形区域。这些就是您在调试视图中看到的红色"运动框"。 + +## 目标 + +默认的运动设置应该适用于大多数摄像头,但在某些情况下,调优运动检测可以获得更好更优化的结果。每个摄像头都有不同的环境变量会影响运动检测,这意味着相同的运动设置并不适用于所有摄像头。 + +在调优运动检测前,理解目标很重要。在最优配置中,应该能检测到人和车的运动,但不会检测到草叶摇动、光线变化、时间戳等。如果运动检测过于敏感,您会遇到更高的CPU负载和更多的误报。如果不够敏感,您会错过想要追踪的对象。 + +## 创建运动遮罩 + +首先,屏蔽那些由您不想检测的对象引起的常规运动区域。找到运动遮罩候选区域的最佳方法是观看启用了运动框的调试流。运动遮罩的典型用例包括时间戳或经常因风移动的树枝和大灌木。尽可能避免创建会阻挡您想要追踪的对象的运动遮罩,即使这些对象位于您不想要警报或检测的区域。运动遮罩不应该用于避免在特定区域检测对象。更多细节请参阅[遮罩文档](/configuration/masks.md)。 + +## 准备测试 + +调优运动检测最简单的方法是使用Frigate UI中的"设置 > 运动调优器"。这个界面允许实时更改运动检测值,方便立即看到对检测结果的影响。 + +## 白天调优运动检测 + +现在一切准备就绪,找一个代表正常情况的时间进行调优。例如,如果您在阳光明媚且有风的日子调优运动检测,可能会发现后来在多云无风的日子里运动设置不够敏感。 + +:::note + +记住运动检测仅用于决定何时应该使用物体检测。您的目标应该是让运动检测足够敏感,不会错过您想要用物体检测的对象。目的是防止物体检测为画面中的每个微小像素变化而持续运行。大风天仍然会导致检测到大量运动。 + +::: + +### 阈值 + +阈值决定了一个像素的亮度需要变化多少才会被视为运动。 + +```yaml +# 默认阈值 +motion: + # 可选:传递给cv2.threshold的值,用于确定像素变化是否足够大被视为运动(默认如下) + # 增加此值会使运动检测不那么敏感,减少则会使运动检测更敏感 + # 值应在1到255之间 + threshold: 30 +``` + +较低的值意味着运动检测对颜色变化更敏感,例如当棕色狗与棕色栅栏混在一起,或穿红衬衫的人与红色汽车混在一起时更容易检测到运动。但如果阈值太低,可能会检测到草叶摇动、阴影等变化。 + +观察调试视图中的运动框,增加阈值直到只看到肉眼可见的运动。完成后,重要的是测试并确保仍能检测到需要的运动。 + +### 轮廓面积 + +```yaml +# 默认轮廓面积 +motion: + # 可选:在调整大小的运动图像中视为运动的最小像素尺寸(默认如下) + # 增加此值会阻止检测较小的运动区域 + # 减少会使运动检测对小移动物体更敏感 + # 经验法则: + # - 10 - 高灵敏度 + # - 30 - 中等灵敏度 + # - 50 - 低灵敏度 + contour_area: 10 +``` + +运行阈值计算后,将变化的像素分组。轮廓面积值用于决定哪些像素组有资格被视为运动。较小的值更敏感,意味着远处的人、小动物等更可能被检测为运动,但也意味着阴影、树叶等的微小变化会被检测为运动。较大的值不太敏感,意味着这些不会被检测为运动,但风险是需要的运动可能要到物体更靠近摄像头时才会被检测到。 + +观察调试视图中的运动框,调整轮廓面积直到没有比您期望Frigate检测到的最小运动更小的运动框。 + +### 改善对比度 + +如果此时运动检测如预期工作,则无需继续白天的调优。如果无法在检测到需要的运动和不需要的运动之间找到平衡,可以尝试禁用改善对比度并回到阈值和轮廓面积步骤。 + +## 夜间调优运动检测 + +一旦白天运动检测调优完成,这些设置可能也适用于夜间运动检测。如果是这种情况,可以将首选设置写入配置文件并保持不变。 + +然而,如果白天的首选设置在夜间效果不佳,建议使用Home Assistant或其他解决方案来自动更改设置。这样可以为白天和夜间运动检测使用完全不同的设置组。 + +## 调优大范围运动变化 + +```yaml +# 默认闪电阈值 +motion: + # 可选:用于检测闪电或其他需要重新校准运动检测的实质性变化的图像百分比(默认如下) + # 增加此值会使运动检测更可能将闪电或红外模式变化视为有效运动 + # 减少此值会使运动检测更可能忽略大量运动,如有人接近门铃摄像头 + lightning_threshold: 0.8 +``` + +:::warning + +某些像门铃摄像头这样的设备,当有人直接走到摄像头前时,可能会因为闪电阈值导致运动检测重新校准而错过检测。在这种情况下,可能需要增加`lightning_threshold`以确保不会错过这些对象。 + +::: + +:::note + +闪电阈值不会阻止基于运动的录像被保存。 + +::: + +像PTZ移动和摄像头在彩色与红外模式间切换这样的大范围运动变化应该不会导致运动检测。这是通过`lightning_threshold`配置实现的。它定义为用于检测闪电或其他需要运动检测重新校准的实质性变化的图像百分比。增加此值会使运动检测更可能将闪电或红外模式变化视为有效运动。减少此值会使运动检测更可能忽略大量运动,如有人接近门铃摄像头。 \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/notifications.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/notifications.md new file mode 100644 index 000000000..66f15ae0a --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/notifications.md @@ -0,0 +1,75 @@ +--- +id: notifications +title: 通知功能 +--- + +# 通知功能 + +:::warning + +注意,受限于Google相关服务在中国大陆地区被屏蔽,该功能可能**无法在中国大陆地区使用**。 + +如有手机通知的需求,建议使用MQTT配合Home Assistant 通知功能。 + +::: + +Frigate 采用 [WebPush 协议](https://web.dev/articles/push-notifications-web-push-protocol)实现原生通知功能,该协议使用 [VAPID 规范](https://tools.ietf.org/html/draft-thomson-webpush-vapid)通过加密方式向网页应用推送通知。 + +## 设置通知功能 + +使用通知功能需满足以下条件: + +- 必须通过安全的 `https` 连接访问 Frigate(参见[认证文档](/configuration/authentication)) +- 需使用支持的浏览器(目前已知 Chrome、Firefox 和 Safari 支持) +- 如需外部接收通知,Frigate 必须可从外部访问 +- iOS 设备需在「设置 > Safari > 高级 > 实验性功能」中启用通知权限 + +### 配置方法 + +1. 访问 Frigate 网页界面:设置 > 通知 +2. 启用通知功能并填写相关字段 +3. 保存配置 + +可通过配置文件修改默认通知冷却时间(单位:秒),该参数也可按摄像头单独设置。 + +以下情况将阻止通知发送: +- 全局冷却时间内收到过任意摄像头的通知 +- 特定摄像头的冷却时间未结束 + +```yaml +notifications: + enabled: True + email: "johndoe@gmail.com" + cooldown: 10 # 全局冷却时间10秒 +``` + +```yaml +cameras: + doorbell: + ... + notifications: + enabled: True + cooldown: 30 # 该摄像头单独设置30秒冷却 +``` + +### 设备注册 + +启用通知后,需在所有接收设备上点击「注册通知」按钮,注册后台工作进程。完成后重启 Frigate 即可开始接收通知。 + +## 支持的通知类型 + +当前仅支持回放警报通知,更多类型将在未来版本中添加。 + +:::note +目前仅 Chrome 支持带图片的通知,Safari 和 Firefox 仅显示标题和文字内容。 +::: + +## 降低通知延迟 + +不同平台处理通知的方式各异,可能需要调整设置以获得最佳效果。 + +### Android 设备 + +多数安卓手机具有电池优化设置。为确保可靠接收通知,建议: +1. 为浏览器(Chrome/Firefox)禁用电池优化 +2. 若以 PWA 形式运行 Frigate,需同时禁用 Frigate 应用的电池优化 \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/object_detectors.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/object_detectors.md new file mode 100644 index 000000000..b8ce5aa78 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/object_detectors.md @@ -0,0 +1,1056 @@ +--- +id: object_detectors +title: 对象检测器 +--- + +:::tip +由于本文涉及过多专业领域内容,对普通用户帮助不算特别多,将不会进行精翻;本文使用DeepSeek AI进行翻译,仅做参考。 +::: + +# 支持的硬件 + +:::info + +Frigate支持多种不同类型的检测器,可在不同硬件上运行: + +**通用硬件** + +- [Coral EdgeTPU](#edge-tpu-detector):Google Coral EdgeTPU提供USB和m.2两种接口,兼容多种设备。 +- [Hailo](#hailo-8):Hailo8和Hailo8L AI加速模块提供m.2接口和树莓派HAT,兼容多种设备。 + +**AMD** + +- [ROCm](#amdrocm-gpu-detector):ROCm可在AMD独立显卡上运行,提供高效对象检测。 +- [ONNX](#onnx):当配置了支持的ONNX模型时,ROCm会在`-rocm`版Frigate镜像中自动被检测并使用。 + +**Intel** + +- [OpenVino](#openvino-detector):OpenVino可在Intel Arc 显卡、集成显卡和CPU上运行,提供高效对象检测。 +- [ONNX](#onnx):当配置了支持的ONNX模型时,OpenVINO会在标准Frigate镜像中自动被检测并使用。 + +**NVIDIA** + +- [TensortRT](#nvidia-tensorrt-detector):TensorRT可在NVIDIA GPU和Jetson设备上运行,使用多种预设模型。 +- [ONNX](#onnx):当配置了支持的ONNX模型时,TensorRT会在`-tensorrt`或`-tensorrt-jp6`版Frigate镜像中自动被检测并使用。 + +**Rockchip** + +- [RKNN](#rockchip-platform):RKNN模型可在内置NPU的Rockchip设备上运行。 + +**测试用途** + +- [CPU检测器(不推荐实际使用)](#cpu-detector-not-recommended):使用CPU运行tflite模型,不推荐使用,在大多数情况下使用OpenVINO CPU模式可获得更好效果。 + +::: + +:::note + +不能混合使用多种检测器进行对象检测(例如:不能同时使用OpenVINO和Coral EdgeTPU进行对象检测)。 + +这不影响使用硬件加速其他任务,如[语义搜索](./semantic_search.md)。 + +::: + +# 官方支持的检测器 + +Frigate提供以下内置检测器类型:`cpu`、`edgetpu`、`hailo8l`、`onnx`、`openvino`、`rknn`和`tensorrt`。默认情况下,Frigate会使用单个CPU检测器。其他检测器可能需要额外配置,如下所述。使用多个检测器时,它们会在专用进程中运行,但会从所有摄像头的公共检测请求队列中获取任务。 + +## Edge TPU检测器 + +Edge TPU检测器类型运行TensorFlow Lite模型,利用Google Coral代理进行硬件加速。要配置Edge TPU检测器,将`"type"`属性设置为`"edgetpu"`。 + +Edge TPU设备可使用`"device"`属性指定,参考[TensorFlow Lite Python API文档](https://coral.ai/docs/edgetpu/multiple-edgetpu/#using-the-tensorflow-lite-python-api)。如果未设置,代理将使用它找到的第一个设备。 + +容器中提供了位于`/edgetpu_model.tflite`的TensorFlow Lite模型,默认情况下此检测器类型使用该模型。要提供自己的模型,请将文件绑定挂载到容器中,并通过`model.path`提供路径。 + +:::tip + +如果未检测到Edge TPU,请参阅[Edge TPU常见故障排除步骤](/troubleshooting/edgetpu)。 + +::: + +### 单个USB Coral + +```yaml +detectors: + coral: + type: edgetpu + device: usb +``` + +### 多个USB Coral + +```yaml +detectors: + coral1: + type: edgetpu + device: usb:0 + coral2: + type: edgetpu + device: usb:1 +``` + +### 原生Coral(开发板) + +_警告:`v0.9.x`版本后可能有[兼容性问题](https://github.com/blakeblackshear/frigate/issues/1706)_ + +```yaml +detectors: + coral: + type: edgetpu + device: "" +``` + +### 单个PCIE/M.2 Coral + +```yaml +detectors: + coral: + type: edgetpu + device: pci +``` + +### 多个PCIE/M.2 Coral + +```yaml +detectors: + coral1: + type: edgetpu + device: pci:0 + coral2: + type: edgetpu + device: pci:1 +``` + +### 混合使用Coral + +```yaml +detectors: + coral_usb: + type: edgetpu + device: usb + coral_pci: + type: edgetpu + device: pci +``` + +--- + +## Hailo-8检测器 + +Hailo-8检测器支持Hailo-8和Hailo-8L AI加速模块。该集成会自动通过Hailo CLI检测您的硬件架构,如果未指定自定义模型,则会选择适当的默认模型。 + +有关配置Hailo硬件的详细信息,请参阅[安装文档](../frigate/installation.md#hailo-8l)。 + +### 配置 + +配置Hailo检测器时,您有两种指定模型的方式:本地**路径**或**URL**。 +如果同时提供两者,检测器将首先检查给定的本地路径。如果未找到文件,则会从指定的URL下载模型。模型文件缓存在`/config/model_cache/hailo`目录下。 + +#### YOLO模型 + +此配置适用于基于YOLO的模型。当未提供自定义模型路径或URL时,检测器会根据检测到的硬件自动下载默认模型: + +- **Hailo-8硬件**:使用**YOLOv6n**(默认:`yolov6n.hef`) +- **Hailo-8L硬件**:使用**YOLOv6n**(默认:`yolov6n.hef`) + +```yaml +detectors: + hailo8l: + type: hailo8l + device: PCIe + +model: + width: 320 + height: 320 + input_tensor: nhwc + input_pixel_format: rgb + input_dtype: int + model_type: yolo-generic + labelmap_path: /labelmap/coco-80.txt + + # 检测器会根据您的硬件自动选择默认模型: + # - Hailo-8硬件:YOLOv6n(默认:yolov6n.hef) + # - Hailo-8L硬件:YOLOv6n(默认:yolov6n.hef) + # + # 可选:您可以指定本地模型路径来覆盖默认值。 + # 如果提供了本地路径且文件存在,将使用该文件而不是下载。 + # 示例: + # path: /config/model_cache/hailo/yolov6n.hef + # + # 您也可以使用自定义URL覆盖: + # path: https://hailo-model-zoo.s3.eu-west-2.amazonaws.com/ModelZoo/Compiled/v2.14.0/hailo8/yolov6n.hef + # 只需确保根据模型提供正确的配置 +``` + +#### SSD模型 + +对于基于SSD的模型,请提供您编译的SSD模型的路径或URL。集成将首先检查本地路径,必要时才会下载。 + +```yaml +detectors: + hailo8l: + type: hailo8l + device: PCIe + +model: + width: 300 + height: 300 + input_tensor: nhwc + input_pixel_format: rgb + model_type: ssd + # 为SSD MobileNet v1指定本地模型路径(如果可用)或URL + # 本地路径示例: + # path: /config/model_cache/h8l_cache/ssd_mobilenet_v1.hef + # + # 或使用自定义URL覆盖: + # path: https://hailo-model-zoo.s3.eu-west-2.amazonaws.com/ModelZoo/Compiled/v2.14.0/hailo8l/ssd_mobilenet_v1.hef +``` + +#### 自定义模型 + +Hailo检测器支持所有为Hailo硬件编译并包含后处理的YOLO模型。您可以指定自定义URL或本地路径来下载或直接使用您的模型。如果同时提供两者,检测器会优先检查本地路径。 + +```yaml +detectors: + hailo8l: + type: hailo8l + device: PCIe + +model: + width: 640 + height: 640 + input_tensor: nhwc + input_pixel_format: rgb + input_dtype: int + model_type: yolo-generic + labelmap_path: /labelmap/coco-80.txt + # 可选:指定本地模型路径 + # path: /config/model_cache/hailo/custom_model.hef + # + # 或者作为备用方案,提供自定义URL: + # path: https://custom-model-url.com/path/to/model.hef +``` + +更多现成模型,请访问:[Hailo模型库](https://github.com/hailo-ai/hailo_model_zoo) + +Hailo8支持Hailo模型库中所有包含HailoRT后处理的模型。您可以选择任何这些预配置模型用于您的实现。 + +> **注意:** +> config.path参数可以接受以.hef结尾的本地文件路径或URL。当提供时,检测器将首先检查路径是否为本地文件路径。如果文件在本地存在,将直接使用。如果未找到本地文件或提供了URL,则会尝试从指定URL下载模型。 + +--- + +## OpenVINO检测器 + +OpenVINO检测器类型可在AMD和Intel CPU、Intel GPU以及Intel VPU硬件上运行OpenVINO IR模型。要配置OpenVINO检测器,请将`"type"`属性设置为`"openvino"`。 + +使用的OpenVINO设备通过`"device"`属性指定,遵循[设备文档](https://docs.openvino.ai/2024/openvino-workflow/running-inference/inference-devices-and-modes.html)中的命名约定。最常见的设备是`CPU`和`GPU`。目前已知使用`AUTO`存在问题。为了向后兼容,如果在配置中设置了`AUTO`,Frigate将尝试使用`GPU`。 + +OpenVINO支持第6代Intel平台(Skylake)及更新版本。尽管没有官方支持,它也可以在AMD CPU上运行。使用`GPU`设备需要支持的Intel平台。有关详细的系统要求,请参阅[OpenVINO系统要求](https://docs.openvino.ai/2024/about-openvino/release-notes-openvino/system-requirements.html) + +:::tip + +当使用多个摄像头时,一个检测器可能无法满足需求。如果有可用的GPU资源,可以定义多个检测器。示例配置如下: + +```yaml +detectors: + ov_0: + type: openvino + device: GPU + ov_1: + type: openvino + device: GPU +``` + +::: + +### 支持的模型 + +#### SSDLite MobileNet v2 + +容器中提供了位于`/openvino-model/ssdlite_mobilenet_v2.xml`的OpenVINO模型,默认情况下此检测器类型使用该模型。该模型来自Intel的开放模型库[SSDLite MobileNet V2](https://github.com/openvinotoolkit/open_model_zoo/tree/master/models/public/ssdlite_mobilenet_v2),并转换为FP16精度的IR模型。 + +使用默认OpenVINO模型时,请使用如下所示的模型配置: + +```yaml +detectors: + ov: + type: openvino + device: GPU + +model: + width: 300 + height: 300 + input_tensor: nhwc + input_pixel_format: bgr + path: /openvino-model/ssdlite_mobilenet_v2.xml + labelmap_path: /openvino-model/coco_91cl_bkgr.txt +``` + +#### YOLOX模型 + +该检测器也支持YOLOX模型。Frigate没有预加载任何YOLOX模型,因此您需要自行提供模型。 + +#### YOLO-NAS模型 + +[YOLO-NAS](https://github.com/Deci-AI/super-gradients/blob/master/YOLONAS.md)模型受支持,但默认不包含。有关下载YOLO-NAS模型用于Frigate的更多信息,请参阅[模型部分](#downloading-yolo-nas-model)。 + +将下载的onnx模型放入配置文件夹后,可以使用以下配置: + +```yaml +detectors: + ov: + type: openvino + device: GPU + +model: + model_type: yolonas + width: 320 # <--- 应与notebook中设置的尺寸匹配 + height: 320 # <--- 应与notebook中设置的尺寸匹配 + input_tensor: nchw + input_pixel_format: bgr + path: /config/yolo_nas_s.onnx + labelmap_path: /labelmap/coco-80.txt +``` + +注意:标签映射使用的是完整COCO标签集的子集,仅包含80个对象。 + +#### YOLO(v3,v4,v7,v9)模型 + +YOLOv3、YOLOv4、YOLOv7和[YOLOv9](https://github.com/WongKinYiu/yolov9)模型受支持,但默认不包含。 + +:::tip + +YOLO检测器设计用于支持YOLOv3、YOLOv4、YOLOv7和YOLOv9模型,但也可能支持其他YOLO模型架构。 + +::: + +将下载的onnx模型放入配置文件夹后,可以使用以下配置: + +```yaml +detectors: + ov: + type: openvino + device: GPU + +model: + model_type: yolo-generic + width: 320 # <--- 应与模型导出时设置的imgsize匹配 + height: 320 # <--- 应与模型导出时设置的imgsize匹配 + input_tensor: nchw + input_dtype: float + path: /config/model_cache/yolo.onnx + labelmap_path: /labelmap/coco-80.txt +``` + +注意:标签映射使用的是完整COCO标签集的子集,仅包含80个对象。 + +#### RF-DETR模型 + +[RF-DETR](https://github.com/roboflow/rf-detr)是基于DETR的模型。支持导出的ONNX模型,但默认不包含。有关下载RF-DETR模型用于Frigate的更多信息,请参阅[模型部分](#downloading-rf-detr-model)。 + +:::warning + +由于RF-DETR模型的尺寸和复杂性,建议仅在独立Arc显卡上运行。 + +::: + +将下载的onnx模型放入`config/model_cache`文件夹后,可以使用以下配置: + +```yaml +detectors: + ov: + type: openvino + device: GPU + +model: + model_type: rfdetr + width: 560 + height: 560 + input_tensor: nchw + input_dtype: float + path: /config/model_cache/rfdetr.onnx +``` + +#### D-FINE模型 + +[D-FINE](https://github.com/Peterande/D-FINE)是基于DETR的模型。支持导出的ONNX模型,但默认不包含。有关下载D-FINE模型用于Frigate的更多信息,请参阅[模型部分](#downloading-d-fine-model)。 + +:::warning + +目前D-FINE模型只能在OpenVINO的CPU模式下运行,GPU目前无法编译该模型 + +::: + +将下载的onnx模型放入`config/model_cache`文件夹后,可以使用以下配置: + +```yaml +detectors: + ov: + type: openvino + device: GPU + +model: + model_type: dfine + width: 640 + height: 640 + input_tensor: nchw + input_dtype: float + path: /config/model_cache/dfine_s_obj2coco.onnx + labelmap_path: /labelmap/coco-80.txt +``` + +注意:标签映射使用的是完整COCO标签集的子集,仅包含80个对象。 + +## NVIDIA TensorRT检测器 + +NVIDIA GPU可以使用TensorRT库进行对象检测。由于额外的库文件较大,该检测器仅在带有`-tensorrt`标签后缀的镜像中提供,例如`ghcr.io/blakeblackshear/frigate:stable-tensorrt`。该检测器设计用于与Yolo模型配合进行对象检测。 + +### 最低硬件要求 + +TensorRT检测器使用12.x系列的CUDA库,这些库具有次要版本兼容性。主机系统的最低驱动程序版本必须为`>=545`。此外,GPU必须支持5.0或更高的计算能力。这通常对应于Maxwell架构或更新的GPU,请查看下面链接的NVIDIA GPU计算能力表。 + +要使用TensorRT检测器,请确保主机系统已安装[nvidia-container-runtime](https://docs.docker.com/config/containers/resource_constraints/#access-an-nvidia-gpu)以将GPU传递给容器,并且主机系统已安装与您的GPU兼容的驱动程序。 + +较新的GPU架构提供了TensorRT可以利用的改进功能,如INT8操作和张量核心。当模型转换为trt文件时,将优化与您的硬件兼容的功能。当前提供的模型生成脚本包含启用/禁用FP16操作的开关。如果您希望使用INT8优化等新功能,则需要更多工作。 + +#### 兼容性参考: + +[NVIDIA TensorRT支持矩阵](https://docs.nvidia.com/deeplearning/tensorrt/archives/tensorrt-841/support-matrix/index.html) + +[NVIDIA CUDA兼容性](https://docs.nvidia.com/deploy/cuda-compatibility/index.html) + +[NVIDIA GPU计算能力](https://developer.nvidia.com/cuda-gpus) + +### 生成模型 + +用于TensorRT的模型必须在将运行的相同硬件平台上进行预处理。这意味着每个用户必须运行额外的设置来为TensorRT库生成模型文件。包含一个脚本可以构建几种常见模型。 + +如果未找到指定的模型,Frigate镜像将在启动时生成模型文件。处理后的模型存储在`/config/model_cache`文件夹中。通常`/config`路径已经映射到主机上的目录,除非用户希望将其存储在主机上的不同位置,否则不需要单独映射`model_cache`。 + +默认情况下不会生成任何模型,但可以通过在Docker中指定`YOLO_MODELS`环境变量来覆盖此设置。可以以逗号分隔的格式列出一个或多个模型,每个模型都将被生成。只有当`model_cache`文件夹中不存在相应的`{model}.trt`文件时才会生成模型,因此您可以通过从Frigate数据文件夹中删除模型来强制重新生成模型。 + +如果您有带DLA(Xavier或Orin)的Jetson设备,可以通过在模型名称后附加`-dla`来生成将在DLA上运行的模型,例如指定`YOLO_MODELS=yolov7-320-dla`。模型将在DLA0上运行(Frigate目前不支持DLA1)。与DLA不兼容的层将回退到在GPU上运行。 + +如果您的GPU不支持FP16操作,可以传递环境变量`USE_FP16=False`来禁用它。 + +可以通过向`docker run`命令传递环境变量或在`docker-compose.yml`文件中指定特定模型。使用`-e YOLO_MODELS=yolov4-416,yolov4-tiny-416`的形式选择一个或多个模型名称。可用的模型如下所示。 + +
+可用模型 +``` +yolov3-288 +yolov3-416 +yolov3-608 +yolov3-spp-288 +yolov3-spp-416 +yolov3-spp-608 +yolov3-tiny-288 +yolov3-tiny-416 +yolov4-288 +yolov4-416 +yolov4-608 +yolov4-csp-256 +yolov4-csp-512 +yolov4-p5-448 +yolov4-p5-896 +yolov4-tiny-288 +yolov4-tiny-416 +yolov4x-mish-320 +yolov4x-mish-640 +yolov7-tiny-288 +yolov7-tiny-416 +yolov7-640 +yolov7-416 +yolov7-320 +yolov7x-640 +yolov7x-320 +``` +
+ +为Pascal显卡转换`yolov4-608`和`yolov7x-640`模型的`docker-compose.yml`片段示例如下: + +```yml +frigate: + environment: + - YOLO_MODELS=yolov7-320,yolov7x-640 + - USE_FP16=false +``` + +如果您将多个GPU传递给Frigate,可以指定用于模型转换的GPU。转换脚本将使用第一个可见的GPU,但在具有混合GPU模型的系统中,您可能不希望使用默认索引进行对象检测。添加`TRT_MODEL_PREP_DEVICE`环境变量以选择特定的GPU。 + +```yml +frigate: + environment: + - TRT_MODEL_PREP_DEVICE=0 # 可选,选择用于模型优化的GPU +``` + +### 配置参数 + +可以通过指定`tensorrt`作为模型类型来选择TensorRT检测器。需要使用[硬件加速](hardware_acceleration.md#nvidia-gpus)部分描述的相同方法将GPU传递给docker容器。如果您传递多个GPU,可以使用`device`配置参数选择用于检测器的GPU。`device`参数是GPU索引的整数值,如容器内的`nvidia-smi`所示。 + +TensorRT检测器默认使用位于`/config/model_cache/tensorrt`中的`.trt`模型文件。使用的模型路径和尺寸将取决于您生成的模型。 + +使用以下配置来处理生成的TRT模型: + +```yaml +detectors: + tensorrt: + type: tensorrt + device: 0 #这是默认值,选择第一个GPU + +model: + path: /config/model_cache/tensorrt/yolov7-320.trt + input_tensor: nchw + input_pixel_format: rgb + width: 320 + height: 320 +``` + +## AMD/ROCm GPU检测器 + +### 设置 + +AMD GPU的支持通过[ONNX检测器](#ONNX)提供。要使用AMD GPU进行对象检测,请使用带有`-rocm`后缀的Frigate docker镜像,例如`ghcr.io/blakeblackshear/frigate:stable-rocm`。 + +### Docker GPU访问设置 + +ROCm需要访问`/dev/kfd`和`/dev/dri`设备。当docker或frigate不以root身份运行时,还应添加`video`(可能还有`render`和`ssl/_ssl`)组。 + +直接运行docker时,应添加以下标志以访问设备: + +```bash +$ docker run --device=/dev/kfd --device=/dev/dri \ + ... +``` + +使用Docker Compose时: + +```yaml +services: + frigate: +--- +devices: + - /dev/dri + - /dev/kfd +``` + +有关推荐设置的参考,请参阅[在Docker中运行ROCm/pytorch](https://rocm.docs.amd.com/projects/install-on-linux/en/develop/how-to/3rd-party/pytorch-install.html#using-docker-with-pytorch-pre-installed)。 + +### 覆盖GPU芯片组的Docker设置 + +您的GPU可能无需特殊配置即可正常工作,但在许多情况下需要手动设置。AMD/ROCm软件栈附带有限的GPU驱动程序集,对于较新或缺失的型号,您需要将芯片组版本覆盖为较旧/通用版本才能使其工作。 + +此外,AMD/ROCm不"正式"支持集成显卡。它仍然可以与大多数集成显卡正常工作,但需要特殊设置。必须配置`HSA_OVERRIDE_GFX_VERSION`环境变量。有关背景和示例,请参阅[ROCm问题报告](https://github.com/ROCm/ROCm/issues/1743)。 + +对于rocm frigate构建,有一些自动检测: + +- gfx90c -> 9.0.0 +- gfx1031 -> 10.3.0 +- gfx1103 -> 11.0.0 + +如果您有其他芯片组,可能需要在Docker启动时覆盖`HSA_OVERRIDE_GFX_VERSION`。假设您需要的版本是`9.0.0`,则应从命令行配置为: + +```bash +$ docker run -e HSA_OVERRIDE_GFX_VERSION=9.0.0 \ + ... +``` + +使用Docker Compose时: + +```yaml +services: + frigate: + +environment: + HSA_OVERRIDE_GFX_VERSION: "9.0.0" +``` + +确定您需要的版本可能很复杂,因为您无法从AMD品牌名称中判断芯片组名称和驱动程序。 + +1. 首先通过在frigate容器中运行`/opt/rocm/bin/rocminfo`确保rocm环境正常运行 - 它应该列出CPU和GPU及其属性 +2. 从`rocminfo`的输出中找到您拥有的芯片组版本(gfxNNN)(见下文) +3. 使用搜索引擎查询给定gfx名称所需的`HSA_OVERRIDE_GFX_VERSION`("gfxNNN ROCm HSA_OVERRIDE_GFX_VERSION") +4. 用相关值覆盖`HSA_OVERRIDE_GFX_VERSION` +5. 如果仍然无法工作,请检查frigate docker日志 + +#### 检查AMD/ROCm是否正常工作并找到您的GPU + +```bash +$ docker exec -it frigate /opt/rocm/bin/rocminfo +``` + +#### 确定您的AMD GPU芯片组版本: + +我们取消设置`HSA_OVERRIDE_GFX_VERSION`以防止现有覆盖干扰结果: + +```bash +$ docker exec -it frigate /bin/bash -c '(unset HSA_OVERRIDE_GFX_VERSION && /opt/rocm/bin/rocminfo |grep gfx)' +``` + +### 支持的模型 + +有关支持的模型,请参阅[ONNX支持的模型](#supported-models),但有以下注意事项: + +- 不支持D-FINE模型 +- 已知YOLO-NAS模型在集成显卡上运行不佳 + +## ONNX检测器 + +ONNX是一种用于构建机器学习模型的开放格式,Frigate支持在CPU、OpenVINO、ROCm和TensorRT上运行ONNX模型。启动时,Frigate会自动尝试使用可用的GPU。 + +:::info + +如果使用了适合您GPU的正确构建版本,GPU将被自动检测并使用。 + +- **AMD** + + - 在`-rocm`版Frigate镜像中,ROCm会被自动检测并与ONNX检测器一起使用。 + +- **Intel** + + - 在标准Frigate镜像中,OpenVINO会被自动检测并与ONNX检测器一起使用。 + +- **NVIDIA** + - 在`-tensorrt`版Frigate镜像中,NVIDIA GPU会被自动检测并与ONNX检测器一起使用。 + - 在`-tensorrt-jp(4/5)`版Frigate镜像中,Jetson设备会被自动检测并与ONNX检测器一起使用。 + +::: + +:::tip + +当使用多个摄像头时,一个检测器可能无法满足需求。如果有可用的GPU资源,可以定义多个检测器。示例配置如下: + +```yaml +detectors: + onnx_0: + type: onnx + onnx_1: + type: onnx +``` + +::: + +### 支持的模型 + +没有提供默认模型,支持以下格式: + +#### YOLO-NAS + +[YOLO-NAS](https://github.com/Deci-AI/super-gradients/blob/master/YOLONAS.md)模型受支持,但默认不包含。有关下载YOLO-NAS模型用于Frigate的更多信息,请参阅[模型部分](#downloading-yolo-nas-model)。 + +将下载的onnx模型放入配置文件夹后,可以使用以下配置: + +```yaml +detectors: + onnx: + type: onnx + +model: + model_type: yolonas + width: 320 # <--- 应与notebook中设置的尺寸匹配 + height: 320 # <--- 应与notebook中设置的尺寸匹配 + input_pixel_format: bgr + input_tensor: nchw + path: /config/yolo_nas_s.onnx + labelmap_path: /labelmap/coco-80.txt +``` + +#### YOLO (v3, v4, v7, v9) + +YOLOv3、YOLOv4、YOLOv7和[YOLOv9](https://github.com/WongKinYiu/yolov9)模型受支持,但默认不包含。 + +:::tip + +YOLO检测器设计用于支持YOLOv3、YOLOv4、YOLOv7和YOLOv9模型,但也可能支持其他YOLO模型架构。有关下载YOLO模型用于Frigate的更多信息,请参阅[模型部分](#downloading-yolo-models)。 + +::: + +将下载的onnx模型放入配置文件夹后,可以使用以下配置: + +```yaml +detectors: + onnx: + type: onnx + +model: + model_type: yolo-generic + width: 320 # <--- 应与模型导出时设置的imgsize匹配 + height: 320 # <--- 应与模型导出时设置的imgsize匹配 + input_tensor: nchw + input_dtype: float + path: /config/model_cache/yolo.onnx + labelmap_path: /labelmap/coco-80.txt +``` + +注意:标签映射使用的是完整COCO标签集的子集,仅包含80个对象。 + +#### YOLOx + +[YOLOx](https://github.com/Megvii-BaseDetection/YOLOX)模型受支持,但默认不包含。有关下载YOLOx模型用于Frigate的更多信息,请参阅[模型部分](#downloading-yolo-models)。 + +将下载的onnx模型放入配置文件夹后,可以使用以下配置: + +```yaml +detectors: + onnx: + type: onnx + +model: + model_type: yolox + width: 416 # <--- 应与模型导出时设置的imgsize匹配 + height: 416 # <--- 应与模型导出时设置的imgsize匹配 + input_tensor: nchw + input_dtype: float_denorm + path: /config/model_cache/yolox_tiny.onnx + labelmap_path: /labelmap/coco-80.txt +``` + +注意:标签映射使用的是完整COCO标签集的子集,仅包含80个对象。 + +#### RF-DETR + +[RF-DETR](https://github.com/roboflow/rf-detr)是基于DETR的模型。支持导出的ONNX模型,但默认不包含。有关下载RF-DETR模型用于Frigate的更多信息,请参阅[模型部分](#downloading-rf-detr-model)。 + +将下载的onnx模型放入`config/model_cache`文件夹后,可以使用以下配置: + +```yaml +detectors: + onnx: + type: onnx + +model: + model_type: rfdetr + width: 560 + height: 560 + input_tensor: nchw + input_dtype: float + path: /config/model_cache/rfdetr.onnx +``` + +#### D-FINE + +[D-FINE](https://github.com/Peterande/D-FINE)是基于DETR的模型。支持导出的ONNX模型,但默认不包含。有关下载D-FINE模型用于Frigate的更多信息,请参阅[模型部分](#downloading-d-fine-model)。 + +将下载的onnx模型放入`config/model_cache`文件夹后,可以使用以下配置: + +```yaml +detectors: + onnx: + type: onnx + +model: + model_type: dfine + width: 640 + height: 640 + input_tensor: nchw + input_dtype: float + path: /config/model_cache/dfine_m_obj2coco.onnx + labelmap_path: /labelmap/coco-80.txt +``` + +注意:标签映射使用的是完整COCO标签集的子集,仅包含80个对象。 + +## CPU检测器(不推荐使用) + +CPU检测器类型运行TensorFlow Lite模型,使用CPU进行处理而不使用硬件加速。建议使用硬件加速的检测器类型以获得更好的性能。要配置基于CPU的检测器,请将`"type"`属性设置为`"cpu"`。 + +:::danger + +不建议将CPU检测器用于一般用途。如果您没有GPU或Edge TPU硬件,使用[OpenVINO检测器](#openvino-detector)的CPU模式通常比使用CPU检测器更高效。 + +::: + +可以通过`"num_threads"`属性指定解释器使用的线程数,默认为`3`。 + +容器中提供了位于`/cpu_model.tflite`的TensorFlow Lite模型,默认情况下此检测器类型使用该模型。要提供自己的模型,请将文件绑定挂载到容器中,并通过`model.path`提供路径。 + +```yaml +detectors: + cpu1: + type: cpu + num_threads: 3 + cpu2: + type: cpu + num_threads: 3 + +model: + path: "/custom_model.tflite" +``` + +使用CPU检测器时,可以为每个摄像头添加一个CPU检测器。添加比摄像头数量更多的检测器不会提高性能。 + +## Deepstack / CodeProject.AI 服务器检测器 + +Frigate的Deepstack/CodeProject.AI服务器检测器允许您将Deepstack和CodeProject.AI的对象检测功能集成到Frigate中。CodeProject.AI和DeepStack是开源AI平台,可以在各种设备上运行,如树莓派、NVIDIA Jetson和其他兼容硬件。需要注意的是,集成是通过网络进行的,因此推理时间可能不如原生Frigate检测器快,但它仍然为对象检测和跟踪提供了高效可靠的解决方案。 + +### 设置 + +要开始使用CodeProject.AI,请访问其[官方网站](https://www.codeproject.com/Articles/5322557/CodeProject-AI-Server-AI-the-easy-way),按照说明在您选择的设备上下载并安装AI服务器。CodeProject.AI的详细设置说明不在Frigate文档范围内。 + +要将CodeProject.AI集成到Frigate中,您需要对Frigate配置文件进行以下更改: + +```yaml +detectors: + deepstack: + api_url: http://<您的codeproject_ai服务器IP>:<端口>/v1/vision/detection + type: deepstack + api_timeout: 0.1 # 秒 +``` + +将`<您的codeproject_ai服务器IP>`和`<端口>`替换为您的CodeProject.AI服务器的IP地址和端口。 + +要验证集成是否正常工作,请启动Frigate并观察日志中是否有与CodeProject.AI相关的错误消息。此外,您可以检查Frigate网络界面,查看CodeProject.AI检测到的对象是否正确显示和跟踪。 + +# Community Supported Detectors + +## Rockchip平台检测器 + +Rockchip平台支持以下SoC的硬件加速对象检测: + +- RK3562 +- RK3566 +- RK3568 +- RK3576 +- RK3588 + +该实现使用[Rockchip的RKNN-Toolkit2](https://github.com/airockchip/rknn-toolkit2/) v2.3.0版本。目前仅支持[Yolo-NAS](https://github.com/Deci-AI/super-gradients/blob/master/YOLONAS.md)作为对象检测模型。 + +### 前提条件 + +请确保按照[Rockchip特定安装说明](/frigate/installation#rockchip平台)进行操作。 + +:::tip + +您可以通过以下命令查看NPU负载: + +```bash +$ cat /sys/kernel/debug/rknpu/load +>> NPU负载:核心0:0%,核心1:0%,核心2:0%, +``` + +::: + +### 支持的模型 + +以下`config.yml`展示了配置检测器的所有相关选项并加以说明。除两处外,所有显示的值均为默认值。标记为"required"的行是使用检测器至少需要的配置,其他行均为可选。 + +```yaml +detectors: # required + rknn: # required + type: rknn # required + # 使用的NPU核心数量 + # 0表示自动选择 + # 如果有多核NPU(如在rk3588上),可增加此值以提高性能,例如设置为3 + num_cores: 0 +``` + +以下推理时间是在rk3588上使用3个NPU核心测得的: + +| 模型 | 大小(MB) | 推理时间(ms) | +| ------------------- | -------- | ------------ | +| deci-fp16-yolonas_s | 24 | 25 | +| deci-fp16-yolonas_m | 62 | 35 | +| deci-fp16-yolonas_l | 81 | 45 | +| yolov9_tiny | 8 | 35 | +| yolox_nano | 3 | 16 | +| yolox_tiny | 6 | 20 | + +- 所有模型都会自动下载并存储在`config/model_cache/rknn_cache`文件夹中。升级Frigate后,应删除旧模型以释放空间。 +- 您也可以提供自己的`.rknn`模型。请不要将自己的模型保存在`rknn_cache`文件夹中,应直接存储在`model_cache`文件夹或其他子文件夹中。要将模型转换为`.rknn`格式,请参阅`rknn-toolkit2`(需要x86机器)。注意,仅支持对特定模型进行后处理。 + +#### YOLO-NAS模型 + +```yaml +model: # required + # 模型名称(将自动下载)或自定义.rknn模型文件路径 + # 可选值: + # - deci-fp16-yolonas_s + # - deci-fp16-yolonas_m + # - deci-fp16-yolonas_l + # 或您的yolonas_model.rknn + path: deci-fp16-yolonas_s + model_type: yolonas + width: 320 + height: 320 + input_pixel_format: bgr + input_tensor: nhwc + labelmap_path: /labelmap/coco-80.txt +``` + +:::warning + +DeciAI提供的预训练YOLO-NAS权重受其许可证约束,不可用于商业用途。更多信息请参阅:https://docs.deci.ai/super-gradients/latest/LICENSE.YOLONAS.html + +::: + +#### YOLO (v9)模型 + +```yaml +model: # required + # 模型名称(将自动下载)或自定义.rknn模型文件路径 + # 可选值: + # - yolov9-t + # - yolov9-s + # 或您的yolo_model.rknn + path: /config/model_cache/rknn_cache/yolov9-t.rknn + model_type: yolo-generic + width: 320 + height: 320 + input_tensor: nhwc + input_dtype: float + labelmap_path: /labelmap/coco-80.txt +``` + +#### YOLOx模型 + +```yaml +model: # required + # 模型名称(将自动下载)或自定义.rknn模型文件路径 + # 可选值: + # - yolox_nano + # - yolox_tiny + # 或您的yolox_model.rknn + path: yolox_tiny + model_type: yolox + width: 416 + height: 416 + input_tensor: nhwc + labelmap_path: /labelmap/coco-80.txt +``` + +### 将自定义onnx模型转换为rknn格式 + +要使用[rknn-toolkit2](https://github.com/airockchip/rknn-toolkit2/)将onnx模型转换为rknn格式,您需要: + +1. 将一个或多个onnx格式的模型放置在Docker主机的`config/model_cache/rknn_cache/onnx`目录下(可能需要`sudo`权限) +2. 将配置文件保存为`config/conv2rknn.yaml`(详见下文) +3. 运行`docker exec python3 /opt/conv2rknn.py`。如果转换成功,rknn模型将被放置在`config/model_cache/rknn_cache`中 + +以下是需要根据您的onnx模型进行调整的示例配置文件: + +```yaml +soc: ["rk3562", "rk3566", "rk3568", "rk3576", "rk3588"] +quantization: false + +output_name: "{input_basename}" + +config: + mean_values: [[0, 0, 0]] + std_values: [[255, 255, 255]] + quant_img_RGB2BGR: true +``` + +参数说明: + +- `soc`: 要为其构建rknn模型的SoC列表。如果不指定此参数,脚本会尝试检测您的SoC并为其构建rknn模型 +- `quantization`: true表示8位整数(i8)量化,false表示16位浮点(fp16)。默认值:false +- `output_name`: 模型的输出名称。可用变量: + - `quant`: 根据配置为"i8"或"fp16" + - `input_basename`: 输入模型的基本名称(例如,如果输入模型名为"my_model.onnx",则为"my_model") + - `soc`: 模型构建的目标SoC(如"rk3588") + - `tk_version`: `rknn-toolkit2`的版本(如"2.3.0") + - **示例**: 指定`output_name = "frigate-{quant}-{input_basename}-{soc}-v{tk_version}"`可能会生成名为`frigate-i8-my_model-rk3588-v2.3.0.rknn`的模型 +- `config`: 传递给`rknn-toolkit2`进行模型转换的配置。所有可用参数的说明请参阅[本手册](https://github.com/MarcA711/rknn-toolkit2/releases/download/v2.3.0/03_Rockchip_RKNPU_API_Reference_RKNN_Toolkit2_V2.3.0_EN.pdf)的"2.2. 模型配置"部分 + +# 模型 + +某些模型类型默认不包含在Frigate中。 + +## 下载模型 + +以下是获取不同类型模型的提示 + +### 下载D-FINE模型 + +导出为ONNX格式: + +1. 克隆:https://github.com/Peterande/D-FINE 并安装所有依赖项 +2. 从[readme](https://github.com/Peterande/D-FINE)中选择并下载检查点 +3. 修改`tools/deployment/export_onnx.py`第58行,将批量大小改为1:`data = torch.rand(1, 3, 640, 640)` +4. 运行导出,确保为您的检查点选择正确的配置 + +示例: + +``` +python3 tools/deployment/export_onnx.py -c configs/dfine/objects365/dfine_hgnetv2_m_obj2coco.yml -r output/dfine_m_obj2coco.pth +``` + +:::tip + +模型导出仅在Linux(或WSL2)上测试过。并非所有依赖项都在`requirements.txt`中。有些在部署文件夹中,有些则完全缺失,必须手动安装。 + +导出前请确保将批量大小改为1。 + +::: + +### 下载RF-DETR模型 + +导出为ONNX格式: + +1. `pip3 install rfdetr` +2. `python3` +3. `from rfdetr import RFDETRBase` +4. `x = RFDETRBase()` +5. `x.export()` + +#### 额外配置 + +可以自定义输入张量分辨率: + +```python +from rfdetr import RFDETRBase +x = RFDETRBase(resolution=560) # 分辨率必须是56的倍数 +x.export() +``` + +### 下载YOLO-NAS模型 + +您可以使用[此笔记本](https://github.com/blakeblackshear/frigate/blob/dev/notebooks/YOLO_NAS_Pretrained_Export.ipynb) [![在Colab中打开](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/blakeblackshear/frigate/blob/dev/notebooks/YOLO_NAS_Pretrained_Export.ipynb)构建并下载带有预训练权重的兼容模型。 + +:::warning + +DeciAI提供的预训练YOLO-NAS权重受其许可证约束,不可用于商业用途。更多信息请参阅:https://docs.deci.ai/super-gradients/latest/LICENSE.YOLONAS.html + +::: + +此笔记本中的输入图像大小设置为320x320。由于Frigate在运行检测前会将视频帧裁剪到感兴趣区域,因此在大多数情况下这可以降低CPU使用率并加快推理速度,而不会影响性能。如果需要,可以将笔记本和配置更新为640x640。 + +### 下载YOLO模型 + +#### YOLOx + +YOLOx模型可以从[YOLOx仓库](https://github.com/Megvii-BaseDetection/YOLOX/tree/main/demo/ONNXRuntime)下载。 + +#### YOLOv3、YOLOv4和YOLOv7 + +导出为ONNX格式: + +```sh +git clone https://github.com/NateMeyer/tensorrt_demos +cd tensorrt_demos/yolo +./download_yolo.sh +python3 yolo_to_onnx.py -m yolov7-320 +``` + +#### YOLOv9 + +YOLOv9模型可以使用以下代码导出,或者[可以从hugging face下载](https://huggingface.co/Xenova/yolov9-onnx/tree/main) + +```sh +git clone https://github.com/WongKinYiu/yolov9 +cd yolov9 + +# 设置虚拟环境,避免影响主系统 +python3 -m venv ./ +bin/pip install -r requirements.txt +bin/pip install onnx onnxruntime onnx-simplifier>=0.4.1 + +# 下载权重 +wget -O yolov9-t.pt "https://github.com/WongKinYiu/yolov9/releases/download/v0.1/yolov9-t-converted.pt" # 下载权重 + +# 准备并运行导出脚本 +sed -i "s/ckpt = torch.load(attempt_download(w), map_location='cpu')/ckpt = torch.load(attempt_download(w), map_location='cpu', weights_only=False)/g" ./models/experimental.py +python3 export.py --weights ./yolov9-t.pt --imgsz 320 --simplify --include onnx +``` \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/object_filters.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/object_filters.md new file mode 100644 index 000000000..f9da01087 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/object_filters.md @@ -0,0 +1,57 @@ +--- +id: object_filters +title: 对象过滤器 +--- + +Frigate提供了多种对象过滤器来降低误报率。 + +## 对象分数 + +在配置中设置对象过滤器时,任何低于`min_score`(最低分数)的检测都会被忽略为误报。`threshold`(阈值)基于被追踪对象分数历史记录的中位数计算(补零至3个值)。假设`min_score`设为0.6,`threshold`设为0.85,以下是各帧的检测情况: + +| 帧数 | 当前分数 | 分数历史记录 | 计算分数 | 是否检测到对象 | +| ---- | -------- | -------------------------- | -------- | -------------- | +| 1 | 0.7 | 0.0, 0, 0.7 | 0.0 | 否 | +| 2 | 0.55 | 0.0, 0.7, 0.0 | 0.0 | 否 | +| 3 | 0.85 | 0.7, 0.0, 0.85 | 0.7 | 否 | +| 4 | 0.90 | 0.7, 0.85, 0.95, 0.90 | 0.875 | 是 | +| 5 | 0.88 | 0.7, 0.85, 0.95, 0.90, 0.88| 0.88 | 是 | +| 6 | 0.95 | 0.7, 0.85, 0.95, 0.90, 0.88, 0.95 | 0.89 | 是 | + +在第2帧中,分数低于`min_score`值,因此Frigate会忽略它并记为0.0。计算分数是分数历史记录的中位数(至少补零至3个值),只有当这个计算分数超过`threshold`时,对象才会被标记为真实检测。在上例中,这种情况发生在第4帧。 + +### 最低分数 + +任何低于`min_score`的检测都会立即被丢弃且不会被追踪,因为它被视为误报。如果`min_score`设置过低,可能会导致误报被检测和追踪,从而干扰对象追踪器并浪费资源。如果`min_score`设置过高,则可能会丢弃分数较低的真实检测,如距离较远或被部分遮挡的对象,这也可能干扰追踪器并导致有效追踪对象丢失或断开。 + +### 阈值 + +`threshold`用于确定对象是否为真实检测。当对象检测分数 >= `threshold`时,该对象被视为真实检测。如果`threshold`设置过低,一些高分误报可能会创建追踪对象。如果`threshold`设置过高,则可能会错过真实检测,因为对象分数可能永远达不到足够高的值。 + +## 对象形状 + +也可以通过对象的形状特征来过滤误报。 + +### 对象面积 + +`min_area`和`max_area`根据对象边界框的面积进行过滤,可用于排除超出预期大小范围的误报。例如,当一片叶子被检测为狗,或一棵大树被检测为人时,可以通过添加`min_area`/`max_area`过滤器来减少这类误报。这些值可以以像素为单位,也可以表示为帧的百分比(例如,0.12表示帧的12%)。 + +### 对象比例 + +`min_ratio`和`max_ratio`值与检测对象的宽高比(以像素为单位)进行比较。如果比例超出此范围,对象将被忽略为误报。这可以忽略比例过高(又矮又宽)或过低(又高又窄)的对象。 + +:::info + +从概念上讲,比例为1表示正方形,0.5表示"高瘦"的框,2表示"矮胖"的框。如果`min_ratio`设为1.0,任何高度大于宽度的对象都会被忽略。同样,如果`max_ratio`设为1.0,则任何宽度大于高度的对象都会被忽略。 + +::: + +## 其他工具 + +### 区域 + +[必需区域](/configuration/zones.md)是减少误报的强大工具,特别是对于天空中或其他不感兴趣区域的误报。必需区域只会为进入该区域的对象创建追踪对象。 + +### 对象遮罩 + +[对象过滤器遮罩](/configuration/masks)是最后的手段,但当误报出现在相对固定的位置且无法通过大小或形状过滤时,它们会很有用。 \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/objects.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/objects.md new file mode 100644 index 000000000..9df5ecf39 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/objects.md @@ -0,0 +1,28 @@ +--- +id: objects +title: 支持检测的对象类型 +--- + +import labels from "../../../../../../labelmap.txt"; + +Frigate 默认支持检测以下来自 Google Coral 测试数据的对象类型: + +请注意: +- `car`(汽车)被列出两次,因为默认配置已将`truck`(卡车)重命名为`car`。这两类对象经常被混淆检测。 +- 默认情况下,只有`person`(人员)会被追踪。如需扩展追踪对象列表,请参考[完整配置参考](reference.md)中的示例。 + +
    + {labels.split("\n").map((label) => ( +
  • {label.replace(/^\d+\s+/, "")}
  • + ))} +
+ +## 自定义模型 + +镜像中已包含适用于 CPU 和 EdgeTPU(Coral)的默认模型。您可以通过挂载以下文件来使用自定义模型: + +- CPU 模型:`/cpu_model.tflite` +- EdgeTPU 模型:`/edgetpu_model.tflite` +- 标签文件:`/labelmap.txt` + +如果自定义模型与默认配置不同,您还需要更新[模型配置](advanced.md#model)。 \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/pwa.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/pwa.md new file mode 100644 index 000000000..9c887c149 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/pwa.md @@ -0,0 +1,24 @@ +--- +id: pwa +title: 安装Frigate应用 +--- + +Frigate支持作为[渐进式网页应用(PWA)](https://web.dev/explore/progressive-web-apps)安装在桌面端、Android和iOS设备上。 + +此方式可获得包括深度链接在内的多项功能增强。 + +## 安装要求 + +要将Frigate安装为PWA,需满足以下条件: + +- 必须通过安全上下文访问Frigate(如localhost、https安全连接等) +- Android设备需使用Firefox、Chrome、Edge、Opera或三星互联网浏览器等支持PWA的浏览器 +- iOS 16.4及以上版本可通过Safari、Chrome、Edge、Firefox或Orion浏览器的分享菜单安装 + +## 安装方法 + +不同设备的安装方式略有差异: + +- **桌面端**:通常使用地址栏右侧的安装按钮 +- **Android设备**:通过浏览器菜单中的"安装为应用"选项 +- **iOS设备**:通过分享菜单中的"添加到主屏幕"功能 \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/record.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/record.md new file mode 100644 index 000000000..c0d48e348 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/record.md @@ -0,0 +1,192 @@ +--- +id: record +title: 录像功能 +--- + +启用录像功能后,视频将存储在`/media/frigate/recordings`目录下。录像的文件结构为`YYYY-MM-DD/HH/<摄像头名称>/MM.SS.mp4`(使用UTC时间)。这些录像直接从摄像头流写入,不经过重新编码。每个摄像头支持可配置的保留策略。当决定是否删除录像时,Frigate会选择录像保留和追踪对象保留中较大的匹配值。 + +新的录像片段会从摄像头流写入缓存,只有符合设置的录像保留策略时才会移动到磁盘存储。 + +H265编码的录像只能在Chrome 108+、Edge和Safari浏览器中播放。其他浏览器需要H264编码的录像。 + +## 常见录像配置 + +### 最保守方案:保存所有视频 + +对于需要在没有检测到运动时也保存连续视频的环境,以下配置将保存3天内的所有视频。3天后,只有包含运动且与警报或检测重叠的视频会保留30天。 + +```yaml +record: + enabled: True + retain: + days: 3 + mode: all + alerts: + retain: + days: 30 + mode: motion + detections: + retain: + days: 30 + mode: motion +``` + +### 减少存储:仅保存检测到运动的视频 + +为了减少存储需求,可以调整配置只保留检测到运动的视频。 + +```yaml +record: + enabled: True + retain: + days: 3 + mode: motion + alerts: + retain: + days: 30 + mode: motion + detections: + retain: + days: 30 + mode: motion +``` + +### 最小方案:仅保存警报视频 + +如果只想保留追踪对象期间的视频,此配置将丢弃非警报期间的视频。 + +```yaml +record: + enabled: True + retain: + days: 0 + alerts: + retain: + days: 30 + mode: motion +``` + +## 存储空间不足时Frigate会删除旧录像吗? + +从Frigate 0.12开始,当剩余存储空间不足1小时时,系统会自动删除最早的2小时录像。 + +## 配置录像保留策略 + +Frigate支持连续录像和基于追踪对象的录像,具有独立的保留模式和保留期限。 + +:::tip + +保留配置支持小数,例如可以设置为保留`0.5`天。 + +::: + +### 连续录像 + +可以通过以下配置设置保留连续录像的天数(X为数字),默认情况下连续录像被禁用。 + +```yaml +record: + enabled: True + retain: + days: 1 # <- 保留连续录像的天数 +``` + +连续录像支持不同的保留模式,[详见下文](#不同保留模式的含义) + +### 对象录像 + +可以为分类为警报和检测的回放条目分别指定保留天数。 + +```yaml +record: + enabled: True + alerts: + retain: + days: 10 # <- 保留警报录像的天数 + detections: + retain: + days: 10 # <- 保留检测录像的天数 +``` + +此配置将保留与警报和检测重叠的录像片段10天。由于多个追踪对象可能引用相同的录像片段,这样可以避免存储重复内容并减少总体存储需求。 + +**警告**:必须在配置中启用录像功能。如果摄像头在配置中禁用了录像,通过上述方法启用将不会生效。 + +## 不同保留模式的含义 + +Frigate以10秒为片段保存具有`record`角色的视频流。这些选项决定了哪些录像片段会被保留(也会影响追踪对象)。 + +假设您配置门铃摄像头保留最近2天的连续录像: + +- 使用`all`选项会保留这2天内的全部48小时录像 +- 使用`motion`选项只会保留Frigate检测到运动的部分片段。这是折中方案,不会保留全部48小时,但可能会保留所有感兴趣的片段以及一些额外内容 +- 使用`active_objects`选项只会保留存在真实活动对象(非静止)的片段 + +警报和检测也有相同的选项,但只会保存与相应类型回放条目重叠的录像。 + +以下配置示例将保存所有运动片段7天,活动对象片段保存14天: + +```yaml +record: + enabled: True + retain: + days: 7 + mode: motion + alerts: + retain: + days: 14 + mode: active_objects + detections: + retain: + days: 14 + mode: active_objects +``` + +上述配置可以全局应用或针对单个摄像头设置。 + +## 可以只在特定时间进行"连续"录像吗? + +通过Frigate页面、Home Assistant或MQTT,可以设置摄像头只在特定情况或时间进行录像。 + +## 如何导出录像? + +可以通过在回放面板中右键点击(桌面)或长按(移动设备)回放条目,或在历史视图中点击导出按钮来导出录像。导出的录像会通过主导航栏中的导出视图进行组织和搜索。 + +### 延时摄影导出 + +延时摄影导出只能通过[HTTP API](../integrations/api/export-recording-export-camera-name-start-start-time-end-end-time-post.api.mdx)实现。 + +默认情况下,延时摄影以25倍速和30FPS导出。这意味着每25秒的实际录像会被压缩为1秒的延时视频(无音频)。 + +要配置加速倍数、帧率等参数,可以使用`timelapse_args`配置参数。以下示例将延时速度改为60倍(1小时录像压缩为1分钟),帧率25FPS: + +```yaml +record: + enabled: True + export: + timelapse_args: "-vf setpts=PTS/60 -r 25" +``` + +:::tip + +当全局使用`hwaccel_args`时,延时生成会使用硬件编码。编码器会自行决定行为,可能导致输出文件过大。 +可以使用ffmpeg参数`-qp n`(n代表量化参数值)来减小输出文件大小,调整该值可以在质量和文件大小之间取得平衡。 + +::: + +## 录像与磁盘同步 + +在某些情况下,录像文件可能被删除但Frigate不知情。可以启用录像同步功能,让Frigate检查文件系统并删除数据库中不存在的文件记录。 + +```yaml +record: + sync_recordings: True +``` + +此功能用于修复文件差异,而非完全删除数据库条目。如果删除了所有媒体文件,不要使用`sync_recordings`,而是停止Frigate,删除`frigate.db`数据库后重新启动。 + +:::warning + +同步操作会占用大量CPU资源,大多数情况下不需要启用,仅在必要时使用。 + +::: \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/reference.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/reference.md new file mode 100644 index 000000000..3488b2ad0 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/reference.md @@ -0,0 +1,912 @@ +--- +id: reference +title: 完整配置参考 +--- + +### 完整配置参考: + +:::warning + +不建议直接复制这个完整的配置文件。只需指定与默认值不同的值。配置选项和默认值可能会在未来版本中发生变化。 + +::: + +```yaml +mqtt: + # 可选:启用mqtt服务器(默认值:如下所示) + enabled: True + # 必需:主机名 + host: mqtt.server.com + # 可选:端口(默认值:如下所示) + port: 1883 + # 可选:主题前缀(默认值:如下所示) + # 注意:如果运行多个实例,必须是唯一的 + topic_prefix: frigate + # 可选:客户端ID(默认值:如下所示) + # 注意:如果运行多个实例,必须是唯一的 + client_id: frigate + # 可选:用户名 + # 注意:MQTT用户可以通过以'FRIGATE_'开头的环境变量或docker secrets指定 + # 例如:user: '{FRIGATE_MQTT_USER}' + user: mqtt_user + # 可选:密码 + # 注意:MQTT密码可以通过以'FRIGATE_'开头的环境变量或docker secrets指定 + # 例如:password: '{FRIGATE_MQTT_PASSWORD}' + password: password + # 可选:用于启用TLS的自签名证书的CA证书(默认值:无) + tls_ca_certs: /path/to/ca.crt + # 可选:用于使用自签名客户端证书的客户端证书和密钥 + # (默认值:无) + # 注意:证书不能有密码保护 + # 使用客户端证书时不要设置用户名和密码 + tls_client_cert: /path/to/client.crt + tls_client_key: /path/to/client.key + # 可选:tls_insecure(true/false)用于启用服务器证书中 + # 主机名的TLS验证(默认值:无) + tls_insecure: false + # 可选:发布统计信息的时间间隔(秒)(默认值:如下所示) + stats_interval: 60 + # 可选:订阅和发布的QoS级别(默认值:如下所示) + # 0 = 最多一次 + # 1 = 至少一次 + # 2 = 恰好一次 + qos: 0 + +# 可选:检测器配置。默认为单个CPU检测器 +detectors: + # 必需:检测器名称 + detector_name: + # 必需:检测器类型 + # Frigate提供多种类型,详见 https://docs.frigate.video/configuration/object_detectors(默认值:如下所示) + # 也可以插入其他类型的检测器。 + # 检测器可能需要额外的配置。 + # 更多信息请参考检测器配置页面。 + type: cpu + +# 可选:数据库配置 +database: + # SQLite数据库文件的存储路径(默认值:如下所示) + path: /config/frigate.db + +# 可选:TLS配置 +tls: + # 可选:为8971端口启用TLS(默认值:如下所示) + enabled: True + +# 可选:代理配置 +proxy: + # 可选:上游代理的请求头映射。仅在Frigate的身份验证被禁用时使用。 + # 注意:许多身份验证代理会在下游传递一个包含已验证用户名的请求头。 + # 并非所有值都受支持。必须是白名单中的请求头。 + # 更多信息请参见文档。 + header_map: + user: x-forwarded-user + # 可选:用户登出的URL。这设置了UI中登出URL的位置。 + logout_url: /api/logout + # 可选:用于检查代理发送的X-Proxy-Secret请求头的认证密钥。 + # 如果未设置,则不考虑来源信任所有请求。 + auth_secret: None + +# 可选:身份验证配置 +auth: + # 可选:启用身份验证 + enabled: True + # 可选:在启动时重置管理员用户密码(默认值:如下所示) + # 新密码会打印在日志中 + reset_admin_password: False + # 可选:存储原生身份验证JWT令牌的Cookie名称(默认值:如下所示) + cookie_name: frigate_token + # 可选:设置cookie的secure标志(默认值:如下所示) + # 注意:如果你使用TLS,应该将此设置为True + cookie_secure: False + # 可选:会话长度(秒)(默认值:如下所示) + session_length: 86400 # 24小时 + # 可选:刷新时间(秒)(默认值:如下所示) + # 当会话将在小于此设置的时间内过期时, + # 它将被刷新回session_length的时长。 + refresh_time: 43200 # 12小时 + # 可选:登录失败的速率限制,用于防止暴力破解 + # 登录攻击(默认值:如下所示) + # 有关有效值的更多信息,请参见文档 + failed_login_rate_limit: None + # 可选:用于确定IP地址进行速率限制的受信任代理 + # 注意:这仅用于限制登录尝试的速率,不会绕过 + # 身份验证。更多详情请参见身份验证文档。 + trusted_proxies: [] + # 可选:用户密码的哈希迭代次数 + # 截至2023年2月,OWASP建议PBKDF2-SHA256使用600000次迭代 + # 注意:更改此值不会自动更新密码哈希,你 + # 需要更改每个用户的密码才能使其生效 + hash_iterations: 600000 + +# 可选:模型修改 +# 注意:默认值是针对EdgeTPU检测器的。 +# 其他检测器需要设置模型配置。 +model: + # 必需:模型路径。Frigate+模型使用 plus://(默认值:根据检测器自动设置) + path: /edgetpu_model.tflite + # 必需:标签映射文件路径(默认值:如下所示) + labelmap_path: /labelmap.txt + # 必需:对象检测模型输入宽度(默认值:如下所示) + width: 320 + # 必需:对象检测模型输入高度(默认值:如下所示) + height: 320 + # 必需:对象检测模型输入颜色空间 + # 有效值为 rgb、bgr 或 yuv(默认值:如下所示) + input_pixel_format: rgb + # 必需:对象检测模型输入张量格式 + # 有效值为 nhwc 或 nchw(默认值:如下所示) + input_tensor: nhwc + # 必需:对象检测模型类型,目前仅用于OpenVINO检测器 + # 有效值为 ssd、yolox、yolonas(默认值:如下所示) + model_type: ssd + # 必需:标签名称修改。这些会合并到标准标签映射中。 + labelmap: + 2: vehicle + # 可选:对象标签到其属性标签的映射(默认值:取决于模型) + attributes_map: + person: + - amazon + - face + car: + - amazon + - fedex + - license_plate + - ups + +# 可选:音频事件配置 +# 注意:可以在摄像头级别重写 +audio: + # 可选:启用音频事件(默认值:如下所示) + enabled: False + # 可选:配置在没有检测到音频后结束事件的秒数(默认值:如下所示) + max_not_heard: 30 + # 可选:配置运行音频检测所需的最小RMS音量(默认值:如下所示) + # 参考标准: + # - 200 - 高灵敏度 + # - 500 - 中等灵敏度 + # - 1000 - 低灵敏度 + min_volume: 500 + # 可选:要监听的音频类型(默认值:如下所示) + listen: + - bark # 狗叫 + - fire_alarm # 火警 + - scream # 尖叫 + - speech # 说话 + - yell # 喊叫 + # 可选:配置检测过滤器 + filters: + # 与listen配置中标签匹配的标签 + speech: + # 触发音频事件的最小分数(默认值:如下所示) + threshold: 0.8 + +# 可选:日志记录器详细程度设置 +logger: + # 可选:默认日志详细程度(默认值:如下所示) + default: info + # 可选:特定组件的日志记录器覆盖 + logs: + frigate.event: debug + +# 可选:设置环境变量 +environment_vars: + EXAMPLE_VAR: value + +# 可选:鸟瞰图配置 +# 注意:可以在摄像头级别重写enabled和mode参数 +birdseye: + # 可选:启用鸟瞰视图(默认值:如下所示) + enabled: True + # 可选:通过RTSP重新串流鸟瞰视图(默认值:如下所示) + # 注意:启用此功能将使鸟瞰视图全天候运行,可能会略微增加CPU使用率。 + restream: False + # 可选:输出分辨率的宽度(默认值:如下所示) + width: 1280 + # 可选:输出分辨率的高度(默认值:如下所示) + height: 720 + # 可选:mpeg1视频流的编码质量(默认值:如下所示) + # 1是最高质量,31是最低质量。较低的质量会减少CPU资源使用。 + quality: 8 + # 可选:视图模式。可用选项有:objects、motion和continuous + # objects - 如果摄像头在过去30秒内有被跟踪的对象,则包含该摄像头 + # motion - 如果摄像头在过去30秒内检测到运动,则包含该摄像头 + # continuous - 始终包含所有摄像头 + mode: objects + # 可选:停止显示摄像头的活动阈值(默认值:如下所示) + inactivity_threshold: 30 + # 可选:配置鸟瞰视图布局 + layout: + # 可选:布局计算器的缩放因子,范围1.0-5.0(默认值:如下所示) + scaling_factor: 2.0 + # 可选:一次最多显示的摄像头数量,显示最近的摄像头(默认值:显示所有摄像头) + max_cameras: 1 + +# 可选:ffmpeg配置 +# 关于预设的更多信息请访问 https://docs.frigate.video/configuration/ffmpeg_presets +ffmpeg: + # 可选:ffmpeg二进制文件路径(默认值:如下所示) + # 可以设置为`7.0`或`5.0`以指定其中一个包含的版本 + # 或者可以设置为任何包含`bin/ffmpeg`和`bin/ffprobe`的路径 + path: "default" + # 可选:全局ffmpeg参数(默认值:如下所示) + global_args: -hide_banner -loglevel warning -threads 2 + # 可选:全局硬件加速参数(默认值:自动检测) + # 注意:请参阅特定设备的硬件加速文档 + hwaccel_args: "auto" + # 可选:全局输入参数(默认值:如下所示) + input_args: preset-rtsp-generic + # 可选:全局输出参数 + output_args: + # 可选:检测流的输出参数(默认值:如下所示) + detect: -threads 2 -f rawvideo -pix_fmt yuv420p + # 可选:录制流的输出参数(默认值:如下所示) + record: preset-record-generic + # 可选:ffmpeg重试连接摄像头前等待的秒数(默认值:如下所示) + # 如果设置太低,frigate会过于频繁地重试连接摄像头流,消耗摄像头同时允许的有限流数 + # 如果设置太高,那么当ffmpeg崩溃或摄像头流超时时,你可能会丢失最多retry_interval秒的录像 + # 注意:这对于无线/电池供电的摄像头来说是一个有用的设置,可以减少连接超时期间潜在丢失的录像量 + retry_interval: 10 + # 可选:在HEVC(H.265)录制流上设置标签以提高与Apple播放器的兼容性(默认值:如下所示) + apple_compatibility: false + +# 可选:检测配置 +# 注意:可以在摄像头级别重写 +detect: + # 可选:启用摄像头的检测功能(默认值:如下所示) + enabled: False + # 可选:检测角色输入帧的宽度(默认值:使用原生流分辨率) + width: 1280 + # 可选:检测角色输入帧的高度(默认值:使用原生流分辨率) + height: 720 + # 可选:检测角色输入的目标帧率(默认值:如下所示) + # 注意:建议值为5。理想情况下,尽量在摄像头端降低帧率。 + fps: 5 + # 可选:对象在跟踪器中初始化所需的连续检测命中次数(默认值:帧率的1/2) + min_initialized: 2 + # 可选:Frigate认为对象消失前的无检测帧数(默认值:帧率的5倍) + max_disappeared: 25 + # 可选:静止对象跟踪配置 + stationary: + # 可选:确认静止对象的频率(默认值:与阈值相同) + # 当设置为1时,每帧都会运行对象检测来确认对象是否仍然存在。 + # 如果设置为10,则每10帧运行一次对象检测来确认对象是否仍然存在。 + interval: 50 + # 可选:对象被视为静止前的无位置变化帧数(默认值:帧率的10倍或10秒) + threshold: 50 + # 可选:定义跟踪静止对象的最大帧数(默认值:未设置,永久跟踪) + # 这可以帮助减少只应该短时间静止的对象的误报。 + # 也可以用来禁用静止对象跟踪。例如,你可能想为person设置一个值, + # 但让car保持默认值。 + # 警告:设置这些值会覆盖默认行为并禁用静止对象跟踪。 + # 很少有情况需要禁用它。除非你知道确实需要, + # 否则不建议从示例配置中复制这些值到你的配置中。 + max_frames: + # 可选:所有对象类型的默认值(默认值:未设置,永久跟踪) + default: 3000 + # 可选:特定对象的值 + objects: + person: 1000 + # 可选:检测注释的偏移毫秒数(默认值:如下所示)。 + # 录制和检测过程之间经常存在延迟, + # 特别是当使用单独的流进行检测和录制时。 + # 使用此设置可以使时间轴上的边界框与录制内容更好地对齐。 + # 该值可以是正数或负数。 + # 提示:想象有一个跟踪对象剪辑,其中一个人从左向右走。 + # 如果跟踪对象生命周期边界框始终在人的左侧, + # 则应该减小该值。同样,如果一个人从左向右走, + # 而边界框始终在人的前面,则应该增加该值。 + # 提示:此偏移是动态的,所以你可以更改值,它会更新现有的 + # 跟踪对象,这使得调整变得容易。 + # 警告:快速移动的对象的边界框可能无法对齐。 + annotation_offset: 0 + +# 可选:对象配置 +# 注意:可以在摄像头级别重写 +objects: + # 可选:从labelmap.txt中要跟踪的对象列表(默认值:如下所示) + track: + - person # 人 + # 可选:防止在某些区域检测所有类型对象的蒙版(默认值:无蒙版) + # 基于对象边界框的底部中心进行检查。 + # 注意:此蒙版与下面的对象类型特定蒙版组合使用 + mask: 0.000,0.000,0.781,0.000,0.781,0.278,0.000,0.278 + # 可选:减少特定对象类型误报的过滤器 + filters: + person: # 人 + # 可选:检测到的对象边界框的最小尺寸(默认值:0)。 + # 可以指定为像素宽度*高度的整数,或表示帧百分比的小数(0.000001到0.99)。 + min_area: 5000 + # 可选:检测到的对象边界框的最大尺寸(默认值:24000000)。 + # 可以指定为像素宽度*高度的整数,或表示帧百分比的小数(0.000001到0.99)。 + max_area: 100000 + # 可选:检测到的对象边界框的最小宽高比(默认值:0) + min_ratio: 0.5 + # 可选:检测到的对象边界框的最大宽高比(默认值:24000000) + max_ratio: 2.0 + # 可选:开始跟踪对象所需的最小分数(默认值:如下所示) + min_score: 0.5 + # 可选:被跟踪对象的计算分数被认为是真阳性的最小百分比(小数)(默认值:如下所示) + threshold: 0.7 + # 可选:防止在某些区域检测此类型对象的蒙版(默认值:无蒙版) + # 基于对象边界框的底部中心进行检查 + mask: 0.000,0.000,0.781,0.000,0.781,0.278,0.000,0.278 + +# 可选:审查配置 +# 注意:可以在摄像头级别重写 +review: + # 可选:警报配置 + alerts: + # 可选:启用摄像头的警报(默认值:如下所示) + enabled: True + # 可选:符合警报条件的标签(默认值:如下所示) + labels: + - car # 汽车 + - person # 人 + # 可选:对象被标记为警报所需的区域(默认值:无) + # 注意:当在全局设置必需区域时,此区域必须存在于所有摄像头中, + # 否则配置将被视为无效。在这种情况下,required_zones + # 应该在摄像头级别配置。 + required_zones: + - driveway # 车道 + # 可选:检测配置 + detections: + # 可选:启用摄像头的检测(默认值:如下所示) + enabled: True + # 可选:符合检测条件的标签(默认值:所有被跟踪/监听的标签) + labels: + - car # 汽车 + - person # 人 + # 可选:对象被标记为检测所需的区域(默认值:无) + # 注意:当在全局设置必需区域时,此区域必须存在于所有摄像头中, + # 否则配置将被视为无效。在这种情况下,required_zones + # 应该在摄像头级别配置。 + required_zones: + - driveway # 车道 + +# 可选:运动配置 +# 注意:可以在摄像头级别重写 +motion: + # 可选:启用摄像头的检测功能(默认值:True) + # 注意:运动检测是对象检测所必需的, + # 如果将此设置为False但保持detect启用, + # 将在启动时导致错误。 + enabled: False + # 可选:传递给cv2.threshold的阈值,用于确定像素是否足够不同以被计为运动(默认值:如下所示) + # 增加此值将降低运动检测的灵敏度,减小此值将提高运动检测的灵敏度。 + # 该值应在1到255之间。 + threshold: 30 + # 可选:用于检测闪电或其他需要重新校准运动检测的重大变化的图像百分比 + # (默认值:如下所示) + # 增加此值将使运动检测更可能将闪电或红外模式变化视为有效运动。 + # 减小此值将使运动检测更可能忽略大量运动,例如有人接近门铃摄像头。 + lightning_threshold: 0.8 + # 可选:调整大小后的运动图像中被计为运动的最小像素尺寸(默认值:如下所示) + # 增加此值将防止检测到较小的运动区域。减小此值将 + # 使运动检测对较小的移动物体更敏感。 + # 参考标准: + # - 10 - 高灵敏度 + # - 30 - 中等灵敏度 + # - 50 - 低灵敏度 + contour_area: 10 + # 可选:在平均帧以确定背景时传递给cv2.accumulateWeighted的Alpha值(默认值:如下所示) + # 较高的值意味着当前帧对平均值影响很大,新对象将更快地被平均到背景中。 + # 较低的值将导致移动阴影等被检测为运动的时间更长。 + # https://www.geeksforgeeks.org/background-subtraction-in-an-image-using-concept-of-running-average/ + frame_alpha: 0.01 + # 可选:调整大小后的运动帧的高度(默认值:100) + # 较高的值将以更高的CPU使用为代价获得更细粒度的运动检测。 + # 较低的值会减少CPU使用,但小的变化可能不会被识别为运动。 + frame_height: 100 + # 可选:运动蒙版 + # 注意:有关创建蒙版的更详细信息,请参见文档 + mask: 0.000,0.469,1.000,0.469,1.000,1.000,0.000,1.000 + # 可选:改善对比度(默认值:如下所示) + # 启用动态对比度改善。这应该有助于改善夜间检测,但代价是使白天的运动检测更敏感。 + improve_contrast: True + # 可选:通过MQTT更新摄像头运动状态从ON到OFF时的延迟(默认值:如下所示)。 + mqtt_off_delay: 30 + +# 可选:通知配置 +# 注意:可以在摄像头级别重写(除了email) +notifications: + # 可选:启用通知服务(默认值:如下所示) + enabled: False + # 可选:推送服务要联系的电子邮件 + # 注意:这是使用通知功能所必需的 + email: "admin@example.com" + # 可选:通知的冷却时间(秒)(默认值:如下所示) + cooldown: 0 + +# 可选:录制配置 +# 注意:可以在摄像头级别重写 +record: + # 可选:启用录制(默认值:如下所示) + # 警告:如果在配置中禁用了录制,稍后通过UI或MQTT开启将不会生效。 + enabled: False + # 可选:清理运行之间的等待分钟数(默认值:如下所示) + # 如果你想最小化I/O操作,可以使用此设置来减少从磁盘删除录制片段的频率 + expire_interval: 60 + # 可选:在启动时和每天一次同步录制文件(默认值:如下所示)。 + sync_recordings: False + # 可选:录制保留设置 + retain: + # 可选:无论是否有跟踪对象都要保留录像的天数(默认值:如下所示) + # 注意:如果你只想保留警报和检测的录像,应该将此设置为0, + # 并在下面的alerts和detections部分定义保留设置。 + days: 0 + # 可选:保留模式。可用选项有:all、motion和active_objects + # all - 保存所有录制片段,无论是否有活动 + # motion - 保存所有检测到运动的录制片段 + # active_objects - 保存所有有活动/移动对象的录制片段 + # 注意:此模式仅在上面days设置大于0时适用 + mode: all + # 可选:录制导出设置 + export: + # 可选:延时摄影输出参数(默认值:如下所示)。 + # 注意:默认参数设置为将24小时的录制压缩为1小时的播放。 + # 有关这些参数如何工作的更多信息,请参见https://stackoverflow.com/a/58268695。 + # 例如:如果你想将24小时压缩为30分钟,那就是从86400秒到1800秒, + # 即1800 / 86400 = 0.02。 + # -r(帧率)决定了输出视频的流畅度。 + # 所以在这种情况下参数应该是 -vf setpts=0.02*PTS -r 30。 + timelapse_args: "-vf setpts=0.04*PTS -r 30" + # 可选:录制预览设置 + preview: + # 可选:录制预览质量(默认值:如下所示)。 + # 选项有:very_low(极低)、low(低)、medium(中)、high(高)、very_high(极高) + quality: medium + # 可选:警报录制设置 + alerts: + # 可选:警报前包含的秒数(默认值:如下所示) + pre_capture: 5 + # 可选:警报后包含的秒数(默认值:如下所示) + post_capture: 5 + # 可选:警报录像的保留设置 + retain: + # 必需:保留天数(默认值:如下所示) + days: 14 + # 可选:保留模式(默认值:如下所示) + # all - 保存所有警报录制片段,无论是否有活动 + # motion - 保存所有检测到运动的警报录制片段 + # active_objects - 保存所有有活动/移动对象的警报录制片段 + # + # 注意:如果摄像头的保留模式比此处配置的模式更严格, + # 在应用此模式时,片段可能已经被删除。 + # 例如,如果摄像头保留模式是"motion",没有运动的片段 + # 永远不会被存储,所以在这里设置模式为"all"不会恢复它们。 + mode: motion + # 可选:检测录制设置 + detections: + # 可选:检测前包含的秒数(默认值:如下所示) + pre_capture: 5 + # 可选:检测后包含的秒数(默认值:如下所示) + post_capture: 5 + # 可选:检测录像的保留设置 + retain: + # 必需:保留天数(默认值:如下所示) + days: 14 + # 可选:保留模式(默认值:如下所示) + # all - 保存所有检测录制片段,无论是否有活动 + # motion - 保存所有检测到运动的检测录制片段 + # active_objects - 保存所有有活动/移动对象的检测录制片段 + # + # 注意:如果摄像头的保留模式比此处配置的模式更严格, + # 在应用此模式时,片段可能已经被删除。 + # 例如,如果摄像头保留模式是"motion",没有运动的片段 + # 永远不会被存储,所以在这里设置模式为"all"不会恢复它们。 + mode: motion + +# 可选:为每个跟踪对象写入clips目录的jpg快照配置 +# 注意:可以在摄像头级别重写 +snapshots: + # 可选:启用将jpg快照写入/media/frigate/clips(默认值:如下所示) + enabled: False + # 可选:保存快照图像的干净PNG副本(默认值:如下所示) + clean_copy: True + # 可选:在快照上打印时间戳(默认值:如下所示) + timestamp: False + # 可选:在快照上绘制边界框(默认值:如下所示) + bounding_box: True + # 可选:裁剪快照(默认值:如下所示) + crop: False + # 可选:调整快照的高度(默认值:原始大小) + height: 175 + # 可选:限制快照仅包含进入所列区域的对象(默认值:无必需区域) + required_zones: [] + # 可选:摄像头特定的保留设置覆盖(默认值:全局值) + retain: + # 必需:默认保留天数(默认值:如下所示) + default: 10 + # 可选:按对象保留天数 + objects: + person: 15 # 人 + # 可选:编码jpeg的质量,0-100(默认值:如下所示) + quality: 70 + +# 可选:语义搜索功能配置 +semantic_search: + # 可选:启用语义搜索(默认值:如下所示) + enabled: False + # 可选:从历史跟踪对象重新索引嵌入数据库(默认值:如下所示) + reindex: False + # 可选:设置用于嵌入的模型(默认值:如下所示) + model: "jinav1" + # 可选:设置用于嵌入的模型大小(默认值:如下所示) + # 注意:小型模型在CPU上运行,大型模型在GPU上运行 + model_size: "small" + +# 可选:人脸识别功能配置 +# 注意:enabled和min_area可以在摄像头级别重写 +face_recognition: + # 可选:启用语义搜索(默认值:如下所示) + enabled: False + # 可选:标记为潜在匹配所需的最小人脸距离分数(默认值:如下所示) + unknown_score: 0.8 + # 可选:检测人脸所需的最小人脸检测分数(默认值:如下所示) + # 注意:这仅在不运行Frigate+模型时适用 + detection_threshold: 0.7 + # 可选:被视为匹配所需的最小人脸距离分数(默认值:如下所示) + recognition_threshold: 0.9 + # 可选:运行人脸识别所需的检测到的人脸框最小面积(默认值:如下所示) + min_area: 500 + # 可选:保存用于训练的已识别人脸图像数量(默认值:如下所示) + save_attempts: 100 + # 可选:应用模糊质量过滤器,根据图像的模糊程度调整置信度(默认值:如下所示) + blur_confidence_filter: True + +# 可选:车牌识别功能配置 +# 注意:enabled、min_area和enhancement可以在摄像头级别重写 +lpr: + # 可选:启用车牌识别(默认值:如下所示) + enabled: False + # 可选:运行模型的设备(默认值:如下所示) + device: CPU + # 可选:设置用于文本检测的模型大小(默认值:如下所示) + model_size: small + # 可选:开始运行识别所需的车牌对象置信度分数(默认值:如下所示) + detection_threshold: 0.7 + # 可选:开始运行识别所需的车牌最小面积(默认值:如下所示) + min_area: 1000 + # 可选:将车牌作为子标签添加到对象所需的识别置信度分数(默认值:如下所示) + recognition_threshold: 0.9 + # 可选:将车牌作为子标签添加到对象所需的最小字符数(默认值:如下所示) + min_plate_length: 4 + # 可选:车牌预期格式的正则表达式(默认值:如下所示) + format: None + # 可选:允许检测到的车牌与已知车牌匹配时可以有的缺失/错误字符数 + match_distance: 1 + # 可选:要跟踪的已知车牌(字符串或正则表达式)(默认值:如下所示) + known_plates: {} + # 可选:通过对比度调整和降噪增强检测到的车牌图像(默认值:如下所示) + # 值在0到10之间。更高的值并不总是更好,可能比较低的值表现更差。 + enhancement: 0 + # 可选:保存车牌图像到/media/frigate/clips/lpr用于调试目的(默认值:如下所示) + debug_save_plates: False + +# 可选:AI生成的跟踪对象描述配置 +# 警告:根据提供者的不同,这将通过互联网将缩略图发送到 +# Google或OpenAI的LLM来生成描述。可以在摄像头级别重写 +# (enabled: False)以增强室内摄像头的隐私保护。 +genai: + # 可选:启用AI描述生成(默认值:如下所示) + enabled: False + # 启用时必需:提供者必须是ollama、gemini或openai之一 + provider: ollama + # 当提供者是ollama时必需。也可以用于openai提供者的OpenAI API兼容后端。如果要使用openai类接口的第三方服务商,请使用系统变量 + base_url: http://localhost:11434 + # 当使用gemini或openai时必需 + api_key: "{FRIGATE_GENAI_API_KEY}" + # 可选:生成描述的默认提示。可以使用替换变量 + # 如"label"、"sub_label"、"camera"来使其更加动态(默认值:如下所示) + prompt: "请分析以下监控摄像头画面中的 “{label}” 元素,如果可以,请尽可能描述 “{label}” 的动作、行为和潜在意图,并尽可能详细的描述它的外观,同时请不要描述周围环境和其他元素细节等。注意,引号内的对象名可能为英文,同时需要将它转换为中文。" + # 可选:自定义描述结果的对象特定提示 + # 格式:{label}: {prompt} + object_prompts: + person: "分析这些图像中的主要人物。他们在做什么,他们的行动可能暗示他们的意图是什么(例如,接近一扇门,离开一个区域,静止不动)?不要描述周围环境或静态细节。" + +# 可选:重新串流配置 +# 使用 https://github.com/AlexxIT/go2rtc (v1.9.9) +# 注意:必须使用默认的go2rtc API端口(1984), +# 不支持更改集成的go2rtc实例的端口。 +go2rtc: + +# 可选:WebUI的实时流配置 +# 注意:可以在摄像头级别重写 +live: + # 可选:设置在go2rtc中配置的流 + # 用于frigate WebUI的实时查看(默认值:摄像头名称) + # 注意:在大多数情况下,这应该只在摄像头级别设置。 + streams: + main_stream: main_stream_name + sub_stream: sub_stream_name + # 可选:设置jsmpeg流的高度(默认值:720) + # 这必须小于或等于检测流的高度。较低的分辨率 + # 减少查看jsmpeg流所需的带宽。宽度根据已知的宽高比计算。 + height: 720 + # 可选:设置jsmpeg流的编码质量(默认值:如下所示) + # 1是最高质量,31是最低质量。较低的质量使用更少的CPU资源。 + quality: 8 + +# 可选:视频流内时间戳样式配置 +# 注意:可以在摄像头级别重写 +timestamp_style: + # 可选:时间戳的位置(默认值:如下所示) + # "tl"(左上)、"tr"(右上)、"bl"(左下)、"br"(右下) + position: "tl" + # 可选:符合Python包"datetime"的格式指定符(默认值:如下所示) + # 其他示例: + # 德语格式:"%d.%m.%Y %H:%M:%S" + format: "%m/%d/%Y %H:%M:%S" + # 可选:字体颜色 + color: + # 指定颜色时所有参数都必需(默认值:如下所示) + red: 255 + green: 255 + blue: 255 + # 可选:字体线条粗细(默认值:如下所示) + thickness: 2 + # 可选:文字效果(默认值:如下所示) + # None(无效果) + # "solid"(字体反色的实心背景) + # "shadow"(字体阴影) + effect: None + +# 必需 +cameras: + # 必需:摄像头名称,目前仅能使用英文数字与下划线 + back: + # 可选:启用/禁用摄像头(默认值:如下所示)。 + # 如果禁用:配置仍然有效但没有实时流和捕获等功能。 + # 事件/录像仍然可以查看。 + enabled: True + # 可选:用于某些Frigate功能的摄像头类型(默认值:如下所示) + # 选项为 "generic"(通用)和 "lpr"(车牌识别) + type: "generic" + # 必需:摄像头的ffmpeg设置 + ffmpeg: + # 必需:摄像头的输入流列表。更多信息请参见文档。 + inputs: + # 必需:流的路径 + # 注意:路径可以包含环境变量或docker secrets,必须以'FRIGATE_'开头并在{}中引用 + - path: rtsp://viewer:{FRIGATE_RTSP_PASSWORD}@10.0.10.10:554/cam/realmonitor?channel=1&subtype=2 + # 必需:此流的角色列表。有效值为:audio(音频),detect(检测),record(录制) + # 注意:除了分配audio、detect和record角色外, + # 它们还必须在摄像头配置中启用。 + roles: + - audio + - detect + - record + # 可选:流特定的全局参数(默认值:继承) + # global_args: + # 可选:流特定的硬件加速参数(默认值:继承) + # hwaccel_args: + # 可选:流特定的输入参数(默认值:继承) + # input_args: + # 可选:摄像头特定的全局参数(默认值:继承) + # global_args: + # 可选:摄像头特定的硬件加速参数(默认值:继承) + # hwaccel_args: + # 可选:摄像头特定的输入参数(默认值:继承) + # input_args: + # 可选:摄像头特定的输出参数(默认值:继承) + # output_args: + + # 可选:允许最高评分图像被新图像替换前的超时时间(默认值:如下所示) + best_image_timeout: 60 + + # 可选:从系统页面直接访问摄像头Web界面的URL。可能并非所有摄像头都支持。 + webui_url: "" + + # 可选:此摄像头的区域配置 + zones: + # 必需:区域名称,目前仅能使用英文数字与下划线 + # 注意:这必须与任何摄像头名称不同,但可以与其他摄像头上的 + # 另一个区域名称相匹配。 + front_steps: # 前台阶 + # 必需:定义区域多边形的x,y坐标列表。 + # 注意:区域内的存在仅基于对象边界框的底部中心进行评估。 + coordinates: 0.033,0.306,0.324,0.138,0.439,0.185,0.042,0.428 + # 可选:启用速度估算的4边形区域的实际距离(默认值:无) + # 按区域点坐标的顺序列出距离,并使用ui配置中定义的单位系统 + distances: 10,15,12,11 + # 可选:对象被视为在区域内所需的连续帧数(默认值:如下所示)。 + inertia: 3 + # 可选:对象必须在区域内停留的秒数才被视为在区域内(默认值:如下所示) + loitering_time: 0 + # 可选:可以触发此区域的对象列表(默认值:所有被跟踪的对象) + objects: + - person # 人 + # 可选:区域级别的对象过滤器。 + # 注意:全局和摄像头过滤器在上游应用。 + filters: + person: # 人 + min_area: 5000 + max_area: 100000 + threshold: 0.7 + + # 可选:通过MQTT发布的jpg快照配置 + mqtt: + # 可选:启用通过MQTT发布摄像头快照(默认值:如下所示) + # 注意:仅适用于通过'frigate///snapshot'发布图像数据到MQTT。 + # 所有其他消息仍将被发布。 + enabled: True + # 可选:在快照上打印时间戳(默认值:如下所示) + timestamp: True + # 可选:在快照上绘制边界框(默认值:如下所示) + bounding_box: True + # 可选:裁剪快照(默认值:如下所示) + crop: True + # 可选:调整快照的高度(默认值:如下所示) + height: 270 + # 可选:jpeg编码质量(默认值:如下所示) + quality: 70 + # 可选:限制MQTT消息仅发送进入所列区域的对象(默认值:无必需区域) + required_zones: [] + + # 可选:摄像头在GUI中的处理配置 + ui: + # 可选:调整摄像头在UI中的排序。数字越大显示越靠后(默认值:如下所示) + # 默认情况下摄像头按字母顺序排序。 + order: 0 + # 可选:是否在Frigate UI中显示该摄像头(默认值:如下所示) + dashboard: True + + # 可选:连接到ONVIF摄像头 + # 以启用PTZ控制功能 + onvif: + # 必需:要连接的摄像头主机 + # 注意:默认使用HTTP;如果指定scheme也支持HTTPS,例如:"https://0.0.0.0" + host: 0.0.0.0 + # 可选:设备的ONVIF端口(默认值:如下所示) + port: 8000 + # 可选:登录用户名 + # 注意:某些设备需要管理员权限才能访问ONVIF + user: admin + # 可选:登录密码 + password: admin + # 可选:跳过ONVIF服务器的TLS验证(默认值:如下所示) + tls_insecure: False + # 可选:忽略认证过程中摄像头与服务器的时间同步差异 + # 建议在两端都使用NTP,由于存在安全风险,只应在"安全"环境中将此设置为True + ignore_time_mismatch: False + # 可选:PTZ摄像头对象自动跟踪功能。通过自动移动PTZ摄像头, + # 将移动对象保持在画面中心。 + autotracking: + # 可选:启用/禁用对象自动跟踪(默认值:如下所示) + enabled: False + # 可选:启动时校准摄像头(默认值:如下所示) + # 校准会逐步移动PTZ并测量移动所需时间。 + # 结果用于帮助估计摄像头移动后跟踪对象的位置。 + # Frigate会在校准后自动更新配置文件, + # 为摄像头添加"movement_weights"条目。之后应将calibrate_on_startup设为False。 + calibrate_on_startup: False + # 可选:自动跟踪期间对对象进行缩放的模式(默认值:如下所示) + # 可用选项有:disabled(禁用)、absolute(绝对)和relative(相对) + # disabled - 不对自动跟踪的对象进行缩放,仅使用平移/倾斜 + # absolute - 使用绝对缩放(大多数PTZ摄像头支持) + # relative - 使用相对缩放(并非所有PTZ都支持,但可以实现同步平移/倾斜/缩放运动) + zooming: disabled + # 可选:改变自动跟踪对象缩放行为的数值(默认值:如下所示) + # 较低的值会在跟踪对象周围保留更多场景。 + # 较高的值会更多地放大跟踪对象,但Frigate可能会更快失去跟踪。 + # 该值应在0.1到0.75之间 + zoom_factor: 0.3 + # 可选:从labelmap.txt中要跟踪的对象列表(默认值:如下所示) + track: + - person # 人 + # 必需:当对象进入任何列出的区域时开始自动跟踪 + required_zones: + - zone_name + # 必需:跟踪结束后返回的ONVIF预设名称(默认值:如下所示) + return_preset: home + # 可选:返回预设前的延迟秒数(默认值:如下所示) + timeout: 10 + # 可选:摄像头校准自动生成的值。请勿手动修改(默认值:如下所示) + movement_weights: [] + + # 可选:鸟瞰图中摄像头的排序配置 + birdseye: + # 可选:调整鸟瞰图中摄像头的排序。数字越大显示越靠后(默认值:如下所示) + # 默认情况下摄像头按字母顺序排序。 + order: 0 + + # 可选:AI生成的跟踪对象描述配置 + genai: + # 可选:启用AI描述生成(默认值:如下所示) + enabled: False + # 可选:使用对象快照而非缩略图进行描述生成(默认值:如下所示) + use_snapshot: False + # 可选:生成描述的默认提示。可以使用替换变量 + # 如"label"、"sub_label"、"camera"来使其更加动态(默认值:如下所示) + prompt: "请分析以下监控摄像头画面中的'{label}'元素,尽可能详细描述其动作、行为和潜在意图,同时避免描述背景环境。" + # 可选:自定义描述结果的对象特定提示 + # 格式:{label}: {prompt} + object_prompts: + person: "分析画面中人物的行为特征,包括动作方向、停留时间和可能的意图,但不要描述周围环境。" + # 可选:要生成描述的对象(默认值:所有被跟踪的对象) + objects: + - person # 人 + - cat # 猫 + # 可选:限制描述生成仅针对进入所列区域的对象(默认值:无限制,所有区域都适用) + required_zones: [] + # 可选:触发将跟踪对象的帧发送给生成式AI的条件(默认值:如下所示) + send_triggers: + # 当对象不再被跟踪时 + tracked_object_end: True + # 可选:在收到X次重要更新后(默认值:如下所示) + after_significant_updates: None + # 可选:保存发送给生成式AI的缩略图以供审查/调试(默认值:如下所示) + debug_save_thumbnails: False + +# 可选:UI配置 +ui: + # 可选:设置UI中使用的时区(默认值:使用浏览器本地时间) + # timezone: America/Denver + # 可选:设置使用的时间格式 + # 选项有:browser(浏览器默认)、12hour(12小时制)或24hour(24小时制)(默认值:如下所示) + time_format: browser + # 可选:设置指定长度的日期样式 + # 选项有:full(完整)、long(长)、medium(中)、short(短) + # 示例: + # short: 2/11/23 + # medium: Feb 11, 2023 + # full: Saturday, February 11, 2023 + # (默认值:如下所示) + date_style: short + # 可选:设置指定长度的时间样式 + # 选项有:full(完整)、long(长)、medium(中)、short(短) + # 示例: + # short: 8:14 PM + # medium: 8:15:22 PM + # full: 8:15:22 PM Mountain Standard Time + # (默认值:如下所示) + time_style: medium + # 可选:手动覆盖日期/时间样式,使用strftime格式 + # https://www.gnu.org/software/libc/manual/html_node/Formatting-Calendar-Time.html + # 可能的值如上所示(默认值:未设置) + strftime_fmt: "%Y/%m/%d %H:%M" + # 可选:设置单位系统为"imperial"(英制)或"metric"(公制)(默认值:metric) + # 用于UI和MQTT主题 + unit_system: metric + +# 可选:遥测配置 +telemetry: + # 可选:用于带宽统计监控的启用网络接口(默认值:空列表,让nethogs搜索所有接口) + network_interfaces: + - eth + - enp + - eno + - ens + - wl + - lo + # 可选:配置系统统计 + stats: + # 可选:启用AMD GPU统计(默认值:如下所示) + amd_gpu_stats: True + # 可选:启用Intel GPU统计(默认值:如下所示) + intel_gpu_stats: True + # 可选:将GPU视为SR-IOV以修复GPU统计(默认值:如下所示) + sriov: False + # 可选:启用摄像头ffmpeg进程、go2rtc和对象检测器的网络带宽统计监控(默认值:如下所示) + # 注意:容器必须具有特权或启用cap_net_admin、cap_net_raw能力 + network_bandwidth: False + # 可选:启用最新版本检查(默认值:如下所示) + # 注意:如果使用Home Assistant集成,禁用此功能将阻止它报告新版本 + version_check: True + +# 可选:摄像头组配置(默认值:未设置任何组) +# 注意:建议使用UI来设置摄像头组 +camera_groups: + # 必需:摄像头组名称,目前仅能使用英文数字与下划线 + front: + # 必需:组中的摄像头列表 + cameras: + - front_cam # 前摄像头 + - side_cam # 侧摄像头 + - front_doorbell_cam # 前门铃摄像头 + # 必需:组使用的图标 + icon: LuCar + # 必需:该组的索引 + order: 0 +``` \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/restream.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/restream.md new file mode 100644 index 000000000..78a11a125 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/restream.md @@ -0,0 +1,167 @@ +--- +id: restream +title: 重流功能 +--- + +## RTSP重流 + +Frigate可以将您的视频流重新以RTSP协议流式传输,供其他应用程序(如Home Assistant)使用,地址为`rtsp://:8554/`。必须开放8554端口。[这样您就可以同时使用一个视频流进行Frigate检测和Home Assistant实时查看,而无需与摄像头建立两个独立连接](#reduce-connections-to-camera)。视频流直接从原始视频流复制,避免重新编码。此流不包含Frigate的任何标注。 + +Frigate使用[go2rtc](https://github.com/AlexxIT/go2rtc/tree/v1.9.9)提供重流和MSE/WebRTC功能。go2rtc配置位于配置文件的`go2rtc`部分,更多高级配置和功能请参阅[go2rtc文档](https://github.com/AlexxIT/go2rtc/tree/v1.9.9#configuration)。 + +:::note + +您可以通过`/api/go2rtc/streams`访问go2rtc流信息,这对调试很有帮助,也能提供有关摄像头流的有用信息。 + +::: + +### 鸟瞰图重流 + +鸟瞰图RTSP重流可通过`rtsp://:8554/birdseye`访问。启用鸟瞰图重流将使鸟瞰图24/7运行,这可能会略微增加CPU使用率。 + +```yaml +birdseye: + restream: True +``` + +### 使用认证保护重流 + +go2rtc重流可以通过基于RTSP的用户名/密码认证进行保护。例如: + +```yaml +go2rtc: + rtsp: + username: "admin" + password: "pass" + streams: ... +``` + +**注意:**这不适用于本地主机请求,当使用重流作为Frigate摄像头源时无需提供凭据。 + +## 减少摄像头连接数 + +某些摄像头仅支持一个活动连接,或者您可能只想与摄像头保持单一连接。RTSP重流使这成为可能。 + +### 单流配置 + +与摄像头建立一个连接。一个用于重流,`detect`和`record`连接到重流。 + +```yaml +go2rtc: + streams: + name_your_rtsp_cam: # <- RTSP流 + - rtsp://192.168.1.5:554/live0 # <- 支持视频和AAC音频的流 + - "ffmpeg:name_your_rtsp_cam#audio=opus" # <- 将音频转码为缺失编解码器(通常是opus)的流副本 + name_your_http_cam: # <- 其他流 + - http://192.168.50.155/flv?port=1935&app=bcs&stream=channel0_main.bcs&user=user&password=password # <- 支持视频和AAC音频的流 + - "ffmpeg:name_your_http_cam#audio=opus" # <- 将音频转码为缺失编解码器(通常是opus)的流副本 + +cameras: + name_your_rtsp_cam: + ffmpeg: + output_args: + record: preset-record-generic-audio-copy + inputs: + - path: rtsp://127.0.0.1:8554/name_your_rtsp_cam # <--- 这里的名称必须与重流中的摄像头名称匹配 + input_args: preset-rtsp-restream + roles: + - record + - detect + - audio # <- 仅在启用音频检测时需要 + name_your_http_cam: + ffmpeg: + output_args: + record: preset-record-generic-audio-copy + inputs: + - path: rtsp://127.0.0.1:8554/name_your_http_cam # <--- 这里的名称必须与重流中的摄像头名称匹配 + input_args: preset-rtsp-restream + roles: + - record + - detect + - audio # <- 仅在启用音频检测时需要 +``` + +### 子流配置 + +与摄像头建立两个连接。一个用于子流,一个用于重流,`record`连接到重流。 + +```yaml +go2rtc: + streams: + name_your_rtsp_cam: + - rtsp://192.168.1.5:554/live0 # <- 支持视频和AAC音频的流。仅适用于RTSP流,HTTP必须使用ffmpeg + - "ffmpeg:name_your_rtsp_cam#audio=opus" # <- 将音频转码为opus的流副本 + name_your_rtsp_cam_sub: + - rtsp://192.168.1.5:554/substream # <- 支持视频和AAC音频的流。仅适用于RTSP流,HTTP必须使用ffmpeg + - "ffmpeg:name_your_rtsp_cam_sub#audio=opus" # <- 将音频转码为opus的流副本 + name_your_http_cam: + - http://192.168.50.155/flv?port=1935&app=bcs&stream=channel0_main.bcs&user=user&password=password # <- 支持视频和AAC音频的流。仅适用于RTSP流,HTTP必须使用ffmpeg + - "ffmpeg:name_your_http_cam#audio=opus" # <- 将音频转码为opus的流副本 + name_your_http_cam_sub: + - http://192.168.50.155/flv?port=1935&app=bcs&stream=channel0_ext.bcs&user=user&password=password # <- 支持视频和AAC音频的流。仅适用于RTSP流,HTTP必须使用ffmpeg + - "ffmpeg:name_your_http_cam_sub#audio=opus" # <- 将音频转码为opus的流副本 + +cameras: + name_your_rtsp_cam: + ffmpeg: + output_args: + record: preset-record-generic-audio-copy + inputs: + - path: rtsp://127.0.0.1:8554/name_your_rtsp_cam # <--- 这里的名称必须与重流中的摄像头名称匹配 + input_args: preset-rtsp-restream + roles: + - record + - path: rtsp://127.0.0.1:8554/name_your_rtsp_cam_sub # <--- 这里的名称必须与重流中的camera_sub名称匹配 + input_args: preset-rtsp-restream + roles: + - audio # <- 仅在启用音频检测时需要 + - detect + name_your_http_cam: + ffmpeg: + output_args: + record: preset-record-generic-audio-copy + inputs: + - path: rtsp://127.0.0.1:8554/name_your_http_cam # <--- 这里的名称必须与重流中的摄像头名称匹配 + input_args: preset-rtsp-restream + roles: + - record + - path: rtsp://127.0.0.1:8554/name_your_http_cam_sub # <--- 这里的名称必须与重流中的camera_sub名称匹配 + input_args: preset-rtsp-restream + roles: + - audio # <- 仅在启用音频检测时需要 + - detect +``` + +## 处理复杂密码 + +go2rtc期望配置中使用URL编码的密码,可以使用[urlencoder.org](https://urlencoder.org)进行编码。 + +例如: + +```yaml +go2rtc: + streams: + my_camera: rtsp://username:$@foo%@192.168.1.100 +``` + +编码后变为: + +```yaml +go2rtc: + streams: + my_camera: rtsp://username:$%40foo%25@192.168.1.100 +``` + +更多信息请参阅[此评论](https://github.com/AlexxIT/go2rtc/issues/1217#issuecomment-2242296489)。 + +## 高级重流配置 + +go2rtc中的[exec](https://github.com/AlexxIT/go2rtc/tree/v1.9.9#source-exec)源可用于自定义ffmpeg命令。示例如下: + +注意:输出需要使用两个大括号`{{output}}`传递 + +```yaml +go2rtc: + streams: + stream1: exec:ffmpeg -hide_banner -re -stream_loop -1 -i /media/BigBuckBunny.mp4 -c copy -rtsp_transport tcp -f rtsp {{output}} +``` \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/review.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/review.md new file mode 100644 index 000000000..ef1612fe6 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/review.md @@ -0,0 +1,75 @@ +--- +id: review +title: 视频回放 +--- + +Frigate用户界面中的"视频回放"页面用于快速查看摄像头拍摄到的历史感兴趣片段。**回放条目**在垂直时间轴上显示,并以预览网格形式呈现 - 这些是经过带宽优化的低帧率、低分辨率视频。将鼠标悬停或滑动预览会播放视频并将其标记为已查看。如果需要更深入的分析,可以点击/轻触预览,将显示全帧率、全分辨率的录像。 + +回放条目可按日期、对象类型和摄像头进行筛选。 + +### 回放条目 vs 追踪对象(原"事件") + +在Frigate 0.13及更早版本中,用户界面显示的是"事件"。一个事件等同于一个被追踪或检测到的对象。在Frigate 0.14及更高版本中,回放条目是一个时间段,其中可能有任意数量的追踪对象处于活动状态。 + +举例来说,假设有两个人从您家门前走过,其中一人牵着一条狗。与此同时,一辆汽车从他们身后的街道驶过。 + +在此场景下,Frigate 0.13及更早版本会在界面中显示4个"事件" - 每个人一个,狗一个,汽车一个。即使这些事件在时间上重叠,您也需要分别观看4段视频。 + +在0.14及更高版本中,所有这些活动都被打包成一个单独的回放条目,其开始和结束时间涵盖了所有这些活动。同一摄像头的回放条目不会重叠。一旦您观看了该摄像头的那段时间录像,它就会被标记为已查看。 + +## 警报与检测 + +Frigate捕获的每段视频对您的重要程度可能不同。进入您房产范围内的人员视频可能与在人行道上行走的人员具有不同的优先级。因此,Frigate 0.14将回放条目分类为**警报**和**检测**。默认情况下,所有人员和汽车对象都被视为警报。您可以通过为它们配置所需的区域来细化回放条目的分类。 + +## 限制警报的标签类型 + +默认情况下,只有当检测到人员或汽车时,回放条目才会被标记为警报。可以通过以下配置将其设置为包含任何对象或音频标签: + +```yaml +# 可在摄像头级别覆盖此设置 +review: + alerts: + labels: + - car + - cat + - dog + - person + - speech +``` + +## 限制检测的标签类型 + +默认情况下,所有不符合警报条件的检测都符合检测条件。但是,可以进一步过滤检测,使其仅包含某些标签或某些区域。 + +```yaml +# 可在摄像头级别覆盖此设置 +review: + detections: + labels: + - bark + - dog +``` + +## 从警报或检测中排除摄像头 + +要从警报或检测中排除特定摄像头,只需**在摄像头级别**为alerts或detections字段提供一个空列表。 + +例如,要从检测中排除摄像头**gatecamera**上的对象,请在配置中包含以下内容: + +```yaml +cameras: + gatecamera: + review: + detections: + labels: [] # <- labels提供一个空数组即可 +``` + +## 将回放条目限制在特定区域 + +默认情况下,如果在摄像头画面的任何位置检测到任何`review -> alerts -> labels`和`review -> detections -> labels`,就会创建一个回放条目。您可能需要配置回放条目,使其仅在对象进入感兴趣区域时才创建,[详见区域文档](./zones.md#restricting-alerts-and-detections-to-specific-zones) + +:::info + +由于区域不适用于音频,音频标签默认始终会被标记为检测。 + +::: \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/semantic_search.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/semantic_search.md new file mode 100644 index 000000000..bda0c2e9c --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/semantic_search.md @@ -0,0 +1,116 @@ +--- +id: semantic_search +title: 语义搜索 +--- + +Frigate中的语义搜索功能允许您通过图像本身、用户定义的文本描述或自动生成的描述来查找回顾项目中的跟踪对象。该功能通过为跟踪对象的图像和文本描述创建_嵌入向量_(数值向量表示)来实现。通过比较这些嵌入向量,Frigate评估它们的相似度以提供相关的搜索结果。 + +Frigate使用来自[Jina AI](https://huggingface.co/jinaai)的模型创建嵌入向量并保存到Frigate数据库中。所有处理都在本地运行。 + +语义搜索功能可通过Frigate网页中的 **浏览** 页面访问。 + +## 最低系统要求 + +语义搜索通过在本地系统上运行大型AI模型实现。树莓派等小型或性能不足的系统可能无法可靠运行或完全无法运行语义搜索。 + +使用语义搜索至少需要8GB内存。虽然GPU不是严格必需的,但相比仅使用CPU的系统,GPU能显著提升性能。 + +为获得最佳性能,建议使用16GB或更多内存和专用GPU。 + +## 配置 + +语义搜索默认禁用,必须在配置文件或UI设置页面中启用后才能使用。语义搜索是全局配置设置。 + +```yaml +semantic_search: + enabled: True + reindex: False +``` + +:::tip + +通过添加`reindex: True`到`semantic_search`配置中,或在UI的搜索设置页面切换开关并重启Frigate,可以从数据库中现有的跟踪对象重新创建嵌入向量索引。根据跟踪对象的数量,此过程可能需要较长时间,并可能在索引时使CPU达到最大负载。确保在再次重启Frigate前关闭UI中的开关或将配置改回`False`。 + +如果是首次启用语义搜索,请注意Frigate不会自动为较旧的跟踪对象创建索引。您需要启用`reindex`功能来完成此操作。 + +::: + +### Jina AI CLIP (版本1) + +[Jina的V1模型](https://huggingface.co/jinaai/jina-clip-v1)具有视觉模型,能够将图像和文本嵌入到相同的向量空间中,从而实现`图像->图像`和`文本->图像`的相似性搜索。Frigate使用此模型对跟踪对象进行编码,将缩略图图像存储在数据库中。当通过搜索框中的文本搜索跟踪对象时,Frigate将执行`文本->图像`相似性搜索。当在跟踪对象详情面板中点击"查找相似"时,Frigate将执行`图像->图像`相似性搜索以检索最匹配的缩略图。 + +V1文本模型用于嵌入跟踪对象描述并对其执行搜索。描述可以在浏览页面点击跟踪对象缩略图时创建、查看和修改。有关如何自动生成跟踪对象描述的更多信息,请参阅[生成式AI文档](/configuration/genai.md)。 + +通过设置`model_size`配置选项为`small`或`large`,可以选择不同权重的Jina模型版本: + +```yaml +semantic_search: + enabled: True + model: "jinav1" + model_size: small +``` + +- 配置`large`模型将使用完整的Jina模型,如果适用会自动在GPU上运行。 +- 配置`small`模型将使用量化版本的Jina模型,占用更少内存并在CPU上运行,嵌入质量差异可以忽略不计。 + +### Jina AI CLIP (版本2) + +Frigate也支持[Jina的V2模型](https://huggingface.co/jinaai/jina-clip-v2),该模型引入了多语言支持(89种语言)。相比之下,V1模型仅支持英语。 + +V2在文本-图像和文本-文本检索任务中仅比V1有3%的性能提升,这种改进不太可能带来明显的实际好处。此外,V2对RAM和GPU的要求显著提高,导致推理时间和内存使用增加。如果您计划使用V2,请确保系统有充足的内存和独立GPU。不建议在CPU上使用V2的`small`模型进行推理。 + +要使用V2模型,请更新配置中的`model`参数: + +```yaml +semantic_search: + enabled: True + model: "jinav2" + model_size: large +``` + +对于大多数用户,特别是英语母语者,V1模型仍然是推荐选择。 + +:::note + +在V1和V2之间切换需要重新创建嵌入向量索引。为此,在语义搜索配置中设置`reindex: True`并重启Frigate。V1和V2的嵌入向量不兼容,如果不重新索引将导致搜索结果不正确。 + +::: + +### GPU加速 + +CLIP模型以ONNX格式下载,当可用时,`large`模型可以使用GPU硬件加速。这取决于使用的Docker构建版本。 + +```yaml +semantic_search: + enabled: True + model_size: large +``` + +:::info + +如果使用了适合您GPU的正确构建版本并配置了`large`模型,GPU将被自动检测并使用。 + +**注意:** 对象检测和语义搜索是独立的功能。如果想在语义搜索中使用GPU,必须选择适合您GPU的Frigate Docker镜像。 + +- **AMD** + + - 在`-rocm` Frigate镜像中,ROCm将被自动检测并用于语义搜索。 + +- **Intel** + + - 在默认Frigate镜像中,OpenVINO将被自动检测并用于语义搜索。 + +- **Nvidia** + - 在`-tensorrt` Frigate镜像中,Nvidia GPU将被自动检测并用于语义搜索。 + - 在`-tensorrt-jp(4/5)` Frigate镜像中,Jetson设备将被自动检测并用于语义搜索。 + +::: + +## 使用方法和最佳实践 + +1. 语义搜索与浏览页面上的其他过滤器结合使用效果最佳。结合传统过滤和语义搜索可获得最佳结果。 +2. 当搜索场景中的特定对象时使用缩略图搜索类型。当尝试辨别对象意图时使用描述搜索类型。 +3. 由于Frigate使用的AI模型训练方式,在多模态(缩略图和描述)搜索中,匹配描述的结果通常会先出现,即使缩略图嵌入可能是更好的匹配。尝试调整"搜索类型"设置以帮助找到所需内容。请注意,如果仅为特定对象或区域生成描述,可能导致搜索结果优先显示有描述的对象,即使没有描述的对象更相关。 +4. 使搜索语言和语气与您要查找的内容紧密匹配。如果使用缩略图搜索,将查询短语作为图像标题。搜索"红色汽车"可能不如"阳光明媚的住宅区街道上行驶的红色轿车"效果好。 +5. 缩略图的语义搜索在匹配占据大部分画面的大主体时效果更好。"猫"等小物体往往效果不佳。 +6. 多尝试!找到一个想测试的跟踪对象,开始输入关键词和短语,看看什么对您有效。 \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/snapshots.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/snapshots.md new file mode 100644 index 000000000..e51ed1a89 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/snapshots.md @@ -0,0 +1,12 @@ +--- +id: snapshots +title: 快照功能 +--- + +Frigate可以为每个检测到的对象保存快照图片到`/media/frigate/clips`目录,文件命名为`<摄像头名称>-.jpg`格式。这些快照也可以通过[API接口](../integrations/api/event-snapshot-events-event-id-snapshot-jpg-get.api.mdx)访问。 + +对于启用了Frigate+的用户,快照可以在Frigate+面板中查看,方便快速提交到Frigate+服务。 + +如果只想保存进入特定区域的对象的快照,请参阅[区域文档](./zones.md#restricting-snapshots-to-specific-zones)中的相关说明。 + +通过MQTT发送的快照配置可以在[配置文件](https://docs.frigate.video/configuration/)中的`cameras -> your_camera -> mqtt`部分设置。 \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/stationary_objects.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/stationary_objects.md new file mode 100644 index 000000000..dae8b82a1 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/stationary_objects.md @@ -0,0 +1,54 @@ +--- +id: stationary_objects +title: 静止对象检测 +--- + +## 什么是静止对象? + +当被追踪的对象在连续多帧中保持几乎相同的位置时,Frigate会将其判定为静止对象。这个判定阈值可在配置文件的`detect -> stationary -> threshold`中设置,默认值为帧率的10倍(即10秒)。一旦对象被判定为静止,除非检测到其内部发生运动或位置变化,否则将保持静止状态。 + +## 静止对象检测的意义 + +对象被判定为静止后,Frigate将不再持续对其运行对象检测。这能有效降低资源消耗,避免对无运动变化的对象进行冗余检测。同时使系统具备上下文感知能力,例如可以[选择性保留录像片段](record.md#不同保留模式的含义),仅记录对象处于活动状态的时段。 + +需要注意的是,单纯的光线变化(如停放的车辆受光照变化)不会使静止对象重新变为活动状态。 + +## 参数调优 + +默认配置如下: + +```yaml +detect: + stationary: + interval: 50 # 检测间隔帧数 + threshold: 50 # 静止判定阈值 +``` + +- `interval`:设置对静止对象运行检测的频率。默认每50帧检测一次,确保对象仍然存在 +- `threshold`:对象需要保持静止的连续帧数才能被判定为静止 + +注意:无法通过调整`interval`完全禁用静止对象追踪。 + +## 技术实现原理 + +Frigate并非从一开始就支持静止对象追踪功能。让我们通过一个实际案例说明其必要性: + +假设需要记录所有进入车道的车辆: +1. 简单方案:仅在车道区域检测到运动时运行对象检测 + - 但无法确定车辆的行驶轨迹(左转/右转进入) + - 无法关联之前在路边停留的车辆 + - 当车道附近有人修剪草坪时,难以区分车辆和园丁的运动 + +2. 进阶方案:通过对象追踪赋予唯一ID + - 需要解决多目标交叉时的ID分配问题 + - 当被追踪车辆接近路边停放的车辆时: + - 车灯反射会导致误检测出多个车辆 + - 原有单一检测框突然变成多个检测框 + - 传统算法(如卡尔曼滤波)在这种情况下错误率较高 + +3. 静止对象追踪的优势: + - 预先标记路边停放车辆为静止对象 + - 新出现的车辆会被识别为独立目标 + - 大幅降低ID分配错误率(虽然仍不完美) + +当前系统最大的挑战是处理对象完全遮挡的情况(如一辆车完全挡住另一辆车)。这是未来版本需要改进的方向。 \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/tls.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/tls.md new file mode 100644 index 000000000..27ac8e697 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/tls.md @@ -0,0 +1,72 @@ +--- +id: tls +title: TLS安全传输 +--- + +# TLS安全传输 + +Frigate内置的NGINX服务器支持TLS证书。默认情况下,Frigate会生成自签名证书用于8971端口。本系统设计上兼容各类证书管理工具,方便用户自由选择。 + +## 应用场景 + +多数情况下Frigate运行在反向代理后方,由代理统一管理TLS证书。此时您可能需要: +- 在代理配置中允许自签名证书 +- 或直接禁用Frigate的TLS功能 + +但若Frigate运行在独立设备或直接暴露在公网时,建议配置有效证书。 + +## 禁用TLS + +在配置文件中添加以下内容即可禁用TLS: + +```yaml +tls: + enabled: False +``` + +## 证书配置 + +### 基本配置 +通过绑定挂载或Docker卷加载证书文件到指定路径: + +```yaml +frigate: + volumes: + - /证书目录路径:/etc/letsencrypt/live/frigate:ro +``` + +目录结构要求: +- 私钥文件必须命名为`privkey.pem` +- 证书文件必须命名为`fullchain.pem` + +### Certbot用户注意 +由于Certbot使用符号链接,需额外挂载archive目录: + +```yaml +frigate: + volumes: + - /etc/letsencrypt/live/frigate:/etc/letsencrypt/live/frigate:ro + - /etc/letsencrypt/archive/frigate:/etc/letsencrypt/archive/frigate:ro +``` + +## 证书自动更新 + +Frigate会每分钟比对证书指纹,当检测到变更时自动重载NGINX配置。使用有效证书时,建议将8971端口映射到443端口: + +:::warning +如果您在中国大陆地区,家用宽带运营商会屏蔽掉`80`和`443`等端口,这种情况建议换为其他端口,例如`1443` +::: + +```yaml +frigate: + ports: + - "443:8971" # <- 左边为宿主机端口,右边为容器端口。需要注意国内家用宽带无法使用443端口 +``` + +## ACME验证支持 + +Frigate支持托管ACME验证文件(HTTP验证方式),需将验证文件挂载到: + +``` +/etc/letsencrypt/www +``` diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/zones.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/zones.md new file mode 100644 index 000000000..d7f178faf --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/zones.md @@ -0,0 +1,176 @@ +--- +id: zones +title: 监控区 +--- + +监控区允许您定义画面中的特定区域,并为对象类型应用额外的过滤器,从而判断对象是否位于该区内。系统会根据对象边界框的底部中心点来评估是否进入监控区,边界框与区的重叠面积不影响判断。 + +例如,下图中的猫当前位于监控区1,但**不在**监控区2。 +![底部中心点判断](/img/bottom-center.jpg) + +监控区不能与摄像头同名。如需在多摄像头覆盖同一区域时使用相同监控区,可以为每个摄像头配置同名的区。 + +调试时,请启用摄像头调试视图中的"监控区"选项(设置 --> 调试),以便根据需要调整。当任何对象进入区时,区边界线会变粗。 + +创建监控区的步骤与[创建"运动遮罩"](masks.md)类似,只需在网页界面使用创建区的功能即可。 + +### 限定警报和检测到特定区 + +通常您可能希望仅当对象进入关注区域时才创建警报。这可以通过设置`required_zones`来实现。例如,仅当对象进入整个院子区时才创建警报,配置如下: + +```yaml +cameras: + 您的摄像头名称: + review: + alerts: + required_zones: + - entire_yard + zones: + entire_yard: + coordinates: ... +``` + +您可能还想限定检测仅在对象进入次要关注区时创建。例如,当对象进入院子内部区域时触发警报,但进入院子边缘时就创建检测记录: + +```yaml +cameras: + 您的摄像头名称: + review: + alerts: + required_zones: + - inner_yard + detections: + required_zones: + - edge_yard + zones: + edge_yard: + coordinates: ... + inner_yard: + coordinates: ... +``` + +### 限定快照到特定区 + +```yaml +cameras: + 您的摄像头名称: + snapshots: + required_zones: + - entire_yard + zones: + entire_yard: + coordinates: ... +``` + +### 限定区内的对象类型 + +有时需要限制区只对特定对象类型生效,以便更精细地控制警报、检测和快照的保存。以下示例将限制一个区只对人有效,另一个区只对车辆有效。 + +```yaml +cameras: + 您的摄像头名称: + zones: + entire_yard: + coordinates: ... (您希望检测人的区域) + objects: + - person + front_yard_street: + coordinates: ... (仅街道区域) + objects: + - car +``` + +只有车辆对象能触发`front_yard_street`区,只有人能触发`entire_yard`区。系统会追踪进入院子任何位置的人,以及进入街道区域的车辆。 + +### 区内滞留检测 + +当需要检测对象在区内异常滞留时,可以配置最小滞留时间阈值(单位:秒): + +```yaml +cameras: + 您的摄像头名称: + zones: + sidewalk: + loitering_time: 4 + objects: + - person +``` + +### 区进入延迟 + +为防止边界框判断误差导致误报,可以设置对象必须连续多帧位于区内才视为有效进入: + +```yaml +cameras: + 您的摄像头名称: + zones: + front_yard: + inertia: 3 + objects: + - person +``` + +对于需要快速响应的场景(如车辆驶入车道),可将延迟设为1: + +```yaml +cameras: + 您的摄像头名称: + zones: + driveway_entrance: + inertia: 1 + objects: + - car +``` + +### 速度估算 + +Frigate可以估算对象在区内的移动速度。此功能需要将区定义为4个点,并测量实际距离。最适合用于监测道路上车辆的速度。 + +![地面平面4点区](/img/ground-plane.jpg) + +速度估算需要对象被追踪足够多帧才能计算,因此区应远离对象进出位置。_区不应占据整个画面_。对象速度会在其位于区内时持续计算并存入数据库。 + +配置中需通过`distances`字段指定各点间的实际距离: + +```yaml +cameras: + 您的摄像头名称: + zones: + street: + coordinates: 0.033,0.306,0.324,0.138,0.439,0.185,0.042,0.428 + distances: 10,12,11,13.5 # 单位米或英尺 +``` + +距离单位由`ui`配置决定: + +```yaml +ui: + # 可选"metric"(公制)或"imperial"(英制),默认为公制 + unit_system: metric +``` + +估算速度会显示在调试视图和MQTT事件中,详见[MQTT文档](../integrations/mqtt.md#frigateevents)。 + +#### 最佳实践与注意事项 + +- 最适合直线道路场景,转弯会导致估算不准 +- 确保对象底部中心点直线穿过区且不被遮挡 +- 可适当降低`inertia`值提高响应速度 +- 实际测量越精确,估算越准确(但需注意透视失真影响) +- 离开区后速度数据可能不准确 +- **仅为估算值**,不适用于执法用途 + +### 速度阈值 + +可设置区的最小速度要求,只有达到该速度的对象才会被视为进入区: + +```yaml +cameras: + 您的摄像头名称: + zones: + sidewalk: + coordinates: ... + distances: ... + inertia: 1 + speed_threshold: 20 # 单位取决于unit_system设置 +``` \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/development/contributing-boards.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/development/contributing-boards.md new file mode 100644 index 000000000..ce7118fb1 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/development/contributing-boards.md @@ -0,0 +1,93 @@ +--- +id: contributing-boards +title: 社区支持的开发板 +--- + +## 关于社区支持的开发板 + +有许多单板计算机(SBC)拥有热情的社区支持,比如Jetson Nano。这些SBC通常具有专用硬件,可以大大加速Frigate的AI和视频处理工作负载,但这些硬件需要非常特定的框架来进行接口对接。 + +这意味着对Frigate的维护者来说,要支持这些不同的开发板将非常困难,特别是考虑到相对较小的用户群。 + +社区支持开发板框架允许社区用户通过提供代码、维护和用户支持,成为某个SBC或其他检测器支持的代码所有者。 + +## 入门指南 + +1. 遵循[主要贡献文档](/development/contributing.md)中的步骤。 +2. 在`docker/`下创建新的构建类型。 +3. 确保构建按预期工作,所有特定于开发板的更改都应在开发板特定的docker文件中完成。 + +## 必需的结构 + +每个开发板都有不同的构建要求,运行在不同的架构上等,但是所有开发板都需要一组特定的文件。 + +### Bake File .hcl + +`board.hcl`文件允许社区开发板构建使用主构建作为缓存。这可以实现干净的基础和更快的构建时间。有关Bake文件中可用格式和选项的更多信息,[请参见官方Buildx Bake文档](https://docs.docker.com/build/bake/reference/)。 + +### 开发板Make文件 + +`board.mk`文件允许将自动化和可配置的Make目标包含在主Make文件中。以下是此文件的一般格式: + +```Makefile +BOARDS += board # 将`board`替换为开发板后缀,例如:rpi + +local-rpi: version + docker buildx bake --load --file=docker/board/board.hcl --set board.tags=frigate:latest-board bake-target # 将`board`替换为开发板后缀,例如:rpi。Bake目标是board.hcl文件中的目标,例如:board + +build-rpi: version + docker buildx bake --file=docker/board/board.hcl --set board.tags=$(IMAGE_REPO):${GITHUB_REF_NAME}-$(COMMIT_HASH)-board bake-target # 将`board`替换为开发板后缀,例如:rpi。Bake目标是board.hcl文件中的目标,例如:board + +push-rpi: build-rpi + docker buildx bake --push --file=docker/board/board.hcl --set board.tags=$(IMAGE_REPO):${GITHUB_REF_NAME}-$(COMMIT_HASH)-board bake-target # 将`board`替换为开发板后缀,例如:rpi。Bake目标是board.hcl文件中的目标,例如:board +``` + +### Dockerfile + +`Dockerfile`用于编排构建,这将根据开发板的不同而有很大差异,但某些部分是必需的。以下是Dockerfile的必需部分: + +```Dockerfile +# syntax=docker/dockerfile:1.4 + +# https://askubuntu.com/questions/972516/debian-frontend-environment-variable +ARG DEBIAN_FRONTEND=noninteractive + +# 所有特定于开发板的工作都应以`deps`为基础 +FROM deps AS board-deps + +# 执行特定于开发板的操作 + +# 设置工作目录 +WORKDIR /opt/frigate/ + +# 从主Frigate构建中复制基础文件 +COPY --from=rootfs / / +``` + +## 其他必需的更改 + +### CI/CD + +每个开发板的镜像将在每个Frigate发布时构建,这在`.github/workflows/ci.yml`文件中完成。需要在此处添加开发板构建工作流。 + +```yml +- name: Build and push board build + uses: docker/bake-action@v3 + with: + push: true + targets: board # 这是board.hcl文件中的目标 + files: docker/board/board.hcl # 应该用实际的开发板类型更新 + # 标签也应该用实际的开发板类型更新 + # 社区开发板构建永远不应推送到缓存,但可以从缓存中拉取 + set: | + board.tags=ghcr.io/${{ steps.lowercaseRepo.outputs.lowercase }}:${{ github.ref_name }}-${{ env.SHORT_SHA }}-board + *.cache-from=type=gha +``` + +### 代码所有者文件 + +应更新`CODEOWNERS`文件以包含`docker/board`以及作为此开发板代码所有者的每个用户的`@user`。 + +## 文档 + +至少应更新`installation`、`object_detectors`、`hardware_acceleration`和`ffmpeg-presets`文档(如适用)以反映此社区开发板的配置。 \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/development/contributing.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/development/contributing.md new file mode 100644 index 000000000..6f27a4f95 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/development/contributing.md @@ -0,0 +1,244 @@ +--- +id: contributing +title: 向主代码库贡献代码 +--- + +## 获取源代码 + +### 核心、Web界面、Docker和文档 + +这个仓库包含了主要的Frigate应用程序及其所有依赖项。 + +将[blakeblackshear/frigate](https://github.com/blakeblackshear/frigate.git)复制(fork)到你自己的GitHub账户,然后将复制的仓库克隆到你的本地机器。 + +从这里,按照以下指南进行操作: + +- [核心](#core) +- [Web界面](#web-interface) +- [文档](#documentation) + +### Frigate Home Assistant插件 + +这个仓库包含了Home Assistant插件,用于Home Assistant OS和兼容的安装。它允许你通过Home Assistant的Supervisor标签页运行Frigate。 + +将[blakeblackshear/frigate-hass-addons](https://github.com/blakeblackshear/frigate-hass-addons)复制到你自己的GitHub账户,然后将复制的仓库克隆到你的本地机器。 + +### Frigate Home Assistant集成 + +这个仓库包含了自定义集成,可以让你的Home Assistant安装自动为Frigate实例创建实体,无论你是将Frigate作为独立的Docker容器运行还是作为[Home Assistant插件](#frigate-home-assistant-add-on)运行。 + +将[blakeblackshear/frigate-hass-integration](https://github.com/blakeblackshear/frigate-hass-integration)复制到你自己的GitHub账户,然后将复制的仓库克隆到你的本地机器。 + +## 核心 + +### 前提条件 + +- GNU make +- Docker (包括buildx插件) +- 额外的检测器(Coral、OpenVINO等)是可选的,但建议用于模拟真实世界的性能。 + +:::note + +一个Coral设备一次只能被一个进程使用,因此如果将Coral用于开发目的,建议使用额外的Coral设备。 + +::: + +### 设置 + +#### 1. 使用Visual Studio Code打开仓库 + +打开后,你应该会收到在远程容器中打开项目的提示。这将在基础Frigate容器之上构建一个安装了所有开发依赖项的容器。这确保了每个人都使用一致的开发环境,而无需在主机上安装任何依赖项。 + +#### 2. 修改本地配置文件以进行测试 + +将文件放在仓库根目录的`config/config.yml`中。 + +这里是一个示例,但请根据你的需求修改: + +```yaml +mqtt: + host: mqtt + +cameras: + test: + ffmpeg: + inputs: + - path: /media/frigate/car-stopping.mp4 + input_args: -re -stream_loop -1 -fflags +genpts + roles: + - detect +``` + +这些输入参数告诉ffmpeg以无限循环方式读取mp4文件。你可以在这里使用任何有效的ffmpeg输入。 + +#### 3. 收集一些mp4文件用于测试 + +在仓库根目录创建一个`debug`文件夹并放入这些文件。如果你启用了录制功能,录制的文件也会保存在这里。更新上面步骤2中的配置以指向正确的文件。你可以查看仓库中的`docker-compose.yml`文件来了解卷的映射方式。 + +#### 4. 从命令行运行Frigate + +VS Code会为你启动Docker Compose文件并打开一个连接到`frigate-dev`的终端窗口。 + +- 根据你的开发硬件,你可能需要修改项目根目录中的`docker-compose.yml`以传递USB Coral或GPU进行硬件加速。 +- 运行`python3 -m frigate`启动后端。 +- 在VS Code的另一个终端窗口中,切换到`web`目录并运行`npm install && npm run dev`启动前端。 + +#### 5. 清理 + +关闭VS Code后,可能仍有容器在运行。要关闭所有内容,只需运行`docker-compose down -v`来清理所有容器。 + +### 测试 + +#### FFMPEG硬件加速 + +以下命令在容器内部使用,以确保硬件加速正常工作。 + +**树莓派(64位)** + +这应该在top中显示低于50%的CPU使用率,不使用`-c:v h264_v4l2m2m`时约为80%的CPU使用率。 + +```shell +ffmpeg -c:v h264_v4l2m2m -re -stream_loop -1 -i https://streams.videolan.org/ffmpeg/incoming/720p60.mp4 -f rawvideo -pix_fmt yuv420p pipe: > /dev/null +``` + +**NVIDIA GPU** + +```shell +ffmpeg -c:v h264_cuvid -re -stream_loop -1 -i https://streams.videolan.org/ffmpeg/incoming/720p60.mp4 -f rawvideo -pix_fmt yuv420p pipe: > /dev/null +``` + +**NVIDIA Jetson** + +```shell +ffmpeg -c:v h264_nvmpi -re -stream_loop -1 -i https://streams.videolan.org/ffmpeg/incoming/720p60.mp4 -f rawvideo -pix_fmt yuv420p pipe: > /dev/null +``` + +**VAAPI** + +```shell +ffmpeg -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format yuv420p -re -stream_loop -1 -i https://streams.videolan.org/ffmpeg/incoming/720p60.mp4 -f rawvideo -pix_fmt yuv420p pipe: > /dev/null +``` + +**QSV** + +```shell +ffmpeg -c:v h264_qsv -re -stream_loop -1 -i https://streams.videolan.org/ffmpeg/incoming/720p60.mp4 -f rawvideo -pix_fmt yuv420p pipe: > /dev/null +``` + +## Web界面 + +### 前提条件 + +- 所有[核心](#core)前提条件 _或_ 另一个本地可用的运行中的Frigate实例 +- Node.js 20 + +### 进行更改 + +#### 1. 设置Frigate实例 + +Web UI需要一个Frigate实例来交互以获取所有数据。你可以在本地运行一个实例(推荐)或连接到网络上可访问的独立实例。 + +要运行本地实例,请按照[核心](#core)开发说明进行操作。 + +如果你不会对Frigate HTTP API进行任何更改,可以将web开发服务器连接到网络上的任何Frigate实例。跳过这一步,直接转到[3a](#3a-针对非本地实例运行开发服务器)。 + +#### 2. 安装依赖项 + +```console +cd web && npm install +``` + +#### 3. 运行开发服务器 + +```console +cd web && npm run dev +``` + +##### 3a. 针对非本地实例运行开发服务器 + +要针对非本地实例运行开发服务器,你需要将`vite.config.ts`中的`localhost`值替换为非本地后端服务器的IP地址。 + +#### 4. 进行更改 + +Web UI使用[Vite](https://vitejs.dev/)、[Preact](https://preactjs.com)和[Tailwind CSS](https://tailwindcss.com)构建。 + +轻量级指南和建议: + +- 避免添加更多依赖项。web UI旨在轻量化和快速加载。 +- 不要进行大规模的改动。对于任何大型或架构性的想法,请[在GitHub上开启讨论](https://github.com/blakeblackshear/frigate/discussions/new)。 +- 确保`lint`通过。此命令将确保基本符合样式规范,应用尽可能多的自动修复,包括Prettier格式化。 + +```console +npm run lint +``` + +- 添加单元测试并确保它们通过。尽可能地,你应该在进行更改时努力_增加_测试覆盖率。这将有助于确保功能在未来不会意外损坏。 +- 如果在运行测试时遇到"TypeError: Cannot read properties of undefined (reading 'context')"之类的错误消息,这可能是由于vitest中的这些问题(https://github.com/vitest-dev/vitest/issues/1910, https://github.com/vitest-dev/vitest/issues/1652),但我还没能解决它们。 + +```console +npm run test +``` + +- 在不同浏览器中测试。Firefox、Chrome和Safari都有使它们成为独特目标的不同特性。 + +## 文档 + +### 前提条件 + +- Node.js 20 + +### 进行更改 + +#### 1. 安装 + +```console +cd docs && npm install +``` + +#### 2. 本地开发 + +```console +npm run start +``` + +此命令启动本地开发服务器并打开浏览器窗口。大多数更改无需重启服务器即可实时反映。 + +文档使用[Docusaurus v3](https://docusaurus.io)构建。请参阅Docusaurus文档以获取有关如何修改Frigate文档的更多信息。 + +#### 3. 构建(可选) + +```console +npm run build +``` + +此命令将静态内容生成到`build`目录中,可以使用任何静态内容托管服务来提供服务。 + +## 官方构建 + +设置buildx进行多架构构建 + +``` +docker buildx stop builder && docker buildx rm builder # <---- 如果已存在 +docker run --privileged --rm tonistiigi/binfmt --install all +docker buildx create --name builder --driver docker-container --driver-opt network=host --use +docker buildx inspect builder --bootstrap +make push +``` + +## 其他 + +### Nginx + +当从开发容器内测试nginx配置更改时,可以使用以下命令复制并重新加载配置进行测试,而无需重新构建容器: + +```console +sudo cp docker/main/rootfs/usr/local/nginx/conf/* /usr/local/nginx/conf/ && sudo /usr/local/nginx/sbin/nginx -s reload +``` + +## 贡献Web UI的翻译 + +Frigate使用[Weblate](https://weblate.org)来管理Web UI的翻译。要贡献翻译,请在Weblate注册一个账户并导航到Frigate NVR项目: + +https://hosted.weblate.org/projects/frigate-nvr/ + +在翻译时,保持现有的键结构,只翻译值。确保你的翻译保持适当的格式,包括任何占位符变量(如`{{example}}`)。 \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/frigate/camera_setup.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/frigate/camera_setup.md new file mode 100644 index 000000000..458e98b35 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/frigate/camera_setup.md @@ -0,0 +1,39 @@ +--- +id: camera_setup +title: 摄像头设置 +--- + +配置输出H.264视频和AAC音频的摄像头可提供与Frigate及Home Assistant所有功能的最佳兼容性。H.265虽有更高压缩率,但兼容性较差。仅Chrome 108+、Safari和Edge浏览器支持播放H.265,且仅兼容有限的H.265配置方案。建议直接在摄像头中配置您希望在Frigate中使用的分辨率和帧率。在Frigate内降低帧率会浪费CPU资源解码被丢弃的冗余帧。您需要围绕以下三个目标调整视频流配置: + +- **检测**:这是Frigate唯一会解码处理的视频流,也是生成快照的来源。检测分辨率应根据目标物体大小进行调整(详见[选择检测分辨率](#选择检测分辨率))。推荐帧率为5fps,但对高速移动物体可能需要更高(多数用户建议最大不超过10fps)。更高的分辨率和帧率会导致服务器CPU负载升高。 + +- **录像**:此视频流应设置为需要存储的参考分辨率,通常使用摄像头支持的最高分辨率。建议在摄像头固件中将此流帧率设为15fps。 + +- **实时观看**:此视频流将直接转播至Home Assistant的流媒体组件。设置过高分辨率会在观看时占用大量带宽,低速网络连接下可能无法稳定加载。 + +### 选择检测分辨率 + +理想的检测分辨率应使目标物体完全适配Frigate使用的模型尺寸(320x320)。Frigate不会将整个画面传递给物体检测模块,而是从全帧中裁剪运动区域进行分析。若检测区域大于320x320,Frigate必须在检测前进行缩放。更高分辨率不会提升检测精度,因为额外细节会在缩放过程中丢失。下方参考图展示了320x320区域在常见分辨率中的实际占比。 + +当目标物体在画面中非常小时,更高分辨率**确实**能提升性能。 + +![分辨率对照图](/img/resolutions-min.jpg) + +### 摄像头配置示例 + +以大华/Loryta 5442摄像头为例,推荐配置如下: + +**主码流(录像与RTSP)** + +- 编码模式:H.264 +- 分辨率:2688*1520 +- 帧率:15fps +- 关键帧间隔:30(也可设为15以优化流媒体性能,详见[摄像头设置建议](/configuration/live#摄像头设置建议)) + +**子码流(检测)** + +- 启用:子码流2 +- 编码模式:H.264 +- 分辨率:1280*720 +- 帧率:5fps +- 关键帧间隔:5 \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/frigate/glossary.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/frigate/glossary.md new file mode 100644 index 000000000..8fb8d339e --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/frigate/glossary.md @@ -0,0 +1,57 @@ +--- +id: glossary +title: 术语表 +--- + +本术语表解释Frigate文档中的常用术语。 + +## 边界框(Bounding Box) + +物体检测模型返回的框选标记,用于标注画面中的物体。在调试视图中有多种颜色区分物体类型。 + +### 边界框颜色规则 +- 启动时为不同物体类型分配不同颜色 +- 深蓝色细线表示当前帧未检测到该物体 +- 灰色细线表示物体被判定为静止状态 +- 粗线表示该物体是自动追踪目标(启用时) + +## 误报(False Positive) + +物体类型的错误识别。例如将狗识别为人、椅子识别为狗等。注意:在需忽略区域检测到有效物体不属于误报。 + +## 遮罩(Mask) + +Frigate包含两种遮罩类型。[详见遮罩文档](/configuration/masks) + +### 动态遮罩(Motion Mask) +阻止指定区域的[动态变化](#motion)触发物体检测,但不会阻止因邻近区域动态变化而连带检测该区域物体。典型应用场景:摄像机时间戳、天空、树梢等。 + +### 物体遮罩(Object Mask) +丢弃底部中心点(无论重叠区域)位于遮罩区的所有边界框,强制将其判定为[误报](#false-positive)并忽略。 + +## 最低分(Min Score) +物体追踪过程中可接受的最低检测置信度,低于此分值的检测将被视为误报 + +## 动态(Motion) +当前帧与先前帧的像素差异。当大量相邻像素发生变化时,会在调试视图中以红色动态框标记。[详见动态检测文档](/configuration/motion_detection) + +## 检测区域(Region) +送入物体检测的画面分区,触发条件包括:动态变化、活跃物体或静止物体偶发检测。调试视图中以绿色框显示。 + +## 待审条目(Review Item) +包含任意数量有效事件/被追踪物体的时间段。[详见审阅文档](/configuration/review) + +## 快照分(Snapshot Score) +快照中显示的分数代表该物体在拍摄瞬间的置信度 + +## 判定阈值(Threshold) +物体必须达到的中位置信度,方可被判定为有效目标 + +## 峰值分(Top Score) +物体在整个追踪周期内的最高中位置信度 + +## 被追踪物体(旧称"事件") +从物体进入画面到离开画面的完整周期(含静止时段)。当满足[判定阈值](#threshold)且符合快照/录像保存条件时将被存储 + +## 监控区域(Zone) +用户定义的关注区域,可用于通知触发和限制[事件](#event)生成范围。[详见区域文档](/configuration/zones) \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/frigate/hardware.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/frigate/hardware.md new file mode 100644 index 000000000..8795bf79b --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/frigate/hardware.md @@ -0,0 +1,206 @@ +--- +id: hardware +title: 推荐硬件 +--- + +## 摄像头 + +能够输出H.264编码的视频和AAC音频的摄像头能最大限度兼容Frigate与Home Assistant的所有功能特性。如果摄像头支持多子码流配置就更好了,这样可分别为物体检测、实时监控和录像存储设置不同分辨率,避免转码带来的性能损耗。 + +建议使用支持RTSP流和ONVIF功能的摄像头,例如海康威视、TP-Link等。**不建议**选择萤石等**家用摄像头**,他们对于RTSP的支持并不完善;尤其是不要选择360、小米等不支持获取RTSP流的摄像头,它们无法接入到Frigate中。 + +同时应避免选择WiFi摄像头,其视频流稳定性较差,易导致连接中断或视频数据丢失。尤其是在有多路摄像头的情况下,传输稳定性会受到极大干扰,甚至会影响到你整个WiFi其他设备的使用。(国内相关讨论:https://www.v2ex.com/t/1126166) + +考虑到国内基本不会使用亚马逊来购买摄像头,并且推荐的摄像头并没有在国内发行或者为马甲型号,如果有必要,建议上京东购买。以下仅为官方文档中推荐的摄像头产品,适用于海外用户。 + +- Loryta(Dahua) IPC-T549M-ALED-S3 (推广链接) +- Loryta(Dahua) IPC-T54IR-AS (推广链接) +- Amcrest IP5M-T1179EW-AI-V3 (推广链接) + +## 服务器 + +考虑到家用环境,建议使用N100等低功耗CPU的主机,否则你的电费可能会比以往高很多。这些在淘宝或者闲鱼上都能够找到不错的选择。但需要注意关注一下是否有额外的M.2或者PCIe接口,因为可以选配Hailo8 或者 Google Coral 这种AI加速器,能够极大的提升检测效率,并且耗电量相比独立显卡要低很多。务必使用Linux系统,例如unRAID、TrueNAS、飞牛等专门适配NAS的操作系统;也可以直接安装常规的Linux发行版,例如Ubuntu、Debian等。 + +## 检测器 +检测器是专为高效运行物体识别推理而优化的硬件设备。使用推荐检测器可显著降低检测延迟,并大幅提升每秒检测次数。Frigate的设计理念正是基于检测器硬件实现超低推理延迟——将TensorFlow任务卸载到专用检测器上,其速度可提升一个数量级,同时能极大降低CPU负载。 + +:::info + +Frigate支持多种硬件平台的检测器方案: + +**通用硬件** + +- [Hailo](#hailo-8): Hailo8和Hailo8L AI加速模块有M.2接口版本及树莓派HAT扩展版本。 + - [支持多种模型](/configuration/object_detectors#配置) + - 最好使用 tiny/small 尺寸的模型 + +- [Google Coral EdgeTPU](#google-coral-tpu): Google Coral EdgeTPU 有USB/M.2两种版本 + - [主要支持 ssdlite 和 mobilenet 模型](/configuration/object_detectors#edge-tpu检测器) + +**AMD** + +- [ROCm](#amd-gpus): ROCm 能够在AMD显卡上运行,提供高效的检测功能 + - [支持一部分模型](/configuration/object_detectors#支持的模型-1) + - 最好运行在AMD独显上 + +**Intel** + +- [OpenVino](#openvino): OpenVino 可以运行在 Intel Arc独立显卡、Intel 核显以及Intel的CPU + - [支持大部分主流模型](/configuration/object_detectors#支持的模型) + - 推荐使用tiny/small/medium尺寸的模型 + +**Nvidia** + +- [TensortRT](#tensorrt---nvidia-gpu): TensorRT可以运行在Nvidia显卡和Jetson开发板上 + - [通过ONNX支持主流模型](/configuration/object_detectors#支持的模型-2) + - 可流畅运行包括large在内各尺寸模型 + +**Rockchip** + +- [RKNN](#rockchip-platform): 需搭载NPU的瑞芯微芯片 + - [支持少量模型](/configuration/object_detectors#支持的模型-5) + - 专为低功耗设备优化,适合tiny/small模型 + +::: + +### Hailo-8 + +Frigate可以使用Hailo-8或Hailo-8L AI加速器,包括集成了Hailo模块的树莓派5。Frigate会自动识别你的Hailo类型,并且能够在你没设置型号的情况下自动选择并选择模型。 + +**默认模型配置:** +- **Hailo-8L:** 默认模型为 **YOLOv6n**. +- **Hailo-8:** 默认模型为 **YOLOv6n**. + +在实际环境中,即使你有多路摄像头,Frigate也能够表现出一致的性能。与树莓派相比,在x86平台上,Frigate能够获得更高的帧率、吞吐量和更低的延迟。 + +| 模型名称 | Hailo‑8 推理时间 | Hailo‑8L 推理时间 | +| ---------------- | ---------------------- | ----------------------- | +| ssd mobilenet v1 | ~ 6 ms | ~ 10 ms | +| yolov6n | ~ 7 ms | ~ 11 ms | + +### Google Coral TPU + +Frigate 同时支持 USB 和 M.2 两种版本的 Google Coral 加速模块: +- USB版兼容性最佳,无需安装额外驱动,但缺少自动温控节流功能(长时间高负载可能降频) +- PCIe 和 M.2 需要安装对应的驱动才能运行,参考:https://coral.ai + +单个 Coral 使用默认模型即可处理多路摄像头,能满足大多数用户需求。你可以根据 Frigate 报告的推理速度计算 Coral 的最大性能: + +当推理速度为 10ms 时,你的 Coral 最高可处理 1000/10=100,即每秒 100 帧。如果你的检测帧率经常接近这个值,你可以调整动态检测遮罩降低检测区域,或考虑增加第二个Coral设备。 + +### OpenVINO + +OpenVINO 检测器可在以下硬件平台上运行: + +- 带集成显卡的第六代及以上 Intel 平台 +- 配备 VPU 硬件的 x86 & arm64 主机(如 Intel NCS2) +- 多数现代 AMD CPU(虽然 Intel 官方未提供支持) + +更多详细信息请参阅 [检测器文档](/configuration/object_detectors#openvino检测器) + +推理速度因使用的CPU或GPU差异较大,以下是部分已知GPU的推理时间示例: + +| Name | MobileNetV2 推理时间 | YOLO-NAS 推理时间 | RF-DETR 推理时间 | Notes | +| -------------------- | -------------------------- | ------------------------- | ------------------------- | -------------------------------------- | +| Intel i3 6100T | 15 - 35 ms | | | Can only run one detector instance | +| Intel i5 6500 | ~ 15 ms | | | | +| Intel i5 7200u | 15 - 25 ms | | | | +| Intel i5 7500 | ~ 15 ms | | | | +| Intel i3 8100 | ~ 15 ms | | | | +| Intel i5 1135G7 | 10 - 15 ms | | | | +| Intel i3 12000 | | 320: ~ 19 ms 640: ~ 54 ms | | | +| Intel i5 12600K | ~ 15 ms | 320: ~ 20 ms 640: ~ 46 ms | | | +| Intel i7 12650H | ~ 15 ms | 320: ~ 20 ms 640: ~ 42 ms | 336: 50 ms | | +| Intel N100 | ~ 15 ms | 320: ~ 20 ms | | | +| Intel Arc A380 | ~ 6 ms | 320: ~ 10 ms 640: ~ 22 ms | 336: 20 ms 448: 27 ms | | +| Intel Arc A750 | ~ 4 ms | 320: ~ 8 ms | | | + +### TensorRT - Nvidia GPU + +TensorRT检测器能够在配备支持CUDA 12.x系列库的NVIDIA GPU的x86主机上运行。主机系统的最低驱动版本必须为>=525.60.13,且GPU需支持5.0或更高的计算能力。这通常对应于麦克斯韦架构(Maxwell-era)或更新的GPU,更多信息请查阅 [TensorRT 文档](/configuration/object_detectors#nvidia-tensorrt检测器). + +推理速度会因GPU和所用模型的不同而有显著差异。 +`tiny`的变体比对应的非tiny模型更快,以下是一些已知示例: + +| Name | YOLOv7 推理时间 | YOLO-NAS 推理时间 | RF-DETR 推理时间 | +| --------------- | --------------------- | ------------------------- | ------------------------- | +| GTX 1060 6GB | ~ 7 ms | | | +| GTX 1070 | ~ 6 ms | | | +| GTX 1660 SUPER | ~ 4 ms | | | +| RTX 3050 | 5 - 7 ms | 320: ~ 10 ms 640: ~ 16 ms | 336: ~ 16 ms 560: ~ 40 ms | +| RTX 3070 Mobile | ~ 5 ms | | | +| RTX 3070 | 4 - 6 ms | 320: ~ 6 ms 640: ~ 12 ms | 336: ~ 14 ms 560: ~ 36 ms | +| Quadro P400 2GB | 20 - 25 ms | | | +| Quadro P2000 | ~ 12 ms | | | + +### AMD GPU + +通过使用 [rocm](../configuration/object_detectors.md#amdrocm-gpu检测器) 检测器,Frigate可以工作在大部分AMD的显卡上。 + +| Name | YOLOv9 推理时间 | YOLO-NAS 推理时间 | +| --------------- | --------------------- | ------------------------- | +| AMD 780M | ~ 14 ms | 320: ~ 30 ms 640: ~ 60 ms | + +## 社区支持的检测器 + +### Nvidia Jetson + +Frigate支持所有的Jetson开发板,从经济实惠的Jetson Nano到性能强劲的Jetson Orin AGX都有覆盖。能够通过专门的[编解码预设参数](/configuration/ffmpeg_presets#硬件加速预设)来[调用Jetson视频硬解码功能](/configuration/hardware_acceleration#nvidia-jetson系列)进行加速。如果还配置了[TensorRT检测器](/configuration/object_detectors#nvidia-tensorrt检测器)则会利用Jetson的GPU和DLA(深度学习加速器)执行目标检测任务。 + +推理速度会因YOLO模型、Jetson平台型号及NVPMode(GPU/DLA/EMC时钟频率)配置而异。大多数模型的典型推理时间为20-40毫秒。 +DLA(深度学习加速器)相比GPU能效更高但速度略慢,因此启用DLA会降低功耗,但会轻微增加推理耗时。 + +### Rockchip platform + +Frigate 支持所有 Rockchip 开发板的硬件视频加速功能,但硬件目标检测仅限以下型号支持: + +- RK3562 +- RK3566 +- RK3568 +- RK3576 +- RK3588 + +| Name | YOLOv9 推理时间 | YOLO-NAS 推理时间 | YOLOx 推理时间 | +| --------------- | --------------------- | --------------------------- | ------------------------- | +| rk3588 3 cores | ~ 35 ms | small: ~ 20 ms med: ~ 30 ms | nano: 18 ms tiny: 20 ms | +| rk3566 1 core | | small: ~ 96 ms | | + + +启用全部3个核心的RK3588芯片运行YOLO-NAS S模型时,典型推理时间为25-30毫秒。 + +## Frigate如何分配CPU和检测器的工作?(美式通俗解释) + +根据国外贴吧[reddit的用户提问](https://www.reddit.com/r/homeassistant/comments/q8mgau/comment/hgqbxh5/?utm_source=share&utm_medium=web2x&context=3)改编,细节有些调整。 + +CPU说:我是CPU, Mendel是Google Coral + +我和Mendel接到个任务,要求我们阻止领居家的鸟飞进爸妈的院子,但我(CPU)不太认识鸟,需要花很久时间才能认出来,而Mendel(Coral)是鸟类专家!他可以很快的认出来。 +但Mendel在其他方面的能力却很拉胯,所以我们尝试分工合作: +我负责盯监控,一直盯着画面,发现有什么东西动了就立刻拍张照,然后把照片给Mendel,他很快的认出来目标是什么。虽然大部分时间都是误报(例如树叶或者影子之类的),但终于有一次Mendel找到了邻居家的鸟!任务完成! + +_提高摄像头分辨率会发生什么?_ + +我们突然发现一个问题:院子里还是到处都是鲣鸟的便便!怎么会漏掉呢?我明明盯了一整天啊! +爸妈检查监控后发现是因为窗户太小太脏,原来的监控窗口视野有限,还蒙着灰 +于是他们擦干净窗户并换了个超大落地窗 + +现在我们能看到整个院子了,但…… + +CPU有了新的烦恼: +- 要扫描的运动区域变大了好几倍 +- 必须更拼命工作才能盯住每个角落 + +Mendel增填了更多压力: +- 现在每张照片都超高清(细节爆炸) +- 识别每处细节是否藏着狡猾的鸟更费劲了 + +实际上,当你调高分辨率/帧率时,CPU负荷暴增,要处理的数据量呈指数级增长 +而Coral加速器虽然强大但精力有限,它不能同时扫描所有画面(尤其是你有多个摄像头时) + +Frigate的做法是: +CPU先做“运动侦察兵”,只把有动静的画面交给Coral加速器做“精准识别”;这样既能监控多路摄像头,又不会压垮检测器。 + +## 使用 Coral 加速器时,硬件加速参数(hwaccel args)还有用吗? +当然有用!因为Coral并不能进行视频编解码工作。 + +解压视频流会消耗大量CPU资源。视频压缩使用关键帧(I帧)传输完整画面,后续帧只记录差异,CPU需要将差异帧与关键帧合并还原每一帧([更多细节可参阅本文(英文)](https://blog.video.ibm.com/streaming-video-tips/keyframes-interframe-video-compression/))。 更高分辨率和帧率意味着需要更多算力来解码视频流,因此建议直接在摄像头端设置合适参数以避免不必要的解码负担。 \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/frigate/index.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/frigate/index.md new file mode 100644 index 000000000..1711f2b05 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/frigate/index.md @@ -0,0 +1,29 @@ +--- +id: index +title: 介绍 +slug: / +--- + +一个完整的本地网络视频录像机(NVR),专为[Home Assistant](https://www.home-assistant.io)设计,具备AI物体检测功能。使用OpenCV和TensorFlow在本地为IP摄像头执行实时物体检测。 + +强烈推荐使用GPU或者AI加速器(例如[Google Coral加速器](https://coral.ai/products/) 或者 [Hailo](https://hailo.ai/))。它们的性能甚至超过目前的顶级CPU,并且可以以极低的耗电实现更优的性能。 +- 通过[自定义组件](https://github.com/blakeblackshear/frigate-hass-integration)与Home Assistant紧密集成 +- 设计上通过仅在必要时和必要地点寻找物体,最大限度地减少资源使用并最大化性能 +- 大量利用多进程处理,强调实时性而非处理每一帧 +- 使用非常低开销的运动检测来确定运行物体检测的位置 +- 使用TensorFlow进行物体检测,运行在单独的进程中以达到最大FPS +- 通过MQTT进行通信,便于集成到其他系统中 +- 根据检测到的物体设置保留时间进行视频录制 +- 24/7全天候录制 +- 通过RTSP重新流传输以减少摄像头的连接数 +- 支持WebRTC和MSE,实现低延迟的实时观看 + +## 截图 + +![Live View](/img/live-view.png) + +![Review Items](/img/review-items.png) + +![Media Browser](/img/media_browser-min.png) + +![Notification](/img/notification-min.png) diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/frigate/installation.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/frigate/installation.md new file mode 100644 index 000000000..3023af41c --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/frigate/installation.md @@ -0,0 +1,437 @@ +--- +id: installation +title: 安装 +--- + +Frigate可运行在任何拥有Docker的主机上,甚至可以作为[Home Assistant Add-on插件](https://www.home-assistant.io/addons/)运行。但需要注意的是,Home Assistant插件**并不等同于**集成。无论您是将Frigate作为独立Docker容器运行还是作为Home Assistant插件运行,都需要通过额外的[集成](/integrations/home-assistant)将Frigate接入Home Assistant内。 + +:::tip + +若您已通过Home Assistant插件安装Frigate,请查阅[入门指南](../guides/getting_started#configuring-frigate)进行配置。 + +::: + +## 依赖项 + +**MQTT代理 (可选)** - Frigate本身可以不依赖MQTT代理运行,但如果你想使用Home Assistant集成功能就必须要安装并配置MQTT。Frigate 和 Home Assistant 必须连接至同一个 MQTT 代理服务器。 + +## 硬件准备 + +### 操作系统 + +Frigate最好工作在安装了Docker的Debian系宿主机上获得最佳性能;同时,你需要让Frigate能够直通访问底层硬件(例如Coral这类AI加速器以及显卡)。不建议在Proxmox、ESXi、Virtualbox等虚拟化平台上运行Frigate(尽管有一部分[用户尝试在Proxmox上运行成功](#proxmox)) + +Windows系统未获官方支持,但有用户通过WSL或Virtualbox成功运行。需注意的是在Windows下,显卡或Coral等设备的直通可能比较麻烦。如需帮助,可查阅历史讨论或问题记录。 + +### 存储 + +Frigate 容器在运行时会对以下目录进行读写操作,您可以通过 Docker 卷映射将这些目录挂载到宿主机的任意位置: + +- `/config`: 用于存储 Frigate 配置文件及 SQLite 数据库。运行期间还会生成若干临时文件。 +- `/media/frigate/clips`: 快照存储目录(未来可能更名为 snapshots)。目录结构为系统自动管理,禁止手动修改或浏览。 +- `/media/frigate/recordings`: 录像片段内部存储目录。目录结构为系统自动管理,禁止手动修改或浏览。 +- `/media/frigate/exports`: 通过网页或API导出的视频片段和延时摄影存储目录。 +- `/tmp/cache`: 录像片段缓存目录,原始录像会先写入此处,经校验并转为 MP4 格式后移至recordings目录。通过`clip.mp4`接口生成的片段也在此拼接处理。建议使用 [`tmpfs`](https://docs.docker.com/storage/tmpfs/) 挂载此目录 +- `/dev/shm`: 解码帧原始数据的共享内存缓存(不可修改或手动映射)。最小容量受下文 `shm-size`计算规则影响。 + +### 端口 + +The following ports are used by Frigate and can be mapped via docker as required. + +| 端口 | 说明 | +| ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `8971` | 提供未TLS加密带身份验证的页面和API访问,请使用反代应用(例如Nginx)代理此端口(并最好配置TLS加密)。 | +| `5000` | 提供内部未加密且无需认证的UI和API访问。该端口使用需要严格限制,仅限Docker内部网络中使用,供与Frigate集成的服务调用。 | +| `8554` | 提供未加密的实时视频流转发服务(默认无需认证)。可通过配置文件中go2rtc模块启用认证功能。 | +| `8555` | 提供低延迟实时视频流的WebRTC连接服务。 | + +#### 常见 Docker Compose 存储配置 + +写入本地磁盘或外部USB驱动器: + +```yaml +services: + frigate: + ... + volumes: + - /path/to/your/config:/config + - /path/to/your/storage:/media/frigate + - type: tmpfs # Optional: 1GB of memory, reduces SSD/SD Card wear + target: /tmp/cache + tmpfs: + size: 1000000000 + ... +``` + +:::warning + +使用 Snapcraft 构建版 Docker 的用户只能将存储位置设置在 $HOME 目录下。 + +::: + +### 计算所需的共享内存大小(shm-size) + +Frigate使用共享内存(shm)处理视频帧。Docker默认提供的shm-size为64MB。 + +对于2个720p摄像头的检测场景,默认128MB共享内存足够。若出现"Bus error"错误退出,通常是由于高分辨率摄像头过多,需通过using [`--shm-size`](https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources) (或者Docker Compose中的[`service.shm_size`](https://docs.docker.com/compose/compose-file/compose-file-v2/#shm_size))增加内存容量。 + +注意:Frigate容器日志也会占用最多40MB共享内存,计算时需计入。 + +各摄像头最低共享内存需求计算公式(基于检测分辨率): + +```console +# 单摄像头基础计算模板(不含日志),替换 +$ python -c 'print("{:.2f}MB".format(( * * 1.5 * 20 + 270480) / 1048576))' + +# 1280x720分辨率示例(含日志) +$ python -c 'print("{:.2f}MB".format((1280 * 720 * 1.5 * 20 + 270480) / 1048576 + 40))' +66.63MB + +# 8个1280x720摄像头示例(含日志) +$ python -c 'print("{:.2f}MB".format(((1280 * 720 * 1.5 * 20 + 270480) / 1048576) * 8 + 40))' +253MB +``` + +Home Assistant插件无法单独设置容器共享内存。但由于Home Assistant Supervisor默认分配总内存的50%给`/dev/shm`(例如8GB内存机器可分配约4GB),通常无需额外配置。 + + +### 树莓派3/4 + +默认情况下,树莓派对GPU可用内存进行了限制。如需使用ffmpeg硬件加速功能,必须按照[官方文档](https://www.raspberrypi.org/documentation/computers/config_txt.html#memory-options)说明,在`config.txt`中将`gpu_mem`设置为最大推荐值以增加可用内存。 + +需要特别注意USB Coral功耗问题。若同时使用SSD等其他USB设备,可能因供电不足导致系统不稳定必须使用带独立电源的外置USB集线器。部分用户反馈此款产品(推广链接)可稳定运行。 + +### Hailo-8 + +Hailo-8和Hailo-8L AI加速器提供M.2和树莓派HAT两种规格。M.2版本通常通过PCIe载板连接,作为AI套件组成部分与树莓派5对接;HAT版本则可直接安装于兼容的树莓派机型。两种规格在x86平台亦通过兼容性测试,具备多平台适配能力。 + +#### 安装 + +对于使用AI套件的树莓派5用户,安装过程很简单。只需按照这个[指南](https://www.raspberrypi.com/documentation/accessories/ai-kit.html#ai-kit-installation)安装驱动程序和软件即可。 + +对于其他安装情况,请按照以下步骤进行安装: + +1. 从[Hailo GitHub仓库](https://github.com/hailo-ai/hailort-drivers)安装驱动程序。Linux系统提供了一个便捷脚本用于克隆仓库、构建驱动程序并安装。 +2. 复制或下载[此脚本](https://github.com/blakeblackshear/frigate/blob/dev/docker/hailo8l/user_installation.sh)。 +3. 使用`sudo chmod +x user_installation.sh`确保脚本具有执行权限。 +4. 使用`./user_installation.sh`运行脚本。 + +#### 设置 + +按照默认安装说明设置Frigate,例如:`ghcr.io/blakeblackshear/frigate:stable` + +接下来,通过在`docker-compose.yml`文件中添加以下行来授予Docker访问硬件的权限: + +```yaml +devices: + - /dev/hailo0 +``` + +如果您使用`docker run`,请在命令中添加此选项:`--device /dev/hailo0` + +#### 配置 + +最后,配置[硬件对象检测](/configuration/object_detectors#hailo-8l)以完成设置。 + +### Rockchip平台 + +确保使用带有Rockchip BSP内核5.10或6.1以及必要驱动程序(特别是rkvdec2和rknpu)的Linux发行版。要检查是否满足要求,请输入以下命令: + +``` +$ uname -r +5.10.xxx-rockchip # 或6.1.xxx;-rockchip后缀很重要 +$ ls /dev/dri +by-path card0 card1 renderD128 renderD129 # 应列出renderD128(VPU)和renderD129(NPU) +$ sudo cat /sys/kernel/debug/rknpu/version +RKNPU driver: v0.9.2 # 或更高版本 +``` + +如果您的开发板受支持,我推荐使用[Joshua Riek的Rockchip版Ubuntu](https://github.com/Joshua-Riek/ubuntu-rockchip)。 + +#### 设置 + +按照Frigate的默认安装说明进行操作,但使用带有`-rk`后缀的docker镜像,例如`ghcr.io/blakeblackshear/frigate:stable-rk`。 + +接下来,您需要授予docker访问硬件的权限: + +- 在配置过程中,您应该在特权模式下运行docker以避免因权限不足而出现错误。为此,在`docker-compose.yml`文件中添加`privileged: true`或在docker run命令中添加`--privileged`标志。 +- 在一切正常工作后,您应该只授予必要的权限以提高安全性。禁用特权模式,并在`docker-compose.yml`文件中添加以下行: + +```yaml +security_opt: + - apparmor=unconfined + - systempaths=unconfined +devices: + - /dev/dri + - /dev/dma_heap + - /dev/rga + - /dev/mpp_service +volumes: + - /sys/:/sys/:ro +``` + +或在`docker run`命令中添加这些选项: + +``` +--security-opt systempaths=unconfined \ +--security-opt apparmor=unconfined \ +--device /dev/dri \ +--device /dev/dma_heap \ +--device /dev/rga \ +--device /dev/mpp_service \ +--volume /sys/:/sys/:ro +``` + +#### 配置 + +接下来,您应该配置[硬件对象检测](/configuration/object_detectors#rockchip平台)和[硬件视频处理](/configuration/hardware_acceleration#rockchip平台)。 + +## Docker + +推荐使用Docker Compose进行安装。 + +```yaml +services: + frigate: + container_name: frigate + privileged: true # 部分设置可能不需要此选项 + restart: unless-stopped + stop_grace_period: 30s # 为各服务提供足够的关闭时间 + image: ghcr.io/blakeblackshear/frigate:stable + shm_size: "512mb" # 根据上述计算结果为您的摄像头更新此值 + devices: + - /dev/bus/usb:/dev/bus/usb # 用于USB Coral,其他版本需要修改 + - /dev/apex_0:/dev/apex_0 # 用于PCIe Coral,请按照此处的驱动说明操作 https://coral.ai/docs/m2/get-started/#2a-on-linux + - /dev/video11:/dev/video11 # 用于树莓派4B + - /dev/dri/renderD128:/dev/dri/renderD128 # 用于Intel硬件加速,需要根据您的硬件更新 + volumes: + - /etc/localtime:/etc/localtime:ro + - /path/to/your/config:/config + - /path/to/your/storage:/media/frigate + - type: tmpfs # 可选:1GB内存,减少SSD/SD卡损耗 + target: /tmp/cache + tmpfs: + size: 1000000000 + ports: + - "8971:8971" + # - "5000:5000" # 内部未认证访问。谨慎暴露。 + - "8554:8554" # RTSP视频流 + - "8555:8555/tcp" # 基于TCP的WebRTC + - "8555:8555/udp" # 基于UDP的WebRTC + environment: + FRIGATE_RTSP_PASSWORD: "password" +``` + +如果您无法使用Docker Compose,可以使用类似以下命令运行容器: + +```bash +docker run -d \ + --name frigate \ + --restart=unless-stopped \ + --stop-timeout 30 \ + --mount type=tmpfs,target=/tmp/cache,tmpfs-size=1000000000 \ + --device /dev/bus/usb:/dev/bus/usb \ + --device /dev/dri/renderD128 \ + --shm-size=64m \ + -v /path/to/your/storage:/media/frigate \ + -v /path/to/your/config:/config \ + -v /etc/localtime:/etc/localtime:ro \ + -e FRIGATE_RTSP_PASSWORD='password' \ + -p 8971:8971 \ + -p 8554:8554 \ + -p 8555:8555/tcp \ + -p 8555:8555/udp \ + ghcr.io/blakeblackshear/frigate:stable +``` + +当前稳定版本的官方Docker镜像标签有: + +- `stable` - 适用于amd64的标准Frigate构建和适用于arm64的树莓派优化Frigate构建。此构建还包括对Hailo设备的支持。 +- `stable-standard-arm64` - 适用于arm64的标准Frigate构建 +- `stable-tensorrt` - 专门用于运行NVIDIA GPU的amd64设备的Frigate构建 +- `stable-rocm` - 适用于[AMD GPU](../configuration/object_detectors.md#amdrocm-gpu-detector)的Frigate构建 + +当前稳定版本的社区支持Docker镜像标签有: + +- `stable-tensorrt-jp6` - 为运行Jetpack 6的NVIDIA Jetson设备优化的Frigate构建 +- `stable-rk` - 适用于搭载Rockchip SoC的单板计算机的Frigate构建 + +## Home Assistant插件 + +:::warning + +从Home Assistant操作系统10.2和Home Assistant 2023.6版本开始,支持为媒体文件配置独立的网络存储。 + +需要注意HA OS的以下重要限制: + +- Home Assistant尚不支持媒体文件的独立本地存储 +- 由于HA OS不包含mesa驱动程序,因此不支持AMD GPU +- 由于插件不支持nvidia运行时,因此不支持NVIDIA GPU + +::: + +:::tip + +请参阅[网络存储指南](/guides/ha_network_storage.md)了解如何为Frigate设置网络存储。 + +::: + +Home Assistant OS用户可以通过插件仓库进行安装。 + +1. 在Home Assistant中,导航至 _设置_ > _插件_ > _插件商店_ > _仓库_ +2. 添加 `https://github.com/blakeblackshear/frigate-hass-addons` +3. 安装所需的Frigate插件版本(见下文) +4. 在`配置`选项卡中设置网络配置 +5. 启动插件 +6. 使用_打开Web界面_按钮访问Frigate界面,然后点击_齿轮图标_ > _配置编辑器_,根据需要配置Frigate + +插件提供以下几种版本: + +| 插件版本 | 描述 | +| -------------------------- | --------------------------------------- | +| Frigate | 当前发布版本,启用保护模式 | +| Frigate(完全访问) | 当前发布版本,可选择禁用保护模式 | +| Frigate Beta | Beta版本,启用保护模式 | +| Frigate Beta(完全访问) | Beta版本,可选择禁用保护模式 | + +如果您使用ffmpeg硬件加速,您**可能**需要使用_完全访问_版本的插件。这是因为Frigate插件在容器中运行时对主机系统的访问受限。_完全访问_版本允许您禁用_保护模式_,从而让Frigate完全访问主机系统。 + +您也可以通过[VS Code插件](https://github.com/hassio-addons/addon-vscode)或类似工具编辑Frigate配置文件。在这种情况下,配置文件位于`/addon_configs//config.yml`,其中``取决于您运行的Frigate插件版本。请参阅[此处](../configuration/index.md#accessing-add-on-config-dir)的目录列表。 + +## Kubernetes + +使用[helm chart](https://github.com/blakeblackshear/blakeshome-charts/tree/master/charts/frigate)进行安装。 + +## Unraid + +许多人拥有足够强大的NAS设备或家庭服务器来运行docker。Unraid提供了一个社区应用。 +要安装,请确保您已安装[社区应用插件](https://forums.unraid.net/topic/38582-plug-in-community-applications/)。然后在Unraid的应用部分搜索"Frigate" - 您可以在[这里](https://unraid.net/community/apps?q=frigate#r)查看在线商店。 + +## Proxmox虚拟化平台 + +根据[Proxmox官方文档](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#chapter_pct)建议,像Frigate这样的应用容器最好运行在Proxmox QEMU虚拟机中。这种部署方式既能获得应用容器化的所有优势,又能享受虚拟机带来的诸多好处,例如: +- 与宿主机实现强隔离 +- 支持实时迁移等高级功能(这些功能在直接使用容器时无法实现) + +:::warning + +如果您选择通过LXC在Proxmox中运行Frigate,设置过程可能会很复杂,请做好阅读Proxmox和LXC文档的准备,Frigate不官方支持在LXC内运行。 + +::: + +建议包括: +- 对于基于Intel的硬件加速,要允许访问主设备号为226、次设备号为128的`/dev/dri/renderD128`设备,请在`/etc/pve/lxc/.conf` LXC配置文件中添加以下行: + - `lxc.cgroup2.devices.allow: c 226:128 rwm` + - `lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file` +- LXC配置可能还需要`features: fuse=1,nesting=1`。这允许在LXC容器中运行Docker容器(`nesting`)并防止文件重复和存储浪费(`fuse`)。 +- 通过多层容器化(LXC然后Docker)成功传递硬件设备可能很困难。许多人选择在主机上将`/dev/dri/renderD128`等设备设为全局可读,或在特权LXC容器中运行Frigate。 +- 虚拟化层通常会给与Coral设备的通信带来大量开销,但[并非所有情况都如此](https://github.com/blakeblackshear/frigate/discussions/1837)。 + +更多一般信息请参见[Proxmox LXC讨论](https://github.com/blakeblackshear/frigate/discussions/5773)。 + +## ESXi + +有关使用ESXi运行Frigate的详细信息,请参阅[此处](https://williamlam.com/2023/05/frigate-nvr-with-coral-tpu-igpu-passthrough-using-esxi-on-intel-nuc.html)的说明。 + +如果您在机架式服务器上运行Frigate并想要直通Google Coral,请[阅读此处](https://github.com/blakeblackshear/frigate/issues/305)。 + +## DSM 7上的群晖NAS + +这些设置已在DSM 7.1.1-42962 Update 4上测试通过 + +**常规设置:** + +需要启用`使用高权限执行容器`选项,以便为Frigate容器提供可能需要的提升权限。 + +如果您希望容器在因错误而异常关闭时自动重启,可以启用`启用自动重启`选项。 + +![image](https://user-images.githubusercontent.com/4516296/232586790-0b659a82-561d-4bc5-899b-0f5b39c6b11d.png) + +**高级设置:** + +如需使用密码模板功能,应在高级设置中添加"FRIGATE_RTSP_PASSWORD"环境变量并设置您偏好的密码。其余环境变量目前应保持默认值。 + +![image](https://user-images.githubusercontent.com/4516296/232587163-0eb662d4-5e28-4914-852f-9db1ec4b9c3d.png) + +**端口设置:** + +网络模式应设置为`bridge`。您需要将Frigate容器的默认端口映射到您想在群晖NAS上使用的本地端口。 + +如果NAS上有其他服务正在使用Frigate所需的相同端口,您可以将端口设置为自动或指定特定端口。 + +![image](https://user-images.githubusercontent.com/4516296/232582642-773c0e37-7ef5-4373-8ce3-41401b1626e6.png) + +**存储空间设置:** + +需要配置2个路径: + +- 配置目录的位置,这将根据您的NAS文件夹结构而有所不同,例如`/docker/frigate/config`将挂载到容器内的`/config` +- NAS上用于保存录像的位置,这必须是一个文件夹,例如`/docker/volumes/frigate-0-media` + +![image](https://user-images.githubusercontent.com/4516296/232585872-44431d15-55e0-4004-b78b-1e512702b911.png) + +## QNAP NAS + +这些说明已在配备Intel J3455 CPU和16G RAM、运行QTS 4.5.4.2117的QNAP上测试通过。 + +QNAP有一个名为Container Station的图形工具用于安装和管理docker容器。但是,Container Station有两个限制使其不适合安装Frigate: + +1. Container Station不支持GitHub容器注册表(ghcr),而该注册表托管了Frigate 0.12.0及以上版本的docker镜像。 +2. Container Station使用默认64 Mb共享内存大小(shm-size),且没有调整机制。Frigate需要更大的shm-size才能正常处理两个以上的高分辨率摄像头。 + +由于上述限制,安装必须通过命令行完成。以下是具体步骤: + +**准备工作** + +1. 如果尚未安装,从QNAP应用中心安装Container Station。 +2. 在QNAP上启用ssh(请通过网络搜索了解具体操作方法)。 +3. 准备Frigate配置文件,命名为`config.yml`。 +4. 根据[文档](https://docs.frigate.video/frigate/installation)计算共享内存大小。 +5. 从https://en.wikipedia.org/wiki/List_of_tz_database_time_zones 查找您的时区值。 +6. 通过ssh连接到QNAP。 + +**安装** + +运行以下命令安装Frigate(以`stable`版本为例): + +```shell +# 下载Frigate镜像 +docker pull ghcr.io/blakeblackshear/frigate:stable +# 在QNAP文件系统上创建目录以存放Frigate配置文件 +# 例如,您可以选择在/share/Container下创建 +mkdir -p /share/Container/frigate/config +# 将步骤2中准备的配置文件复制到新创建的配置目录 +cp path/to/your/config/file /share/Container/frigate/config +# 在QNAP文件系统上创建目录以存放Frigate媒体文件 +# (如果您有监控硬盘,请在监控硬盘上创建媒体目录。 +# 示例命令假设share_vol2是监控硬盘) +mkdir -p /share/share_vol2/frigate/media +# 创建Frigate docker容器。用准备步骤3中的值替换shm-size值。 +# 同时在示例命令中替换'TZ'的时区值。 +# 示例命令将创建一个最多使用2个CPU和4G RAM的docker容器。 +# 如果您使用特定CPU(如J4125),可能需要在以下docker run命令中添加"--env=LIBVA_DRIVER_NAME=i965 \"。 +# 参见 https://docs.frigate.video/configuration/hardware_acceleration。 +docker run \ + --name=frigate \ + --shm-size=256m \ + --restart=unless-stopped \ + --env=TZ=America/New_York \ + --volume=/share/Container/frigate/config:/config:rw \ + --volume=/share/share_vol2/frigate/media:/media/frigate:rw \ + --network=bridge \ + --privileged \ + --workdir=/opt/frigate \ + -p 8971:8971 \ + -p 8554:8554 \ + -p 8555:8555 \ + -p 8555:8555/udp \ + --label='com.qnap.qcs.network.mode=nat' \ + --label='com.qnap.qcs.gpu=False' \ + --memory="4g" \ + --cpus="2" \ + --detach=true \ + -t \ + ghcr.io/blakeblackshear/frigate:stable +``` + +登录QNAP,打开Container Station。Frigate docker容器应该在"概览"下列出并正在运行。点击Frigate docker,然后点击详情页顶部显示的URL访问Frigate Web界面。 \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/frigate/video_pipeline.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/frigate/video_pipeline.md new file mode 100644 index 000000000..6a786cf95 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/frigate/video_pipeline.md @@ -0,0 +1,69 @@ +--- +id: video_pipeline +title: 视频处理管线 +--- + +:::tip +由于本文涉及过多专业领域内容,对普通用户帮助不算特别多,将不会进行精翻;本文使用DeepSeek AI进行翻译,仅做参考。 +::: + +Frigate采用先进的视频处理管线,从摄像头获取视频流开始,逐步应用多种处理流程(如解码、移动侦测等)。 + +本指南概述了Frigate的核心概念,帮助用户理解其工作原理。 + +## 概览 + +高层级来看,摄像头视频流会经历五个处理步骤: + +```mermaid +%%{init: {"themeVariables": {"edgeLabelBackground": "transparent"}}}%% + +flowchart LR + Feed(视频流\n获取) --> Decode(视频\n解码) + Decode --> Motion(移动\n侦测) + Motion --> Object(物体\n检测) + Feed --> Recording(录像\n与\n可视化) + Motion --> Recording + Object --> Recording +``` +如图所示,所有视频流首先需要被获取。根据数据源不同,可能简单如通过FFmpeg连接RTSP源,也可能复杂如通过go2rtc连接Apple Homekit摄像头。单个摄像头可生成主码流(高清)和子码流(低清)。 + +通常子码流会被解码生成全帧图像。此过程可能包含分辨率降采样和帧率控制(如保持5帧/秒)。 + +这些帧将通过时序比对来检测移动区域(即动态框)。动态框会组合成动态区域,并由机器学习模型分析识别已知物体。最终根据快照和录像保留策略决定保存哪些视频片段和事件。 + +## 视频管线详述 +下图展示了比前文更详细的数据流转路径: +```mermaid +%%{init: {"themeVariables": {"edgeLabelBackground": "transparent"}}}%% + +flowchart TD + RecStore[(录像\n存储)] + SnapStore[(快照\n存储)] + + subgraph 视频获取 + Cam["摄像头"] -->|FFmpeg支持| Stream + Cam -->|"其他流媒体\n协议"| go2rtc + go2rtc("go2rtc") --> Stream + Stream[获取主/子\n码流] --> |检测码流|Decode(解码与\n降采样) + end + subgraph 移动侦测 + Decode --> MotionM(应用\n遮罩) + MotionM --> MotionD(移动\n检测) + end + subgraph 物体识别 + MotionD --> |动态区域| ObjectD(物体检测) + Decode --> ObjectD + ObjectD --> ObjectFilter(应用物体过滤器&区域) + ObjectFilter --> ObjectZ(物体追踪) + end + Decode --> |解码帧|Birdseye(鸟瞰图) + MotionD --> |移动事件|Birdseye + ObjectZ --> |物体事件|Birdseye + + MotionD --> |"视频片段\n(保留移动)"|RecStore + ObjectZ --> |检测片段|RecStore + Stream -->|"视频片段\n(保留全部)"| RecStore + ObjectZ --> |检测快照|SnapStore +``` + diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/guides/configuring_go2rtc.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/guides/configuring_go2rtc.md new file mode 100644 index 000000000..2fdf4dea8 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/guides/configuring_go2rtc.md @@ -0,0 +1,118 @@ +--- +id: configuring_go2rtc +title: 配置 go2rtc +--- + +# 配置 go2rtc + +使用内置的 go2rtc 是可选的。你仍然可以配置 FFmpeg 直接连接到你的摄像头。但是,如果需要以下功能,则需要在配置中添加 go2rtc: + +- WebRTC 或 MSE 实时查看,支持音频、更高的分辨率和帧率,比仅限于检测流且不支持音频的 jsmpeg 流更好 +- Home Assistant 集成中摄像头的实时流支持 +- RTSP 中继,用于其他消费者,以减少与摄像头流的连接数 + +# 设置 go2rtc 流 + +首先,你需要在 Frigate 配置文件中添加想用于实时查看的流,配置 go2rtc 连接到你的摄像头流。在这一步中避免更改配置的其他部分。注意,go2rtc 支持[多种不同的流类型](https://github.com/AlexxIT/go2rtc/tree/v1.9.9#module-streams),不仅仅是 rtsp。 + +:::tip + +为获得最佳体验,你应该将 `go2rtc` 下的流名称设置为与摄像头名称相匹配,这样 Frigate 就可以自动映射并为摄像头使用更好的实时查看选项。 + +更多信息请参见[实时查看文档](../configuration/live.md#setting-stream-for-live-ui)。 + +::: + +```yaml +go2rtc: + streams: + back: + - rtsp://user:password@10.0.10.10:554/cam/realmonitor?channel=1&subtype=2 +``` + +将此配置添加后,重启 Frigate 并尝试从仪表板点击单个摄像头来观看实时流。它应该比原始的 jsmpeg 流看起来更清晰流畅。 + +### 如果视频无法播放怎么办? + +- 检查日志: + + - 在 Frigate UI 侧边栏的日志部分访问 go2rtc 日志。 + - 如果 go2rtc 连接摄像头有困难,你应该能在日志中看到一些错误消息。 + +- 检查 go2rtc Web 界面:如果你在日志中没有看到任何错误,尝试通过 go2rtc 的 web 界面查看摄像头。 + + - 在浏览器中访问 1984 端口来访问 go2rtc 的 web 界面。 + - 如果通过 Home Assistant 使用 Frigate,需要启用 1984 端口的 web 界面。 + - 如果使用 Docker,需要在访问 web 界面前转发 1984 端口。 + - 点击特定摄像头的 `stream` 查看是否正在接收摄像头流。 + +- 检查视频编解码器: + + - 如果摄像头流在 go2rtc 中工作但在浏览器中不工作,可能是视频编解码器不受支持。 + - 如果使用 H265,切换到 H264。参考 go2rtc 文档中的[视频编解码器兼容性](https://github.com/AlexxIT/go2rtc/tree/v1.9.9#codecs-madness)。 + - 如果无法从 H265 切换到 H264,或者流格式不同(如 MJPEG),使用 [FFmpeg 参数](https://github.com/AlexxIT/go2rtc/tree/v1.9.9#source-ffmpeg)重新编码视频。它支持旋转和调整视频源大小以及硬件加速。请记住,将视频从一种格式转换为另一种格式是一项资源密集型任务,使用内置的 jsmpeg 查看可能更好。 + ```yaml + go2rtc: + streams: + back: + - rtsp://user:password@10.0.10.10:554/cam/realmonitor?channel=1&subtype=2 + - "ffmpeg:back#video=h264#hardware" + ``` + +- 如果需要,切换到 FFmpeg: + + - 某些摄像头流可能需要使用 go2rtc 中的 ffmpeg 模块。这会导致启动时间较慢,但与更多流类型兼容。 + + ```yaml + go2rtc: + streams: + back: + - ffmpeg:rtsp://user:password@10.0.10.10:554/cam/realmonitor?channel=1&subtype=2 + ``` + + - 如果你能看到视频但没有音频,这很可能是因为你的摄像头的音频流编解码器不是 AAC。 + - 如果可能,在摄像头固件中将摄像头的音频设置更新为 AAC。 + - 如果你的摄像头不支持 AAC 音频,且你想要音频,则需要告诉 go2rtc 按需将音频重新编码为 AAC。这将使用额外的 CPU 并增加一些延迟。要按需添加 AAC 音频,你可以按如下方式更新 go2rtc 配置: + + ```yaml + go2rtc: + streams: + back: + - rtsp://user:password@10.0.10.10:554/cam/realmonitor?channel=1&subtype=2 + - "ffmpeg:back#audio=aac" + ``` + + 如果你需要同时转换音频和视频流,可以使用以下配置: + + ```yaml + go2rtc: + streams: + back: + - rtsp://user:password@10.0.10.10:554/cam/realmonitor?channel=1&subtype=2 + - "ffmpeg:back#video=h264#audio=aac#hardware" + ``` + + 当使用 ffmpeg 模块时,你可以这样添加 AAC 音频: + + ```yaml + go2rtc: + streams: + back: + - "ffmpeg:rtsp://user:password@10.0.10.10:554/cam/realmonitor?channel=1&subtype=2#video=copy#audio=copy#audio=aac#hardware" + ``` + +:::warning + +当使用 Frigate 插件时,如果要从外部访问 go2rtc 流(例如通过 VLC),你必须首先启用 RTSP Restream 端口。 +你可以在 Home Assistant 中访问 Frigate 插件配置页面,在"显示禁用端口"部分下显示隐藏选项来完成此操作。 + +::: + +## 后续步骤 + +1. 如果你添加到 go2rtc 的流也被 Frigate 用于 `record` 或 `detect` 角色,你可以将配置迁移到从 RTSP 重流中获取,以减少与摄像头的连接数,如[这里](/configuration/restream#减少摄像头连接数)所示。 +2. 你可能还想[设置 WebRTC](/configuration/live#webrtc额外配置)以获得比 MSE 略低的延迟。注意,WebRTC 仅支持 h264 和特定的音频格式,可能需要在路由器上开放端口。 + +## 重要注意事项 + +如果你配置 go2rtc 发布 HomeKit 摄像头流,在配对时配置会写入容器内的 `/dev/shm/go2rtc.yaml` 文件。这些更改必须手动复制到 Frigate 配置的 `go2rtc` 部分,以便在重启后保持不变。 \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/guides/getting_started.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/guides/getting_started.md new file mode 100644 index 000000000..131ef159a --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/guides/getting_started.md @@ -0,0 +1,317 @@ +--- +id: getting_started +title: 入门指南 +--- + +# 入门指南 + +:::tip + +如果你已经有一个安装了Linux和Docker的环境,可以直接跳转到下面的[安装Frigate](#installing-frigate)部分。 + +如果你已经通过Docker或Home Assistant插件安装了Frigate,可以直接跳转到下面的[配置Frigate](#configuring-frigate)部分。 + +::: + +## 硬件设置 + +本节将指导你如何在Debian Bookworm上设置服务器并安装Docker。 + +### 安装Debian 12 (Bookworm) + +关于如何安装Debian服务器有很多指南,所以这里只提供简略指南。将临时显示器和键盘连接到你的设备,以便安装一个没有桌面环境的最小化服务器。 + +#### 准备安装媒介 + +1. 从[Debian网站](https://www.debian.org/distrib/netinst)下载小型安装镜像 +1. 将ISO写入USB设备(推荐使用[balena Etcher](https://etcher.balena.io/)工具) +1. 从USB启动你的设备 + +#### 安装并设置Debian以进行远程访问 + +1. 确保你的设备已连接到网络,以便可以安装更新和软件 +1. 如果没有连接鼠标,选择非图形化安装选项,但两种安装方式都可以正常工作 +1. 系统会提示你设置root用户密码并创建一个带密码的用户 +1. 安装最小化软件。更少的依赖意味着更少的维护工作。 + 1. 取消选中"Debian桌面环境"和"GNOME" + 1. 选中"SSH服务器" + 1. 保持"标准系统实用工具"选中 +1. 重启后,以root身份登录命令提示符,将用户添加到sudoers + 1. 安装sudo + ```bash + apt update && apt install -y sudo + ``` + 1. 将你创建的用户添加到sudo组(将`blake`改为你自己的用户名) + ```bash + usermod -aG sudo blake + ``` +1. 运行`poweroff`关机 + +此时,你可以将设备安装到永久位置。剩余步骤可以通过SSH从另一台设备完成。如果你没有SSH客户端,可以安装[Visual Studio Code文档](https://code.visualstudio.com/docs/remote/troubleshooting#_installing-a-supported-ssh-client)中列出的选项之一。 + +#### 通过SSH完成设置 + +1. 通过SSH连接并使用安装时创建的非root用户登录 +1. 设置无密码sudo,这样就不用每次执行sudo命令时都输入密码(将下面命令中的`blake`改为你的用户名) + + ```bash + echo 'blake ALL=(ALL) NOPASSWD:ALL' | sudo tee /etc/sudoers.d/user + ``` + +1. 注销并重新登录以激活无密码sudo +1. 为操作系统设置自动安全更新(可选) + 1. 运行以下命令确保所有内容都是最新的 + ```bash + sudo apt update && sudo apt upgrade -y + ``` + 1. 安装无人值守更新 + ```bash + sudo apt install -y unattended-upgrades + echo unattended-upgrades unattended-upgrades/enable_auto_updates boolean true | sudo debconf-set-selections + sudo dpkg-reconfigure -f noninteractive unattended-upgrades + ``` + +现在你有了一个需要很少维护的最小化Debian服务器。 + +### 安装Docker + +1. 使用[官方文档](https://docs.docker.com/engine/install/debian/)安装Docker Engine(不是Docker Desktop) + 1. 具体来说,按照[使用apt仓库安装](https://docs.docker.com/engine/install/debian/#install-using-the-repository)部分的步骤操作 +2. 按照[Linux安装后步骤](https://docs.docker.com/engine/install/linux-postinstall/)中的说明将你的用户添加到docker组 + +## 安装Frigate + +本节展示如何在Debian上为Docker安装创建最小目录结构。如果你已经通过Home Assistant插件或其他方式安装了Frigate,可以继续[配置Frigate](#configuring-frigate)部分。 + +### 设置目录 + +如果配置文件在初始启动时不存在,Frigate将创建一个配置文件。以下目录结构是开始所需的最低要求。一旦Frigate运行起来,你可以使用内置的配置编辑器,它支持配置验证。 + +``` +. +├── docker-compose.yml +├── config/ +└── storage/ +``` + +这将创建上述结构: + +```bash +mkdir storage config && touch docker-compose.yml +``` + +如果你通过SSH在Linux设备上设置Frigate,可以使用[nano](https://itsfoss.com/nano-editor-guide/)来编辑以下文件。如果你更喜欢使用完整的编辑器而不是终端来编辑远程文件,我推荐使用带[Remote SSH扩展](https://code.visualstudio.com/docs/remote/ssh-tutorial)的[Visual Studio Code](https://code.visualstudio.com/)。 + +:::note + +这个`docker-compose.yml`文件只是amd64设备的入门文件。你需要根据[安装文档](/frigate/installation#docker)中的详细说明来自定义它以适应你的设置。 + +::: +`docker-compose.yml` + +```yaml +services: + frigate: + container_name: frigate + restart: unless-stopped + stop_grace_period: 30s + image: ghcr.io/blakeblackshear/frigate:stable + volumes: + - ./config:/config + - ./storage:/media/frigate + - type: tmpfs # 可选:1GB内存,减少SSD/SD卡损耗 + target: /tmp/cache + tmpfs: + size: 1000000000 + ports: + - "8971:8971" + - "8554:8554" # RTSP feeds +``` + +现在你应该可以在包含`docker-compose.yml`的文件夹中运行`docker compose up -d`来启动Frigate。在启动时,系统会创建一个管理员用户和密码,并在日志中输出。你可以通过运行`docker logs frigate`来查看。现在应该可以通过`https://server_ip:8971`访问Frigate,你可以使用`admin`用户登录并使用内置的配置编辑器完成配置。 + +## 配置Frigate + +本节假设你已经按照[安装](../frigate/installation.md)中的说明设置了环境。你还应该根据[摄像头设置指南](/frigate/camera_setup)配置你的摄像头。特别注意选择检测分辨率的部分。 + +### 步骤1:添加检测流 + +首先我们将为摄像头添加检测流: + +```yaml +mqtt: + enabled: False + +cameras: + name_of_your_camera: # <------ 命名你的摄像头 + enabled: True + ffmpeg: + inputs: + - path: rtsp://10.0.10.10:554/rtsp # <----- 你想用于检测的流 + roles: + - detect +``` + +### 步骤2:启动Frigate + +此时你应该能够启动Frigate并在UI中看到视频流。 + +如果你从摄像头获得错误图像,这意味着ffmpeg无法从你的摄像头获取视频流。检查日志中的ffmpeg错误消息。默认的ffmpeg参数设计用于支持TCP连接的H264 RTSP摄像头。 + +其他类型摄像头的FFmpeg参数可以在[这里](../configuration/camera_specific.md)找到。 + +### 步骤3:配置硬件加速(推荐) + +现在你已经有了一个工作正常的摄像头配置,你需要设置硬件加速以最小化解码视频流所需的CPU。查看[硬件加速](../configuration/hardware_acceleration.md)配置参考,了解适用于你的硬件的示例。 + +这里是一个使用[预设](../configuration/ffmpeg_presets.md)配置硬件加速的示例,适用于大多数带集成GPU的Intel处理器: + +`docker-compose.yml`(修改后,你需要运行`docker compose up -d`来应用更改) + +```yaml +services: + frigate: + ... + devices: + - /dev/dri/renderD128:/dev/dri/renderD128 # 用于intel硬件加速,需要根据你的硬件更新 + ... +``` + +`config.yml` + +```yaml +mqtt: ... + +cameras: + name_of_your_camera: + ffmpeg: + inputs: ... + hwaccel_args: preset-vaapi + detect: ... +``` + +### 步骤4:配置检测器 + +默认情况下,Frigate将使用单个CPU检测器。如果你有USB Coral,你需要在配置中添加检测器部分。 + +`docker-compose.yml`(修改后,你需要运行`docker compose up -d`来应用更改) + +```yaml +services: + frigate: + ... + devices: + - /dev/bus/usb:/dev/bus/usb # 传递USB Coral,需要为其他版本修改 + - /dev/apex_0:/dev/apex_0 # 传递PCIe Coral,按照这里的驱动说明操作 https://coral.ai/docs/m2/get-started/#2a-on-linux + ... +``` + +```yaml +mqtt: ... + +detectors: # <---- 添加检测器 + coral: + type: edgetpu + device: usb + +cameras: + name_of_your_camera: + ffmpeg: ... + detect: + enabled: True # <---- 开启检测 + ... +``` + +更多关于可用检测器的详细信息可以在[这里](../configuration/object_detectors.md)找到。 + +重启Frigate,你应该就能开始看到`person`的检测结果。如果你想跟踪其他对象,需要根据[配置文件参考](../configuration/reference.md)添加。 + +### 步骤5:设置运动遮罩 + +现在你已经优化了解码视频流的配置,你需要检查在哪里实现运动遮罩。要做到这一点,在UI中导航到摄像头,选择顶部的“调试”,并在视频流下方的选项中启用“运动遮罩”。观察持续触发不需要的运动检测的区域。常见的需要遮罩的区域包括摄像头时间戳和经常在风中摇摆的树木。目标是避免浪费对象检测周期来查看这些区域。 + +现在你知道需要在哪里遮罩,使用选项窗格中的"Mask & Zone creator"来生成配置文件所需的坐标。更多关于遮罩的信息可以在[这里](../configuration/masks.md)找到。 + +:::warning + +注意,运动遮罩不应用于标记你不想检测对象的区域或减少误报。它们不会改变发送到对象检测的图像,所以你仍然可以在有运动遮罩的区域获得跟踪对象、警报和检测。这些只是防止这些区域的运动启动对象检测。 + +::: + +你的配置现在应该看起来类似这样。 + +```yaml +mqtt: + enabled: False + +detectors: + coral: + type: edgetpu + device: usb + +cameras: + name_of_your_camera: + ffmpeg: + inputs: + - path: rtsp://10.0.10.10:554/rtsp + roles: + - detect + motion: + mask: + - 0,461,3,0,1919,0,1919,843,1699,492,1344,458,1346,336,973,317,869,375,866,432 +``` + +### 步骤6:启用录制 + +为了在Frigate UI中查看活动,需要启用录制。 + +要启用视频录制,向流添加`record`角色并在配置中启用它。如果在配置中禁用了录制,就无法在UI中启用它。 + +```yaml +mqtt: ... + +detectors: ... + +cameras: + name_of_your_camera: + ffmpeg: + inputs: + - path: rtsp://10.0.10.10:554/rtsp + roles: + - detect + - path: rtsp://10.0.10.10:554/high_res_stream # <----- 添加你想要录制的流 + roles: + - record + detect: ... + record: # <----- 启用录制 + enabled: True + motion: ... +``` + +如果你的检测和录制没有单独的流,你只需要在第一个输入的角色列表中添加record角色。 + +:::note + +如果你在`inputs`中只定义了一个流且没有为其分配`detect`角色,Frigate会自动为其分配`detect`角色。即使你在配置的`detect`部分使用`enabled: False`禁用了对象检测,Frigate仍然会解码一个流以支持运动检测、Birdseye、API图像端点和其他功能。 + +如果你只计划使用Frigate进行录制,仍建议为低分辨率流定义一个`detect`角色,以最小化所需流解码的资源使用。 + +::: + +默认情况下,Frigate会保留所有跟踪对象的视频10天。完整的录制选项可以在[这里](../configuration/reference.md)找到。 + +### 步骤7:完整配置 + +此时你已经有了一个具有基本功能的完整配置。 +- 查看[常见配置示例](../configuration/index.md#common-configuration-examples)获取常见配置示例列表。 +- 查看[完整配置参考](../configuration/reference.md)获取完整的配置选项列表。 + +### 后续步骤 + +现在你已经有了一个可工作的安装,你可以使用以下文档了解其他功能: + +1. [配置go2rtc](configuring_go2rtc.md) - 额外的实时查看选项和RTSP中继 +2. [区域](../configuration/zones.md) +3. [回顾](../configuration/review.md) +4. [遮罩](../configuration/masks.md) +5. [Home Assistant集成](../integrations/home-assistant.md) - 与Home Assistant集成 \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/guides/ha_network_storage.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/guides/ha_network_storage.md new file mode 100644 index 000000000..c28a33f11 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/guides/ha_network_storage.md @@ -0,0 +1,40 @@ +--- +id: ha_network_storage +title: Home Assistant 网络存储 +--- + +从Home Assistant 2023.6版本开始,插件已支持网络挂载存储。 + +## 为Frigate设置远程存储 + +### 前提条件 + +- 已安装Home Assistant 2023.6或更新版本 +- 运行Home Assistant操作系统10.2或更新版本,或者运行Supervised模式并安装了最新的os-agent(这是supervised安装所必需的) + +### 初始设置 + +1. 停止Frigate插件 + +### 移动当前数据 + +保留当前数据是可选的,但无论如何都需要移动数据才能成功创建共享。 + +#### 如果你想保留当前数据 + +1. 将frigate.db、frigate.db-shm、frigate.db-wal文件移动到/config目录 +2. 将/media/frigate文件夹重命名为/media/frigate_tmp + +#### 如果你不想保留当前数据 + +1. 删除/media/frigate文件夹及其所有内容 + +### 创建媒体共享 + +1. 进入**设置 -> 系统 -> 存储 -> 添加网络存储** +2. 将共享命名为`frigate`(这是必需的) +3. 选择类型为`media` +4. 填写你的特定NAS所需的其他信息 +5. 连接 +6. 如果在之前的步骤中保留了文件,将文件从`/media/frigate_tmp`移动到`/media/frigate` +7. 启动Frigate插件 \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/guides/ha_notifications.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/guides/ha_notifications.md new file mode 100644 index 000000000..3b667e784 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/guides/ha_notifications.md @@ -0,0 +1,50 @@ +--- +id: ha_notifications +title: Home Assistant 通知 +--- + +开始使用Frigate通知的最佳方式是使用[蓝图](https://community.home-assistant.io/t/frigate-mobile-app-notifications-2-0/559732)。你可以使用蓝图生成的yaml作为起点,然后根据需要进行自定义。 + +通常建议基于`frigate/reviews` mqtt主题来触发通知。这提供了获取[缩略图/快照/剪辑](../integrations/home-assistant.md#notification-api)所需的event_id以及其他用于自定义何时何地接收警报的有用信息。数据以变更源的形式发布,这意味着你可以在`before`部分引用对象的"前一个状态",在`after`部分引用对象的"当前状态"。你可以在[这里](../integrations/mqtt.md#frigateevents)查看示例。 + +以下是一个简单的跟踪对象通知自动化示例,它会为每个变更更新现有的通知。这意味着当Frigate找到"更好的"图像时,你在通知中看到的图像会更新。 + +```yaml +automation: + - alias: Notify of tracked object + trigger: + platform: mqtt + topic: frigate/events + action: + - service: notify.mobile_app_pixel_3 + data: + message: '检测到一个 {{trigger.payload_json["after"]["label"]}}。' + data: + image: 'https://your.public.hass.address.com/api/frigate/notifications/{{trigger.payload_json["after"]["id"]}}/thumbnail.jpg?format=android' + tag: '{{trigger.payload_json["after"]["id"]}}' + when: '{{trigger.payload_json["after"]["start_time"]|int}}' +``` + +注意,iOS设备通过在消息数据中添加摄像头实体ID来支持摄像头的实时预览。 + +```yaml +automation: + - alias: Security_Frigate_Notifications + description: "" + trigger: + - platform: mqtt + topic: frigate/reviews + payload: alert + value_template: "{{ value_json['after']['severity'] }}" + action: + - service: notify.mobile_app_iphone + data: + message: '检测到一个 {{trigger.payload_json["after"]["data"]["objects"] | sort | join(", ") | title}}。' + data: + image: >- + https://your.public.hass.address.com/api/frigate/notifications/{{trigger.payload_json["after"]["data"]["detections"][0]}}/thumbnail.jpg + tag: '{{trigger.payload_json["after"]["id"]}}' + when: '{{trigger.payload_json["after"]["start_time"]|int}}' + entity_id: camera.{{trigger.payload_json["after"]["camera"] | replace("-","_") | lower}} + mode: single +``` \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/guides/reverse_proxy.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/guides/reverse_proxy.md new file mode 100644 index 000000000..b7be31d5f --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/guides/reverse_proxy.md @@ -0,0 +1,179 @@ +--- +id: reverse_proxy +title: 设置反向代理 +--- + +本指南概述了在 Frigate 实例前设置反向代理所需的基本配置步骤。 + +如果你想在自定义 URL、子域名上设置 Frigate,或在服务多个站点的主机上设置 Frigate,通常需要反向代理。它还可以用于设置你自己的身份验证提供程序或用于更高级的 HTTP 路由。 + +在设置反向代理之前,请检查 Frigate 的内置功能是否满足你的需求: +|主题|文档| +|-|-| +|TLS|请参阅 `tls` [配置选项](../configuration/tls.md)| +|身份验证|请参阅[身份验证](../configuration/authentication.md)文档| +|IPv6|[启用 IPv6](../configuration/advanced.md#启用ipv6)| + +**关于 TLS 的说明** +使用反向代理时,TLS 会话通常在代理处终止,通过普通 HTTP 发送内部请求。如果这是所需的行为,必须首先在 Frigate 中禁用 TLS,否则你将遇到 HTTP 400 错误:"The plain HTTP request was sent to HTTPS port."(普通 HTTP 请求被发送到 HTTPS 端口)。 +要禁用 TLS,在你的 Frigate 配置中设置以下内容: +```yml +tls: + enabled: false +``` + +:::warning +反向代理可用于保护对内部 web 服务器的访问,但用户将完全依赖于他们采取的步骤。你必须确保遵循安全最佳实践。 +本页面不试图概述保护内部网站所需的具体步骤。 +请使用你自己的知识来评估和审查反向代理软件,然后再在你的系统上安装任何东西。 +::: + +## 代理 + +有许多可用的解决方案来实现反向代理,我们欢迎社区通过对本页面的贡献来帮助记录其他方案。 + +* [Apache2](#apache2-reverse-proxy) +* [Nginx](#nginx-reverse-proxy) +* [Traefik](#traefik-reverse-proxy) + +## Apache2 反向代理 + +在下面的配置示例中,仅包含与上述反向代理方法相关的指令。 +在 Debian Apache2 上,配置文件将命名为类似 `/etc/apache2/sites-available/cctv.conf` 的形式。 + +### 步骤1:配置 Apache2 反向代理 + +通过将 Frigate 界面作为 DNS 子域名而不是主域名的子文件夹来呈现,可以让你的生活更轻松。 +在这里,我们通过 https://cctv.mydomain.co.uk 访问 Frigate + +```xml + + ServerName cctv.mydomain.co.uk + + ProxyPreserveHost On + ProxyPass "/" "http://frigatepi.local:8971/" + ProxyPassReverse "/" "http://frigatepi.local:8971/" + + ProxyPass /ws ws://frigatepi.local:8971/ws + ProxyPassReverse /ws ws://frigatepi.local:8971/ws + + ProxyPass /live/ ws://frigatepi.local:8971/live/ + ProxyPassReverse /live/ ws://frigatepi.local:8971/live/ + + RewriteEngine on + RewriteCond %{HTTP:Upgrade} =websocket [NC] + RewriteRule /(.*) ws://frigatepi.local:8971/$1 [P,L] + RewriteCond %{HTTP:Upgrade} !=websocket [NC] + RewriteRule /(.*) http://frigatepi.local:8971/$1 [P,L] + +``` + +### 步骤2:使用 SSL 加密访问你的 Frigate 实例 + +虽然这本身不会阻止对你的 Frigate web 服务器的访问,但它会加密所有内容(如登录凭据)。 +安装 SSL 超出了本文档的范围,但[Let's Encrypt](https://letsencrypt.org/)是一种广泛使用的方法。 +这个 Apache2 配置片段会将未加密的请求重定向到 web 服务器的 SSL 端口 + +```xml + +ServerName cctv.mydomain.co.uk +RewriteEngine on +RewriteCond %{SERVER_NAME} =cctv.mydomain.co.uk +RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] + +``` + +### 步骤3:在代理处验证用户 + +有许多方法可以验证网站,但一种简单的方法是使用 [Apache2 密码文件](https://httpd.apache.org/docs/2.4/howto/auth.html)。 + +```xml + + + AuthType Basic + AuthName "Restricted Files" + AuthUserFile "/var/www/passwords" + Require user paul + + +``` + +## Nginx 反向代理 + +此方法展示了启用 SSL 的子域名类型反向代理的工作示例。 + +### 设置要反向代理的服务器和端口 + +这在 `$server` 和 `$port` 中设置,应该与你暴露给 docker 容器的端口匹配。可选地,你可以监听端口 `443` 并启用 `SSL` + +``` +# ------------------------------------------------------------ +# frigate.domain.com +# ------------------------------------------------------------ + +server { + set $forward_scheme http; + set $server "192.168.100.2"; # FRIGATE 服务器位置 + set $port 8971; + + listen 80; + listen 443 ssl http2; + + server_name frigate.domain.com; +} +``` + +### 设置 SSL(可选) + +此部分指向你的 SSL 文件,下面的示例显示了默认 Let's Encrypt SSL 证书的位置。 + +``` + # Let's Encrypt SSL + include conf.d/include/letsencrypt-acme-challenge.conf; + include conf.d/include/ssl-ciphers.conf; + ssl_certificate /etc/letsencrypt/live/npm-1/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/npm-1/privkey.pem; +``` + +### 设置反向代理设置 + +下面的设置启用了连接升级,设置日志记录(可选),并将所有来自 `/` 上下文的内容代理到之前在配置中指定的 docker 主机和端口 + +``` + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $http_connection; + proxy_http_version 1.1; + + access_log /data/logs/proxy-host-40_access.log proxy; + error_log /data/logs/proxy-host-40_error.log warn; + + location / { + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $http_connection; + proxy_http_version 1.1; + } + +``` + +## Traefik 反向代理 + +此示例展示了如何向 Frigate Docker compose 文件添加 `label`,使 Traefik 能够自动发现你的 Frigate 实例。 +在使用下面的示例之前,你必须首先使用 [Docker provider](https://doc.traefik.io/traefik/providers/docker/) 设置 Traefik + +```yml +services: + frigate: + container_name: frigate + image: ghcr.io/blakeblackshear/frigate:stable + ... + ... + labels: + - "traefik.enable=true" + - "traefik.http.services.frigate.loadbalancer.server.port=8971" + - "traefik.http.routers.frigate.rule=Host(`traefik.example.com`)" +``` + +上述配置将在 Traefik 中创建一个"服务",自动将你的容器的 IP 和 8971 端口添加为后端。 +它还将添加一个路由器,将对 "traefik.example.com" 的请求路由到你的本地容器。 + +注意,使用这种方法,你不需要为 Frigate 实例暴露任何端口,因为所有流量都将通过内部 Docker 网络路由。 \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/integrations/api.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/integrations/api.md new file mode 100644 index 000000000..e69de29bb diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/integrations/home-assistant.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/integrations/home-assistant.md new file mode 100644 index 000000000..f7f0868a1 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/integrations/home-assistant.md @@ -0,0 +1,278 @@ +--- +id: home-assistant +title: Home Assistant集成 +--- + +与Home Assistant集成的最佳方式是使用[官方集成](https://github.com/blakeblackshear/frigate-hass-integration)。 + +## 安装 + +### 准备工作 + +Frigate集成需要先安装并手动配置`mqtt`集成。 + +更多详细信息请参见[MQTT集成文档](https://www.home-assistant.io/integrations/mqtt/)。 + +此外,必须在Frigate配置文件中启用MQTT,并且Frigate必须连接到与Home Assistant相同的MQTT服务器,这样集成创建的许多实体才能正常工作。 + +### 集成安装 + +可通过HACS作为默认仓库获取。安装步骤: + +- 使用[HACS](https://hacs.xyz/)安装集成: + +``` +Home Assistant > HACS > 点击搜索栏并输入"Frigate" > Frigate +``` + +- 重启Home Assistant。 +- 然后添加/配置集成: + +``` +Home Assistant > 设置 > 设备和服务 > 添加集成 > Frigate +``` + +注意:你还需要在Home Assistant配置中启用[media_source](https://www.home-assistant.io/integrations/media_source/)才能显示媒体浏览器。 + +### (可选)Lovelace卡片安装 + +要安装可选的配套Lovelace卡片,请参见该卡片的[单独安装说明](https://github.com/dermotduffy/frigate-hass-card)。 + +## 配置 + +配置集成时,你需要提供Frigate实例的`URL`,可以指向内部未认证端口(`5000`)或认证端口(`8971`)。URL可能看起来像`http://:5000/`。 + +### Docker Compose示例 + +如果你在同一设备上使用Docker Compose运行Home Assistant和Frigate,这里有一些示例。 + +#### Home Assistant使用主机网络运行 + +不建议在主机网络模式下运行Frigate。在此示例中,配置集成时应使用`http://172.17.0.1:5000`或`http://172.17.0.1:8971`。 + +```yaml +services: + homeassistant: + image: ghcr.io/home-assistant/home-assistant:stable + network_mode: host + ... + + frigate: + image: ghcr.io/blakeblackshear/frigate:stable + ... + ports: + - "172.17.0.1:5000:5000" + ... +``` + +#### Home Assistant不使用主机网络运行或在单独的compose文件中 + +在此示例中,建议连接到认证端口,例如配置集成时使用`http://frigate:8971`。无需为Frigate容器映射端口。 + +```yaml +services: + homeassistant: + image: ghcr.io/home-assistant/home-assistant:stable + # network_mode: host + ... + + frigate: + image: ghcr.io/blakeblackshear/frigate:stable + ... + ports: + # - "172.17.0.1:5000:5000" + ... +``` + +### Home Assistant插件 + +如果你使用Home Assistant插件,URL应该是以下之一,具体取决于你使用的插件变体。注意,如果你使用代理插件,不应将集成指向代理URL。只需输入从网络直接访问Frigate时使用的相同URL。 + +| 插件变体 | URL | +| -------------------------- | ----------------------------------------- | +| Frigate | `http://ccab4aaf-frigate:5000` | +| Frigate (完全访问) | `http://ccab4aaf-frigate-fa:5000` | +| Frigate Beta | `http://ccab4aaf-frigate-beta:5000` | +| Frigate Beta (完全访问) | `http://ccab4aaf-frigate-fa-beta:5000` | + +### Frigate在单独的机器上运行 + +如果你在本地网络内的单独设备上运行Frigate,Home Assistant将需要访问端口8971。 + +#### 本地网络 + +使用`http://:8971`作为集成的URL,以便需要认证。 + +```yaml +services: + frigate: + image: ghcr.io/blakeblackshear/frigate:stable + ... + ports: + - "8971:8971" + ... +``` + +#### Tailscale或其他私有网络 + +使用`http://:5000`作为集成的URL。 + +```yaml +services: + frigate: + image: ghcr.io/blakeblackshear/frigate:stable + ... + ports: + - ":5000:5000" + ... +``` + +## 选项 + +``` +Home Assistant > 配置 > 集成 > Frigate > 选项 +``` + +| 选项 | 描述 | +| ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| RTSP URL模板 | 用于覆盖标准RTSP流URL的[jinja2](https://jinja.palletsprojects.com/)模板(例如,用于反向代理)。此选项仅对启用了[高级模式](https://www.home-assistant.io/blog/2019/07/17/release-96/#advanced-mode)的用户显示。参见下方的[RTSP流](#rtsp-stream)。 | + +## 提供的实体 + +| 平台 | 描述 | +| --------------- | ------------------------------------------------------------------------------- | +| `camera` | 实时摄像头流(需要RTSP) | +| `image` | 每个摄像头最新检测对象的图像 | +| `sensor` | 用于监控Frigate性能的状态,所有区域和摄像头的对象计数 | +| `switch` | 用于切换检测、录制和快照的开关实体 | +| `binary_sensor` | 每个摄像头/区域/对象的"运动"二进制传感器实体 | + +## 媒体浏览器支持 + +该集成提供: + +- 带缩略图的跟踪对象录像浏览 +- 快照浏览 +- 按月、日、摄像头、时间浏览录像 + +可以通过Home Assistant左侧菜单面板中的"媒体浏览器"访问。 + +## 将剪辑投射到媒体设备 + +该集成支持将剪辑和摄像头流投射到支持的媒体设备。 + +:::tip +要使剪辑可以投射到媒体设备,需要音频,可能需要[为录制启用音频](../troubleshooting/faqs.md#audio-in-recordings)。 + +**注意:即使你的摄像头不支持音频,也需要启用音频才能接受投射。** + +::: + + + +## 通知API + +许多人不想将Frigate暴露给网络,因此该集成创建了一些可用于通知的公共API端点。 + +加载跟踪对象的缩略图: + +``` +https://HA_URL/api/frigate/notifications//thumbnail.jpg +``` + +加载跟踪对象的快照: + +``` +https://HA_URL/api/frigate/notifications//snapshot.jpg +``` + +使用Android设备加载跟踪对象的视频剪辑: + +``` +https://HA_URL/api/frigate/notifications//clip.mp4 +``` + +使用iOS设备加载跟踪对象的视频剪辑: + +``` +https://HA_URL/api/frigate/notifications//master.m3u8 +``` + +加载跟踪对象的预览gif: + +``` +https://HA_URL/api/frigate/notifications//event_preview.gif +``` + +加载核查项目的预览gif: + +``` +https://HA_URL/api/frigate/notifications//review_preview.gif +``` + + + +## RTSP流 + +为了使实时流能够正常工作,需要在RTSP端口(默认:`8554`)上的`:8554`访问它们。当查看实时摄像头时,Home Assistant将直接连接到该流媒体端口。 + +#### RTSP URL模板 + +对于高级用例,可以使用[RTSP URL模板](#options)选项更改此行为。设置后,此字符串将覆盖从上述默认行为派生的默认流地址。此选项支持[jinja2模板](https://jinja.palletsprojects.com/),并且有来自[Frigate API](../integrations/api)的`camera`字典变量可用于模板。注意,模板中没有Home Assistant状态可用,只有来自Frigate的摄像头字典。 + +当Frigate位于反向代理后面,和/或当默认流端口因其他原因(例如防火墙规则)无法访问Home Assistant时,这可能很有用。 + +###### RTSP URL模板示例 + +使用不同的端口号: + +``` +rtsp://:2000/front_door +``` + +在流URL中使用摄像头名称: + +``` +rtsp://:2000/{{ name }} +``` + +在流URL中使用摄像头名称,先转换为小写: + +``` +rtsp://:2000/{{ name|lower }} +``` + +## 多实例支持 + +Frigate集成无缝支持使用多个Frigate服务器。 + +### 多实例要求 + +为了使多个Frigate实例正常工作,每个服务器必须设置不同的`topic_prefix`和`client_id`参数。 +有关如何设置这些参数,请参见[MQTT配置](mqtt)。 + +#### API URL + +配置多个Frigate实例时,[API](#notification-api) URL应包含标识符,以告诉Home Assistant要引用哪个Frigate实例。使用的标识符是配置中包含的MQTT `client_id`参数,使用方式如下: + +``` +https://HA_URL/api/frigate//notifications//thumbnail.jpg +``` + +``` +https://HA_URL/api/frigate//clips/front_door-1624599978.427826-976jaa.mp4 +``` + +#### 默认处理 + +配置单个Frigate实例时,URL/标识符中不需要指定`client-id`参数 - 假定使用该单个实例。配置多个Frigate实例时,用户**必须**明确指定他们要引用哪个服务器。 + +## 常见问题 + +#### 如果我检测多个对象,如何在HomeKit中将正确的`binary_sensor`分配给摄像头? + +[HomeKit集成](https://www.home-assistant.io/integrations/homekit/)随机链接Home Assistant中与摄像头设备分组的二进制传感器(运动传感器实体)之一。你可以在Home Assistant的[HomeKit配置](https://www.home-assistant.io/integrations/homekit/#linked_motion_sensor)中为每个摄像头指定`linked_motion_sensor`。 + +#### 我基于占用传感器设置了自动化。有时传感器打开时自动化运行了,但当我查看Frigate时找不到触发传感器的对象。这是bug吗? + +不是。占用传感器的检查较少,因为它们通常用于需要尽可能低延迟的事情,如开灯。因此这些传感器有时会被误报触发。如果你想要误报过滤,应该使用`frigate/events`或`frigate/reviews`主题上的mqtt传感器。 \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/integrations/mqtt.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/integrations/mqtt.md new file mode 100644 index 000000000..bee23968b --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/integrations/mqtt.md @@ -0,0 +1,391 @@ +--- +id: mqtt +title: MQTT +--- + +:::tip + +由于本文涉及过多专业领域内容,对普通用户帮助不算特别多,将不会进行精翻;本文使用DeepSeek AI进行翻译,仅做参考。 + +::: + +这些是由Frigate生成的MQTT消息。默认的主题前缀是`frigate`,但可以在配置文件中更改。 + +## Frigate通用主题 + +### `frigate/available` + +设计用于与Home Assistant的可用性主题配合使用。可能的消息有: +"online":当Frigate运行时发布(在启动时) +"offline":当Frigate停止后发布 + +### `frigate/restart` + +导致Frigate退出。Docker应该配置为在退出时自动重启容器。 + +### `frigate/events` + +为每个变化的跟踪对象发布消息。当跟踪对象不再被标记为false_positive时发布第一条消息。当Frigate找到跟踪对象的更好快照或发生区域变化时,它将发布具有相同id的消息。当跟踪对象结束时,将发布一条带有`end_time`设置的最终消息。 + +```json +{ + "type": "update", // new(新建), update(更新), end(结束) + "before": { + "id": "1607123955.475377-mxklsc", + "camera": "front_door", + "frame_time": 1607123961.837752, + "snapshot_time": 1607123961.837752, + "label": "person", + "sub_label": null, + "top_score": 0.958984375, + "false_positive": false, + "start_time": 1607123955.475377, + "end_time": null, + "score": 0.7890625, + "box": [424, 500, 536, 712], + "area": 23744, + "ratio": 2.113207, + "region": [264, 450, 667, 853], + "current_zones": ["driveway"], + "entered_zones": ["yard", "driveway"], + "thumbnail": null, + "has_snapshot": false, + "has_clip": false, + "active": true, // 便利属性,与"stationary"相反 + "stationary": false, // 对象是否被认为是静止的 + "motionless_count": 0, // 对象保持静止的帧数 + "position_changes": 2, // 对象从静止位置移动的次数 + "attributes": { + "face": 0.64 + }, // 在对象上任何时候被识别的具有最高分数的属性 + "current_attributes": [], // 此帧中当前属性的详细数据 + "current_estimated_speed": 0.71, // 通过启用速度估算的区域移动的对象的当前估计速度(mph或kph) + "velocity_angle": 180, // 通过启用速度估算的区域移动的对象相对于帧的行进方向 + "recognized_license_plate": "ABC12345", // 汽车对象的已识别车牌 + "recognized_license_plate_score": 0.933451 + }, + "after": { + "id": "1607123955.475377-mxklsc", + "camera": "front_door", + "frame_time": 1607123962.082975, + "snapshot_time": 1607123961.837752, + "label": "person", + "sub_label": ["John Smith", 0.79], + "top_score": 0.958984375, + "false_positive": false, + "start_time": 1607123955.475377, + "end_time": null, + "score": 0.87890625, + "box": [432, 496, 544, 854], + "area": 40096, + "ratio": 1.251397, + "region": [218, 440, 693, 915], + "current_zones": ["yard", "driveway"], + "entered_zones": ["yard", "driveway"], + "thumbnail": null, + "has_snapshot": false, + "has_clip": false, + "active": true, // 便利属性,与"stationary"相反 + "stationary": false, // 对象是否被认为是静止的 + "motionless_count": 0, // 对象保持静止的帧数 + "position_changes": 2, // 对象改变位置的次数 + "attributes": { + "face": 0.86 + }, // 在对象上任何时候被识别的具有最高分数的属性 + "current_attributes": [ + // 此帧中当前属性的详细数据 + { + "label": "face", + "box": [442, 506, 534, 524], + "score": 0.86 + } + ], + "current_estimated_speed": 0.77, // 通过启用速度估算的区域移动的对象的当前估计速度(mph或kph) + "velocity_angle": 180, // 通过启用速度估算的区域移动的对象相对于帧的行进方向 + "recognized_license_plate": "ABC12345", // 汽车对象的已识别车牌 + "recognized_license_plate_score": 0.933451 + } +} +``` + +### `frigate/tracked_object_update` + +当跟踪对象元数据更新时发布的消息,例如当GenAI运行并返回跟踪对象描述时。 + +```json +{ + "type": "description", + "id": "1607123955.475377-mxklsc", + "description": "The car is a red sedan moving away from the camera." +} +``` + +### `frigate/reviews` + +为每个变化的核查项目发布消息。当`检测`或`警报`初始化时发布第一条消息。当检测到其他对象或发生区域变化时,会发布具有相同id的`update`消息。当核查活动结束时,发布最终的`end`消息。 + +```json +{ + "type": "update", // new(新建), update(更新), end(结束) + "before": { + "id": "1718987129.308396-fqk5ka", // review_id(核查ID) + "camera": "front_cam", + "start_time": 1718987129.308396, + "end_time": null, + "severity": "detection", + "thumb_path": "/media/frigate/clips/review/thumb-front_cam-1718987129.308396-fqk5ka.webp", + "data": { + "detections": [ + // 事件ID列表 + "1718987128.947436-g92ztx", + "1718987148.879516-d7oq7r", + "1718987126.934663-q5ywpt" + ], + "objects": ["person", "car"], + "sub_labels": [], + "zones": [], + "audio": [] + } + }, + "after": { + "id": "1718987129.308396-fqk5ka", + "camera": "front_cam", + "start_time": 1718987129.308396, + "end_time": null, + "severity": "alert", + "thumb_path": "/media/frigate/clips/review/thumb-front_cam-1718987129.308396-fqk5ka.webp", + "data": { + "detections": [ + "1718987128.947436-g92ztx", + "1718987148.879516-d7oq7r", + "1718987126.934663-q5ywpt" + ], + "objects": ["person", "car"], + "sub_labels": ["Bob"], + "zones": ["front_yard"], + "audio": [] + } + } +} +``` + +### `frigate/stats` + +与`/api/stats`相同的数据,按可配置的间隔发布。 + +### `frigate/camera_activity` + +返回每个摄像头的当前功能状态,包括是否检测到运动、对象等。可以通过向`frigate/onConnect`发布消息来触发。 + +### `frigate/notifications/set` + +控制通知开关的主题。期望值为`ON`和`OFF`。 + +### `frigate/notifications/state` + +通知当前状态的主题。发布值为`ON`和`OFF`。 + +## Frigate摄像头主题 + +### `frigate//` + +发布摄像头检测到的对象数量,用于Home Assistant传感器。 +`all`可作为object_name表示摄像头所有对象的计数。 + +### `frigate///active` + +发布摄像头检测到的活动对象数量,用于Home Assistant传感器。 +`all`可作为object_name表示摄像头所有活动对象的计数。 + +### `frigate//` + +发布区域内检测到的对象数量,用于Home Assistant传感器。 +`all`可作为object_name表示区域内所有对象的计数。 + +### `frigate///active` + +发布区域内活动对象的数量,用于Home Assistant传感器。 +`all`可作为object_name表示区域内所有活动对象的计数。 + +### `frigate///snapshot` + +发布检测到对象类型的JPEG编码帧。当对象不再被检测到时,发布最高置信度的图像或重新发布原始图像。 + +快照的高度和裁剪可在配置中设置。 + +### `frigate//audio/` + +当检测到特定类型音频时发布"ON",未检测到时发布"OFF",用于Home Assistant传感器。 + +### `frigate//audio/dBFS` + +发布该摄像头检测到的音频dBFS值。 + +**注意:**需要启用音频检测 + +### `frigate//audio/rms` + +发布该摄像头检测到的音频RMS值。 + +**注意:**需要启用音频检测 + +### `frigate//enabled/set` + +控制Frigate对摄像头处理的开关主题。期望值为`ON`和`OFF`。 + +### `frigate//enabled/state` + +摄像头处理当前状态的主题。发布值为`ON`和`OFF`。 + +### `frigate//detect/set` + +控制摄像头对象检测的开关主题。期望值为`ON`和`OFF`。 + +### `frigate//detect/state` + +摄像头对象检测当前状态的主题。发布值为`ON`和`OFF`。 + +### `frigate//audio/set` + +控制摄像头音频检测的开关主题。期望值为`ON`和`OFF`。 + +### `frigate//audio/state` + +摄像头音频检测当前状态的主题。发布值为`ON`和`OFF`。 + +### `frigate//recordings/set` + +控制摄像头录制的开关主题。期望值为`ON`和`OFF`。 + +### `frigate//recordings/state` + +摄像头录制当前状态的主题。发布值为`ON`和`OFF`。 + +### `frigate//snapshots/set` + +控制摄像头快照的开关主题。期望值为`ON`和`OFF`。 + +### `frigate//snapshots/state` + +摄像头快照当前状态的主题。发布值为`ON`和`OFF`。 + +### `frigate//motion/set` + +控制摄像头运动检测的开关主题。期望值为`ON`和`OFF`。 +注意:如果检测未禁用,关闭运动检测将失败。 + +### `frigate//motion` + +摄像头当前是否检测到运动。期望值为`ON`和`OFF`。 +注意:在最初检测到运动后,`ON`状态将持续到`mqtt_off_delay`秒(默认30秒)内没有检测到运动为止。 + +### `frigate//motion/state` + +摄像头运动检测当前状态的主题。发布值为`ON`和`OFF`。 + +### `frigate//improve_contrast/set` + +控制摄像头对比度增强的开关主题。期望值为`ON`和`OFF`。 + +### `frigate//improve_contrast/state` + +摄像头对比度增强当前状态的主题。发布值为`ON`和`OFF`。 + +### `frigate//motion_threshold/set` + +调整摄像头运动阈值的主题。期望值为整数。 + +### `frigate//motion_threshold/state` + +摄像头当前运动阈值的主题。发布值为整数。 + +### `frigate//motion_contour_area/set` + +调整摄像头运动轮廓区域的主题。期望值为整数。 + +### `frigate//motion_contour_area/state` + +摄像头当前运动轮廓区域的主题。发布值为整数。 + +### `frigate//review_status` + +摄像头当前活动状态的主题。可能的值为`NONE`、`DETECTION`或`ALERT`。 + +### `frigate//ptz` + +向摄像头发送PTZ命令的主题。 + +| 命令 | 描述 | +| ---------------------- | ----------------------------------------------------------------------------------------- | +| `preset_` | 发送命令移动到名为``的预设位置 | +| `MOVE_` | 发送命令持续向``方向移动,可能的值为[UP, DOWN, LEFT, RIGHT] | +| `ZOOM_` | 发送命令持续进行``方向的缩放,可能的值为[IN, OUT] | +| `STOP` | 发送停止移动命令 | + +### `frigate//ptz_autotracker/set` + +控制摄像头PTZ自动跟踪器的开关主题。期望值为`ON`和`OFF`。 + +### `frigate//ptz_autotracker/state` + +摄像头PTZ自动跟踪器当前状态的主题。发布值为`ON`和`OFF`。 + +### `frigate//ptz_autotracker/active` + +确定PTZ自动跟踪器是否正在主动跟踪对象的主题。发布值为`ON`和`OFF`。 + +### `frigate//review_alerts/set` + +控制摄像头警报核查的开关主题。期望值为`ON`和`OFF`。 + +### `frigate//review_alerts/state` + +摄像头警报核查当前状态的主题。发布值为`ON`和`OFF`。 + +### `frigate//review_detections/set` + +控制摄像头检测核查的开关主题。期望值为`ON`和`OFF`。 + +### `frigate//review_detections/state` + +摄像头检测核查当前状态的主题。发布值为`ON`和`OFF`。 + +### `frigate//birdseye/set` + +控制摄像头鸟瞰视图的开关主题。期望值为`ON`和`OFF`。鸟瞰模式必须在配置中启用。 + +### `frigate//birdseye/state` + +摄像头鸟瞰视图当前状态的主题。发布值为`ON`和`OFF`。 + +### `frigate//birdseye_mode/set` + +设置摄像头鸟瞰模式的主题。鸟瞰视图提供不同的模式来自定义摄像头显示的情况。 + +_注意:从`CONTINUOUS`切换到`MOTION | OBJECTS`值时,摄像头从视图中移除最多需要30秒。_ + +| 命令 | 描述 | +| ------------ | ----------------------------------------------------------------- | +| `CONTINUOUS` | 始终包含 | +| `MOTION` | 在最近30秒内检测到运动时显示 | +| `OBJECTS` | 在最近30秒内有活动跟踪对象时显示 | + +### `frigate//birdseye_mode/state` + +摄像头鸟瞰模式当前状态的主题。发布值为`CONTINUOUS`、`MOTION`、`OBJECTS`。 + +### `frigate//notifications/set` + +控制通知的开关主题。期望值为`ON`和`OFF`。 + +### `frigate//notifications/state` + +通知当前状态的主题。发布值为`ON`和`OFF`。 + +### `frigate//notifications/suspend` + +暂停通知特定分钟数的主题。期望值为整数。 + +### `frigate//notifications/suspended` + +通知暂停截止时间的主题。发布值为UNIX时间戳,如果通知未暂停则为0。 \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/integrations/plus.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/integrations/plus.md new file mode 100644 index 000000000..151805034 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/integrations/plus.md @@ -0,0 +1,78 @@ +--- +id: plus +title: Frigate+ +--- + +关于如何使用Frigate+来改进你的模型的更多信息,请参见[Frigate+文档](/plus/)。 + +## 设置 + +### 创建账户 + +可以在[https://plus.frigate.video](https://plus.frigate.video)创建免费账户。 + +### 生成API密钥 + +登录后,你可以在设置中为Frigate生成API密钥。 + +![API密钥](/img/plus-api-key-min.png) + +### 设置API密钥 + +在Frigate中,你可以使用名为`PLUS_API_KEY`的环境变量或docker密钥来启用浏览页面上的`Frigate+`按钮。Home Assistant插件用户可以在设置 > 插件 > Frigate > 配置 > 选项下设置(确保切换"显示未使用的可选配置选项"开关)。 + +:::warning + +你不能使用Frigate配置文件中的`environment_vars`部分来设置此环境变量。它必须在docker配置或Home Assistant插件配置中定义为环境变量。 + +::: + +## 提交示例 + +一旦配置了API密钥,你就可以直接从Frigate的浏览页面提交示例。从更多筛选菜单中,选择"Has a Snapshot - Yes"和"Submitted to Frigate+ - No",然后点击窗格底部的应用。然后,点击缩略图并选择快照标签。 + +你可以使用键盘的左右箭头键快速浏览跟踪对象的快照。 + +:::note + +必须启用快照功能才能向Frigate+提交示例 + +::: + +![提交到Plus](/img/plus/submit-to-plus.jpg) + +### 标注和验证 + +你可以在[https://plus.frigate.video](https://plus.frigate.video)查看所有已提交的图像。点击图像可以添加标注。有关标注的更详细信息,请参见[改进你的模型](../plus/improving_model.md)文档。 + +![标注](/img/annotate.png) + +## 使用模型 + +一旦你[请求了第一个模型](../plus/first_model.md)并获得了自己的模型ID,就可以使用特殊的模型路径。Frigate+模型不需要配置其他信息,因为它会自动从Frigate+获取剩余的配置。 + +你可以在Frigate UI的设置页面的Frigate+面板中选择新模型,或在配置中手动设置根级别的模型: + +```yaml +model: + path: plus:// +``` + +:::note + +模型ID不是秘密值,可以自由共享。对模型的访问由你的API密钥保护。 + +::: + +模型会下载到`/config/model_cache`文件夹中,并且只在需要时才下载。 + +如果需要,你可以覆盖Frigate+模型的标签映射。不建议这样做,因为如果标签在Frigate+中不可用,重命名标签会导致提交到Frigate+的功能失效。 + +```yaml +model: + path: plus:// + labelmap: + 3: animal + 4: animal + 5: animal +``` \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/integrations/third_party_extensions.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/integrations/third_party_extensions.md new file mode 100644 index 000000000..c95e05113 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/integrations/third_party_extensions.md @@ -0,0 +1,28 @@ +--- +id: third_party_extensions +title: 第三方扩展 +--- + +作为开源项目,其他开发者可以修改和扩展Frigate已有的丰富功能。 +本页面旨在概述可以添加到家庭NVR设置中的扩展。此列表并非详尽无遗,可以通过PR方式扩展到Frigate文档中。这些服务大多设计为通过5000端口与Frigate的未认证API接口进行交互。 + +:::warning + +本页面不对展示的项目进行推荐或评级。 +在系统上安装任何内容之前,请使用您自己的知识来评估和审查它们。 + +::: + +## [Double Take](https://github.com/skrashevich/double-take) + +[Double Take](https://github.com/skrashevich/double-take)为人脸识别的图像处理和训练提供了统一的UI和API。 +它支持自动为Frigate中检测和识别到的人物对象设置子标签。 +这是[原始Double Take项目](https://github.com/jakowenko/double-take)的一个分支(修复了错误并添加了新功能),不幸的是,原始项目已不再由作者维护。 + +## [Frigate Notify](https://github.com/0x2142/frigate-notify) + +[Frigate Notify](https://github.com/0x2142/frigate-notify)是一个简单的应用程序,设计用于将Frigate的通知发送到您喜欢的平台。适用于独立安装的Frigate - 不需要Home Assistant,MQTT是可选的但推荐使用。 + +## [Frigate telegram](https://github.com/OldTyT/frigate-telegram) + +[Frigate telegram](https://github.com/OldTyT/frigate-telegram)使得可以将Frigate的事件发送到Telegram。事件以文本描述、视频和缩略图的形式作为消息发送。 \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/mdx.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/mdx.md new file mode 100644 index 000000000..f0210fb70 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/mdx.md @@ -0,0 +1,17 @@ +--- +id: mdx +title: Powered by MDX +--- + +You can write JSX and use React components within your Markdown thanks to [MDX](https://mdxjs.com/). + +export const Highlight = ({children, color}) => ( {children} ); + +Docusaurus green and Facebook blue are my favorite colors. + +I can write **Markdown** alongside my _JSX_! diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/plus/faq.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/plus/faq.md new file mode 100644 index 000000000..ed6ae47bd --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/plus/faq.md @@ -0,0 +1,34 @@ +--- +id: faq +title: 常见问题 +--- + +### 我的模型是仅基于我上传的图片训练的吗?它们是如何构建的? + +Frigate+模型是通过使用你已标注和验证的图片对基础模型进行微调来构建的。基础模型是从所有Frigate+用户提交的图片样本中从头开始训练的,需要数周的昂贵GPU资源。如果模型仅使用你上传的图片构建,你需要提供数万个示例,而且训练需要一周以上的时间(并且成本可观)。数据的多样性有助于模型的泛化。 + +### 使用Frigate+模型时,我的视频流是否会被发送到云端进行分析? + +不会。Frigate+模型是默认模型的直接替代品。所有处理都像往常一样在本地进行。唯一发送到Frigate+的图片是你通过`发送到Frigate+`按钮特别提交的或直接上传的图片。 + +### 我可以标注任何我想要的内容,并训练模型识别我的自定义对象吗? + +目前不行。目前,标签集对所有用户都是一致的。在开发完全自定义用户标签之前,重点将放在扩展这个标签集上。 + +### Frigate+模型可以离线使用吗? + +可以。模型和元数据存储在配置文件夹中的`model_cache`目录中。只有当缓存中不存在模型时,Frigate才会尝试下载模型。这意味着你可以备份该目录和/或完全离线使用它。 + +### 如果我不续订订阅,我可以继续使用我的Frigate+模型吗? + +可以。Frigate+的订阅提供对用于训练模型的基础设施的访问权限。使用你的订阅训练的模型是你永久拥有和使用的。但是请注意,条款和条件禁止你分享、转售或从这些模型创建衍生产品。 + +### 为什么我无法向Frigate+提交图片? + +如果你已配置了API密钥,且UI中的Frigate+设置页面显示密钥处于活动状态,你需要确保为想要提交图片的摄像头同时启用了快照和`clean_copy`快照功能。请注意,当启用快照时,`clean_copy`默认是启用的。 + +```yaml +snapshots: + enabled: true + clean_copy: true +``` \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/plus/first_model.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/plus/first_model.md new file mode 100644 index 000000000..9c23fabc9 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/plus/first_model.md @@ -0,0 +1,69 @@ +--- +id: first_model +title: 请求你的第一个模型 +--- + +## 步骤1:上传并标注你的图片 + +在请求你的第一个模型之前,你需要向Frigate+上传并验证至少10张图片。上传、标注和验证的图片越多,结果就会越好。大多数用户在每个摄像头至少有100张已验证的图片后就开始看到非常好的结果。请记住要包含各种不同的条件。你需要在阴天、晴天、黎明、黄昏和夜间的图片。有关如何直接从Frigate轻松提交图片到Frigate+的说明,请参阅[集成文档](../integrations/plus.md#generate-an-api-key)。 + +建议同时提交**正确检测样本**和**误报样本**。这将帮助模型区分什么是正确的检测,什么是错误的检测。你应该在所有图片中争取达到80%的正确检测样本和20%的误报样本的目标。如果你在特定区域遇到误报,在相似光照条件下提交该区域附近任何对象类型的正确检测样本将有助于教会模型在没有对象存在时该区域的样子。 + +有关更详细的建议,你可以参考[改进你的模型](./improving_model.md)的文档。 + +## 步骤2:提交模型请求 + +一旦你有了初始的已验证图片集,你就可以在模型页面上请求一个模型。关于选择模型类型的指导,请参考[文档的这一部分](./index.md#available-model-types)。每个模型请求需要使用年度订阅中包含的12次训练中的1次。这个模型将支持所有[可用的标签类型](./index.md#available-label-types),即使你没有为这些标签提交任何示例。模型创建可能需要长达36小时。 +![Plus模型页面](/img/plus/plus-models.jpg) + +## 步骤3:在配置中设置你的模型ID + +当你的Frigate+模型准备就绪时,你将收到电子邮件通知。 +![模型就绪邮件](/img/plus/model-ready-email.jpg) + +Frigate+中可用的模型可以使用特殊的模型路径。不需要配置其他信息,因为它会自动从Frigate+获取剩余的配置。 + +```yaml +model: + path: plus:// +``` + +:::note + +模型ID不是秘密值,可以自由共享。对你的模型的访问由你的API密钥保护。 + +::: + +## 步骤4:调整你的对象过滤器以获得更高的分数 + +Frigate+模型通常比Frigate提供的默认模型有更高的分数。你可能需要增加你的`threshold`和`min_score`值。以下是如何优化这些值的示例,但你应该预期这些值会随着模型的改进而演变。有关`threshold`和`min_score`如何相关的更多信息,请参见[对象过滤器](../configuration/object_filters.md#object-scores)文档。 + +```yaml +objects: + filters: + dog: + min_score: .7 + threshold: .9 + cat: + min_score: .65 + threshold: .8 + face: + min_score: .7 + package: + min_score: .65 + threshold: .9 + license_plate: + min_score: .6 + amazon: + min_score: .75 + ups: + min_score: .75 + fedex: + min_score: .75 + person: + min_score: .65 + threshold: .85 + car: + min_score: .65 + threshold: .85 +``` \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/plus/improving_model.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/plus/improving_model.md new file mode 100644 index 000000000..4828dafb8 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/plus/improving_model.md @@ -0,0 +1,54 @@ +--- +id: improving_model +title: 优化你的模型 +--- + +你可能会发现Frigate+模型最初会产生更多误报,但通过提交正确检测样本和误报样本,模型会不断改进。随着订阅用户提交的新图像越来越多,未来的基础模型也会随之改进。请注意,只有包含至少一个已验证标签的图像才会用于训练你的模型。从Frigate提交图像作为正确检测或误报样本不会自动验证该图像,你仍需在Frigate+中验证图像才能用于训练。 + +- **同时提交正确检测样本和误报样本**:这有助于模型区分正确和错误的检测。建议保持80%的正确检测样本和20%的误报样本的比例。如果在特定区域出现误报,在相似光照条件下提交该区域附近任何对象类型的正确检测样本,将帮助模型学习无对象时该区域的特征。 + +- **适当降低阈值以获取阈值附近更多样本**:例如,如果有68%分数的误报和72%分数的正确检测,可以尝试将阈值降至65%并提交该范围内的样本。这有助于模型学习并扩大正确检测与误报之间的分数差距。 + +- **提交多样化的图像**:最佳效果需要每个摄像头至少100张已验证图像。需包含不同条件下的样本:阴天、晴天、黎明、黄昏和夜间。当环境变化时(如夏季转冬季或有新家具时),可能需要提交新样本来应对新型误报。 + +## 正确标注图像 + +遵循以下指南可获得最佳效果: + +**标注图像中每个对象**:验证前标注所有对象很重要。如果未标注汽车,模型会误认为该区域不是汽车。可以排除不想检测的标签。 + +**使用紧密的边界框**:更精确的边界框能提高识别准确率,确保运行时预测的边界框更精准。 + +**即使被遮挡也要标注完整对象**:如人物被汽车遮挡,仍应标注整个人物。这有助于预测准确边界框,提高区域准确性和运行时过滤效果。若对象部分在画面外,仅当人眼可识别时才标注。 + +**难以识别的对象标记为"困难"**:当对象确实难以辨认时(如灌木丛后隐约可见的汽车或夜间难辨的狗),标记为"困难"。目前这不影响训练,但未来会纳入考量。 + +**快递标识如`amazon`、`ups`和`fedex`应单独标注**:对Fedex卡车,用`car`标注整车,再为Fedex标识单独标注边界框。多个标识需分别标注。 + +![Fedex标识](/img/plus/fedex-logo.jpg) + +## 误报标注 + +误报会显示红色框和删除线标签。 +![误报示例](/img/plus/false-positive.jpg) + +错误识别的对象应添加正确标签。例如若将人误识别为猫,应在Frigate中提交为误报并添加人物标签。边界框会重叠。 + +![重叠标注示例](/img/plus/false-positive-overlap.jpg) + +## 快捷操作指南 + +| 快捷键 | 功能描述 | +| --------------- | ------------------------- | +| `?` | 显示所有快捷键 | +| `w` | 添加边界框 | +| `d` | 切换困难标记 | +| `s` | 切换至下一个标签 | +| `tab` | 选择下一个最大边界框 | +| `del` | 删除当前边界框 | +| `esc` | 取消选择/取消操作 | +| `← ↑ → ↓` | 移动边界框 | +| `Shift+方向键` | 调整边界框大小 | +| `滚轮` | 缩放视图 | +| `f` | 隐藏/显示非当前边界框 | +| `空格键` | 验证并保存 | \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/plus/index.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/plus/index.md new file mode 100644 index 000000000..05494c55a --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/plus/index.md @@ -0,0 +1,88 @@ +--- +id: index +title: 模型 +--- + +Frigate+ 提供基于Frigate+用户从安防摄像头提交的图像训练的模型,这些模型专门为Frigate分析视频的方式设计。这些模型能以更少资源提供更高准确性。您上传的图像用于微调一个基于所有Frigate+用户上传图像训练的基础模型,最终得到一个针对您特定环境优化的高精度模型。 + +:::info + +订阅后基础模型不会直接可用。未来可能会改变,但目前您需要提交包含最低数量图像的模型请求。 + +::: + +订阅包含每年12次模型训练。取消订阅后,您仍可保留已训练模型的使用权。提交模型请求或购买额外训练需要有效订阅。 + +集成Frigate+的方法请参阅[集成文档](../integrations/plus.md)。 + +## 可用模型类型 + +Frigate+提供两种模型类型:`mobiledet`和`yolonas`。两者都是目标检测模型,能检测[下方列出的相同标签](#可用标签类型)。 + +不是所有检测器都支持所有模型类型,请根据[支持的检测器类型](#支持的检测器类型)表格选择匹配您检测器的模型。 + +| 模型类型 | 描述 | +| ---------- | ----------------------------------------------------------------------------------------------------- | +| `mobiledet` | 基于与Frigate默认模型相同的架构。可在Google Coral设备和CPU上运行。 | +| `yolonas` | 新架构,精度略高且对小目标检测有改进。支持Intel、NVIDIA GPU和AMD GPU。 | + +## 支持的检测器类型 + +目前Frigate+模型支持CPU(`cpu`)、Google Coral(`edgetpu`)、OpenVino(`openvino`)和ONNX(`onnx`)检测器。 + +:::warning + +Frigate+模型与`onnx`检测器的配合使用仅限Frigate 0.15及以上版本。 + +::: + +| 硬件 | 推荐检测器类型 | 推荐模型类型 | +| ------------------------------------------------------------------------------------------------------------------------ | -------------- | ------------ | +| [CPU](/configuration/object_detectors.md#cpu检测器不推荐使用) | `cpu` | `mobiledet` | +| [Coral(所有形态)](/configuration/object_detectors.md#edge-tpu检测器) | `edgetpu` | `mobiledet` | +| [Intel](/configuration/object_detectors.md#openvino检测器) | `openvino` | `yolonas` | +| [NVIDIA GPU](https://deploy-preview-13787--frigate-docs.netlify.app/configuration/object_detectors#onnx)\* | `onnx` | `yolonas` | +| [AMD ROCm GPU](https://deploy-preview-13787--frigate-docs.netlify.app/configuration/object_detectors#amdrocm-gpu检测器)\* | `onnx` | `yolonas` | + +_\* 需要Frigate 0.15版本_ + +## 可用标签类型 + +Frigate+模型支持更适合安防摄像头的对象集。当前支持以下对象: + +- **人物**:`person`、`face` +- **车辆**:`car`、`motorcycle`、`bicycle`、`boat`、`license_plate` +- **快递标识**:`amazon`、`usps`、`ups`、`fedex`、`dhl`、`an_post`、`purolator`、`postnl`、`nzpost`、`postnord`、`gls`、`dpd` +- **动物**:`dog`、`cat`、`deer`、`horse`、`bird`、`raccoon`、`fox`、`bear`、`cow`、`squirrel`、`goat`、`rabbit` +- **其他**:`package`、`waste_bin`、`bbq_grill`、`robot_lawnmower`、`umbrella` + +Frigate默认模型中的其他对象类型暂不支持。未来版本将增加更多对象类型。 + +### 标签属性 + +使用Frigate+模型时,某些标签有特殊处理方式。`face`、`license_plate`及快递标识如`amazon`、`ups`和`fedex`被视为属性标签,不会像常规对象那样被追踪,也不会直接生成核查项。此外,`threshold`过滤器对这些标签无效,您需要根据需要调整`min_score`和其他过滤值。 + +要启用这些属性标签,需将其添加到追踪对象列表: + +```yaml +objects: + track: + - person + - face + - license_plate + - dog + - cat + - car + - amazon + - fedex + - ups + - package +``` + +使用Frigate+模型时,系统会为人物对象选择面部最清晰的快照,为车辆选择车牌最清晰的快照。这有助于面部识别和车牌识别等二次处理。 + +![面部属性示例](/img/plus/attribute-example-face.jpg) + +快递标识如`amazon`、`ups`和`fedex`用于自动为车辆对象分配子标签。 + +![Fedex属性示例](/img/plus/attribute-example-fedex.jpg) \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/edgetpu.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/edgetpu.md new file mode 100644 index 000000000..1e1f9e887 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/edgetpu.md @@ -0,0 +1,84 @@ +--- +id: edgetpu +title: EdgeTPU故障排除 +--- + +## USB Coral未被检测到 + +USB coral未被检测到可能有多种原因,有些是特定操作系统的问题。理解USB coral的工作原理很重要: + +1. 当设备首次插入且未初始化时,运行`lsusb`或在HA OS的硬件页面中查看时会显示为`1a6e:089a Global Unichip Corp.` +2. 初始化后,运行`lsusb`或在HA OS的硬件页面中查看时会显示为`18d1:9302 Google Inc.` + +:::tip + +在Frigate使用coral进行推理之前,使用`lsusb`或查看HA OS的硬件页面时会显示为`1a6e:089a Global Unichip Corp.`。因此在Frigate尝试检测coral之前,不用担心这个标识。 + +::: + +如果coral无法初始化,Frigate就无法与其通信。基于USB的Coral无法初始化的一些常见原因包括: + +### 供电不足 + +USB coral可能需要高达900mA的电流,这对某些设备上的USB端口来说可能太高,特别是对RPi这样的小型单板计算机。如果coral无法初始化,建议采取以下步骤: + +1. 尝试使用不同的端口,某些端口能提供更大的功率。 +2. 确保使用USB3端口,这对于供电和确保coral以最高速度运行都很重要。 +3. 尝试使用不同的数据线,一些用户发现随附的数据线效果不佳。 +4. 使用外部供电的USB集线器。 + +### 设备访问权限不正确 + +USB coral在未初始化和初始化状态下有不同的ID。 + +- 在VM、Proxmox lxc等环境中运行Frigate时,必须确保两个设备ID都已映射。 +- 通过Home Assistant OS运行时,可能需要运行完全访问版本的Frigate插件,并禁用_保护模式_开关以访问coral。 + +### Synology 716+II运行DSM 7.2.1-69057 Update 5 + +一些用户报告这款较旧的设备运行较旧的内核,导致coral无法被检测到。以下步骤可以帮助正确检测: + +1. 将coral TPU插入NAS的任意USB端口 +2. 打开控制面板-信息界面。coral TPU会显示为通用设备。 +3. 在配置中启用Coral TPU并启动docker容器 +4. TPU会被检测到,但几分钟后会断开连接。 +5. 保持TPU设备插入状态,通过UI中的重启命令重启NAS。不要拔掉NAS电源或关机。 +6. 打开控制面板-信息界面。coral TPU现在会被识别为USB设备 - google inc +7. 启动frigate容器。现在一切应该正常工作了! + +## USB Coral检测似乎卡住 + +USB Coral可能会卡住需要重启,这可能由多种硬件和软件设置原因导致。一些常见原因是: + +1. 一些用户发现coral随附的数据线会导致这个问题,换用其他数据线可以完全解决。 +2. 在VM中运行Frigate可能导致与设备的通信中断需要重置。 + +## PCIe Coral未被检测到 + +PCIe Coral未被检测到最常见的原因是驱动程序未安装。这个过程因操作系统和内核版本而异。 + +- 在大多数情况下,[Coral文档](https://coral.ai/docs/m2/get-started/#2-install-the-pcie-driver-and-edge-tpu-runtime)展示了如何为基于PCIe的Coral安装驱动程序。 +- 对于Ubuntu 22.04+,可以使用https://github.com/jnicolson/gasket-builder 来构建和安装最新版本的驱动程序。 + +## 尝试加载TPU为pci时出现"Fatal Python error: Illegal instruction" + +这是由于在新的linux内核上使用过时的gasket驱动程序导致的问题。从https://github.com/jnicolson/gasket-builder 安装更新的驱动程序据报可以解决此问题。 + +### 在Raspberry Pi5上无法检测 + +由于RPi5的内核更新,需要更新config.txt,详见[树莓派论坛的更多信息](https://forums.raspberrypi.com/viewtopic.php?t=363682&sid=cb59b026a412f0dc041595951273a9ca&start=25) + +具体来说,需要在config.txt中添加以下内容: + +``` +dtoverlay=pciex1-compat-pi5,no-mip +dtoverlay=pcie-32bit-dma-pi5 +``` + +## Coral Dual EdgeTPU只检测到一个PCIe Coral + +Coral Dual EdgeTPU是一张带有两个相同TPU核心的卡。每个核心都有自己的PCIe接口,主板需要在m.2插槽上有两个PCIe总线才能使它们都工作。 + +完全符合m.2机电规范的E-key插槽有两个PCIe总线。大多数主板制造商在m.2 E-key连接器中只实现一个PCIe总线(这就是为什么只有一个TPU工作)。一些SBC的m.2连接器上可能只有USB总线,即两个TPU都无法工作。 + +在这种情况下,建议使用Dual EdgeTPU适配器,[比如MagicBlueSmoke的这款](https://github.com/magic-blue-smoke/Dual-Edge-TPU-Adapter)。 \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/faqs.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/faqs.md new file mode 100644 index 000000000..4904ddc75 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/faqs.md @@ -0,0 +1,112 @@ +--- +id: faqs +title: 常见问题解答 +--- + +### Python致命错误: Bus error + +此错误是由于共享内存(shm-size)设置过小导致的。请根据[此指南](../frigate/installation.md#calculating-required-shm-size)调整shm-size大小。 + +### 如何在录像中添加音频? {#audio-in-recordings} + +默认情况下,Frigate会移除录像中的音频以减少因无效数据导致失败的概率。如需保留音频,需要设置支持音频的[FFmpeg预设](/configuration/ffmpeg_presets): + +```yaml +ffmpeg: + output_args: + record: preset-record-generic-audio-aac +``` + +### 如何在实时监控中获取音频? + +仅当配置了go2rtc时才支持实时监控音频,详见[实时监控文档](../configuration/live.md)。 + +### 无法在Web界面查看录像 + +请确保摄像头发送的是h264编码视频,或[进行转码](/configuration/restream.md)。 + +可在Chrome浏览器打开`chrome://media-internals/`页面尝试播放,该页面会显示播放失败的具体原因。 + +### 摄像头子码流质量不佳怎么办? + +Frigate通常[推荐使用可配置子码流的摄像头](/frigate/hardware.md)。若子码流分辨率不合适,可对主码流进行缩放处理。 + +高效缩放需要满足以下条件: +1. 需配备GPU或集成显卡进行缩放处理 +2. 需使用[硬件加速的ffmpeg预设](/configuration/hardware_acceleration.md) +3. 在配置中设置`detect -> width`和`detect -> height`为期望的检测分辨率 + +正确配置后,GPU将负责解码和缩放,CPU占用仅小幅增加但效果更佳。 + +### MJPEG流或快照显示异常绿色画面 + +这通常表示摄像头配置的分辨率(width/height)不正确。请使用VLC等播放器确认实际分辨率,并检查宽高值是否颠倒。 + +![分辨率不匹配](/img/mismatched-resolution-min.jpg) + +### 日志中出现"[mov,mp4,m4a,3gp,3g2,mj2 @ 0x5639eeb6e140] moov atom not found" + +某些情况下出现此日志信息是正常的。Frigate会在存储前检查录像文件完整性,偶尔这些缓存文件会无效并自动清理。 + +### 日志中重复出现"On connect called" + +若日志频繁出现"On connect called"信息,请检查是否有多个Frigate实例。当多个容器使用相同`client_id`连接MQTT时会出现此情况。 + +### 错误:Database Is Locked + +SQLite在网络共享存储上运行不佳。若`/media`目录映射到网络共享,请按照[此指南](../configuration/advanced.md#database)将数据库移至内部存储。 + +### 无法发布到MQTT:客户端未连接 + +在Docker中使用MQTT时,请使用MQTT服务器的实际IP地址,而非`localhost`、`127.0.0.1`或`mosquitto.ix-mosquitto.svc.cluster.local`。 + +因为Frigate容器不在host网络模式下运行,localhost指向的是容器自身而非宿主机网络。 + +### 如何判断摄像头是否离线 + +可通过MQTT或/api/stats接口检测,离线摄像头的camera_fps会显示为0。 + +此外,当摄像头离线时,Home Assistant会将其标记为不可用状态。 + +### 如何不通过Web界面查看Frigate日志? + +Frigate既会内部管理日志,也会直接输出到Docker标准输出。通过CLI查看日志的步骤如下: + +1. 在运行Frigate容器的主机上打开终端 +2. 执行以下命令: + ``` + docker logs -f frigate + ``` + 注意:若容器名称不是"frigate",请替换为实际名称。"-f"参数表示实时跟踪日志更新,按`Ctrl+C`可退出。 + +更多日志查看选项可参考Docker[官方文档](https://docs.docker.com/engine/reference/commandline/logs/)。 + +另外,创建容器时可绑定主机目录到`/dev/shm/logs`,既持久化日志又便于使用日志分析工具: + +``` +docker run -d \ + --name frigate \ + --restart=unless-stopped \ + --mount type=tmpfs,target=/tmp/cache,tmpfs-size=1000000000 \ + --device /dev/bus/usb:/dev/bus/usb \ + --device /dev/dri/renderD128 \ + --shm-size=64m \ + -v /path/to/your/storage:/media/frigate \ + -v /path/to/your/config:/config \ + -v /etc/localtime:/etc/localtime:ro \ + -v /path/to/local/log/dir:/dev/shm/logs \ + -e FRIGATE_RTSP_PASSWORD='password' \ + -p 5000:5000 \ + -p 8554:8554 \ + -p 8555:8555/tcp \ + -p 8555:8555/udp \ + ghcr.io/blakeblackshear/frigate:stable +``` + +### RTSP流在VLC中正常播放,但在Frigate配置中使用相同URL却失败,这是bug吗? + +不是。Frigate使用TCP协议连接RTSP流,而VLC会根据网络条件自动切换UDP/TCP协议。VLC能播放而Frigate失败,很可能是因为VLC选择了UDP协议。 + +TCP能确保数据包有序到达,这对视频录制、解码和流处理至关重要,因此Frigate强制使用TCP连接。UDP速度更快但可靠性较低,VLC的要求与Frigate不同。 + +如需使用UDP协议,可通过ffmpeg输入参数或`preset-rtsp-udp`预设配置,详见[ffmpeg预设文档](/configuration/ffmpeg_presets)。 \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/recordings.md b/docs/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/recordings.md new file mode 100644 index 000000000..b5fac6374 --- /dev/null +++ b/docs/i18n/zh/docusaurus-plugin-content-docs/current/troubleshooting/recordings.md @@ -0,0 +1,82 @@ +--- +id: recordings +title: 录制故障排除 +--- + +## 我已将Frigate配置为仅在有运动时录制,但即使没有运动也似乎在录制。为什么? + +你需要: + +- 确保摄像头的时间戳被运动遮罩覆盖。即使场景中没有运动,如果运动检测设置过于敏感,可能会将时间戳计为运动。 +- 如果启用了音频检测,请记住任何高于`min_volume`的音频都会被视为运动。 +- 通过编辑配置文件或使用UI中的运动调节器来[调整你的运动检测设置](/configuration/motion_detection)。 + +## 我看到警告信息:WARNING : Unable to keep up with recording segments in cache for camera. Keeping the 5 most recent segments out of 6 and discarding the rest...(无法跟上摄像头录制片段的缓存。保留6个中最新的5个片段,丢弃其余部分...) + +这个错误可能由多个不同的问题引起。故障排除的第一步是为录制启用调试日志。这将启用显示录制从RAM缓存移动到磁盘所需时间的日志。 + +```yaml +logger: + logs: + frigate.record.maintainer: debug +``` + +这将包含如下日志: + +``` +DEBUG : Copied /media/frigate/recordings/{segment_path} in 0.2 seconds. +``` + +重要的是要让它运行直到错误开始发生,以确认在错误发生时磁盘是否存在速度减慢的情况。 + +#### 复制时间 > 1秒 + +如果存储速度太慢无法跟上录制,维护程序将落后并清除最旧的录制,以确保缓存不会填满导致崩溃。在这种情况下,重要的是要诊断复制时间慢的原因。 + +##### 检查RAM、交换空间、缓存利用率和磁盘利用率 + +如果CPU、RAM、磁盘吞吐量或总线I/O不足,Frigate内部的任何设置都无法帮助。重要的是要检查每个可用系统资源的方面。 + +在Linux上,一些有用的诊断工具/命令包括: + +- docker stats +- htop +- iotop -o +- iostat -sxy --human 1 1 +- vmstat 1 + +在现代Linux内核上,如果启用了交换空间,系统会使用一些交换空间。设置vm.swappiness=1不再意味着内核只会在避免OOM时才进行交换。要防止容器内的任何交换,请将分配内存和内存+交换设置为相同值,并通过设置以下docker/podman运行参数来禁用交换: + +**Docker Compose示例** + +```yaml +services: + frigate: + ... + mem_swappiness: 0 + memswap_limit: + deploy: + resources: + limits: + memory: +``` + +**运行命令示例** + +``` +--memory= --memory-swap= --memory-swappiness=0 +``` + +注意:这些是容器的硬限制,请确保在`docker stats`显示的容器使用量之上有足够的余量。如果达到``,它将立即停止。通常,在可能的情况下,将所有缓存和临时文件空间运行在RAM中比磁盘I/O更可取。 + +##### 检查存储类型 + +挂载网络共享是存储录制的流行选择,但这可能导致复制时间减慢并造成问题。一些用户发现使用`NFS`而不是`SMB`可以显著减少复制时间并解决问题。同时确保运行Frigate的设备与网络共享之间的网络连接稳定且快速也很重要。 + +##### 检查挂载选项 + +一些用户发现通过`fstab`使用`sync`选项挂载驱动器会导致性能大幅下降并引发此问题。使用`async`替代可以大大减少复制时间。 + +#### 复制时间 < 1秒 + +如果存储工作速度很快,那么此错误可能是由于机器上的CPU负载太高,Frigate没有足够的资源来跟上。尝试暂时关闭其他服务,看看问题是否改善。 \ No newline at end of file diff --git a/docs/i18n/zh/docusaurus-theme-classic/footer.json b/docs/i18n/zh/docusaurus-theme-classic/footer.json new file mode 100644 index 000000000..d230c8144 --- /dev/null +++ b/docs/i18n/zh/docusaurus-theme-classic/footer.json @@ -0,0 +1,18 @@ +{ + "link.title.Community": { + "message": "社区", + "description": "The title of the footer links column with title=Community in the footer" + }, + "link.item.label.GitHub": { + "message": "GitHub", + "description": "The label of footer link with label=GitHub linking to https://github.com/blakeblackshear/frigate" + }, + "link.item.label.Discussions": { + "message": "论坛", + "description": "The label of footer link with label=Discussions linking to https://github.com/blakeblackshear/frigate/discussions" + }, + "copyright": { + "message": "Copyright © 2025 Blake Blackshear", + "description": "The footer copyright" + } +} diff --git a/docs/i18n/zh/docusaurus-theme-classic/navbar.json b/docs/i18n/zh/docusaurus-theme-classic/navbar.json new file mode 100644 index 000000000..222965133 --- /dev/null +++ b/docs/i18n/zh/docusaurus-theme-classic/navbar.json @@ -0,0 +1,26 @@ +{ + "title": { + "message": "Frigate", + "description": "导航栏中的标题" + }, + "logo.alt": { + "message": "Frigate", + "description": "导航栏logo的替代文本" + }, + "item.label.Docs": { + "message": "文档", + "description": "导航栏中标记为Docs的菜单项" + }, + "item.label.Website": { + "message": "官网", + "description": "导航栏中标记为Website的菜单项" + }, + "item.label.Demo": { + "message": "演示Demo", + "description": "导航栏中标记为Demo的菜单项" + }, + "item.label.GitHub": { + "message": "GitHub", + "description": "导航栏中标记为GitHub的菜单项" + } +} \ No newline at end of file