HyperAI

Tutorial-Details | Verwenden Von PaddleOCR Zum Erkennen Und Identifizieren Von Containernummern

vor 3 Jahren
Information
Jiaxin Sun
特色图像

Inhalt auf einen Blick: Die Containernummernerkennung auf Basis von PaddleOCR verkürzt die Zeit für die Erfassung von Containernummern und verbessert die Effizienz beim Be- und Entladen im Hafen.
Schlüsselwörter: PaddleOCR Texterkennung Online-Tutorial

Laut einer im März dieses Jahres von Alphaliner, einer internationalen Agentur für Schifffahrtsberatung und -analyse, veröffentlichten Datenliste gehörten im Jahr 2021 unter den Top 30 der ContainerumschlaglistenDer Hafen von Shanghai führte die Liste mit einem „Zeugnis“ von 47,025 Millionen TEU an.
Im Vergleich zum Vorjahreszeitraum lag der Containerumschlag des Hafens von Shanghai bei 8,11 TP3T und damit fast 10 Millionen TEU über dem seines nächsten Konkurrenten Singapur.

Die 100 größten Containerhäfen der Welt erreichten im Jahr 2021 einen Containerumschlag von insgesamt 676 Millionen TEU.Eine derart große Anzahl von Containern hat den Druck auf die Identifizierung der Containernummern erhöht. Die herkömmliche Methode der manuellen Identifizierung und Aufzeichnung von Containernummern ist kostspielig, ineffizient und weist rückständige Betriebsbedingungen auf.

Mit der Entwicklung von Wirtschaft und Gesellschaft ist die Einführung künstlicher Intelligenz im Hafenbetrieb zum Schlüssel für die Umgestaltung und Modernisierung traditioneller Häfen im Marktwettbewerb geworden.

In diesem Artikel geht es um die Vorbereitung der Umgebung für das Modelltraining.Zeigen Sie, wie Sie mit PaddleOCR Containernummern erkennen und identifizieren.

Sehen Sie sich das Code-Tutorial direkt an:
https://openbayes.com/console/open-tutorials/containers/XJsxhLTnKNu

Verwenden einer kleinen Datenmenge zum Durchführen von Aufgaben zur Erkennung und Erkennung von Postfachnummern

Bei der Containernummer handelt es sich um die Nummer des Containers, in dem die exportierten Waren transportiert werden.Diese Angabe ist beim Ausfüllen des Frachtbriefes erforderlich. Der Aufbau der Standard-Containernummer entspricht der Norm ISO6346 (1995) und besteht aus 11 Ziffern. Am Beispiel des Containers mit der Nummer CBHU 123456 7 besteht dieser aus 3 Teilen:

Der erste Teil besteht aus 4 englischen Buchstaben. Die ersten drei Buchstaben geben den Eigentümer bzw. Betreiber des Containers an, der vierte Buchstabe gibt den Containertyp an. CBHU bezeichnet einen Standardcontainer, dessen Eigentümer und Betreiber COSCO Container ist.

Der zweite Teil besteht aus 6 Ziffern. Gibt den Containerregistrierungscode an, der die eindeutige Identifizierung des Containers darstellt.

Der dritte Teil ist der Prüfcode, das durch Berechnung der Überprüfungsregeln basierend auf den vorherigen 4 Buchstaben und 6 Ziffern ermittelt wird und verwendet wird, um festzustellen, ob bei der Überprüfung ein Fehler auftritt.

Im Hafen stapeln sich Container, die auf die Verschiffung warten
Dieses Tutorial basiert auf PaddleOCR für Aufgaben zur Erkennung und Identifizierung von Containernummern. Verwenden Sie eine kleine Datenmenge, um die Erkennungs- und Erkennungsmodelle separat zu trainieren, und verbinden Sie sie schließlich miteinander, um die Aufgabe der Erkennung und Erkennung von Containernummern zu erfüllen.

Umgebungsvorbereitung

  1. Starten Sie einen „Modelltraining“-Container in der OpenBayes-Konsole. Wählen Sie PaddlePaddle 2.3 als Umgebung und RTX 3090 oder einen anderen GPU-Typ als Ressourcen.

Wenn Sie noch kein Plattformkonto besitzen, besuchen Sie bitte zunächst die folgende Adresse, um sich zu registrieren: https://openbayes.com/console/signup

  1. Öffnen Sie ein Terminalfenster in Jupyter. Führen Sie dann den folgenden Befehl aus:
