[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-gaganmanku96--Finding-missing-person-using-AI":3,"tool-gaganmanku96--Finding-missing-person-using-AI":64},[4,17,27,35,43,56],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":16},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,3,"2026-04-05T11:01:52",[13,14,15],"开发框架","图像","Agent","ready",{"id":18,"name":19,"github_repo":20,"description_zh":21,"stars":22,"difficulty_score":23,"last_commit_at":24,"category_tags":25,"status":16},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",138956,2,"2026-04-05T11:33:21",[13,15,26],"语言模型",{"id":28,"name":29,"github_repo":30,"description_zh":31,"stars":32,"difficulty_score":23,"last_commit_at":33,"category_tags":34,"status":16},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",107662,"2026-04-03T11:11:01",[13,14,15],{"id":36,"name":37,"github_repo":38,"description_zh":39,"stars":40,"difficulty_score":23,"last_commit_at":41,"category_tags":42,"status":16},3704,"NextChat","ChatGPTNextWeb\u002FNextChat","NextChat 是一款轻量且极速的 AI 助手，旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性，以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发，NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。\n\n这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言，它也提供了便捷的自托管方案，支持一键部署到 Vercel 或 Zeabur 等平台。\n\nNextChat 的核心亮点在于其广泛的模型兼容性，原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型，让用户在一个界面即可自由切换不同 AI 能力。此外，它还率先支持 MCP（Model Context Protocol）协议，增强了上下文处理能力。针对企业用户，NextChat 提供专业版解决方案，具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能，满足公司对数据隐私和个性化管理的高标准要求。",87618,"2026-04-05T07:20:52",[13,26],{"id":44,"name":45,"github_repo":46,"description_zh":47,"stars":48,"difficulty_score":23,"last_commit_at":49,"category_tags":50,"status":16},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",84991,"2026-04-05T10:45:23",[14,51,52,53,15,54,26,13,55],"数据工具","视频","插件","其他","音频",{"id":57,"name":58,"github_repo":59,"description_zh":60,"stars":61,"difficulty_score":10,"last_commit_at":62,"category_tags":63,"status":16},3128,"ragflow","infiniflow\u002Fragflow","RAGFlow 是一款领先的开源检索增强生成（RAG）引擎，旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体（Agent）能力相结合，不仅支持从各类文档中高效提取知识，还能让模型基于这些知识进行逻辑推理和任务执行。\n\n在大模型应用中，幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构（如表格、图表及混合排版），显著提升了信息检索的准确度，从而有效减少模型“胡编乱造”的现象，确保回答既有据可依又具备时效性。其内置的智能体机制更进一步，使系统不仅能回答问题，还能自主规划步骤解决复杂问题。\n\n这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统，还是致力于探索大模型在垂直领域落地的创新者，都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口，既降低了非算法背景用户的上手门槛，也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目，它正成为连接通用大模型与行业专有知识之间的重要桥梁。",77062,"2026-04-04T04:44:48",[15,14,13,26,54],{"id":65,"github_repo":66,"name":67,"description_en":68,"description_zh":69,"ai_summary_zh":70,"readme_en":71,"readme_zh":72,"quickstart_zh":73,"use_case_zh":74,"hero_image_url":75,"owner_login":76,"owner_name":77,"owner_avatar_url":78,"owner_bio":79,"owner_company":80,"owner_location":81,"owner_email":82,"owner_twitter":80,"owner_website":80,"owner_url":83,"languages":84,"stars":89,"forks":90,"last_commit_at":91,"license":80,"difficulty_score":23,"env_os":92,"env_gpu":93,"env_ram":92,"env_deps":94,"category_tags":105,"github_topics":106,"view_count":23,"oss_zip_url":80,"oss_zip_packed_at":80,"status":16,"created_at":118,"updated_at":119,"faqs":120,"releases":160},3285,"gaganmanku96\u002FFinding-missing-person-using-AI","Finding-missing-person-using-AI","The project focuses on Tracking missing people. We are using Image processing and Machine learning along with Postgres Database. ","Finding-missing-person-using-AI 是一款专为协助寻找失踪人员而设计的开源智能系统。面对每天大量人口（尤其是儿童）失踪、传统人工比对照片效率低下且容易错失黄金救援时间的痛点，该项目提供了一套自动化的解决方案。\n\n该系统主要服务于执法部门、公益组织以及相关领域的开发者。其核心工作流程简洁高效：当家属报案时，警官只需上传照片，系统即可利用 AI 自动检测人脸并提取高精度的 468 点面部网格特征，无需人工标记；随后，公众可通过门户提交疑似目击照片，系统后台会自动运用 KNN 机器学习模型，将新提交的面部特征与所有未结案件进行快速比对。一旦发现匹配度高的目标，系统会自动更新案件状态为“已找到”并通知相关人员，同时通过仪表盘直观展示案件分布地图和统计趋势。\n\n在技术实现上，项目结合了先进的图像处理与机器学习技术，依托 MediaPipe 进行精准的人脸关键点提取，使用 Python 构建逻辑，并通过数据库高效存储和管理案例数据。此外，项目特别注重隐私保护，仅本地存储用于匹配的面部特征向量，不商业化或泄露原始个人图像。这不仅提升了寻人效率，也为构建更安全的社区提供了有","Finding-missing-person-using-AI 是一款专为协助寻找失踪人员而设计的开源智能系统。面对每天大量人口（尤其是儿童）失踪、传统人工比对照片效率低下且容易错失黄金救援时间的痛点，该项目提供了一套自动化的解决方案。\n\n该系统主要服务于执法部门、公益组织以及相关领域的开发者。其核心工作流程简洁高效：当家属报案时，警官只需上传照片，系统即可利用 AI 自动检测人脸并提取高精度的 468 点面部网格特征，无需人工标记；随后，公众可通过门户提交疑似目击照片，系统后台会自动运用 KNN 机器学习模型，将新提交的面部特征与所有未结案件进行快速比对。一旦发现匹配度高的目标，系统会自动更新案件状态为“已找到”并通知相关人员，同时通过仪表盘直观展示案件分布地图和统计趋势。\n\n在技术实现上，项目结合了先进的图像处理与机器学习技术，依托 MediaPipe 进行精准的人脸关键点提取，使用 Python 构建逻辑，并通过数据库高效存储和管理案例数据。此外，项目特别注重隐私保护，仅本地存储用于匹配的面部特征向量，不商业化或泄露原始个人图像。这不仅提升了寻人效率，也为构建更安全的社区提供了有力的技术辅助。","# Missing Person Identification System\n\n![Issues](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fissues\u002Fgaganmanku96\u002FFinding-missing-person-using-AI) ![Stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fgaganmanku96\u002FFinding-missing-person-using-AI?style=social)\n![CodeRabbit Reviews](https:\u002F\u002Fimg.shields.io\u002Fcoderabbit\u002Fprs\u002Fgithub\u002Fgaganmanku96\u002FFinding-missing-person-using-AI?utm_source=oss&utm_medium=github&utm_campaign=gaganmanku96%2FFinding-missing-person-using-AI&labelColor=171717&color=FF570A&link=https%3A%2F%2Fcoderabbit.ai&label=CodeRabbit+Reviews)\n\n![Streamlit](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FStreamlit-000000?style=for-the-badge&logo=streamlit&logoColor=white)\n![MediaPipe](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FMediaPipe-000000?style=for-the-badge&logo=mediapipe&logoColor=white)\n![Python](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPython-000000?style=for-the-badge&logo=python&logoColor=white)\n![SQLite](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FSQLite-000000?style=for-the-badge&logo=sqlite&logoColor=white)\n\n> [![LinkedIn](https:\u002F\u002Fi.stack.imgur.com\u002FgVE0j.png) Endorse on LinkedIn](https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fgaganmanku96\u002F) if this project was helpful.\n\n---\n\n> **Disclaimer**\n>\n> All images of individuals appearing in the screenshots and used as sample data in this project were sourced from the internet solely for the purpose of demonstrating the facial recognition pipeline in a non-commercial, educational context. These images are the property of their respective owners. No claim of ownership is made. If you are the rights holder of any image and wish it to be removed, please open an issue and it will be taken down promptly.\n>\n> This project does not store, distribute, or commercialise any personal images. The face data derived from sample images (landmark vectors) is used only locally for matching demonstration and is not shared with any third party.\n\n---\n\n## Table of Contents\n\n- [The Problem](#the-problem)\n- [A Case, Start to Finish](#a-case-start-to-finish)\n- [How It Works](#how-it-works)\n- [Features](#features)\n- [Getting Started](#getting-started)\n- [Configuring Login Credentials](#configuring-login-credentials)\n- [Seeding Demo Data](#seeding-demo-data)\n- [Tech Stack](#tech-stack)\n- [FAQ](#faq)\n\n---\n\n## The Problem\n\nHundreds of people — mostly children — go missing every day in India. When a sighting is reported, officers have to manually compare photos, sift through paperwork, and coordinate across stations. By the time a match is confirmed, the trail has often gone cold.\n\n---\n\n## A Case, Start to Finish\n\n**Step 1 — Family files a report. Officer registers the case.**\n\nA family in Haridwar reports their child missing. An officer opens the portal, uploads a photo, and the AI immediately detects the face and extracts a 468-point mesh — no manual tagging needed.\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fgaganmanku96_Finding-missing-person-using-AI_readme_c97183dbda73.png\" alt=\"Register New Case — face detected with bounding box\" width=\"700\"\u002F>\n\n---\n\n**Step 2 — The dashboard tracks every open case.**\n\nThe officer's home screen shows live counts of found and not-found cases, and a map that plots where cases are concentrated across India.\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fgaganmanku96_Finding-missing-person-using-AI_readme_03a9898f705e.png\" alt=\"Officer dashboard with case counts and India map\" width=\"700\"\u002F>\n\n---\n\n**Step 3 — A member of the public submits a sighting.**\n\nSomeone recognises the person and submits a photo through the public portal (no login required). The same face mesh is extracted and stored.\n\nWhen an admin clicks **Match Cases**, the KNN model compares all sightings against all open cases. If a face is close enough, the case is automatically flipped to **Found** and the complainant is notified by email.\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fgaganmanku96_Finding-missing-person-using-AI_readme_9ffe06b0cfa3.png\" alt=\"View cases — Found status with sighting location and submitter details\" width=\"700\"\u002F>\n\n---\n\n**Step 4 — The city map tells the bigger picture.**\n\nAdmins can see which cities have the most unresolved cases and track resolution rates over time.\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fgaganmanku96_Finding-missing-person-using-AI_readme_b3ef2aac8c3e.png\" alt=\"Cases by city — India map with city summary table\" width=\"700\"\u002F>\n\n---\n\n## How It Works\n\n1. **Officer registers a case** → uploads a photo → AI extracts a 468-point face mesh\n2. **Public submits a sighting** → uploads a photo or video → same extraction\n3. **Admin clicks Refresh** → KNN matches faces across both datasets → email sent to complainant on match\n\nNo manual photo comparison. No paperwork pile-up.\n\n---\n\n## Features\n\n| Feature | Details |\n|---|---|\n| Face detection | MediaPipe Face Landmarker — highlights detected faces, handles multiple people in frame |\n| AI matching | KNN on 1,404-dimensional face vectors; shows confidence % |\n| Video sightings | Upload a video — unique faces extracted automatically per frame |\n| Live map | Dashboard map showing case density by city across India |\n| Email alerts | Auto-notifies complainant email when a match is confirmed |\n| Role-based access | Admins can match, edit, delete; Officers can register and view |\n| Public portal | Separate mobile-friendly submission page, no login needed |\n\n---\n\n## Getting Started\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fgaganmanku96\u002FFinding-missing-person-using-AI.git\ncd Finding-missing-person-using-AI\npip install -r requirements.txt\n```\n\nRun the officer\u002Fadmin portal:\n```bash\nstreamlit run Home.py\n```\n\nRun the public submission portal:\n```bash\nstreamlit run mobile_app.py\n```\n\nThe SQLite database and face landmarker model (~30 MB, auto-downloaded on first use) are created automatically.\n\n### Optional: Email notifications\n\nSet these environment variables to enable email alerts on match:\n```\nSMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASSWORD\n```\nThe complainant's email entered during case registration is used as the recipient.\n\n---\n\n## Configuring Login Credentials\n\nCredentials are stored in `login_config.yml`. To add or change a user:\n\n**1. Generate a bcrypt password hash:**\n```python\nimport bcrypt\nprint(bcrypt.hashpw(b\"your_password\", bcrypt.gensalt()).decode())\n```\n\n**2. Edit `login_config.yml`:**\n```yaml\ncredentials:\n  usernames:\n    your_username:               # used as the login username\n      name: Your Display Name\n      email: you@example.com\n      city: Delhi\n      area: Sector 1\n      role: Admin                # Admin or Officer\n      password: '$2b$12$...'     # paste the hash from step 1\n```\n\n**Roles:**\n| Role | Permissions |\n|---|---|\n| Admin | Register cases, view all cases, trigger matching, edit\u002Fdelete cases |\n| Officer | Register cases, view own cases |\n\n> `login_config.yml` is git-ignored by default. Never commit real credentials.\n\n---\n\n## Seeding Demo Data\n\nThe `scripts\u002F` folder contains two utilities for populating the database with demo data.\n\n### Step 1 — Download sample images\n\n```bash\n# Download ~2 images per celebrity into scripts\u002Fbulk_data\u002Freported\u002F\nuv run scripts\u002Fdownload_celebrity_images.py --dest reported\n\n# Or split across both folders (reported + publicly_seen)\nuv run scripts\u002Fdownload_celebrity_images.py --dest both\n```\n\nThis uses DuckDuckGo image search — no API key needed.\n\nYou can also drop your own images directly into:\n```\nscripts\u002Fbulk_data\u002Freported\u002F        ← missing person cases\nscripts\u002Fbulk_data\u002Fpublicly_seen\u002F   ← public sighting submissions\n```\n\n### Step 2 — Run the bulk upload\n\n```bash\npython scripts\u002Fbulk_upload.py\n```\n\nThis processes every image in both folders:\n- Extracts a face mesh using MediaPipe (images with no detectable face are skipped)\n- Generates realistic metadata (names, cities, Aadhaar numbers, last-seen locations)\n- Inserts records into the SQLite database\n- Copies images to `resources\u002F` so the app can display them\n\nBy default `submitted_by` is set to `gagan` (the username in the default `login_config.yml`). If you've changed your username, pass it explicitly:\n\n```bash\npython scripts\u002Fbulk_upload.py --officer your_username\n```\n\nTo reset and re-seed from scratch:\n```bash\nsqlite3 sqlite_database.db \"DELETE FROM registeredcases; DELETE FROM publicsubmissions;\"\npython scripts\u002Fbulk_upload.py\n```\n\n---\n\n## Tech Stack\n\n- **Streamlit** — UI for both portals\n- **MediaPipe Tasks** — face mesh landmark extraction (468 points × 3D)\n- **scikit-learn KNN** — face matching\n- **SQLModel + SQLite** — data storage\n- **Folium** — interactive map\n- **OpenCV** — video frame extraction\n\n---\n\n## FAQ\n\n**Q: Can I run this without an internet connection?**\nThe face landmarker model (~30 MB) is downloaded once on first run and cached locally. After that, both portals work fully offline.\n\n**Q: How accurate is the face matching?**\nAccuracy depends heavily on photo quality. Front-facing, well-lit photos work best. The confidence score shown on each match reflects KNN distance — higher is a stronger match.\n\n**Q: Can I add multiple officers?**\nYes. Add as many usernames as needed to `login_config.yml`. Each officer sees only their own registered cases; Admins see all cases.\n\n**Q: The map doesn't show a city I entered.**\nThe map uses a built-in city → coordinates lookup. If a city is missing, open an issue or add it to the `CITY_COORDS` dict in `Home.py`.\n\n**Q: Where is the data stored?**\nEverything is in `sqlite_database.db` (git-ignored) in the project root. Images are stored as JPGs in `resources\u002F` (also git-ignored). Nothing is sent to any external server.\n\n**Q: How do I reset the database?**\n```bash\nsqlite3 sqlite_database.db \"DELETE FROM registeredcases; DELETE FROM publicsubmissions;\"\n```\nOr simply delete `sqlite_database.db` — it will be recreated on next run.\n\n**Q: Can the public portal be hosted separately from the officer portal?**\nYes. They are independent Streamlit apps (`Home.py` and `mobile_app.py`) and share only the SQLite database. Point both to the same database file path and they will work together.\n\n---\n\n*Thanks to the [MediaPipe](https:\u002F\u002Fmediapipe.dev\u002F) team for the open-source face landmarker model.*\n","# 失踪人员识别系统\n\n![问题](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fissues\u002Fgaganmanku96\u002FFinding-missing-person-using-AI) ![星标](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fgaganmanku96\u002FFinding-missing-person-using-AI?style=social)\n![CodeRabbit 评论](https:\u002F\u002Fimg.shields.io\u002Fcoderabbit\u002Fprs\u002Fgithub\u002Fgaganmanku96\u002FFinding-missing-person-using-AI?utm_source=oss&utm_medium=github&utm_campaign=gaganmanku96%2FFinding-missing-person-using-AI&labelColor=171717&color=FF570A&link=https%3A%2F%2Fcoderabbit.ai&label=CodeRabbit+Reviews)\n\n![Streamlit](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FStreamlit-000000?style=for-the-badge&logo=streamlit&logoColor=white)\n![MediaPipe](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FMediaPipe-000000?style=for-the-badge&logo=mediapipe&logoColor=white)\n![Python](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPython-000000?style=for-the-badge&logo=python&logoColor=white)\n![SQLite](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FSQLite-000000?style=for-the-badge&logo=sqlite&logoColor=white)\n\n> [![LinkedIn](https:\u002F\u002Fi.stack.imgur.com\u002FgVE0j.png) 在 LinkedIn 上认可](https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fgaganmanku96\u002F) 如果这个项目对您有帮助。\n\n---\n\n> **免责声明**\n>\n> 本项目截图中出现的所有人物图像以及作为示例数据使用的图像，均来自互联网，仅用于在非商业性、教育性的背景下演示人脸识别流程。这些图像归各自所有者所有，我们不主张任何所有权。如果您是某张图像的权利人并希望将其删除，请提交一个问题，我们将立即处理。\n>\n> 本项目不会存储、分发或商业化任何个人图像。从示例图像中提取的人脸数据（特征点向量）仅在本地用于匹配演示，不会与任何第三方共享。\n\n---\n\n## 目录\n\n- [问题背景](#the-problem)\n- [一个案例的完整流程](#a-case-start-to-finish)\n- [工作原理](#how-it-works)\n- [功能特性](#features)\n- [快速入门](#getting-started)\n- [配置登录凭证](#configuring-login-credentials)\n- [填充演示数据](#seeding-demo-data)\n- [技术栈](#tech-stack)\n- [常见问题](#faq)\n\n---\n\n## 问题背景\n\n在印度，每天都有数百人——其中大多数是儿童——失踪。当有人报告发现线索时，警官必须手动比对照片、翻阅文件，并跨部门协调。等到确认匹配时，往往已经错过了最佳时机。\n\n---\n\n## 一个案例的完整流程\n\n**步骤 1 — 家庭报案。警官登记案件。**\n\n哈里德瓦尔的一户家庭报称其孩子失踪。一名警官打开门户网站，上传一张照片，AI 立即检测到人脸并提取出 468 个特征点网格——无需手动标记。\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fgaganmanku96_Finding-missing-person-using-AI_readme_c97183dbda73.png\" alt=\"登记新案件 — 检测到带边界框的人脸\" width=\"700\"\u002F>\n\n---\n\n**步骤 2 — 仪表盘跟踪所有未结案件。**\n\n警官的主页面显示已找到和未找到案件的实时统计，以及一张地图，标明印度各地案件的集中分布情况。\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fgaganmanku96_Finding-missing-person-using-AI_readme_03a9898f705e.png\" alt=\"警官仪表盘：案件统计与印度地图\" width=\"700\"\u002F>\n\n---\n\n**步骤 3 — 公众提交线索。**\n\n有人认出了失踪者，并通过公众门户提交了一张照片（无需登录）。同样会提取并存储人脸网格数据。当管理员点击“匹配案件”时，KNN 模型会将所有线索与所有未结案件进行比对。如果人脸相似度足够高，案件状态会自动变为“已找到”，并向报案人发送电子邮件通知。\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fgaganmanku96_Finding-missing-person-using-AI_readme_9ffe06b0cfa3.png\" alt=\"查看案件 — 已找到状态及线索位置和提交者信息\" width=\"700\"\u002F>\n\n---\n\n**步骤 4 — 城市地图展示全局情况。**\n\n管理员可以看到哪些城市未结案件最多，并跟踪解决率随时间的变化。\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fgaganmanku96_Finding-missing-person-using-AI_readme_b3ef2aac8c3e.png\" alt=\"按城市分类的案件 — 印度地图与城市摘要表\" width=\"700\"\u002F>\n\n---\n\n## 工作原理\n\n1. **警官登记案件** → 上传照片 → AI 提取 468 个特征点的人脸网格\n2. **公众提交线索** → 上传照片或视频 → 同样提取特征点\n3. **管理员点击刷新** → KNN 在两个数据集之间匹配人脸 → 匹配成功后向报案人发送邮件\n\n无需人工比对照片，也无需堆积如山的纸质文件。\n\n---\n\n## 功能特性\n\n| 功能 | 详情 |\n|---|---|\n| 人脸检测 | MediaPipe Face Landmarker — 高亮显示检测到的人脸，可处理画面中的多人 |\n| AI 匹配 | 基于 1,404 维人脸向量的 KNN；显示置信度百分比 |\n| 视频线索 | 上传视频 — 自动逐帧提取独特的人脸 |\n| 实时地图 | 仪表盘上的地图显示印度各城市的案件密度 |\n| 邮件提醒 | 匹配成功时自动通知报案人邮箱 |\n| 基于角色的访问权限 | 管理员可匹配、编辑、删除；警官可登记和查看 |\n| 公众门户 | 独立的移动端友好提交页面，无需登录 |\n\n---\n\n## 快速入门\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fgaganmanku96\u002FFinding-missing-person-using-AI.git\ncd Finding-missing-person-using-AI\npip install -r requirements.txt\n```\n\n运行警官\u002F管理员门户：\n```bash\nstreamlit run Home.py\n```\n\n运行公众提交门户：\n```bash\nstreamlit run mobile_app.py\n```\n\nSQLite 数据库和人脸特征点模型（约 30 MB，首次使用时自动下载）会自动生成。\n\n### 可选：邮件通知\n\n设置以下环境变量以启用匹配时的邮件提醒：\n```\nSMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASSWORD\n```\n报案人在登记案件时输入的邮箱地址将用作收件人。\n\n---\n\n## 配置登录凭证\n\n凭证存储在 `login_config.yml` 文件中。要添加或更改用户：\n\n**1. 生成 bcrypt 密码哈希值：**\n```python\nimport bcrypt\nprint(bcrypt.hashpw(b\"your_password\", bcrypt.gensalt()).decode())\n```\n\n**2. 编辑 `login_config.yml`：**\n```yaml\ncredentials:\n  usernames:\n    your_username:               # 用作登录用户名\n      name: 您的显示名称\n      email: you@example.com\n      city: 德里\n      area: 第一区\n      role: 管理员                # 管理员或警官\n      password: '$2b$12$...'     # 粘贴第 1 步得到的哈希值\n```\n\n**角色：**\n| 角色 | 权限 |\n|---|---|\n| 管理员 | 登记案件、查看所有案件、触发匹配、编辑\u002F删除案件 |\n| 警官 | 登记案件、查看自己登记的案件 |\n\n> `login_config.yml` 默认被 Git 忽略。切勿提交真实凭证。\n\n---\n\n## 流程：填充演示数据\n\n`scripts\u002F` 文件夹包含两个实用工具，用于向数据库填充演示数据。\n\n###  Schritt 1 — Herunterladen von Beispielbildern\n\n```bash\n# Laden Sie etwa 2 Bilder pro Prominenten in scripts\u002Fbulk_data\u002Freported\u002F herunter.\nuv run scripts\u002Fdownload_celebrity_images.py --dest reported\n\n# 或者将图片同时存放在两个文件夹中（reported + publicly_seen）\nuv run scripts\u002Fdownload_celebrity_images.py --dest both\n```\n\n此脚本使用 DuckDuckGo 图片搜索，无需 API 密钥。\n\n你也可以直接将自己的图片放入以下目录：\n```\nscripts\u002Fbulk_data\u002Freported\u002F        ← 失踪人员案件\nscripts\u002Fbulk_data\u002Fpublicly_seen\u002F   ← 公众目击提交\n```\n\n### 第 2 步 — 运行批量上传\n\n```bash\npython scripts\u002Fbulk_upload.py\n```\n\n此脚本会处理这两个文件夹中的每一张图片：\n- 使用 MediaPipe 提取人脸网格（无法检测到人脸的图片将被跳过）\n- 生成逼真的元数据（姓名、城市、Aadhaar 号码、最后一次出现地点）\n- 将记录插入 SQLite 数据库\n- 将图片复制到 `resources\u002F` 目录，以便应用程序可以显示这些图片\n\n默认情况下，`submitted_by` 被设置为 `gagan`（即默认 `login_config.yml` 文件中的用户名）。如果你更改了用户名，请显式指定：\n\n```bash\npython scripts\u002Fbulk_upload.py --officer your_username\n```\n\n若要重置并从头开始重新填充数据：\n```bash\nsqlite3 sqlite_database.db \"DELETE FROM registeredcases; DELETE FROM publicsubmissions;\"\npython scripts\u002Fbulk_upload.py\n```\n\n---\n\n## 技术栈\n\n- **Streamlit** — 两个门户的用户界面\n- **MediaPipe Tasks** — 人脸网格特征点提取（468 个点 × 3D）\n- **scikit-learn KNN** — 人脸识别匹配\n- **SQLModel + SQLite** — 数据存储\n- **Folium** — 交互式地图\n- **OpenCV** — 视频帧提取\n\n---\n\n## 常见问题解答\n\n**问：我可以在没有互联网连接的情况下运行这个程序吗？**\n人脸特征点检测模型（约 30 MB）会在首次运行时下载并缓存在本地。此后，两个门户都可以完全离线工作。\n\n**问：人脸识别的准确率如何？**\n准确率高度依赖于照片的质量。正面、光线充足的图片效果最佳。每次匹配时显示的置信度分数反映了 KNN 的距离——数值越高，匹配度越强。\n\n**问：我可以添加多名警官吗？**\n可以。在 `login_config.yml` 文件中添加所需的用户名即可。每位警官只能查看自己登记的案件；管理员则可以看到所有案件。\n\n**问：地图上没有显示我输入的城市。**\n地图使用内置的城市坐标查询功能。如果某个城市未被识别，请提交一个问题，或将该城市添加到 `Home.py` 文件中的 `CITY_COORDS` 字典中。\n\n**问：数据存储在哪里？**\n所有数据都保存在项目根目录下的 `sqlite_database.db` 文件中（已加入 .gitignore）。图片以 JPG 格式存储在 `resources\u002F` 目录中（同样被忽略）。没有任何数据会被发送到外部服务器。\n\n**问：如何重置数据库？**\n```bash\nsqlite3 sqlite_database.db \"DELETE FROM registeredcases; DELETE FROM publicsubmissions;\"\n```\n或者直接删除 `sqlite_database.db` 文件——下次运行时它会自动重新创建。\n\n**问：公众端能否与警官端分开部署？**\n可以。它们是独立的 Streamlit 应用程序（`Home.py` 和 `mobile_app.py`），仅共享同一个 SQLite 数据库。只需将两者指向相同的数据库文件路径，它们就能协同工作。\n\n---\n\n*感谢 [MediaPipe](https:\u002F\u002Fmediapipe.dev\u002F) 团队提供的开源人脸特征点检测模型。*","# Finding-missing-person-using-AI 快速上手指南\n\n本项目是一个基于 AI 的失踪人员识别系统，利用 MediaPipe 提取面部特征点，并通过 KNN 算法进行人脸匹配。系统包含警官\u002F管理员后台（Streamlit）和公众目击提交端（移动端友好）。\n\n## 环境准备\n\n在开始之前，请确保您的开发环境满足以下要求：\n\n*   **操作系统**：Windows, macOS 或 Linux\n*   **Python 版本**：推荐 Python 3.8 - 3.10\n*   **前置依赖**：\n    *   `git`：用于克隆代码仓库\n    *   `pip` 或 `uv`：用于安装 Python 依赖包\n    *   `sqlite3`：通常随 Python 或操作系统自带，用于本地数据存储\n\n> **国内加速建议**：\n> 在安装 Python 依赖时，建议使用清华或阿里镜像源以提升下载速度：\n> ```bash\n> pip install -r requirements.txt -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n> ```\n\n## 安装步骤\n\n### 1. 克隆项目\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fgaganmanku96\u002FFinding-missing-person-using-AI.git\ncd Finding-missing-person-using-AI\n```\n\n### 2. 安装依赖\n使用 `pip` 安装所需库（首次运行会自动下载约 30MB 的 MediaPipe 面部模型）：\n```bash\npip install -r requirements.txt\n```\n\n### 3. 配置登录凭证（可选但推荐）\n默认配置文件 `login_config.yml` 已被 git 忽略。若需自定义用户或修改密码，请按以下步骤操作：\n\n1.  **生成密码哈希**：\n    ```python\n    import bcrypt\n    print(bcrypt.hashpw(b\"your_password\", bcrypt.gensalt()).decode())\n    ```\n2.  **编辑 `login_config.yml`**：\n    将生成的哈希值填入配置文件：\n    ```yaml\n    credentials:\n      usernames:\n        your_username:\n          name: Your Display Name\n          email: you@example.com\n          city: Delhi\n          area: Sector 1\n          role: Admin                # 可选：Admin 或 Officer\n          password: '$2b$12$...'     # 粘贴上面的哈希值\n    ```\n\n### 4. 导入演示数据（可选）\n若希望立即体验完整流程，可运行脚本导入模拟数据（自动下载名人图片并生成虚假案情记录）：\n\n```bash\n# 下载示例图片到指定目录\nuv run scripts\u002Fdownload_celebrity_images.py --dest both\n\n# 执行批量上传，将图片转化为案件数据存入 SQLite\npython scripts\u002Fbulk_upload.py\n# 若修改了默认用户名，请指定：python scripts\u002Fbulk_upload.py --officer your_username\n```\n\n## 基本使用\n\n本系统由两个独立的 Streamlit 应用组成，共享同一个 SQLite 数据库。\n\n### 1. 启动警官\u002F管理员后台\n此端口用于注册失踪案件、查看仪表盘、触发匹配算法及管理数据。\n\n```bash\nstreamlit run Home.py\n```\n*   **功能**：上传失踪者照片（自动提取 468 点面部网格）、查看案件分布地图、点击 \"Match Cases\" 进行比对。\n*   **访问**：浏览器打开终端显示的本地地址（通常为 `http:\u002F\u002Flocalhost:8501`）。\n\n### 2. 启动公众提交端口\n此端口供公众上传目击照片或视频，无需登录即可使用。\n\n```bash\nstreamlit run mobile_app.py\n```\n*   **功能**：上传目击现场的照片或视频，系统自动提取面部特征并入库。\n*   **访问**：浏览器打开新终端显示的本地地址（通常为 `http:\u002F\u002Flocalhost:8502`）。\n\n### 3. 测试流程\n1.  在 **Home.py** 中注册一个“失踪案件”，上传一张清晰的人脸照片。\n2.  在 **mobile_app.py** 中提交一张同一人的“目击照片”。\n3.  回到 **Home.py** 仪表盘，点击 **Match Cases**。\n4.  若匹配成功，案件状态将自动更新为 **Found**，并显示置信度百分比。\n\n> **注意**：若需启用邮件通知功能，请在运行前设置环境变量：`SMTP_HOST`, `SMTP_PORT`, `SMTP_USER`, `SMTP_PASSWORD`。","印度哈里瓦德地区的一名警官正在处理一起儿童失踪案件，需要快速比对海量目击照片以确认孩子行踪。\n\n### 没有 Finding-missing-person-using-AI 时\n- **人工比对效率极低**：警官需肉眼逐张核对纸质档案与目击者提供的照片，耗时数天且容易因疲劳产生疏漏。\n- **跨部门协作滞后**：不同警站间信息不互通，依靠电话或文件流转协调，往往错过寻找失踪者的“黄金时间”。\n- **数据孤岛严重**：缺乏统一的数字化平台，无法实时统计未结案件分布，难以从宏观层面调配警力资源。\n- **公众参与门槛高**：普通市民发现线索后缺乏便捷的提交渠道，导致大量潜在目击信息无法及时进入侦查视野。\n\n### 使用 Finding-missing-person-using-AI 后\n- **自动识别秒级响应**：系统利用 MediaPipe 自动提取人脸 468 个特征点，上传照片即刻完成比对，将匹配时间从几天缩短至几分钟。\n- **智能匹配主动预警**：KNN 模型自动分析公众提交的目击照与在案记录，一旦相似度达标立即标记为“已找到”并邮件通知家属。\n- **全景可视化指挥**：仪表盘实时展示全印案件热力图与解决率，帮助指挥官精准定位高发区域并动态优化资源配置。\n- **零门槛众包线索**：无需登录的公共门户让市民能随时上传疑似照片，系统自动构建证据链，极大扩展了搜寻网络。\n\nFinding-missing-person-using-AI 通过自动化人脸识别与众包数据整合，将传统被动式搜救转变为实时智能响应，显著提升了失踪人口的找回率。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fgaganmanku96_Finding-missing-person-using-AI_c97183db.png","gaganmanku96","Gagandeep Singh","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fgaganmanku96_eac970e6.jpg","I'm a Computer Science Undergraduate who loves to learn new things.",null,"Gurgaon","gaganmanku96@gmail.com","https:\u002F\u002Fgithub.com\u002Fgaganmanku96",[85],{"name":86,"color":87,"percentage":88},"Python","#3572A5",100,573,158,"2026-04-03T09:39:22","未说明","未说明 (基于 MediaPipe 和 scikit-learn，通常仅需 CPU 即可运行)",{"notes":95,"python":92,"dependencies":96},"首次运行时会自动下载约 30MB 的 MediaPipe 人脸地标模型；支持离线运行（模型缓存后）；需配置 SMTP 环境变量以启用邮件通知功能；演示数据脚本依赖 'uv' 工具或可手动放置图片。",[97,98,99,100,101,102,103,104],"streamlit","mediapipe","scikit-learn","sqlmodel","sqlite3","folium","opencv-python","bcrypt",[13,14,15],[107,108,109,110,111,112,113,114,115,116,117],"project","college-project","college","face-recognition","missing-person","final-project","final-year-project","ai","machine-learning","machinelearning","image-processing","2026-03-27T02:49:30.150509","2026-04-06T07:13:02.421552",[121,126,131,136,140,145,150,155],{"id":122,"question_zh":123,"answer_zh":124,"source_url":125},15088,"遇到 'value too long for type character varying' 错误或图片保存失败怎么办？","这是因为数据库表中图片字段长度不足。请进入 Database 目录，编辑 table_queries 文件，找到 user_submission 表定义，将 image 字段从 varchar(200000) 改为更大的数值（例如 varchar(800000)）。注意：如果表已经创建，修改文件不会生效，你需要先删除该表再重新运行创建脚本。","https:\u002F\u002Fgithub.com\u002Fgaganmanku96\u002FFinding-missing-person-using-AI\u002Fissues\u002F18",{"id":127,"question_zh":128,"answer_zh":129,"source_url":130},15089,"运行时出现 'KeyError: status' 登录错误如何解决？","该错误通常发生在登录验证逻辑中。维护者已对 login_window.py 文件进行了修复。请拉取最新的代码更新，或者手动检查并应用维护者在登录窗口文件中的更改，确保登录状态字典中包含 'status' 键。","https:\u002F\u002Fgithub.com\u002Fgaganmanku96\u002FFinding-missing-person-using-AI\u002Fissues\u002F19",{"id":132,"question_zh":133,"answer_zh":134,"source_url":135},15090,"启动应用时报错 'no Qt platform plugin could be initialized' 怎么办？","这通常是 OpenCV 版本兼容性问题。建议卸载当前版本，安装特定版本的 opencv-python：4.1.2.30。已知 4.2 版本存在许多此类问题。可以使用命令：pip install opencv-python==4.1.2.30 进行安装。","https:\u002F\u002Fgithub.com\u002Fgaganmanku96\u002FFinding-missing-person-using-AI\u002Fissues\u002F3",{"id":137,"question_zh":138,"answer_zh":139,"source_url":135},15091,"点击 'Match Face' 时程序退出或报错，是否应该调用摄像头？","不是的，该项目不是实时人脸匹配项目，'Match Face' 按钮不会打开摄像头。正确的工作流程是：首先运行 upload_user_image.py 文件上传待比对图片，然后再点击 'Match Face' 按钮进行数据库比对。请务必阅读 README 文件了解完整流程。",{"id":141,"question_zh":142,"answer_zh":143,"source_url":144},15092,"遇到 'Target Refused to Connect' (WinError 10061) 连接被拒绝错误怎么办？","这通常是因为后端服务未启动或环境配置问题。建议使用 Docker 来运行项目以确保环境一致性。在 Windows 上安装 Docker Desktop 会自动包含 docker-compose；在 Ubuntu 上需单独安装 docker-compose。安装后使用 docker-compose up 启动所有服务。","https:\u002F\u002Fgithub.com\u002Fgaganmanku96\u002FFinding-missing-person-using-AI\u002Fissues\u002F12",{"id":146,"question_zh":147,"answer_zh":148,"source_url":149},15093,"源代码中找不到 db_api.py 文件怎么办？","文件名已更改。原来的 db_api.py 现在已重命名为 main.py。请在项目根目录下寻找 main.py 文件作为入口脚本。","https:\u002F\u002Fgithub.com\u002Fgaganmanku96\u002FFinding-missing-person-using-AI\u002Fissues\u002F25",{"id":151,"question_zh":152,"answer_zh":153,"source_url":154},15094,"数据库无法启动或运行报错如何解决？","维护者提供了专门的 YouTube 视频教程来指导如何正确运行和配置数据库。请访问项目的 YouTube 频道查看相关视频：https:\u002F\u002Fwww.youtube.com\u002Fchannel\u002FUC7ln87o0Gt8OkkHIqEmeDQw\u002Fvideos","https:\u002F\u002Fgithub.com\u002Fgaganmanku96\u002FFinding-missing-person-using-AI\u002Fissues\u002F23",{"id":156,"question_zh":157,"answer_zh":158,"source_url":159},15095,"人脸匹配结果显示了整个数据库而不是仅显示匹配项怎么办？","这通常是因为上传的测试图片与数据库中的图片差异过大导致没有匹配成功，从而显示了全部列表。请确认你上传的图片是否与数据库中的案例图片具有相似性。如果控制台有报错信息，请检查日志以排查具体原因。","https:\u002F\u002Fgithub.com\u002Fgaganmanku96\u002FFinding-missing-person-using-AI\u002Fissues\u002F16",[]]