Screen recording Demo video 0:49, no sound. Demo recorded with sample files. No real register data appears.
An illustration made with an AI image tool. The real screens are above.

Windows office automation program

Building register owner extractor

Pick a folder of register photos, and it puts every owner's name and address into one Excel sheet.

305 registerschecked against the originals, field by field
1,306 photoschecked along with them

Project notes

Real screens

The Excel result: folder, file, owner name and address per row, read from sample register photos
Owner extractor window after a run: "완료! 파일 4개 중 3개 추출, 1개 확인 필요"
Captures of the real pages and programs, set in device frames.

Introduction

A Windows program that reads the owner's name and address from a folder of building register photos and puts them into one Excel sheet. It was made for a real client and delivered.

Purpose

Read owners' names and addresses from a whole folder of register photos into Excel. As the client's requests went on, picking out the registers flagged for violations was added.

The problem

The photos were uneven: the owner fields sit in different places on each register, a “열람용” (viewing copy) watermark covers some text, and the same page often comes in two copies.

Main features

  • Choose one folder and it reads every subfolder in one go.
  • Co-owners get one row each, in order.
  • Photos it can't read, and rows that need a look, are flagged for a person.
  • It can pick out the registers stamped “위반건축물” (violation) in a yellow box beside the title, gather them, and read the owners of those only.
  • A faster mode only picks out the flagged registers, without reading owners.
  • Original photos are only read, and everything runs on that PC. Nothing is sent over the internet.

Technology

Python
The whole program
OpenCV
Finds the table lines to split fields, and finds the yellow box
Tesseract OCR (Korean)
Reads the text in each field
openpyxl
Writes the Excel file
tkinter
The program window

How it was made

  1. v6 and v6.1 (2026-10-12): handled watermarked copies, skipping page 2 and duplicate copies of a page; added the building name and unit fields and address fixes.
  2. v6.2 (2026-10-14): added picking out violation-flagged registers, at the client's request.
  3. v6.3 (2026-10-14 to 15): fixed reading errors by checking the client's sample registers against the originals, field by field.
  4. v6.3.1 (2026-10-16): added reading owners of the flagged registers only, and delivered it to the client.

Problems and fixes

  1. Fixed

    Problem: The owner fields sit in a different place on each register.

    How it was fixed It finds the table lines to split the fields, then finds the labels 성명 (name) and 주소 (address) and reads the fields under them.

  2. Fixed

    Problem: Address lines are packed so tightly that they were read mixed up or in the wrong order.

    How it was fixed The address field is cut into single lines and read line by line.

  3. Fixed

    Problem: The site address is partly covered by the “열람용” watermark, so it was misread on many registers.

    How it was fixed Only the value field is cut out, and the watermark removed, before it is read.

  4. Fixed

    Problem: Each page came in two copies, so the program had to decide which one to trust.

    How it was fixed For each field it takes the copy with fewer signs of misreading, and if the two differ only by a dash, it takes the one with the dash.

  5. Fixed

    Problem: The OCR engine (Tesseract) cannot open files when the path contains Korean characters.

    How it was fixed The program copies the engine once to a folder with no Korean characters in its path and runs it from there.

  6. Fixed

    Problem: The page-2 header “(2쪽 중 제2쪽)” came out garbled.

    How it was fixed It looks only at the “제N쪽” (page N) part, and treats a page as page 2 only when the register title is missing.

  7. Still open

    Problem: Some address rows still lose a single dash (71-4 read as 714, for example).

    How it was fixed Such rows are flagged for checking, and the client was asked to compare long numbers with the original. A fix (v6.3.2) is planned.

Result

Made for a real client's request and delivered; the latest version sent was v6.3.1 (2026-10-16). Reading only the flagged registers with their owners takes about 17 minutes, against about 59 for all of them.

See it working

  • Demo video

    Demo video 0:49, no sound

The screens in these demos are in Korean.

My part and AI tools

What I did myself

  • Took the job, talked with the client directly, and set the scope and the price.
  • Obtained the client's real sample files so the program could be tested on them.
  • Built the executable on their own PC, ran it on the sample to check the results, then delivered it (v6.3.1).
  • Recorded the demo video.

Where AI tools were used

  • The code and the check against the originals were done with an AI coding tool; the client conversation, building and test-running it on a real PC, and delivery were done by me.