cd PaddleOCR-release-2.5 #进入 PaddleOCR-release-2.5 文件夹
pip install -r requirements.txt #安装 PaddleOCR 所需依赖
python setup.py install #安装 PaddleOCR

Einführung in den Datensatz

Dieses Tutorial verwendet den Container Number-OCR-Datensatz, der 3003 Containerbilder mit einer Auflösung von 1920 × 1080 enthält.

Um die Datensatzdetails anzuzeigen, besuchen Sie bitte:
https://openbayes.com/console/open-tutorials/datasets/BzuGVEOJv2T/3

  1. Die Annotationsregeln für das Training des PaddleOCR-Erkennungsmodells lauten wie folgt, getrennt durch "\t":
" 图像文件名                    json.dumps 编码的图像标注信息"
ch4_test_images/img_61.jpg    [{"transcription": "MASA", "points": [[310, 104], [416, 141], [418, 216], [312, 179]]}, {...}]

Die Bildanmerkungsinformationen vor der json.dumps-Kodierung sind eine Liste mit mehreren Wörterbüchern. Die Punkte im Wörterbuch stellen die Koordinaten (x, y) der vier Punkte des Textfelds dar, angeordnet im Uhrzeigersinn vom Punkt in der oberen linken Ecke.

Die Transkription stellt den Text im aktuellen Textfeld dar. Wenn der Inhalt „###“ lautet, bedeutet dies, dass das Textfeld ungültig ist und während des Trainings übersprungen wird.

  1. Die Annotationsregeln für das Training des PaddleOCR-Erkennungsmodells lauten wie folgt, getrennt durch "\t":
" 图像文件名                 图像标注信息 "

train_data/rec/train/word_001.jpg   简单可依赖
train_data/rec/train/word_002.jpg   用科技让复杂的世界更简单

## Datenerfassung

3.1 Für das Erkennungsmodell erforderliche Datenvorbereitung

Teilen Sie die 3.000 Bilder im Datensatz im Verhältnis 2:1 in Trainings- und Validierungssätze auf und führen Sie den folgenden Code aus:

from tqdm import tqdm
finename = "all_label.txt"
f = open(finename)
lines = f.readlines() 
t = open('det_train_label.txt','w')
v = open('det_eval_label.txt','w')
count = 0
for line in tqdm(lines):
    if count < 2000:
        t.writelines(line)
        count += 1
    else:
        v.writelines(line)
f.close()
t.close()
v.close()

3.2 Erforderliche Datenaufbereitung für das Identifikationsmodell

Schneiden Sie den Datensatz gemäß den Anmerkungen des Erkennungsteils so zu, dass er nur den Textteil des Bildes als Erkennungsdaten enthält, und führen Sie den folgenden Code aus:
Bildbeschreibung hier einfügen
Den vollständigen Code finden Sie unter: https://openbayes.com/console/open-tutorials/containers/XJsxhLTnKNu

##-Experiment

Da die Daten relativ klein sind, wird zur Erkennung und Identifizierung das PP-OCRv3-Modell in PaddleOCR verwendet, um eine bessere und schnellere Modellkonvergenz zu erreichen.

Basierend auf PP-OCRv2 ist der End-to-End-Hmean-Index von PP-OCRv3 für chinesische Szenen im Vergleich zu PP-OCRv2 um 5% verbessert, und der End-to-End-Effekt englischer digitaler Modelle ist um 11% verbessert.

Ausführliche Informationen zur Optimierung finden Sie im technischen Bericht zu PP-OCRv3.

4.1 Erkennungsmodell

4.1.1 Konfiguration des Erkennungsmodells

PaddleOCR bietet viele Erkennungsmodelle. Auf dem Weg PaddleOCR-release-2.5/configs/det Das Modell und seine Konfigurationsdateien finden Sie unter Wenn wir Modell c wählenh_PP-OCRv3_det_student.yml, der Pfad der Konfigurationsdatei lautet:PaddleOCR-release-2.5/configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml

Vor der Verwendung müssen die erforderlichen Einstellungen vorgenommen werden, z. B. Trainingsparameter, Datensatzpfad usw. Einige wichtige Konfigurationen sind unten aufgeführt:

