fix: pyzbar FP sur tableaux — carrés noirs sur dates/heures dans les grilles
pyzbar interprétait les cellules de tableaux trackare comme des codes-barres et les noircissait. Ajout d'un seuil minimum de surface (2000 px²) pour filtrer les faux positifs sur les petites zones. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -3873,10 +3873,16 @@ def _rasterize_page(args):
|
|||||||
ry1 = y1 * zoom
|
ry1 = y1 * zoom
|
||||||
draw.rectangle([rx0, ry0, rx1, ry1], fill=(0, 0, 0))
|
draw.rectangle([rx0, ry0, rx1, ry1], fill=(0, 0, 0))
|
||||||
# Détecter et noircir les codes-barres et QR codes
|
# Détecter et noircir les codes-barres et QR codes
|
||||||
|
# Filtre : ignorer les faux positifs pyzbar sur les tableaux
|
||||||
|
# (les grilles de cellules sont parfois interprétées comme des codes-barres)
|
||||||
|
_MIN_BARCODE_AREA = 2000 * zoom * zoom # minimum ~2000 px² en taille originale
|
||||||
try:
|
try:
|
||||||
from pyzbar.pyzbar import decode as _pyzbar_decode
|
from pyzbar.pyzbar import decode as _pyzbar_decode
|
||||||
for symbol in _pyzbar_decode(img):
|
for symbol in _pyzbar_decode(img):
|
||||||
r = symbol.rect
|
r = symbol.rect
|
||||||
|
area = r.width * r.height
|
||||||
|
if area < _MIN_BARCODE_AREA:
|
||||||
|
continue # Trop petit — probablement un FP sur une cellule de tableau
|
||||||
margin = int(5 * zoom)
|
margin = int(5 * zoom)
|
||||||
draw.rectangle([r.left - margin, r.top - margin,
|
draw.rectangle([r.left - margin, r.top - margin,
|
||||||
r.left + r.width + margin, r.top + r.height + margin],
|
r.left + r.width + margin, r.top + r.height + margin],
|
||||||
|
|||||||
Reference in New Issue
Block a user