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 和元数据调查

### OCR 和候选生成

### 证据不足的拒绝

## 项目结构
```
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文本识别, 元数据分析, 凭据扫描, 图像地理定位, 地理信息系统, 逆向工具