Zusatzschulung EasyOCR / Sudo Null IT News

Hallo Leser!

Hier ist ein Artikel-Leitfaden zur Weiterbildung von EasyOCR

Trotz der Tatsache, dass EasyOCR bei der Texterkennung sehr gut abschneidet, muss es noch trainiert werden, um die Erkennungsgenauigkeit zu erhöhen (z. B. gibt es keine Zahl in Erkennungszeichen).

1. Basisvorbereitung.

Bevor wir EasyOCR lernen, müssen wir Bilder mit Text und der erforderlichen Schriftart oder Markup-Bildern generieren.

Für die automatische Generierung empfehle ich die Verwendung der trdg-Bibliothek, Sie können mehr darüber lesen, wie man sie verwendet hier.

ps wir hatten die aufgabe einen reisepass zu erkennen und konnten keine schriften finden, also mussten wir den datensatz manuell zusammenstellen.

Als Ergebnis sollten wir Bilder mit Text erhalten:

und eine labels.csv-Datei wie diese:

Dabei ist Dateiname der Pfad zur Bilddatei, Wörter ist die Dekodierung des Textes aus dem Bild.

Es ist notwendig, die Auswahl in 2 Teile (train und val) aufzuteilen, das sind 2 Verzeichnisse mit Bildern und eine *.csv-Datei

2. Vorbereitung auf das Training.

2.1. Zuerst müssen Sie das Repository von git herunterladen:

2.2. Hier müssen wir den generierten Datensatz zum Verzeichnis ./trainer/all_data hinzufügen.

├── All_data │ ├── Ru_Train_Filtered │ │ └ └ └ └ └ └ └ └ └ └ └ └ └ └ └ └ └ └ └ └ └ └ └ └ └ └ └ └ └ └ └ └ └ │ │ │ … ─ … ─ … ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ └ └ └ └ └ └ └wort ist. Etiketten.csv

2.3. Laden Sie als Nächstes das bereits trainierte Modell herunter kyrillisch_g2 und legen Sie es mit OCR in das Verzeichnis (standardmäßig befindet sich die Datei hier ~/.EasyOCR/model erscheint nach dem Laden des Modells.

2.4. Jetzt ist es an der Zeit, die Konfiguration einzurichten:

  • Für ein korrektes Lernen müssen 208 Zeichen vorhanden sein, um alles zu erkennen (wenn nicht genügend Zeichen vorhanden sind, müssen Sie sie ersetzen).

  • saved_model – Pfad zu dem Modell, das neu trainiert werden muss, wenn das Training unterbrochen wird, können Sie das zuletzt gespeicherte Modell installieren und das Training fortsetzen;

  • experience_name – Projektname;

  • train_data, valid_data – Pfad zum Datensatz;

  • num_iter – Anzahl der Trainingsepochen;

  • valInterval – nach wie vielen Epochen soll die Vorhersage angezeigt werden;

  • FT – Kampf-Tuning-Modus;

  • new_prediction – um das Training nicht von vorne zu beginnen, setzen Sie hier False

Nummer: ‘0123456789’ Symbol: “!\”#$%&'()*+,-./:;<=>?@[\\]№_`{|}~ €₽” lang_char: ‘ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюяЂђЃѓЄєІіЇїЈјЉљЊњЋћЌќЎўЏџҐґҒғҚқҮүҲҳҶҷӀӏӢӣӨөӮӯ’ experi ment_name: ‘ru_filtered’ train_data: ‘all_data’ valid_data: ‘all_data/val’ manualSeed: 1111 workers: 6 batch_size: 64 #32 num_iter: 30000 valInterval: 200 saved_model: ‘cyrillic_g2’ FT: True optim: False # default is Adadelta lr: 1. beta1: 0.9 rho: 0.95 eps: 0.00000001 grad_clip: 5 #Data processing select_data: ‘train’ # this is the dataset folder in train_data batch_ratio: ‘ 1’ total_data_usage_ratio: 1.0 batch_max_length: 68 imgH: 64 imgW: 600 rgb: False Contrast_adjust: False sensitive: True PAD: True Contrast_adjust: 0.0 data_filtering_off: False # Model Architecture Transformation: ‘None’ FeatureExtraction: ‘VGG’ SequenceModeling: ‘BiLSTM’ Vorhersage: ‘CTC’ num_fiducial: 20 input_channel: 1 output_channel: 256 hidden_size: 256 decode: ‘greedy’ new_prediction: False freeze_FeatureFxtracti on: False freeze_SequenceModeling: False

Speichern Sie die Datei als custom_data_train.yaml im Konfigurationsverzeichnis.

EasyOCR-Schulung

!pip install utils import os import torque.backends.cudnn as cudnn import yaml from train import train from utils import AttrDict import pandas as pd cudnn.benchmark = True cudnn.deterministic = False def get_config(file_path): with open(file_path, ‘ r’, encoding=”utf8″) als Stream: opt = yaml.safe_load(stream) opt = AttrDict(opt) if opt.lang_char == ‘None’: characters=”” für Daten in opt[‘select_data’].split(‘-‘): csv_path = os.path.join(opt[‘train_data’]data, ‘labels.csv’) df = pd.read_csv(csv_path, sep=’^([^,]+),’, engine=”python”, usecols=[‘filename’, ‘words’]keep_default_na=False) all_char=””.join(df[‘words’]) Zeichen += ”.join(set(all_char)) characters = sorted(set(characters)) opt.character=””.join(characters) else: opt.character = opt.number + opt.symbol + opt. lang_char os.makedirs(f’./saved_models/{opt.experiment_name}’, exist_ok=True) return opt #Training starten opt = get_config(“config/custom_data_train.yaml”) train(opt, amp=False)

Trainiertes EasyOCR ausführen

Notwendig Herunterladenextrahieren und platzieren Sie die Dateien custom_example.py , custom_example.yaml im Verzeichnis custom_EasyOCR (Standard = ~/.EasyOCR/user_network) und platzieren Sie custom_example.pth (trainiertes Modell) im Verzeichnis model (Standard = ~/.EasyOCR/model). Legen Sie alle 3 Dateien an ihren jeweiligen Stellen ab, die Sie mit custom_example verwenden können

Bitte beachten Sie, dass alle 3 Dateien denselben Namen haben müssen.

reader = easyocr.Reader([‘ru’]model_storage_directory=’custom_EasyOCR/model’, user_network_directory=’custom_EasyOCR/user_network’, recog_network=’custom_example’)

Lifehacks zur Verbesserung der Erkennungsgenauigkeit.

  1. Bild in Graustufen umwandeln.

  2. Zeichenerkennungswörterbuch einrichten

result = reader.readtext(image, allowlist=”ABCDEEJZYKLMNOPRSTUFFHTSWYWYYY-“)

  1. Reichen Sie ein Bild zur Erkennung ein, bei dem es nur 1 Linie gibt, und verbinden Sie dann die Linien.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *