EcoSort, w App Store

Zdjęcie wydrukowanego kalendarza wywozów, czytane miesiąc po miesiącu

EcoSort pokazuje, które pojemniki wystawić na twojej ulicy i kiedy. Przypomina wieczorem dzień wcześniej, a widżet i ekran blokady pokazują, co dalej.

Najtrudniejsze są dane

Każda gmina publikuje harmonogram inaczej. Wiele z nich wrzuca skan albo zdjęcie wydrukowanego kalendarza: dwanaście miesięcy na jednej stronie, kolorowe dni i legenda w rogu.

Najprostszy pomysł to dać modelowi całą stronę i poprosić o daty. Na sześciu trudnych skanach najlepsza wersja takiego promptu pomyliła 24,5% komórek. Na stronie są setki podobnych liczb, a tam, gdzie model nie widzi wyraźnie każdego dnia, dopowiada regularny wzór. W Wiśniewie worki bio jeżdżą raz w miesiącu, a prompt z całą stroną dał wywóz co tydzień.

Jak czyta to pipeline

  1. Tnie stronę na miesiąceModel wskazuje ramki miesięcy, kod przesuwa granice do pustego pasa między nimi, a wycinek odpada, jeśli ostatni widoczny dzień się nie zgadza.
  2. Czyta każdy kawałek dwa razyKażdy miesiąc czytają dwa prompty, z dołączoną legendą. Tabele dostają drugi obraz z rozsuniętymi kolumnami.
  3. Remis rozstrzyga większośćGdy dwa odczyty się różnią, decyduje trzeci.
  4. Kod sprawdza to, co pewneNiedziele, święta, dziury w rytmie, liczbę wierszy i to, czy każdy adres z państwowego rejestru trafia do dokładnie jednej strefy.
  5. Lepiej wstrzymać niż zgadywaćWątpliwość, której odczyty nie rozstrzygnęły, wstrzymuje strefę. Brak harmonogramu jest bezpieczniejszy niż zła data.

Wyniki

Sześć skanów i zdjęć z 2190 komórkami. Pipeline przeczytał każdy z nich w trzech pełnych przebiegach, razem 6570 wyników. Komórka to jedna miejscowość, jeden rodzaj odpadów i jeden miesiąc. Jest dobra tylko wtedy, gdy każdy dzień zgadza się z dokumentem.

Jeden prompt75,5% dobrze, 24,5% źle
Pipeline82,2% dobrze, 17,8% wstrzymanych, 0% źle

Zielone są dobre, czerwone złe, szare wstrzymane. Wzorzec to 966 decyzji, które podjąłem ręcznie w panelu. Pipeline był dostrajany na tych dokumentach, więc zero złych dat to jego najlepszy wynik, na dokumentach, które już zna. Następny test to dokumenty, których nie widział.

DokumentKomórkiBłędy promptuBłędy pipeline'uWstrzymane
Gierałtów, zdjęcie12057,2%00%
Czerna, zdjęcie11286,9%00%
Wykroty, zdjęcie12076,7%00%
Wiśniew, skan14777,8%033,3%
Szprotawa, skan bokiem2641,0%074,2%
Klimontów, trzystronicowy skan tabel142711,3%010,1%
Wszystkie sześć219024,5%017,8%

Nie wszędzie jest lepszy: w Szprotawie prompt był prawie bezbłędny, a pipeline wstrzymał trzy czwarte komórek. Jest też droższy: jedno zapytanie i około 25 sekund na dokument dla promptu, wobec mediany 33 zapytań i 4,5 minuty.

Otwórz demo raportu

Co zbudowałem

  • Aplikację na iPhone'a w SwiftUI, z widżetami, Live Activity, przypomnieniami, które można odłożyć albo oznaczyć jako zrobione, i harmonogramem działającym offline.
  • Aplikację na Androida w Kotlinie i Jetpack Compose. Jest w zamkniętych testach w Google Play.
  • Backend w FastAPI i PostgreSQL: wyszukiwanie adresów w państwowym rejestrze TERYT, harmonogramy serwowane jako statyczny JSON.
  • Logowanie dwuskładnikowe do panelu: TOTP napisane według RFC 6238, jednorazowe kody zapasowe i 40 testów.
  • Pipeline czytający harmonogramy w Pythonie z OpenCV, Tesseractem, PyMuPDF i Gemini oraz panel administracyjny w React i TypeScripcie.
  • Sortusia, asystenta, który odpowiada na pytania na podstawie harmonogramu mieszkańca.

W aplikacji jest sześć opublikowanych gmin. EcoSort w App Store. Strona aplikacji to ecosort.pl.

Zrzut z App Store: twój harmonogram wywozuZrzut z App Store: odliczanie do każdego wywozuZrzut z App Store: przypomnienie wieczorem dzień wcześniejZrzut z App Store: kalendarz miesiącaZrzut z App Store: widżetyZrzut z App Store: asystent Sortuś