HyperAI

Détail Du Tutoriel | Utilisation De PaddleOCR Pour Détecter Et Identifier Les Numéros De Conteneurs

il y a 3 ans
Information
Jiaxin Sun
特色图像

Aperçu du contenu : La détection du numéro de conteneur basée sur PaddleOCR réduit le temps d'enregistrement des numéros de conteneur et améliore l'efficacité du chargement et du déchargement des ports.
Mots-clés : Tutoriel en ligne sur la reconnaissance de texte PaddleOCR

Selon un ensemble de données publiées par Alphaliner, une agence internationale de conseil et d'analyse en matière de transport maritime, en mars de cette année, parmi les 30 premières listes de débit de conteneurs en 2021,Le port de Shanghai arrive en tête de liste avec un « bulletin de notes » de 47,025 millions d'EVP.
Par rapport à la même période de l'année dernière, le débit de conteneurs du port de Shanghai était de 8,1%, soit près de 10 millions d'EVP de plus que son concurrent le plus proche, Singapour.

Les 100 premiers ports à conteneurs du monde ont réalisé un débit total de conteneurs de 676 millions d'EVP en 2021.Un nombre aussi important de conteneurs a accru la pression sur l’identification des numéros de conteneurs. La méthode traditionnelle d’identification et d’enregistrement manuels des numéros de conteneurs est coûteuse, inefficace et présente des conditions de fonctionnement rétrogrades.

Avec le développement de l'économie et de la société, l'introduction de l'intelligence artificielle dans les opérations portuaires est devenue la clé de la transformation et de la modernisation des ports traditionnels dans la concurrence du marché.

Cet article couvrira la préparation de l’environnement à la formation du modèle.Démontrer comment utiliser PaddleOCR pour détecter et identifier les numéros de conteneurs.

Voir directement le tutoriel de code :
https://openbayes.com/console/open-tutorials/containers/XJsxhLTnKNu

Utilisation d'une petite quantité de données pour réaliser des tâches de détection et de reconnaissance de numéros de boîtes

Le numéro de conteneur fait référence au numéro du conteneur qui expédie les marchandises exportées.Cet élément est obligatoire lors du remplissage du bordereau de livraison. La structure du numéro de conteneur standard adopte la norme ISO6346 (1995) et se compose de 11 chiffres. Prenons comme exemple le conteneur numéro CBHU 123456 7, il se compose de 3 parties :

La première partie est composée de 4 lettres anglaises. Les trois premières lettres indiquent le propriétaire ou l’exploitant du conteneur, et la quatrième lettre indique le type de conteneur. CBHU désigne un conteneur standard dont le propriétaire et l'exploitant est COSCO Container.

La deuxième partie est composée de 6 chiffres. Indique le code d'enregistrement du conteneur, qui est l'identification unique du conteneur.

La troisième partie est le code de contrôle, qui est obtenu en calculant les règles de vérification basées sur les 4 lettres et 6 chiffres précédents, et est utilisé pour identifier si une erreur se produit lors de la vérification.

Des conteneurs s'empilent au port en attendant d'être expédiés
Ce tutoriel est basé sur PaddleOCR pour les tâches de détection et de reconnaissance de numéros de conteneurs. Utilisez une petite quantité de données pour former les modèles de détection et de reconnaissance séparément, puis connectez-les enfin ensemble pour réaliser la tâche de détection et de reconnaissance du numéro de conteneur.

Préparation de l'environnement

  1. Démarrez un conteneur « formation de modèle » dans la console OpenBayes. Sélectionnez PaddlePaddle 2.3 pour l'environnement et RTX 3090 ou un autre type de GPU pour les ressources.

Si vous n'avez pas de compte sur la plateforme, veuillez d'abord vous rendre à l'adresse suivante pour vous inscrire : https://openbayes.com/console/signup

  1. Ouvrez une fenêtre de terminal dans Jupyter. Exécutez ensuite la commande suivante :
cd PaddleOCR-release-2.5 #进入 PaddleOCR-release-2.5 文件夹
pip install -r requirements.txt #安装 PaddleOCR 所需依赖
python setup.py install #安装 PaddleOCR

Introduction à l'ensemble de données

Ce didacticiel utilise le jeu de données Container Number-OCR, qui contient 3003 images de conteneurs avec une résolution de 1920 × 1080.

