OCR hakkında kimsenin söylemediği şey
%99 doğruluk bir slaytta harika ses çıkarır. Günde 60.000 parça üreten bir hatta %99, 600 yanlış okuma demektir. Her yanlış okumayı temizlemek operatöre 30 saniyeye mal oluyorsa, vardiya başına beş saatlik üretim kaybı doğar. Bir müşterinin tam bu matematik nedeniyle üçüncü gün OCR istasyonunu hattan çektiğine tanık olduk.Hat kenarı OCR için gerçek çıta %99.95'e daha yakın ve buraya yalnız modelle ulaşılmaz. Buraya bir sistemle ulaşılır.
Kağıt etiket okumak vs metal okumak
İkisi arasındaki fark insanların düşündüğünden geniş:- Kağıt etiketler: yüksek kontrast, tutarlı aydınlatma, öngörülebilir font, tekrarlanabilir pozisyon. Vanilla OCR modeli kutudan %99.8 verir.
- Metal üzerine lazer kazınmış seri numaraları: düşük kontrast, parlak yansımalar, tutarsız derinlik, ara sıra kesme sıvısı. Vanilla model iyi bir günde %85 verir.
İkinci durum için model çözümün belki %30'udur. Diğer %70 aydınlatma, çerçeveleme ve sonradan doğrulamadır.
Etrafımızda tuttuğumuz dört motor
- Tesseract — temiz basılı metin için iyidir. Metalde onunla mücadele etmeyin.
- EasyOCR — şaşırtıcı derecede iyi zero-shot temel, CPU'da yavaş, 3060'ta yeterince hızlı.
- PaddleOCR — özellikle CJK karakterleri veya karışık Latin / Arapça çıktığında çok dilli etiketler için varsayılanımız.
- Fine-tuned CRNN — doğruluk geliştirme süresinden önemli olduğunda ve hattan birkaç yüz etiketli örneğimiz olduğunda.
Üretimde neredeyse hiçbir zaman birden fazla motor çalıştırmıyoruz. Fizibilite aşamasında dördünü de aynı görüntüler üzerinde yan yana çalıştırıyoruz. Test setinde %99'a ulaşan en ucuz motor doğru olandır.
Sizi kurtaran doğrulama katmanı
Ürettiğimiz her üretim OCR'ında en az bir tane vardır:- Checksum hanesi doğrulaması — çoğu seri şeması bir tane içerir. Kullanın. Checksum'a takılan yanlış okuma temiz bir reddediştir, yanlış-ama-emin sonuç değildir — asıl zarar veren ikincisidir.
- Regex şekil eşleşmesi — "3 harf + 7 rakam olmalı" kuralı tüm hataların yarısını kameradan çıkmadan yakalar.
- Veritabanı varlık kontrolü — okunan seri üretim planında yoksa geri çevirin.
- Güven eşiği + insan inceleme kuyruğu — eşiğin altındaki hiçbir şey kabul edilmez; operatöre kuyrukla iletilir. Küçük bir kuyruk iyidir; sessiz yanlış okumalar değildir.
İşe yarayan desen: OCR'a asla güvenme. Her zaman en az bir bağımsız sinyalle çapraz kontrol et.
Orantısız fayda sağlayan ön işleme numaraları
- OCR'dan önce metni yatay konuma getirin — çoğu motor her 10° dönmede doğruluğu %2-5 düşürür.
- Karakter bazında kontrastı normalize edin (global histogram eşitleme değil, CLAHE).
- Yüzey eğikse, okumadan önce kalibre edilmiş bir lens haritasıyla düzleştirin.
Skoru %95'ten %99.5'e çıkaran cazip olmayan kısımlar bunlar.
Metal seriler üzerinde hangi desenleri kullanıyorsunuz? Lazer kazınmış başarısızlık vakalarıyla her zaman ilgileniyoruz.
The thing nobody tells you about OCR
99 % accuracy sounds great on a slide. On a line that produces 60 000 parts a day, 99 % means 600 misreads. If each misread costs an operator 30 seconds to clear, that's five hours of lost throughput per shift. We've watched a customer pull an OCR station out of a line on day three because of exactly this math.The real bar for line-side OCR is closer to 99.95 %, and you don't get there with a model alone. You get there with a system.
Reading paper labels vs reading metal
The difference between the two is wider than people think:- Paper labels: high contrast, consistent illumination, predictable font, repeatable position. A vanilla OCR model gets you 99.8 % out of the box.
- Laser-etched serials on metal: low contrast, specular highlights, inconsistent depth, occasional cutting fluid. A vanilla model gets you 85 % on a good day.
For the second case, the model is maybe 30 % of the solution. The other 70 % is lighting, framing, and post-validation.
The four engines we keep around
- Tesseract — fine for clean printed text. Don't fight it on metal.
- EasyOCR — surprisingly good zero-shot baseline, slow on CPU, fast enough on a 3060.
- PaddleOCR — our default for multilingual labels, especially when CJK characters or mixed Latin / Arabic show up.
- A fine-tuned CRNN — when accuracy matters more than dev time, and we have a few hundred labelled samples from the actual line.
We almost never run more than one engine in production. We do run all four during the feasibility phase, on the same images, side by side. The cheapest engine that hits 99 % on the test set is the right one.
The validation layer that saves you
Every production OCR we ship has at least one of:- Checksum digit validation — most serial schemes have one. Use it. A misread that fails the checksum is a clean reject, not a wrong-but-confident result, which is the failure mode that hurts.
- Regex shape match — "must be 3 letters + 7 digits" catches half of all errors before they leave the camera.
- Database existence check — if the read serial isn't in the production schedule, kick it back.
- Confidence threshold + human review queue — anything below threshold doesn't get accepted; it gets queued for an operator to check. A small queue is fine; silent wrong reads are not.
The pattern that works: never trust the OCR. Always cross-check with at least one independent signal.
Pre-processing tricks that disproportionately help
- Rectify the text to horizontal before OCR — most engines drop accuracy 2-5 % per 10° of rotation.
- Normalise contrast on a per-character basis (CLAHE, not global histogram equalisation).
- If the surface is curved, unwrap it with a calibrated lens map before reading.
These are the unsexy bits that move the dial from 95 % to 99.5 %.
What patterns are you using on metal serials? We're always interested in laser-etched failure cases.