{"id":15013310,"url":"https://github.com/lilacmeteorobservatory/metdetpy","last_synced_at":"2025-04-12T04:42:08.578Z","repository":{"id":55047792,"uuid":"484503953","full_name":"LilacMeteorObservatory/MetDetPy","owner":"LilacMeteorObservatory","description":"A python-based meteor detector that can detect meteors from video and image files.","archived":false,"fork":false,"pushed_at":"2025-01-21T03:57:20.000Z","size":25857,"stargazers_count":29,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-20T17:12:32.163Z","etag":null,"topics":["astronomy","detection","meteor","meteor-detection","opencv"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/LilacMeteorObservatory.png","metadata":{"files":{"readme":"docs/readme-cn.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-04-22T16:38:36.000Z","updated_at":"2025-01-21T03:06:28.000Z","dependencies_parsed_at":"2024-01-06T19:33:40.132Z","dependency_job_id":"99a5f86d-5057-49bc-867c-daf74c50a0b3","html_url":"https://github.com/LilacMeteorObservatory/MetDetPy","commit_stats":{"total_commits":139,"total_committers":1,"mean_commits":139.0,"dds":0.0,"last_synced_commit":"f9b0ce0c242a557797f185c03a1474f645e483f6"},"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LilacMeteorObservatory%2FMetDetPy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LilacMeteorObservatory%2FMetDetPy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LilacMeteorObservatory%2FMetDetPy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LilacMeteorObservatory%2FMetDetPy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LilacMeteorObservatory","download_url":"https://codeload.github.com/LilacMeteorObservatory/MetDetPy/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239918727,"owners_count":19718393,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["astronomy","detection","meteor","meteor-detection","opencv"],"created_at":"2024-09-24T19:44:04.094Z","updated_at":"2025-02-20T21:30:53.080Z","avatar_url":"https://github.com/LilacMeteorObservatory.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"  \u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"../imgs/banner.png\"/\u003e\n\n[![GitHub release](https://img.shields.io/github/release/LilacMeteorObservatory/MetDetPy.svg)](https://github.com/LilacMeteorObservatory/MetDetPy/releases/latest) [![GitHub Release Date](https://img.shields.io/github/release-date/LilacMeteorObservatory/MetDetPy.svg)](https://github.com/LilacMeteorObservatory/MetDetPy/releases/latest) [![license](https://img.shields.io/github/license/LilacMeteorObservatory/MetDetPy)](./LICENSE) [![Github All Releases](https://img.shields.io/github/downloads/LilacMeteorObservatory/MetDetPy/total.svg)](https://github.com/LilacMeteorObservatory/MetDetPy/releases)\n\n\u003ccenter\u003e语言: \u003ca href=\"../readme.md\"\u003eEnglish\u003c/a\u003e | 简体中文 \u003c/center\u003e\n\n\u003c/div\u003e\n\n## 简介\n\nMetDetPy 是一个基于 python 开发的，可从直录视频或图像中检测流星的检测器。其视频检测受到[uzanka/MeteorDetector](https://github.com/uzanka/MeteorDetector)项目的启发。MetDetPy具有以下优点：\n\n* **易于使用且可配置：** MetDetPy设计有易用的默认配置，多数情况下无需详细配置参数即可以进行高效的流星检测，并且也支持修改设置以获得更好的检测结果。\n\n* **适用于各种设备和曝光时间：** MetDetPy可以从各种设备拍摄的视频及图像中检测流星。借助一系列自适应算法与深度学习模型，MetDetPy对从流星监控到数码相机拍摄的数据都能较好工作。\n\n* **低 CPU 使用率：** MetDetPy 工作时对 CPU 和内存占用率较低，可支持在主流电脑或准系统上进行多摄像头输入的实时检测。\n\n* **可选的深度学习模型接入：** MetDetPy 已接入深度学习支持，可以在主检测或重校验阶段选择性使用深度学习模型，在不显著增加性能开销的情况下提升检测效果。模型也可用于图像中的流星检测。\n\n* **有效的过滤器：** 流星结果将根据其视觉特性与运动属性进行重校验以排除误报样本。每个预测都将被给出一个取值范围为 `[0,1]` 的置信度分数，表示其被认为是流星的可能性。\n\n* **丰富的支持工具：** MetDetPy 还提供了数个工具以支持评估和导出功能，包括一个评估工具和剪辑工具，以支持进行高效的视频切片、图像堆叠或结果评估。\n\n## 发行版\n\n你可以从 [Release](https://github.com/LilacMeteorObservatory/MetDetPy/releases) 处获取最新的MetDetPy发行版。发行版将 MetDetPy 进行了打包，可独立在主流平台运行（Windows，macOS及Linux）。你也可以自行使用 `nuitka` 或 `pyinstaller` 构建独立的可执行文件（见 [打包Python代码为可执行程序](#打包Python代码为可执行程序))。\n\n此外，MetDetPy 从 Meteor Master 的 1.2.0 版本开始作为其后端。Meteor Master (AI)是由 [奔跑的龟斯](https://www.photohelper.cn) 开发的流星检测软件，在MetDetPy的基础上提供了完善的GUI，多种直播流支持，便捷的导出和自动启停等功能。可以从 [Meteor Master官方网站](https://www.photohelper.cn/MeteorMaster) 获取更多信息，或从微软商店/App Store获取其最新版。其早期版本可从 [百度网盘](https://pan.baidu.com/s/1B-O8h4DT89y_u1_YKXKGhA) (Access Code: jz01) 获取。\n\n## 运行需求\n\n### 环境\n\n* 64bit OS\n* Python\u003e=3.7 (推荐 3.9+)\n\n### Python 依赖\n\n* numpy\u003e=1.15.0\n* opencv_python\u003e=4.9.0\n* tqdm\u003e=4.0.0\n* easydict\u003e=1.0\n* multiprocess\u003e=0.70.0\n* onnxruntime\u003e=1.16.0\n\n可以通过如下指令安装依赖：\n\n```sh\npip install -r requirements.txt\n```\n\n### GPU 支持\n\n上述软件包能够使 MetDetPy 正常运行，但深度学习模型仅支持在 CPU 设备上运行。如果希望利用 GPU，可以按照以下方式额外安装或替换 onnxruntime 相关库：\n\n* **Windows/Linux 用户（推荐）：** 如果您使用的是 Windows 或 Linux，建议额外安装 `onnxruntime_directml`。该库利用 DirectX 进行模型推理加速，适用于大多数 GPU（包括 Nvidia、AMD、Intel 等厂商的显卡）。\n\n* **Nvidia GPU 用户（高级）：** 如果您使用的是 Nvidia GPU 并且已安装 CUDA，可以安装与 CUDA 版本匹配的 `onnxruntime-gpu` 代替 `onnxruntime`。这可以启用 CUDA 加速，从而带来更高的性能。\n\n#### ⚠️ 注意\n\n* 对于 macOs 用户，CoreML模型推理加速已经被集成到 `onnxruntime` 中，无需额外配置即可启用GPU支持。\n\n* 在当前发布版本中，Windows 软件包使用 `onnxruntime_directml`。默认的 CUDA 支持将在准备好后添加。\n\n## 用法\n\n### 视频流星检测\n\n`MetDetPy` 是视频流星检测的启动器，其用法如下：\n\n```sh\npython MetDetPy.py target [--cfg CFG] [--mask MASK] [--start-time START_TIME] [--end-time END_TIME] \n               [--exp-time EXP_TIME] [--mode {backend,frontend}] [--debug]\n               [--resize RESIZE] [--adaptive-thre ADAPTIVE_THRE] [--bi-thre BI_THRE | --sensitivity SENSITIVITY]\n               [--recheck RECHECK] [--save-rechecked-img SAVE_RECHECKED_IMG]\n               [--provider {cpu,default,coreml,dml,cuda}][--live-mode {on,off}][--save SAVE]\n```\n\n#### 主要参数\n\n* `target`: 待检测视频文件。支持常见的视频编码。\n\n* `--cfg`: 配置文件。默认情况下使用config目录下的[m3det_normal.json](../config/m3det_normal.json)文件。\n\n* `--mask`：指定掩模（遮罩）图像。可以使用任何非白色颜色的颜色在空白图像上覆盖不需要检测的区域来创建掩馍图像。不强制要求尺寸与原图相同。支持JPEG和PNG格式。\n\n* `--start-time`：检测的开始时间。可以输入单位为ms的整数或是形如`\"HH:MM:SS\"`的字符串。默认从头开始分析。\n\n* `--end-time`：检测的结束时间。可以输入单位为ms的整数或是形如`\"HH:MM:SS\"`的字符串。不指定将分析到视频结尾。\n\n* `--mode`：运行模式。从 `{backend, frontend}` 中选择。`frontend` 运行时会显示运行相关信息的进度条，backend 则具有随时刷新的输出流，适合作为后端时使用管道进行输出。默认情况下使用 `frontend`。\n\n* `--debug`: 调试模式。以调试模式启动 MetDetPy 时，会打印更详细的日志信息用于调试。\n\n* `--visu`: 可视模式。以可视模式启动时，会创建一个额外视频窗口，显示当前的检测情况。\n\n* `--live-mode`: 实时模式。当在实时模式下运行时，检测的运行时间将会被控制在尽可能接近实际视频时长的程度，这可以帮助均衡CPU的开销。 从 `{on, off}` 中选择。\n\n* `--provider`: 指定优先使用的模型后端，可选值会根据平台有所差异。如果指定的模型后端不可用，则会使用默认选项。\n\n* `--save-path`: 保存[MDRF](./tool-usage.md#meteor-detection-recording-format-mdrf)格式的检测结果到给定的路径或JSON文件下。\n\n#### 额外参数\n\n以下参数在不设置时使用配置文件中的默认值，如果设置则覆盖配置文件中的数值。有关这些参数的详细解释可以参考[配置文件文档](./config-doc-cn.md)。\n\n* `--resize`: 检测时采用的帧图像尺寸。可以指定单个整数（如`960`，代表长边长度），列表（如`[960,540]`）或者字符串（如`960x540`）。\n\n* `--exp-time`: 单帧曝光时间。可用一个浮点数或从 `{auto, real-time, slow}` 中选择一项以指定。大多数情况下可以使用 `\"auto\"`。\n\n* `--adaptive-thre`: 检测器中是否启用自适应二值化阈值。从{on, off}中选择。\n\n* `--bi-thre`: 指定检测器中使用的二值化阈值。当启用自适应二值化阈值时，该选项无效化。不能与`--sensitivity`同时设置。\n\n* `--sensitivity`: 检测器的灵敏度。从 `{low, normal, high}` 中选择。当启用自适应二值化阈值时，灵敏度选项仍起效，且更高的灵敏度将会估计更高的阈值。不能与 `--bi-thre` 同时设置。\n\n* `--recheck`: 启用重校验机制减少误报。从`{on, off}`中选择。\n\n#### 示例\n\n```sh\npython MetDetPy.py \"./test/20220413Red.mp4\" --mask \"./test/mask-east.jpg\" --visu --save-path .\n```\n\n#### 自定义配置文件\n\n大多数与检测相关的重要参数都预先定义并储存在配置文件中。大多数情况下，这些预设值都能够较好的工作，但有时对参数微调可以取得更好的结果。如果想要获取配置文件的说明，可以参考[配置文件文档](./config-doc-cn.md)获取更多信息。\n\n### 图像流星检测\n\n`MetDetPhoto` 是图像流星检测的启动器，其用法如下：\n\n```sh\npython MetDetPhoto.py target [--mask MASK]\n                             [--model-path MODEL_PATH] [--model-type MODEL_TYPE] \n                             [--exclude-noise] [--debayer] [--debayer-pattern DEBAYER_PATTERN]\n                             [--visu] [--visu-resolution VISU_RESOLUTION]\n                             [--save-path SAVE_PATH]\n```\n\n#### 参数\n\n* `target`: 目标图像文件/文件夹。支持单张图像，图像文件夹以及常规视频编码格式的延时视频文件。\n\n* `--mask`: 掩模图像。可以使用任何非白色颜色的颜色在空白图像上覆盖不需要检测的区域来创建掩馍图像。不强制要求尺寸与原图相同。支持JPEG和PNG格式。\n\n* `--model-path`: 模型权重文件路径。默认使用[./weights/yolov5s_v2.onnx](./weights/yolov5s_v2.onnx)权重。\n\n* `--model-type`: 模型格式，决定如何处理模型的输出。目前仅支持 `YOLO` 格式。默认值为 `YOLO`。\n\n* `--exclude-noise`: 输出时从预测排除常见噪声类型（如卫星和飞虫），仅保存正样本到文件。\n\n* `--debayer`: 是否在处理延时视频前对视频帧进行Debayer变换。\n\n* `--debayer-pattern`: Debayer使用的矩阵，如 RGGB 或 BGGR。仅在 `--debayer` 选项启用时生效。\n\n* `--visu`: 可视模式。以可视模式启动时，会创建一个额外视频窗口，显示当前的检测情况。\n\n* `--visu-resolution`: 可视化窗口的分辨率设置。\n\n* `--save-path`: 保存检测结果到 [MDRF](./tool-usage.md#meteor-detection-recording-format-mdrf) 格式文件中。\n\n#### 示例\n\n```sh\npython MetDetPhoto.py \"/path/to/your/folder\" --mask \"/path/to/your/mask.jpg\" --exclude-noise --save-path .\n```\n\n### 其他工具的使用\n\nMetDetPy还提供了数个工具以支持评估和导出功能，包括Evaluate（效果评估和回归测试工具）、ClipToolkit （批图像堆栈和视频剪辑工具）和make_package（打包脚本）。访问[工具文档](./tool-usage-cn.md)了解这些工具的使用方法。\n\n## 性能和效率\n\n1. 在 3840x2160 10fps 视频上应用默认配置进行检测时，MetDetPy 检测流星的平均时间开销为视频长度的 20-30%（使用 Intel i5-7500 测试）。 FPS 较高的视频可能会花费更多时间。\n\n2. 我们使用从各种设备（从改装监控摄像头到数码相机）拍摄的样本视频测试 MetDetPy，MetDetPy 平均能够达到 80% 以上的准确率和 80% 以上的召回率。\n\n3. MetDetPy 现在可以快速高效地检测大多数流星视频。 但当面对复杂的天气或其他影响因素时，其准确率和召回率还有待提高。 如果您发现 MetDetPy 在您的视频上表现不够好，欢迎联系我们或提交问题（如果可以的话，一并提供完整或剪辑的视频）。\n\n## 许可\n\n该项目根据 Mozilla 公共许可证 2.0 (MPL-2.0) 获得许可。这意味着您可以自由使用、修改和分发该软件，但须满足以下条件：\n\n* 源代码可用性：您对源代码所做的任何修改也必须在 MPL-2.0 许可证下可用。这确保了社区可以从改进和变化中受益。\n* 文件级 Copyleft：您可以将此软件与不同许可证下的其他代码结合使用，但对 MPL-2.0 许可文件的任何修改都必须保留在同一许可证下。\n* 无保证：软件按“原样”提供，不提供任何形式的明示或暗示的保证。使用风险自负。\n\n欲了解更多详细信息，请参阅[MPL-2.0许可证](https://www.mozilla.org/en-US/MPL/2.0/)。\n\n## 附录\n\n### 特别鸣谢\n\nuzanka [[Github]](https://github.com/uzanka)\n\n奔跑的龟斯 [[Personal Website]](https://photohelper.cn) [[Weibo]](https://weibo.com/u/1184392917) [[Bilibili]](https://space.bilibili.com/401484)\n\n纸片儿 [[Github]](https://github.com/ArtisticZhao)\n\nDustYe夜尘 [[Bilibili]](https://space.bilibili.com/343640654)\n\nRoyalK [[Weibo]](https://weibo.com/u/2244860993) [[Bilibili]](https://space.bilibili.com/259900185)\n\nMG_Raiden扬 [[Weibo]](https://weibo.com/811151123) [[Bilibili]](https://space.bilibili.com/11282636)\n\n星北之羽 [[Bilibili]](https://space.bilibili.com/366525868/)\n\nLittleQ\n\n韩雅南\n\n来自偶然\n\n杨雳鹏\n\n兔爷 [[Weibo]](https://weibo.com/u/2094322147)[[Bilibili]](https://space.bilibili.com/1044435613)\n\nJeff戴建峰 [[Weibo]](https://weibo.com/1957056403) [[Bilibili]](https://space.bilibili.com/474329765)\n\n贾昊\n\n### 更新日志 / TODO列表\n\n见 [更新日志](update-log.md)。\n\n### 统计数据\n\n[![Star History Chart](https://api.star-history.com/svg?repos=LilacMeteorObservatory/MetDetPy\u0026type=Timeline)](https://star-history.com/#LilacMeteorObservatory/MetDetPy\u0026Timeline)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flilacmeteorobservatory%2Fmetdetpy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flilacmeteorobservatory%2Fmetdetpy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flilacmeteorobservatory%2Fmetdetpy/lists"}