Skip to content

Repository files navigation

Appraiser Photo Processor

A desktop application for county assessors and title administrators to automatically classify and rename property photos. Select your role, point the app at a folder of photos, and it handles the rest.

Independent project. This is an independent project and is not an official product of the Gunnison County Assessor's Office or Gunnison County. Any county data it works with comes from publicly available assessor and GIS data, and results may contain errors or out-of-date information. Always verify against official county records.

Roles

Title Administrator

  • Extracts parcel number from the folder name
  • Matches parcel number to account number via CSV lookup
  • Classifies interior room photos (KITCHEN, BEDROOM, BATHROOM, etc.) using a CLIP-based ML classifier
  • Renames files: ACCOUNTNO - MLS - ROOMTYPE X.JPG

Appraiser

  • Reads GPS coordinates from each photo's EXIF data
  • Matches GPS to the nearest parcel using a local address shapefile (no internet required)
  • Reads compass direction (GPSImgDirection) to determine which side of the building was photographed
  • Classifies photos using Claude Vision AI — handles both interior and exterior shots in the same folder
  • Interior: ACCOUNTNO - KITCHEN 1 - YYYYMMDD.JPG
  • Exterior: ACCOUNTNO - NE FRONT OF BUILDING 1 - YYYYMMDD.JPG
  • Photos with no GPS go to processed/unresolved/

Appraiser Labels

Exterior: FRONT OF BUILDING, BACK OF BUILDING, CORNER OF BUILDING, CORNER OF GARAGE, CORNER OF SHED, GARAGE, SHED, WINDOW, LAND, VIEW, DECK, BUILDING PROGRESS, DAMAGE, OTHER

Interior: KITCHEN, LIVING ROOM, BEDROOM, BATHROOM, DINING ROOM, LAUNDRY ROOM, OFFICE

Requirements

  • Python 3.11+
  • An Anthropic API key (for Appraiser mode — set as ANTHROPIC_API_KEY environment variable)
  • Address shapefile (Address.dbf/.prj/.shp/.shx) placed in backend/data/
  • Parcel CSV (Accounts_and_Parcel_Numbers.csv) — placed in backend/data/ or ~/Downloads/

The county data files are not committed to this repository; see backend/data/README.md.

See backend/requirements.txt for Python dependencies.

Installation

git clone https://github.com/Eesterlein/Appraiser-Photo-Processor.git
cd Appraiser-Photo-Processor
cd backend
pip install -r requirements.txt

Running the App

cd backend
ANTHROPIC_API_KEY=your_key_here python app.py

On Windows, set ANTHROPIC_API_KEY as a system environment variable so you don't need to pass it each time.

Project Structure

Appraiser-Photo-Processor/
├── backend/
│   ├── app.py                  # Entry point — loads models and launches GUI
│   ├── gui.py                  # tkinter GUI with role selector
│   ├── classifier.py           # CLIP classifier (Title Admin) + Claude Vision classifier (Appraiser)
│   ├── appraiser_processor.py  # Appraiser processing pipeline
│   ├── processor.py            # Title Admin processing pipeline
│   ├── gps_resolver.py         # GPS EXIF extraction + shapefile parcel matching
│   ├── matcher.py              # CSV parcel-to-account lookup
│   ├── file_utils.py           # File naming and copying utilities
│   ├── image_validator.py      # Image validation
│   ├── folder_parser.py        # Parcel number extraction from folder names
│   └── data/
│       ├── Address.dbf/.prj/.shp/.shx   # Address shapefile (not committed — place manually)
│       └── Accounts_and_Parcel_Numbers.csv
├── TECHNICAL_OVERVIEW.md
└── README.md

Building a Windows Executable

pip install pyinstaller
python build.py

The .exe will be in dist/. Set ANTHROPIC_API_KEY as a Windows system environment variable on the deployment machine.

Windows Deployment

Build a standalone .exe with PyInstaller:

pip install pyinstaller
python build.py

The .exe is self-contained — no Python, no extra installs needed on the deployment machine.

Set the API key as a Windows system environment variable (not user-level):

  1. Open System Properties → Advanced → Environment Variables
  2. Under System variables, click New
  3. Name: ANTHROPIC_API_KEY / Value: your key
  4. Restart the machine

If the API key is not set, the app falls back to a local CLIP model — still functional but less accurate.


Documentation


Privacy & Security

  • GPS-to-parcel matching runs entirely locally via a bundled shapefile — no coordinates leave the machine
  • Only photo content (resized to 1024px) is sent to the Anthropic API for classification
  • The API key is never stored in any file — always read from a system environment variable
  • Original photos are never modified or deleted
  • See IT_SECURITY.md for the full security overview

About

Desktop app for county assessors to automatically classify and rename property photos using GPS, compass direction, and Claude Vision AI

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages