code cleanup
parent
da3c0fabd7
commit
d6ee570284
|
@ -2,18 +2,14 @@ import io
|
|||
import os
|
||||
import sys
|
||||
import pickle
|
||||
import hashlib
|
||||
import multiprocessing
|
||||
|
||||
import tqdm
|
||||
import click
|
||||
|
||||
from PIL import Image
|
||||
from pyzbar import pyzbar
|
||||
from pypdf import PdfReader
|
||||
|
||||
from geometry import PAGE_SIZE
|
||||
|
||||
|
||||
def parse(code):
|
||||
assert len(code) == 12
|
||||
|
@ -84,36 +80,33 @@ def main(input_file, verify, min_pages, append, output, force, num_workers):
|
|||
for page_i, (qrinfo, rotated) in enumerate(qrinfos):
|
||||
if len(qrinfo) == 0:
|
||||
continue # bad scan, skip it
|
||||
else:
|
||||
qrs = {}
|
||||
update = True
|
||||
m = None
|
||||
for info in qrinfo:
|
||||
magic, page, qrnum, serial = parse(info.data)
|
||||
qrs[qrnum] = (
|
||||
serial,
|
||||
page,
|
||||
magic,
|
||||
tuple(map(tuple, info.polygon)),
|
||||
)
|
||||
serials, pagenums, magics, _ = list(map(set, zip(*qrs.values())))
|
||||
if verify is not None and magics != {verify}:
|
||||
continue
|
||||
if {len(serials), len(pagenums)} != {1}:
|
||||
continue
|
||||
|
||||
old = pages_map.get(serial, {}).get(page, None)
|
||||
if old is not None and (len(old[-1]) == 2 or len(old[-1]) > len(qrs)):
|
||||
continue
|
||||
if len(qrs) == 2 and set(qrs) != {0, 1}:
|
||||
continue
|
||||
|
||||
pages_map.setdefault(serial, {})[page] = (
|
||||
fname,
|
||||
page_i,
|
||||
rotated,
|
||||
qrs,
|
||||
qrs = {}
|
||||
for info in qrinfo:
|
||||
magic, page, qrnum, serial = parse(info.data)
|
||||
qrs[qrnum] = (
|
||||
serial,
|
||||
page,
|
||||
magic,
|
||||
tuple(map(tuple, info.polygon)),
|
||||
)
|
||||
serials, pagenums, magics, _ = list(map(set, zip(*qrs.values())))
|
||||
if verify is not None and magics != {verify}:
|
||||
continue
|
||||
if {len(serials), len(pagenums)} != {1}:
|
||||
continue
|
||||
|
||||
old = pages_map.get(serial, {}).get(page, None)
|
||||
if old is not None and (len(old[-1]) == 2 or len(old[-1]) > len(qrs)):
|
||||
continue
|
||||
if len(qrs) == 2 and set(qrs) != {0, 1}:
|
||||
continue
|
||||
|
||||
pages_map.setdefault(serial, {})[page] = (
|
||||
fname,
|
||||
page_i,
|
||||
rotated,
|
||||
qrs,
|
||||
)
|
||||
seen_files.add(fname)
|
||||
|
||||
if min_pages is None:
|
||||
|
|
|
@ -68,7 +68,7 @@ def find_transform_matrix(src, dst, estimate_scale):
|
|||
rank = numpy.linalg.matrix_rank(A)
|
||||
if rank == 0:
|
||||
return numpy.nan * T
|
||||
elif rank == dim - 1:
|
||||
if rank == dim - 1:
|
||||
if numpy.linalg.det(U) * numpy.linalg.det(V) > 0:
|
||||
T[:dim, :dim] = U @ V
|
||||
else:
|
||||
|
|
|
@ -1,45 +1,30 @@
|
|||
import io
|
||||
import os
|
||||
import sys
|
||||
import numpy
|
||||
import pickle
|
||||
import hashlib
|
||||
import tempfile
|
||||
import subprocess
|
||||
import multiprocessing
|
||||
|
||||
import tqdm
|
||||
import click
|
||||
import img2pdf
|
||||
|
||||
from PIL import Image, ImageTransform
|
||||
from pyzbar import pyzbar
|
||||
from pypdf import PdfReader, PdfWriter, PageObject
|
||||
from pypdf import PdfReader
|
||||
|
||||
from geometry import (
|
||||
PAGE_SIZE,
|
||||
QR_SIZE,
|
||||
QR_LOCS,
|
||||
QR_EXPECTED_POINTS,
|
||||
find_transform_matrix,
|
||||
)
|
||||
|
||||
|
||||
def do_exam(inp):
|
||||
exam_number, page_info, rectify, guess_missing_rect_data = inp
|
||||
|
||||
|
||||
@click.command()
|
||||
@click.option("--rectify/--no-rectify", default=True)
|
||||
@click.option("--output-dir", "-o", required=True)
|
||||
@click.option("--num-workers", "-j", default="0")
|
||||
@click.option("--exam-numbers", "-e")
|
||||
@click.option("--output-dpi", type=int, default=200)
|
||||
@click.option("--fill-color", type=int, default=200)
|
||||
@click.argument("input_file")
|
||||
def main(
|
||||
input_file, rectify, output_dir, num_workers, output_dpi, fill_color, exam_numbers
|
||||
):
|
||||
def main(input_file, rectify, output_dir, output_dpi, fill_color, exam_numbers):
|
||||
os.makedirs(output_dir, exist_ok=True)
|
||||
|
||||
with open(input_file, "rb") as f:
|
||||
|
@ -64,7 +49,6 @@ def main(
|
|||
image = Image.open(im_buf)
|
||||
if rotated:
|
||||
image = image.rotate(180)
|
||||
dpi = int(sum([i / j for i, j in zip(image.size, PAGE_SIZE)]) / 2)
|
||||
output_size = tuple(int(output_dpi * i) for i in PAGE_SIZE)
|
||||
|
||||
if rectify:
|
||||
|
|
Loading…
Reference in New Issue