实例介绍
Frigate - NVR With Realtime Object Detection for IP Cameras是一个完整的本地NVR,专为Home Assistant设计,具有AI对象检测功能。它利用OpenCV和Tensorflow在IP摄像头上进行实时对象检测。
【实例截图】【核心代码】
文件清单
└── frigate-4165639308763154deb2526657eb865a68cc8e5a
├── audio-labelmap.txt
├── benchmark_motion.py
├── benchmark.py
├── CODEOWNERS
├── config
│ └── config.yml.example
├── cspell.json
├── docker
│ ├── main
│ │ ├── build_nginx.sh
│ │ ├── build_ov_model.py
│ │ ├── Dockerfile
│ │ ├── fake_frigate_run
│ │ ├── install_deps.sh
│ │ ├── install_s6_overlay.sh
│ │ ├── requirements-dev.txt
│ │ ├── requirements-ov.txt
│ │ ├── requirements.txt
│ │ ├── requirements-wheels.txt
│ │ └── rootfs
│ │ ├── etc
│ │ │ └── s6-overlay
│ │ │ └── s6-rc.d
│ │ │ ├── frigate
│ │ │ │ ├── dependencies.d
│ │ │ │ │ └── go2rtc
│ │ │ │ ├── finish
│ │ │ │ ├── producer-for
│ │ │ │ ├── run
│ │ │ │ ├── timeout-kill
│ │ │ │ └── type
│ │ │ ├── frigate-log
│ │ │ │ ├── consumer-for
│ │ │ │ ├── dependencies.d
│ │ │ │ │ └── log-prepare
│ │ │ │ ├── pipeline-name
│ │ │ │ ├── run
│ │ │ │ └── type
│ │ │ ├── go2rtc
│ │ │ │ ├── dependencies.d
│ │ │ │ │ └── base
│ │ │ │ ├── finish
│ │ │ │ ├── producer-for
│ │ │ │ ├── run
│ │ │ │ ├── timeout-kill
│ │ │ │ └── type
│ │ │ ├── go2rtc-healthcheck
│ │ │ │ ├── dependencies.d
│ │ │ │ │ └── go2rtc
│ │ │ │ ├── finish
│ │ │ │ ├── producer-for
│ │ │ │ ├── run
│ │ │ │ ├── timeout-kill
│ │ │ │ └── type
│ │ │ ├── go2rtc-log
│ │ │ │ ├── consumer-for
│ │ │ │ ├── dependencies.d
│ │ │ │ │ └── log-prepare
│ │ │ │ ├── pipeline-name
│ │ │ │ ├── run
│ │ │ │ └── type
│ │ │ ├── log-prepare
│ │ │ │ ├── dependencies.d
│ │ │ │ │ └── base
│ │ │ │ ├── run
│ │ │ │ ├── type
│ │ │ │ └── up
│ │ │ ├── nginx
│ │ │ │ ├── dependencies.d
│ │ │ │ │ └── frigate
│ │ │ │ ├── finish
│ │ │ │ ├── producer-for
│ │ │ │ ├── run
│ │ │ │ ├── timeout-kill
│ │ │ │ └── type
│ │ │ ├── nginx-log
│ │ │ │ ├── consumer-for
│ │ │ │ ├── dependencies.d
│ │ │ │ │ └── log-prepare
│ │ │ │ ├── pipeline-name
│ │ │ │ ├── run
│ │ │ │ └── type
│ │ │ └── user
│ │ │ └── contents.d
│ │ │ ├── frigate-pipeline
│ │ │ ├── go2rtc-pipeline
│ │ │ └── nginx-pipeline
│ │ └── usr
│ │ └── local
│ │ ├── go2rtc
│ │ │ └── create_config.py
│ │ └── nginx
│ │ └── conf
│ │ ├── auth_location.conf
│ │ ├── auth_request.conf
│ │ ├── nginx.conf
│ │ ├── proxy.conf
│ │ └── proxy_trusted_headers.conf
│ ├── rockchip
│ │ ├── Dockerfile
│ │ ├── requirements-wheels-rk.txt
│ │ ├── rk.hcl
│ │ └── rk.mk
│ ├── rocm
│ │ ├── Dockerfile
│ │ ├── migraphx
│ │ │ ├── CMakeLists.txt
│ │ │ └── migraphx_py.cpp
│ │ ├── rocm.hcl
│ │ ├── rocm.list
│ │ ├── rocm.mk
│ │ ├── rocm-pin-600
│ │ └── rootfs
│ │ └── etc
│ │ └── s6-overlay
│ │ └── s6-rc.d
│ │ ├── compile-rocm-models
│ │ │ ├── dependencies.d
│ │ │ │ └── download-models
│ │ │ ├── run
│ │ │ ├── type
│ │ │ └── up
│ │ └── frigate
│ │ └── dependencies.d
│ │ └── compile-rocm-models
│ ├── rpi
│ │ ├── Dockerfile
│ │ ├── install_deps.sh
│ │ ├── rpi.hcl
│ │ └── rpi.mk
│ └── tensorrt
│ ├── build_jetson_ffmpeg.sh
│ ├── detector
│ │ ├── build_python_tensorrt.sh
│ │ ├── rootfs
│ │ │ └── etc
│ │ │ ├── ld.so.conf.d
│ │ │ │ └── cuda_tensorrt.conf
│ │ │ └── s6-overlay
│ │ │ └── s6-rc.d
│ │ │ ├── frigate
│ │ │ │ └── dependencies.d
│ │ │ │ └── trt-model-prepare
│ │ │ └── trt-model-prepare
│ │ │ ├── dependencies.d
│ │ │ │ └── base
│ │ │ ├── run
│ │ │ ├── type
│ │ │ └── up
│ │ └── tensorrt_libyolo.sh
│ ├── Dockerfile.amd64
│ ├── Dockerfile.arm64
│ ├── Dockerfile.base
│ ├── requirements-amd64.txt
│ ├── requirements-arm64.txt
│ ├── requirements-models-arm64.txt
│ ├── trt.hcl
│ └── trt.mk
├── docker-compose.yml
├── docs
│ ├── babel.config.js
│ ├── docs
│ │ ├── configuration
│ │ │ ├── advanced.md
│ │ │ ├── audio_detectors.md
│ │ │ ├── authentication.md
│ │ │ ├── autotracking.md
│ │ │ ├── birdseye.md
│ │ │ ├── cameras.md
│ │ │ ├── camera_specific.md
│ │ │ ├── ffmpeg_presets.md
│ │ │ ├── hardware_acceleration.md
│ │ │ ├── index.md
│ │ │ ├── live.md
│ │ │ ├── masks.md
│ │ │ ├── motion_detection.md
│ │ │ ├── object_detectors.md
│ │ │ ├── object_filters.md
│ │ │ ├── objects.mdx
│ │ │ ├── record.md
│ │ │ ├── reference.md
│ │ │ ├── restream.md
│ │ │ ├── review.md
│ │ │ ├── snapshots.md
│ │ │ ├── stationary_objects.md
│ │ │ └── zones.md
│ │ ├── development
│ │ │ ├── contributing-boards.md
│ │ │ └── contributing.md
│ │ ├── frigate
│ │ │ ├── camera_setup.md
│ │ │ ├── glossary.md
│ │ │ ├── hardware.md
│ │ │ ├── index.md
│ │ │ ├── installation.md
│ │ │ └── video_pipeline.md
│ │ ├── guides
│ │ │ ├── configuring_go2rtc.md
│ │ │ ├── getting_started.md
│ │ │ ├── ha_network_storage.md
│ │ │ ├── ha_notifications.md
│ │ │ └── reverse_proxy.md
│ │ ├── integrations
│ │ │ ├── api.md
│ │ │ ├── home-assistant.md
│ │ │ ├── mqtt.md
│ │ │ ├── plus.md
│ │ │ └── third_party_extensions.md
│ │ ├── mdx.md
│ │ ├── plus
│ │ │ ├── faq.md
│ │ │ ├── first_model.md
│ │ │ ├── improving_model.md
│ │ │ └── index.md
│ │ └── troubleshooting
│ │ ├── edgetpu.md
│ │ ├── faqs.md
│ │ └── recordings.md
│ ├── docusaurus.config.js
│ ├── package.json
│ ├── package-lock.json
│ ├── plugins
│ │ └── raw-loader.js
│ ├── README.md
│ ├── sidebars.js
│ ├── src
│ │ └── css
│ │ └── custom.css
│ └── static
│ └── img
│ ├── annotate.png
│ ├── autotracking-debug.gif
│ ├── bottom-center.jpg
│ ├── bottom-center-mask.jpg
│ ├── camera-ui.png
│ ├── diagram.png
│ ├── driveway_zones-min.png
│ ├── driveway_zones.png
│ ├── events-ui.png
│ ├── example-mask-poly-min.png
│ ├── example-mask-poly.png
│ ├── favicon.ico
│ ├── frigate-autotracking-example.gif
│ ├── frigate.png
│ ├── home-ui.png
│ ├── live-view.png
│ ├── logo-dark.svg
│ ├── logo.svg
│ ├── media_browser-min.png
│ ├── media_browser.png
│ ├── mismatched-resolution.jpg
│ ├── mismatched-resolution-min.jpg
│ ├── notification-min.png
│ ├── notification.png
│ ├── plus
│ │ ├── attribute-example-face.jpg
│ │ ├── attribute-example-fedex.jpg
│ │ ├── false-positive.jpg
│ │ ├── false-positive-overlap.jpg
│ │ ├── fedex-logo.jpg
│ │ ├── model-ready-email.jpg
│ │ ├── plus-models.jpg
│ │ ├── send-to-plus.jpg
│ │ └── submit-to-plus.jpg
│ ├── plus-api-key-min.png
│ ├── resolutions-min.jpg
│ ├── resolutions.png
│ └── review-items.png
├── frigate
│ ├── api
│ │ ├── app.py
│ │ ├── auth.py
│ │ ├── event.py
│ │ ├── export.py
│ │ ├── __init__.py
│ │ ├── media.py
│ │ ├── preview.py
│ │ └── review.py
│ ├── app.py
│ ├── comms
│ │ ├── config_updater.py
│ │ ├── detections_updater.py
│ │ ├── dispatcher.py
│ │ ├── events_updater.py
│ │ ├── inter_process.py
│ │ ├── mqtt.py
│ │ └── ws.py
│ ├── config.py
│ ├── const.py
│ ├── detectors
│ │ ├── detection_api.py
│ │ ├── detector_config.py
│ │ ├── detector_types.py
│ │ ├── __init__.py
│ │ ├── plugins
│ │ │ ├── cpu_tfl.py
│ │ │ ├── deepstack.py
│ │ │ ├── edgetpu_tfl.py
│ │ │ ├── __init__.py
│ │ │ ├── onnx.py
│ │ │ ├── openvino.py
│ │ │ ├── rknn.py
│ │ │ ├── rocm.py
│ │ │ └── tensorrt.py
│ │ └── util.py
│ ├── events
│ │ ├── audio.py
│ │ ├── cleanup.py
│ │ ├── external.py
│ │ ├── __init__.py
│ │ ├── maintainer.py
│ │ └── types.py
│ ├── ffmpeg_presets.py
│ ├── images
│ │ ├── birdseye.png
│ │ └── camera-error.jpg
│ ├── __init__.py
│ ├── log.py
│ ├── __main__.py
│ ├── models.py
│ ├── motion
│ │ ├── frigate_motion.py
│ │ ├── improved_motion.py
│ │ └── __init__.py
│ ├── mypy.ini
│ ├── object_detection.py
│ ├── object_processing.py
│ ├── output
│ │ ├── birdseye.py
│ │ ├── camera.py
│ │ ├── output.py
│ │ └── preview.py
│ ├── plus.py
│ ├── ptz
│ │ ├── autotrack.py
│ │ └── onvif.py
│ ├── record
│ │ ├── cleanup.py
│ │ ├── export.py
│ │ ├── __init__.py
│ │ ├── maintainer.py
│ │ ├── record.py
│ │ └── util.py
│ ├── review
│ │ ├── __init__.py
│ │ ├── maintainer.py
│ │ └── review.py
│ ├── stats
│ │ ├── emitter.py
│ │ ├── __init__.py
│ │ └── util.py
│ ├── storage.py
│ ├── test
│ │ ├── const.py
│ │ ├── __init__.py
│ │ ├── test_birdseye.py
│ │ ├── test_camera_pw.py
│ │ ├── test_config.py
│ │ ├── test_copy_yuv_to_position.py
│ │ ├── test_ffmpeg_presets.py
│ │ ├── test_gpu_stats.py
│ │ ├── test_http.py
│ │ ├── test_object_detector.py
│ │ ├── test_record_retention.py
│ │ ├── test_reduce_boxes.py
│ │ ├── test_storage.py
│ │ ├── test_video.py
│ │ └── test_yuv_region_2_rgb.py
│ ├── timeline.py
│ ├── track
│ │ ├── centroid_tracker.py
│ │ ├── __init__.py
│ │ └── norfair_tracker.py
│ ├── types.py
│ ├── util
│ │ ├── builtin.py
│ │ ├── config.py
│ │ ├── image.py
│ │ ├── object.py
│ │ └── services.py
│ ├── video.py
│ └── watchdog.py
├── labelmap.txt
├── LICENSE
├── Makefile
├── migrations
│ ├── 001_create_events_table.py
│ ├── 002_add_clip_snapshot.py
│ ├── 003_create_recordings_table.py
│ ├── 004_add_bbox_region_area.py
│ ├── 005_make_end_time_nullable.py
│ ├── 006_add_motion_active_objects.py
│ ├── 007_add_retain_indefinitely.py
│ ├── 008_add_sub_label.py
│ ├── 009_add_object_filter_ratio.py
│ ├── 010_add_plus_image_id.py
│ ├── 011_update_indexes.py
│ ├── 012_add_segment_size.py
│ ├── 013_create_timeline_table.py
│ ├── 014_event_updates_for_fp.py
│ ├── 015_event_refactor.py
│ ├── 016_sublabel_increase.py
│ ├── 017_update_indexes.py
│ ├── 018_add_dbfs.py
│ ├── 019_create_regions_table.py
│ ├── 020_update_index_recordings.py
│ ├── 021_create_previews_table.py
│ ├── 022_create_review_segment_table.py
│ ├── 023_add_regions.py
│ ├── 024_create_export_table.py
│ └── 025_create_user_table.py
├── netlify.toml
├── process_clip.py
├── pyproject.toml
├── README.md
└── web
├── components.json
├── images
│ ├── apple-touch-icon.png
│ ├── favicon-16x16.png
│ ├── favicon-32x32.png
│ ├── favicon.ico
│ ├── favicon.png
│ ├── favicon.svg
│ ├── marker.png
│ └── mstile-150x150.png
├── index.html
├── login.html
├── package.json
├── package-lock.json
├── postcss.config.js
├── public
│ ├── fonts
│ │ ├── Inter-BlackItalic.woff2
│ │ ├── Inter-Black.woff2
│ │ ├── Inter-BoldItalic.woff2
│ │ ├── Inter-Bold.woff2
│ │ ├── Inter-ExtraBoldItalic.woff2
│ │ ├── Inter-ExtraBold.woff2
│ │ ├── Inter-ExtraLightItalic.woff2
│ │ ├── Inter-ExtraLight.woff2
│ │ ├── Inter-Italic.woff2
│ │ ├── Inter-LightItalic.woff2
│ │ ├── Inter-Light.woff2
│ │ ├── Inter-MediumItalic.woff2
│ │ ├── Inter-Medium.woff2
│ │ ├── Inter-Regular.woff2
│ │ ├── Inter-SemiBoldItalic.woff2
│ │ ├── Inter-SemiBold.woff2
│ │ ├── Inter-ThinItalic.woff2
│ │ └── Inter-Thin.woff2
│ ├── images
│ │ ├── android-chrome-192x192.png
│ │ ├── android-chrome-512x512.png
│ │ ├── apple-touch-icon.png
│ │ └── maskable-icon.png
│ └── vite.svg
├── README.md
├── site.webmanifest
├── src
│ ├── api
│ │ ├── baseUrl.ts
│ │ ├── index.tsx
│ │ └── ws.tsx
│ ├── App.tsx
│ ├── components
│ │ ├── auth
│ │ │ └── AuthForm.tsx
│ │ ├── bar
│ │ │ └── TimelineBar.tsx
│ │ ├── camera
│ │ │ ├── AutoUpdatingCameraImage.tsx
│ │ │ ├── CameraImage.tsx
│ │ │ ├── DebugCameraImage.tsx
│ │ │ └── ResizingCameraImage.tsx
│ │ ├── card
│ │ │ ├── AnimatedEventCard.tsx
│ │ │ ├── ExportCard.tsx
│ │ │ └── ReviewCard.tsx
│ │ ├── dynamic
│ │ │ ├── CameraFeatureToggle.tsx
│ │ │ ├── NewReviewData.tsx
│ │ │ └── TimeAgo.tsx
│ │ ├── filter
│ │ │ ├── CameraGroupSelector.tsx
│ │ │ ├── FilterSwitch.tsx
│ │ │ ├── LogLevelFilter.tsx
│ │ │ ├── ReviewActionGroup.tsx
│ │ │ ├── ReviewFilterGroup.tsx
│ │ │ └── ZoneMaskFilter.tsx
│ │ ├── graph
│ │ │ └── SystemGraph.tsx
│ │ ├── icons
│ │ │ ├── FrigatePlusIcon.tsx
│ │ │ ├── IconPicker.tsx
│ │ │ └── LiveIcons.tsx
│ │ ├── indicators
│ │ │ ├── activity-indicator.tsx
│ │ │ ├── CameraActivityIndicator.tsx
│ │ │ ├── Chip.tsx
│ │ │ └── ImageLoadingIndicator.tsx
│ │ ├── Logo.tsx
│ │ ├── menu
│ │ │ ├── AccountSettings.tsx
│ │ │ └── GeneralSettings.tsx
│ │ ├── navigation
│ │ │ ├── Bottombar.tsx
│ │ │ ├── NavItem.tsx
│ │ │ ├── Redirect.tsx
│ │ │ └── Sidebar.tsx
│ │ ├── overlay
│ │ │ ├── CreateUserDialog.tsx
│ │ │ ├── DeleteUserDialog.tsx
│ │ │ ├── ExportDialog.tsx
│ │ │ ├── LogInfoDialog.tsx
│ │ │ ├── MobileCameraDrawer.tsx
│ │ │ ├── MobileReviewSettingsDrawer.tsx
│ │ │ ├── MobileTimelineDrawer.tsx
│ │ │ ├── ReviewActivityCalendar.tsx
│ │ │ ├── SaveExportOverlay.tsx
│ │ │ ├── SetPasswordDialog.tsx
│ │ │ ├── TimelineDataOverlay.tsx
│ │ │ └── VainfoDialog.tsx
│ │ ├── player
│ │ │ ├── BirdseyeLivePlayer.tsx
│ │ │ ├── dynamic
│ │ │ │ ├── DynamicVideoController.ts
│ │ │ │ └── DynamicVideoPlayer.tsx
│ │ │ ├── HlsVideoPlayer.tsx
│ │ │ ├── JSMpegPlayer.tsx
│ │ │ ├── LivePlayer.tsx
│ │ │ ├── MsePlayer.tsx
│ │ │ ├── PreviewPlayer.tsx
│ │ │ ├── PreviewThumbnailPlayer.tsx
│ │ │ ├── VideoControls.tsx
│ │ │ └── WebRTCPlayer.tsx
│ │ ├── settings
│ │ │ ├── Authentication.tsx
│ │ │ ├── General.tsx
│ │ │ ├── MasksAndZones.tsx
│ │ │ ├── MotionMaskEditPane.tsx
│ │ │ ├── MotionTuner.tsx
│ │ │ ├── ObjectMaskEditPane.tsx
│ │ │ ├── ObjectSettings.tsx
│ │ │ ├── PolygonCanvas.tsx
│ │ │ ├── PolygonDrawer.tsx
│ │ │ ├── PolygonEditControls.tsx
│ │ │ ├── PolygonItem.tsx
│ │ │ └── ZoneEditPane.tsx
│ │ ├── Statusbar.tsx
│ │ ├── timeline
│ │ │ ├── EventReviewTimeline.tsx
│ │ │ ├── EventSegment.tsx
│ │ │ ├── MotionReviewTimeline.tsx
│ │ │ ├── MotionSegment.tsx
│ │ │ ├── ReviewTimeline.tsx
│ │ │ ├── segment-metadata.tsx
│ │ │ ├── SummarySegment.tsx
│ │ │ └── SummaryTimeline.tsx
│ │ ├── ui
│ │ │ ├── alert-dialog.tsx
│ │ │ ├── aspect-ratio.tsx
│ │ │ ├── badge.tsx
│ │ │ ├── button.tsx
│ │ │ ├── calendar.tsx
│ │ │ ├── card.tsx
│ │ │ ├── context-menu.tsx
│ │ │ ├── dialog.tsx
│ │ │ ├── drawer.tsx
│ │ │ ├── dropdown-menu.tsx
│ │ │ ├── form.tsx
│ │ │ ├── heading.tsx
│ │ │ ├── hover-card.tsx
│ │ │ ├── icon-wrapper.tsx
│ │ │ ├── input.tsx
│ │ │ ├── label.tsx
│ │ │ ├── popover.tsx
│ │ │ ├── radio-group.tsx
│ │ │ ├── scroll-area.tsx
│ │ │ ├── select.tsx
│ │ │ ├── separator.tsx
│ │ │ ├── sheet.tsx
│ │ │ ├── skeleton.tsx
│ │ │ ├── slider.tsx
│ │ │ ├── sonner.tsx
│ │ │ ├── switch.tsx
│ │ │ ├── table.tsx
│ │ │ ├── tabs.tsx
│ │ │ ├── text.tsx
│ │ │ ├── toggle-group.tsx
│ │ │ ├── toggle.tsx
│ │ │ └── tooltip.tsx
│ │ └── Wrapper.tsx
│ ├── context
│ │ ├── providers.tsx
│ │ ├── statusbar-provider.tsx
│ │ └── theme-provider.tsx
│ ├── env.ts
│ ├── hooks
│ │ ├── resize-observer.ts
│ │ ├── use-api-filter.ts
│ │ ├── use-camera-activity.ts
│ │ ├── use-camera-live-mode.ts
│ │ ├── use-camera-previews.ts
│ │ ├── use-contextmenu.ts
│ │ ├── use-date-utils.ts
│ │ ├── use-deep-memo.ts
│ │ ├── use-draggable-element.ts
│ │ ├── use-event-segment-utils.ts
│ │ ├── use-fullscreen.ts
│ │ ├── use-image-loaded.ts
│ │ ├── use-keyboard-listener.tsx
│ │ ├── use-motion-segment-utils.ts
│ │ ├── use-mouse-listener.ts
│ │ ├── use-navigation.ts
│ │ ├── use-optimistic-state.ts
│ │ ├── use-overlay-state.tsx
│ │ ├── use-persistence.ts
│ │ ├── use-stats.ts
│ │ ├── use-tap-utils.ts
│ │ └── use-timeline-utils.ts
│ ├── index.css
│ ├── lib
│ │ ├── formatTimeAgo.ts
│ │ └── utils.ts
│ ├── login.tsx
│ ├── main.tsx
│ ├── pages
│ │ ├── ConfigEditor.tsx
│ │ ├── Events.tsx
│ │ ├── Exports.tsx
│ │ ├── Live.tsx
│ │ ├── LoginPage.tsx
│ │ ├── Logs.tsx
│ │ ├── NoMatch.tsx
│ │ ├── Settings.tsx
│ │ ├── SubmitPlus.tsx
│ │ ├── System.tsx
│ │ └── UIPlayground.tsx
│ ├── types
│ │ ├── canvas.ts
│ │ ├── draggable-element.ts
│ │ ├── event.ts
│ │ ├── export.ts
│ │ ├── filter.ts
│ │ ├── frigateConfig.ts
│ │ ├── graph.ts
│ │ ├── live.ts
│ │ ├── log.ts
│ │ ├── navigation.ts
│ │ ├── playback.ts
│ │ ├── preview.ts
│ │ ├── ptz.ts
│ │ ├── record.ts
│ │ ├── review.ts
│ │ ├── stats.ts
│ │ ├── timeline.ts
│ │ ├── user.ts
│ │ └── ws.ts
│ ├── utils
│ │ ├── canvasUtil.ts
│ │ ├── dateUtil.ts
│ │ ├── iconUtil.tsx
│ │ ├── isPWA.ts
│ │ ├── stringUtil.ts
│ │ ├── timelineUtil.tsx
│ │ └── zoneEdutUtil.ts
│ ├── views
│ │ ├── events
│ │ │ ├── EventView.tsx
│ │ │ └── RecordingView.tsx
│ │ ├── live
│ │ │ ├── DraggableGridLayout.tsx
│ │ │ ├── LiveBirdseyeView.tsx
│ │ │ ├── LiveCameraView.tsx
│ │ │ └── LiveDashboardView.tsx
│ │ └── system
│ │ ├── CameraMetrics.tsx
│ │ ├── GeneralMetrics.tsx
│ │ └── StorageMetrics.tsx
│ └── vite-env.d.ts
├── tailwind.config.js
├── themes
│ ├── tailwind-base.css
│ ├── theme-blue.css
│ ├── theme-default.css
│ ├── theme-gold.css
│ ├── theme-green.css
│ ├── theme-nature.css
│ ├── theme-netflix.css
│ ├── theme-nord.css
│ ├── theme-orange.css
│ └── theme-red.css
├── tsconfig.json
├── tsconfig.node.json
└── vite.config.ts
122 directories, 575 files
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论