Automatyzacja analizy plików PDF i geokodowania w QGIS za pomocą Bielika i usługi ULDK.

Wielokrotnie słyszałem, że informacja rozproszona w postaci elementów lokalizacji zawarta w dokumentach to 80% informacji przestrzennej, która istnieje, lecz ze względu na pracochłonność jej pozyskanie jest problematyczne.

Największym wyzwaniem dla pozyskania takiej informacji nie jest samo rysowanie na mapie, czy geokodowanie, lecz żmudne ręczne wyciąganie informacji z setek, a czasem tysięcy stron dokumentów.

Ze względu na to że nie tak dawno uczestniczyłem w szkoleniu Eskadry Bielika i Google, zacząłem się zastanawiać jakby tu stworzyć jakieś narzędzie, które samo przeczyta dokumenty, przeanalizuje je, a następnie naniesie automatycznie na mapę w QGIS ich zakres przestrzenny.

Dodatkowymi zmiennymi, które brałem pod uwagę, było zachowanie prywatności i bezpieczeństwa przetwarzanych danych, w tym brak zewnętrznego promptowania w procesie przetwarzania oraz oparcie modelu AI wyłącznie o lokalną kartę graficzną w moim laptopie.

Założyłem, że celem takiego narzędzia będzie pobranie ze wskazanego katalogu wszystkich pdf z uchwałami o nadaniu nazw ulic, a następnie ich automatyczne przetworzenie do warstwy poligonowej GIS z wczytaniem do Qgis.

Kluczowe elementy skryptu, zamknięte w procesie przetwarzania (bez zewnętrznych promptów użytkownika):

  • Lokalnie działający na moim komputerze model AI, Bielik 11B v 3.0 (https://speakleash.org/) – którego zadaniem jest przetwarzanie kolejnych plików PDF w katalogu, rozpoznanie numeru uchwał, nazwy ulic, numerów działek i obrębów, a następnie zwracanie wszystkiego w czytelnym, ustrukturyzowanym formacie JSON, który będzie przetwarzany dalej.
  • Usługa ULDK GUGiK – Bezpłatna, publicznie dostępna Usługa Lokalizacji Działek Katastralnych, która przekształca nazwę miejscowości i numer działki z JSON w geometrię w formacie WKT.
  • QGIS + Python – bazujący ze względów bezpieczeństwa wyłącznie na bibliotekach requests i pypdf, dzięki czemu dane powyższe są automatycznie przetwarzane i integrowane w Qgis w nową tymczasową warstwę wektorową.

Efekt możecie obejrzeć na poniższym filmie:

Jednym z największych atutów tego rozwiązania jest niskie zapotrzebowanie na sprzęt. Lokalna karta graficzna GPU z modelem była maksymalnie obciążona zaledwie do 12 GB VRAM. Oznacza to, że podobne rozwiązania mogą działać płynnie na większości nowoczesnych konsumenckich kart graficznych, również ze średniej i wyższej półki bez potrzeby dostępu do drogich lub hostowanych kart graficznych.

Opcjonalnie w celu ograniczenia zapotrzebowania na GPU można również próbować użyć modeli z parametrami, które wymagają mniejszych zasobów lub małych modeli NLP działających również bez karty graficznej. Bez problemu da się również w takich procesach przetworzyć skany dokumentów łącząc w narzędziach modele wykrywające tekst na obrazie lub OCR z Bielikiem.

Dziękuje fundacji Speaklesh za udostępnienie modelu Bielik oraz GUGiK za działającą publicznie i nieodpłatnie usługę geokodowania ULDK. Oczywiście jak zawsze jestem też niezmienne wdzięczny Qgis, który od lat dostarcza otwarte, elastyczne i nieodpłatne środowisko GIS każdemu chętnemu.

Zainteresowanych rozwinięciem tego lub innego tematu z zakresu połączenia technologii GIS i AI zapraszam do kontaktu.