#关键训练参数
use_gpu: true #是否使用显卡
epoch_num: 1200 #训练 epoch 个数
save_model_dir: ./output/ch_PP-OCR_V3_det/ #模型保存路径
save_epoch_step: 200 #每训练 200epoch,保存一次模型
eval_batch_step: [0, 100] #训练每迭代 100 次,进行一次验证
pretrained_model: ./PaddleOCR-release
2.5/pretrain_models/ch_PP-OCR_V3_det/best_accuracy.pdparams #预训练模型路径
#训练集路径设置
Train:
  dataset:
    name: SimpleDataSet
    data_dir: /input0/images #图片文件夹路径
    label_file_list:
      - ./det_train_label.txt #标签路径

4.1.2 Modell-Feinabstimmung

Führen Sie den folgenden Befehl im Notebook aus, um das Modell zu optimieren, wobei -c den konfigurierten Modelldateipfad übergibt:

leOCR-release-2.5/tools/train.py \
    -c PaddleOCR-release-2.5/configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml

Mit Standard-Hyperparametern, das Modell ch_PP-OCRv3_det_student Nach 385 Trainingsepochen im Trainingssatz erreichte der hmean des Modells im Validierungssatz: 96,96%, und danach gab es keinen signifikanten Anstieg:

[2022/10/11 06:36:09] ppocr INFO: best metric, hmean: 0.969551282051282, precision: 0.9577836411609498,
recall: 0.981611681990265, fps: 20.347745459258228, best_epoch: 385

4.2 Identifikationsmodell

4.2.1 Konfiguration des Identifikationsmodells

PaddleOCR bietet viele Erkennungsmodelle. Auf dem Weg PaddleOCR-release-2.5/configs/rec Das Modell und seine Konfigurationsdateien finden Sie unter

Wenn wir das Modell wählen ch_PP-OCRv3_rec_distillation, der Pfad der Konfigurationsdatei lautet:
PaddleOCR-release-2.5/configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml

Vor der Verwendung müssen notwendige Einstellungen vorgenommen werden, wie z. B. Trainingsparameter, Datensatzpfad usw. Einige wichtige Konfigurationen werden unten angezeigt:

#关键训练参数
use_gpu: true #是否使用显卡
epoch_num: 1200 #训练 epoch 个数
save_model_dir: ./output/rec_ppocr_v3_distillation #模型保存路径
save_epoch_step: 200 #每训练 200epoch,保存一次模型
eval_batch_step: [0, 100] #训练每迭代 100 次,进行一次验证
pretrained_model: ./PaddleOCR-release-2.5/pretrain_models/PPOCRv3/best_accuracy.pdparams #预训练模型路径
#训练集路径设置
Train:
  dataset:
    name: SimpleDataSet
    data_dir: ./RecTrainData/ #图片文件夹路径
    label_file_list:
      - ./rec_train_label.txt #标签路径

4.2.2 Modell-Feinabstimmung

Führen Sie den folgenden Befehl im Notebook aus, um das Modell zu optimieren, wobei -c den konfigurierten Modelldateipfad übergibt:

%run PaddleOCR-release-2.5/tools/train.py \
    -c PaddleOCR-release-2.5/configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml

Mit Standard-Hyperparametern, das Modell ch_PP-OCRv3_rec_distillation Nach 136 Trainingsepochen auf dem Trainingssatz erreichte die Genauigkeit des Modells auf dem Validierungssatz 96,11%, und danach gab es keinen signifikanten Anstieg:

[2022/10/11 20:04:28] ppocr INFO: best metric, acc: 0.9610600272522444, norm_edit_dis: 0.9927426548965615,
Teacher_acc: 0.9540291998159589, Teacher_norm_edit_dis: 0.9905629345025616, fps: 246.029195787707, best_epoch: 136

Ergebnisse

5.1 Schlussfolgerungen zum Erkennungsmodell

Führen Sie den folgenden Befehl im Notebook aus, um das optimierte Modell zum Erkennen von Text im Testbild zu verwenden:

  • Global.infer_img ist der Bildpfad oder Bildordnerpfad
  • Global.pretrained_model ist das fein abgestimmte Modell
  • Global.save_res_path ist der Pfad zum Speichern der Inferenzergebnisse
%run PaddleOCR-release-2.5/tools/infer_det.py \
    -c PaddleOCR-release-2.5/configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml \
    -o Global.infer_img="/input0/images" Global.pretrained_model="./output/ch_PP-OCR_V3_det/best_accuracy" Global.save_res_path="./output/det_infer_res/predicts.txt"

5.2 Erkennen von Modellbegründungen