Pour consulter les détails de l'ensemble de données, veuillez visiter :
https://openbayes.com/console/open-tutorials/datasets/BzuGVEOJv2T/3

  1. Les règles d'annotation de formation du modèle de détection PaddleOCR sont les suivantes, séparées par « \t » :
" 图像文件名                    json.dumps 编码的图像标注信息"
ch4_test_images/img_61.jpg    [{"transcription": "MASA", "points": [[310, 104], [416, 141], [418, 216], [312, 179]]}, {...}]

Les informations d'annotation d'image avant l'encodage json.dumps sont une liste contenant plusieurs dictionnaires. Les points du dictionnaire représentent les coordonnées (x, y) des quatre points de la zone de texte, disposés dans le sens des aiguilles d'une montre à partir du point dans le coin supérieur gauche.

la transcription représente le texte dans la zone de texte actuelle. Lorsque son contenu est « ### », cela signifie que la zone de texte n'est pas valide et sera ignorée pendant la formation.

  1. Les règles d'annotation de formation du modèle de reconnaissance PaddleOCR sont les suivantes, séparées par « \t » :
" 图像文件名                 图像标注信息 "

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

## Collecte de données

3.1 Préparation des données requise pour le modèle de détection

Divisez les 3 000 images de l’ensemble de données en ensembles d’entraînement et de validation selon un ratio de 2:1 et exécutez le code suivant :

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 Préparation des données requises pour le modèle d'identification

Selon les annotations de la partie détection, recadrez l'ensemble de données pour qu'il ne contienne que la partie texte de l'image comme données de reconnaissance et exécutez le code suivant :
insérer la description de l'image ici
Pour le code complet, voir : https://openbayes.com/console/open-tutorials/containers/XJsxhLTnKNu

Expérience ##

Étant donné que les données sont relativement petites, afin d'obtenir une convergence de modèle meilleure et plus rapide, le modèle PP-OCRv3 dans PaddleOCR est utilisé pour la détection et la reconnaissance.

Sur la base de PP-OCRv2, l'indice Hmean de bout en bout de PP-OCRv3 pour les scènes chinoises est amélioré de 5% par rapport à PP-OCRv2, et l'effet de bout en bout des modèles numériques anglais est amélioré de 11%.

Veuillez vous référer au rapport technique PP-OCRv3 pour des détails d'optimisation détaillés.

4.1 Modèle de détection

4.1.1 Configuration du modèle de détection

PaddleOCR fournit de nombreux modèles de détection. Sur le chemin PaddleOCR-release-2.5/configs/det Le modèle et ses fichiers de configuration se trouvent sous Si nous choisissons le modèle ch_PP-OCRv3_det_student.yml, le chemin du fichier de configuration est :PaddleOCR-release-2.5/configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml

Les paramètres nécessaires doivent être définis avant utilisation, tels que les paramètres d'entraînement, le chemin du jeu de données, etc. Certaines configurations clés sont présentées ci-dessous :

#关键训练参数
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 Ajustement fin du modèle

Exécutez la commande suivante dans le bloc-notes pour affiner le modèle, où -c transmet le chemin du fichier de modèle configuré :

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

En utilisant les hyperparamètres par défaut, le modèle ch_PP-OCRv3_det_student Après 385 époques d'entraînement sur l'ensemble d'entraînement, la moyenne du modèle sur l'ensemble de validation a atteint : 96,96%, et il n'y a pas eu d'augmentation significative par la suite :

