garrett-williams/photo-geolocation-investigator

GitHub: garrett-williams/photo-geolocation-investigator

一款防御性 OSINT 照片地理定位调查工具,通过融合 EXIF、GPS、OCR、CLIP 视觉分析和地理编码等多源证据来推断照片拍摄地点,并提供保守、可解释的置信度评分。

Stars: 0 | Forks: 0

# 照片地理位置调查器 一款防御性 OSINT 应用程序,利用嵌入的元数据、可见文本、公开的地理空间信息和非文本视觉线索,调查授权照片可能的拍摄地点。 该系统结合了 EXIF 和 GPS 提取、OCR、反向地理编码、候选位置搜索、CLIP 视觉分析、证据融合、保守的置信度评分、交互式地图以及可下载的调查报告。 ## 核心功能 - 提取安全的 EXIF 元数据 - 检测嵌入的 GPS 坐标 - 支持 GPS 保留测试 - 使用 OpenStreetMap 数据对坐标进行反向地理编码 - 使用 EasyOCR 提取可见文本 - 过滤低置信度和无意义的 OCR 检测结果 - 根据可见文本生成候选位置 - 映射嵌入坐标和候选位置 - 使用 CLIP 分析场景类型、地形、植被、道路和建筑 - 将证据整合为可解释的强度得分 - 区分已确证的证据与调查假设 - 拒绝无证据支持的城市或精确位置声明 - 导出 Markdown 调查报告 - 接受 JPG、JPEG、PNG、WebP、HEIC 和 HEIF 图像 ## 调查工作流 ``` flowchart TD A[Upload Authorized Photograph] --> B[Extract EXIF and GPS] A --> C[Run OCR] A --> D[Run CLIP Visual Analysis] B --> E[Reverse Geocode GPS] C --> F[Generate Text-Based Candidates] D --> G[Generate Environmental Clues] E --> H[Evidence Fusion] F --> H G --> H H --> I[Confidence and Claim Scope] I --> J[Map and Explainable Assessment] J --> K[Download Investigation Report] ``` ## 证据模型 ### GPS 证据 嵌入的 GPS 提供了精确的坐标候选,并获得最高的证据权重。GPS 并不被视为绝对证明,因为 EXIF 元数据是可以被编辑的。 ### OCR 证据 OCR 提取可见文本,如街道标志、建筑物名称、企业名称和步道标记。文本生成的是调查候选结果,而非已验证的地点。 ### 视觉证据 CLIP 将照片与涵盖场景类型、地形、植被、道路环境和建筑的预定义描述进行比较。 视觉相似度是辅助证据。它不能直接衡量地理位置的准确性。 ### 保守评分 - GPS 可以支持坐标级别的候选。 - 文本可以支持未经证实的候选位置假设。 - 单凭视觉证据无法支持城市或区域声明。 - 证据不足会产生明确的拒绝。 该分数衡量的是应用程序内部的证据强度。它并不是所提议位置正确的校准概率。 ## 安装 推荐使用 Python 3.12。 ``` git clone https://github.com/garrettw1006-ai/photo-geolocation-investigator.git cd photo-geolocation-investigator python -m venv .venv Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass .\.venv\Scripts\Activate.ps1 python -m pip install --upgrade pip python -m pip install -r requirements.txt streamlit run app.py ``` 首次运行 OCR 和 CLIP 可能需要较长时间,因为必须下载并加载预训练模型文件。 ## 测试 ``` python -m pip install -r requirements-dev.txt python -m pytest -q ``` 测试方法记录在 `docs/TESTING.md` 中。 ## 受控验证结果 该应用程序在九张不同的、自有的或获得授权的照片上进行了评估。 | 测量指标 | 结果 | |---|---:| | 主要任务成功率 | 8/9 (88.9%) | | GPS 提取 | 3/3 (100%) | | 有用的 OCR 检测 | 3/3 (100%) | | 候选集中包含正确位置 | 2/3 (66.7%) | | 正确的低证据拒绝 | 3/3 (100%) | | 报告界面可用性 | 9/9 (100%) | 主要任务成功率针对每个受控类别使用不同的成功标准,并非通用的地理定位准确率。 ## 演示 ### GPS 和元数据调查 ![GPS 分析](https://static.pigsec.cn/wp-content/uploads/repos/cas/0e/0e55a56c7e099556bfbb97fa5581e3d84edadaa664785de78fe98133ef675733.png) ### OCR 和候选生成 ![文本候选](https://static.pigsec.cn/wp-content/uploads/repos/cas/59/59de615bd19e513a3970d951e04915e023328920c55babbf3c54b665248aaa21.png) ### 证据不足的拒绝 ![证据不足](https://static.pigsec.cn/wp-content/uploads/repos/cas/d7/d78006062133bfd53cac642d784f83b497fb024025f4e028619cc0e35f93c765.png) ## 项目结构 ``` photo-geolocation-investigator/ |-- app.py |-- requirements.txt |-- requirements-dev.txt |-- README.md |-- LICENSE |-- .gitignore |-- docs/ | |-- ETHICS.md | |-- TESTING.md | |-- validation_results.csv | `-- images/ |-- outputs/ | `-- .gitkeep |-- private_test_images/ |-- sample_images/ | `-- README.md |-- src/ | |-- evidence_utils.py | |-- exif_utils.py | |-- geocoding.py | |-- ocr_utils.py | `-- visual_utils.py `-- tests/ `-- test_evidence_utils.py ``` 私有测试照片和生成的报告已从 Git 中排除。 ## 截图 使用以下文件名添加安全的演示截图: - `docs/images/gps-analysis.png` - `docs/images/insufficient-evidence.png` 请勿暴露私人住宅、个人文件、车牌或不必要且过于精确的私人坐标。 ## 隐私与道德使用 本项目旨在用于个人隐私测试、授权的 OSINT 教育、防御性网络安全演示,以及使用自有或获授权照片进行的受控研究。 不可用于跟踪、未经授权的监视、人肉搜索或识别他人的私人位置。 请参阅 `docs/ETHICS.md`。 ## 局限性 - OCR 在处理过小、模糊、倾斜或被遮挡的文本时可能会失败。 - 重复的企业和道路名称可能会产生有歧义的候选结果。 - 视觉相似度不能证明地理位置。 - 公共地理编码结果可能不完整或不正确。 - EXIF 数据可以被编辑或删除。 - 结果需要人工审查和独立佐证。 ## 技术 Python、Streamlit、Pillow、pillow-heif、EasyOCR、PyTorch、Hugging Face Transformers、OpenAI CLIP、Geopy、OpenStreetMap、Folium 和 Pytest。 ## 许可证 在 MIT 许可证下发布。 ## 免责声明 本软件仅供教育和防御目的提供。用户有责任遵守适用的法律、隐私义务、平台政策和授权要求。
标签:CLIP视觉分析, EXIF提取, Kubernetes, OCR文本识别, 元数据分析, 凭据扫描, 图像地理定位, 地理信息系统, 逆向工具