Vylepšení skenování - prázdné stránky, otáčení, vylepšení UI
All threads resolved!
All threads resolved!
Compare changes
- Jiří Setnička authored
Navazujeme na vyprahovaný černobílý obrázek, který používá detekce QR kódů. Pokud žádný QR kód nenajdeme, tak provádíme: * ořez 10 pixelů z každé strany pro odstranění divných hran ze skeneru * jeden krok eroze maticí 3x3 pro odstranění šumu a smetí na skeneru (pro každý pixel vezmeme maximum z jeho 3x3 okolí = eroze černých oblastí) * spočítáme entropii obrázku (skrze metodu PIL.Image.entropy()) Pokud spočítaná entropie překročí threshold 0.005, tak stránku odhadneme za plnou, jinak ji odhadneme za prázdnou. Testování thresholdu na Xerox scanneru, seřazené podle entropie: * prázdná úplně bílá stránka (uměle vyrobená): 0.0 * prázdná nezmačkaná stránka: 0.0000054647 * prázdná zmačkaná a natržená stránka: 0.0000314348 * vygenerované PDF s hlavičkou protokolu (neprošlo skenem, čisté PDF): 0.0166886208 * sken ručních zápisků na kostičkovaný papír (popsaná 1/4 stránky): 0.0764304045 * vybledlá pomačkaná faktura vytisklá s docházejícím tonerem: 0.0833685388 * sken ručních zápisků na kostičkovaný papír (popsána 1/2 stránky): 0.1503896076 * nějaký vyplněný formulář (tisk + propiska, nezmačkaný): 0.2290705466 * sken ručních zápisků na kostičkovaný papír (popsána celá stránka, hodně škrtání): 0.2393648031 Zatím není informace využitá, použije se v dalších commitech.
+ 94
− 29
@@ -20,6 +20,12 @@ from mo.jobs import TheJob, job_handler
@@ -172,7 +178,10 @@ def handle_create_protocols(the_job: TheJob):
@@ -195,6 +204,7 @@ def schedule_process_scans(contest: db.Contest, site: Optional[db.Place], scans_
@@ -210,6 +220,8 @@ class ScanJobArgs:
@@ -226,6 +238,7 @@ def handle_process_scans(the_job: TheJob):
@@ -247,10 +260,26 @@ def handle_process_scans(the_job: TheJob):
@@ -258,12 +287,17 @@ def handle_process_scans(the_job: TheJob):
@@ -276,12 +310,13 @@ def handle_process_scans(the_job: TheJob):
@@ -300,23 +335,22 @@ def handle_process_scans(the_job: TheJob):
@@ -355,27 +389,57 @@ def _process_scan_file(args: ScanJobArgs) -> ScanJobResult:
@@ -505,9 +569,10 @@ def handle_sort_scans(the_job: TheJob):