[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 Modèle d'identification

4.2.1 Configuration du modèle d'identification

PaddleOCR fournit de nombreux modèles de reconnaissance. Sur le chemin PaddleOCR-release-2.5/configs/rec Le modèle et ses fichiers de configuration se trouvent sous

Si nous choisissons le modèle ch_PP-OCRv3_rec_distillation, son chemin de fichier de configuration est :
PaddleOCR-release-2.5/configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml

Les paramètres nécessaires doivent être effectués avant utilisation, tels que les paramètres d'entraînement, le chemin du jeu de données, etc. Certaines configurations clés sont présentées ci-dessous :

#关键训练参数
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 Ajustement fin du modèle

Exécutez la commande suivante dans le bloc-notes pour affiner le modèle, où -c transmet le chemin du fichier de modèle configuré :

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

En utilisant les hyperparamètres par défaut, le modèle ch_PP-OCRv3_rec_distillation Après 136 époques d'entraînement sur l'ensemble d'entraînement, la précision du modèle sur l'ensemble de validation a atteint 96,11%, et il n'y a pas eu d'augmentation significative par la suite :

[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

Résultats

5.1 Raisonnement du modèle de détection

Exécutez la commande suivante dans le bloc-notes pour utiliser le modèle affiné afin de détecter le texte dans l'image de test :

  • Global.infer_img est le chemin de l'image ou le chemin du dossier d'images
  • Global.pretrained_model est le modèle affiné
  • Global.save_res_path est le chemin pour enregistrer les résultats d'inférence
%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 Raisonnement du modèle de reconnaissance

Exécutez la commande suivante dans le bloc-notes pour utiliser le modèle affiné afin de détecter le texte dans l'image de test :

  • Global.infer_img Le chemin vers l'image ou le chemin vers le dossier de l'image
  • Global.pretrained_model Pour le modèle peaufiné
  • Global.save_res_path Enregistrer le chemin pour les résultats d'inférence
%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 Modèle de détection et de reconnaissance Raisonnement sériel

5.3.1 Conversion du modèle

Avant le raisonnement en série, vous devez d’abord convertir le modèle formé et enregistré en un modèle d’inférence en exécutant respectivement les commandes de détection suivantes. dans:

  • -c Transmettez le chemin vers le fichier de configuration du modèle à convertir
  • -o Global.pretrained_model Le fichier modèle à convertir
  • Global.save_inference_dir Le chemin de stockage du modèle d'inférence obtenu par conversion
    insérer la description de l'image ici

5.3.2 Raisonnement en cascade du modèle

Une fois la conversion terminée, PaddleOCR fournit un outil de concaténation de modèles de détection et de reconnaissance, qui peut concaténer n'importe quel modèle de détection formé et n'importe quel modèle reconnu dans un système de reconnaissance de texte en deux étapes.

L'image d'entrée passe par quatre étapes principales : la détection de texte, la correction du cadre de détection, la reconnaissance de texte et le filtrage des scores pour générer l'emplacement du texte et les résultats de la reconnaissance.

Le code d'exécution est le suivant :

  • image_dir Le chemin vers une image unique ou une collection d'images
  • det_model_dir Chemin pour détecter le modèle d'inférence
  • rec_model_dir Pour identifier le chemin du modèle d'inférence

Les résultats de la reconnaissance visuelle sont enregistrés par défaut dans le dossier ./inference_results.

%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/"

Exemple de résultats de visualisation
Pour voir le tutoriel complet, visitez :
https://openbayes.com/console/open-tutorials/containers/XJsxhLTnKNu

À propos de PaddleOCR et OpenBayes

PaddleOCR est une bibliothèque d'outils OCR basée sur Baidu PaddlePaddle, comprenant un OCR chinois ultra-léger avec un modèle total de seulement 8,6 M. Il prend également en charge les algorithmes de formation, le déploiement de services et le déploiement côté terminal pour la détection et la reconnaissance de textes multiples.

Pour plus d'informations, veuillez visiter :
https://github.com/PaddlePaddle/PaddleOCR

Comprendre OpenBayes

OpenBayes est une institution de recherche de premier plan en intelligence artificielle en Chine.Fournit un certain nombre de services de base liés au développement de l'IA, notamment des conteneurs de puissance de calcul, une modélisation automatique et un ajustement automatique des paramètres.

Dans le même temps, OpenBayes a également lancé de nombreuses ressources publiques grand public telles que des ensembles de données, des tutoriels et des modèles. Pour que les développeurs apprennent rapidement et créent des modèles d’apprentissage automatique idéaux.

Visitez openbayes.com et inscrivez-vous dès maintenant pour profiter de 600 minutes/semaine de RTX 3090 et de 300 minutes/semaine de temps de calcul CPU gratuit.

Remarque : les ressources cadeaux hebdomadaires arriveront sur votre compte tous les lundis après-midi

Pour visualiser et exécuter le didacticiel complet, visitez le lien suivant :
https://openbayes.com/console/open-tutorials/containers/XJsxhLTnKNu

-- sur--