Führen Sie den folgenden Befehl im Notebook aus, um das optimierte Modell zum Erkennen von Text im Testbild zu verwenden:

  • Global.infer_img Der Pfad zum Bild bzw. der Pfad zum Bildordner
  • Global.pretrained_model Für das fein abgestimmte Modell
  • Global.save_res_path Speichern Sie den Pfad für Inferenzergebnisse
%run PaddleOCR-release-2.5/tools/infer_rec.py \
    -c PaddleOCR-release-2.5/configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml \
    -o Global.infer_img="./RecEvalData/" Global.pretrained_model="./output/rec_ppocr_v3_distillation/best_accuracy" Global.save_res_path="./output/rec_infer_res/predicts.txt"

5.3 Erkennungs- und Erkennungsmodell Serielles Denken

5.3.1 Modellkonvertierung

Vor dem seriellen Schließen müssen Sie zunächst das trainierte und gespeicherte Modell in ein Inferenzmodell umwandeln, indem Sie jeweils die folgenden Erkennungsbefehle ausführen. In:

  • -c Übergeben Sie den Pfad zur Konfigurationsdatei des zu konvertierenden Modells
  • -o Global.pretrained_model Die zu konvertierende Modelldatei
  • Global.save_inference_dir Der Speicherpfad für das zur Konvertierung erhaltene Inferenzmodell
    Bildbeschreibung hier einfügen

5.3.2 Kaskadierende Modellbegründung

Nach Abschluss der Konvertierung bietet PaddleOCR ein Tool zur Erkennungs- und Erkennungsmodellverkettung, das jedes trainierte Erkennungsmodell und jedes erkannte Modell zu einem zweistufigen Texterkennungssystem verketten kann.

Das Eingabebild durchläuft vier Hauptphasen: Texterkennung, Erkennungsrahmenkorrektur, Texterkennung und Punktefilterung, um die Textposition und die Erkennungsergebnisse auszugeben.

Der Ausführungscode lautet wie folgt:

  • image_dir Der Pfad zu einem einzelnen Bild oder einer Sammlung von Bildern
  • det_model_dir Pfad zum Erkennen des Inferenzmodells
  • rec_model_dir Um den Pfad des Inferenzmodells zu identifizieren

Die Ergebnisse der visuellen Erkennung werden standardmäßig im Ordner ./inference_results gespeichert.

%run PaddleOCR-release-2.5/tools/infer/predict_system.py \
--image_dir="OCRTest" \
--det_model_dir="./output/det_inference/" \
--rec_model_dir="./output/rec_inference/Student/"

Beispiel für Visualisierungsergebnisse
Um das vollständige Tutorial anzuzeigen, besuchen Sie:
https://openbayes.com/console/open-tutorials/containers/XJsxhLTnKNu

Über PaddleOCR und OpenBayes

PaddleOCR ist eine OCR-Toolbibliothek basierend auf Baidu PaddlePaddle, einschließlich einer ultraleichten chinesischen OCR mit einem Gesamtmodell von nur 8,6 M. Es unterstützt außerdem Trainingsalgorithmen, Servicebereitstellung und End-Side-Bereitstellung für die Erkennung mehrerer Texte und die Texterkennung.

Weitere Informationen finden Sie unter:
https://github.com/PaddlePaddle/PaddleOCR

OpenBayes verstehen

OpenBayes ist eine führende Forschungseinrichtung für maschinelle Intelligenz in China.Bietet eine Reihe grundlegender Dienste im Zusammenhang mit der KI-Entwicklung, darunter Rechenleistungscontainer, automatische Modellierung und automatische Parameteranpassung.

Gleichzeitig hat OpenBayes auch viele gängige öffentliche Ressourcen wie Datensätze, Tutorials und Modelle veröffentlicht. Damit Entwickler schnell lernen und ideale Modelle für maschinelles Lernen erstellen können.

Besuchen Sie openbayes.com und registrieren Sie sich jetzt, um 600 Minuten/Woche RTX 3090 und 300 Minuten/Woche kostenlose CPU-Rechenzeit zu erhalten.

Hinweis: Die wöchentlichen Geschenkressourcen werden jeden Montagnachmittag auf Ihrem Konto eingehen

Um das vollständige Lernprogramm anzuzeigen und auszuführen, besuchen Sie den folgenden Link:
https://openbayes.com/console/open-tutorials/containers/XJsxhLTnKNu

-- über--