imcui / docs /development.mdx
vggt's picture
init
173dcbd
---
title: "Development"
description: "Development setup, testing, and contributing to Image Matching WebUI"
---
# Development
This section covers development setup, testing, and contributing to Image Matching WebUI.
## Development Installation
First, clone the repository and install in development mode:
```bash
git clone https://github.com/Vincentqyw/image-matching-webui.git
cd image-matching-webui
pip install -e .
```
For development with testing dependencies:
```bash
pip install -e .[dev]
```
## Running Tests
### Test Structure
The project uses pytest for testing. Tests are organized in the `tests/` directory.
### Running All Tests
```bash
pytest tests/ -v
```
### Running Specific Tests
```bash
# Run a single test
pytest tests/test_image_matching.py::test_one -v
# Run all tests in a file
pytest tests/test_api.py -v
```
### Test Coverage
```bash
pytest --cov=imcui tests/ --cov-report=html
```
## Pre-commit Hooks
The project includes pre-commit hooks for code quality checks:
```bash
# Install pre-commit hooks
pre-commit install
# Run hooks manually
pre-commit run -a
```
The hooks check for:
- Code formatting (ruff-format)
- Linting (ruff)
- Type checking (mypy)
- C++ formatting (clang-format)
## Code Quality Standards
### Python Code
- **Formatting**: Uses `ruff-format`
- **Linting**: Uses `ruff`
- **Type Checking**: Uses `mypy`
### C++ Code
- **Formatting**: Uses `clang-format`
## Adding New Features
### Steps for Adding Features
1. Create a feature branch
2. Implement your changes
3. Write tests for new functionality
4. Update documentation
5. Run all tests and pre-commit checks
6. Submit a pull request
### Branch Naming
Use descriptive branch names:
```bash
# Good
git checkout -b feat/add-ransac-optimization
git checkout -b fix/geometry-calculation-error
git checkout -b docs/update-installation-guide
# Avoid
git checkout -b feature-branch
git checkout -b my-branch
```
## Debugging
### Verbose Mode
Enable verbose output for debugging:
```bash
imcui --verbose
```
### Debug Logs
Logs are written to `log.txt` by default. Check this file for detailed error messages.
### Common Debugging Steps
1. Enable verbose mode
2. Check log outputs
3. Verify configuration files
4. Test with simple examples
5. Check GPU availability if using CUDA
## Contributing
### Contribution Guidelines
1. Follow the existing code style
2. Write tests for new functionality
3. Update relevant documentation
4. Ensure all tests pass
5. Get code review before merging
### Issue Reporting
When reporting issues, include:
- Operating system and version
- Python version
- Installed package versions
- Error messages and logs
- Steps to reproduce
- Expected vs actual behavior
### Pull Request Process
1. Fork the repository
2. Create a feature branch
3. Implement changes
4. Add tests and documentation
5. Run pre-commit checks
6. Submit pull request with clear description
## Architecture
### System Overview
```mermaid
graph TD
User[User] --> CLI[CLI Interface]
User --> WebUI[Web Interface]
CLI --> API[ImageMatchingAPI]
WebUI --> API
API --> MatcherZoo[Matcher Zoo]
API --> Matching[Matching Engine]
API --> Geometry[Geometry Computation]
API --> Visualization[Visualization]
MatcherZoo --> VismatchExternal[vismatch library]
Matching --> ModelCache[Model Cache]
Geometry --> RANSAC[RANSAC Filtering]
Visualization --> ImageUtils[Image Utilities]
subgraph DataLayer[Data Layer]
ModelCache
ConfigFiles[Config Files]
ExampleData[Example Data]
end
API --> ConfigFiles
API --> ExampleData
style User fill:#4F46E5,stroke:#ffffff,stroke-width:2px,color:#ffffff,font-size:11px
style CLI fill:#8B5CF6,stroke:#ffffff,stroke-width:2px,color:#ffffff,font-size:11px
style WebUI fill:#8B5CF6,stroke:#ffffff,stroke-width:2px,color:#ffffff,font-size:11px
style API fill:#6366F1,stroke:#ffffff,stroke-width:3px,color:#ffffff,font-size:11px
style MatcherZoo fill:#10B981,stroke:#ffffff,stroke-width:2px,color:#ffffff,font-size:11px
style Matching fill:#F59E0B,stroke:#ffffff,stroke-width:2px,color:#ffffff,font-size:11px
style Geometry fill:#F59E0B,stroke:#ffffff,stroke-width:2px,color:#ffffff,font-size:11px
style Visualization fill:#EC4899,stroke:#ffffff,stroke-width:2px,color:#ffffff,font-size:11px
style VismatchExternal fill:#059669,stroke:#ffffff,stroke-width:2px,color:#ffffff,font-size:11px
style ModelCache fill:#D97706,stroke:#ffffff,stroke-width:2px,color:#ffffff,font-size:11px
style RANSAC fill:#D97706,stroke:#ffffff,stroke-width:2px,color:#ffffff,font-size:11px
style ImageUtils fill:#DB2777,stroke:#ffffff,stroke-width:2px,color:#ffffff,font-size:11px
style DataLayer fill:#374151,stroke:#6366F1,stroke-width:2px,color:#ffffff,stroke-dasharray: 5 5
```
### Project Structure
```mermaid
graph TD
root[image-matching-webui] --> imcui[imcui/ - Python Package]
root --> tests[tests/ - Test Suite]
root --> cpp[cpp/ - C++ Implementation]
root --> docs[docs/ - Documentation]
root --> docker[docker/ - Deployment Config]
imcui --> cli[cli/ - CLI Entry Point]
imcui --> ui[ui/ - Web Interface]
imcui --> api[api/ - Core API]
imcui --> configFiles[config/ - Config Files]
ui --> app[image_matching_app.py]
ui --> config[config.py]
ui --> configUtils[config_utils.py]
ui --> matching[matching.py]
ui --> geometry[geometry.py]
ui --> imageUtils[image_utils.py]
ui --> visualization[visualization.py]
ui --> examples[examples.py]
ui --> modelCache[model_cache.py]
cli --> main[main.py]
api --> server[server.py]
api --> client[client.py]
style root fill:#1F2937,stroke:#6366F1,stroke-width:3px,color:#ffffff,font-size:14px
style imcui fill:#4F46E5,stroke:#ffffff,stroke-width:2px,color:#ffffff,font-size:12px
style ui fill:#6366F1,stroke:#ffffff,stroke-width:2px,color:#ffffff,font-size:12px
style api fill:#818CF8,stroke:#ffffff,stroke-width:2px,color:#ffffff,font-size:12px
style cli fill:#8B5CF6,stroke:#ffffff,stroke-width:2px,color:#ffffff,font-size:12px
style tests fill:#10B981,stroke:#ffffff,stroke-width:2px,color:#ffffff,font-size:12px
style cpp fill:#F59E0B,stroke:#ffffff,stroke-width:2px,color:#ffffff,font-size:12px
style docs fill:#EC4899,stroke:#ffffff,stroke-width:2px,color:#ffffff,font-size:12px
```
### Component Details
- `imcui/` - Main package
- `cli/` - Command-line interface
- `ui/` - User interface components
- `api/` - Core API implementation
- `config/` - Configuration files
- `tests/` - Test suite
- `cpp/` - C++ API implementation
### Key Components
- **ImageMatchingAPI**: Core matching API
- **ImageMatchingApp**: Gradio web interface
- **MatcherZoo**: Dynamic matcher loading
- **Visualization**: Result visualization utilities
## Release Process
### Version Management
Version is managed in `pyproject.toml`. Update the version number when preparing a release.
### Creating a Release
1. Update version in `pyproject.toml`
2. Ensure all tests pass
3. Update CHANGELOG.md
4. Create git tag: `git tag v1.0.0`
5. Push tag: `git push origin v1.0.0`
6. Build and publish to PyPI
## Resources
- **Project Repository**: https://github.com/Vincentqyw/image-matching-webui
- **Issues**: https://github.com/Vincentqyw/image-matching-webui/issues
- **Discussions**: https://github.com/Vincentqyw/image-matching-webui/discussions
- **Related Projects**:
- [Vismatch](https://github.com/gmberton/vismatch) - Matcher collection library