Skip to content
Snippets Groups Projects
Commit 9d192d88 authored by Renaud's avatar Renaud
Browse files

initial commit

parent 74a0240e
No related branches found
No related tags found
No related merge requests found
File added
File added
data/img/biomet.jpg

541 KiB

data/img/stryker.jpg

686 KiB

"""
Outils permettant la création de l'application finale
@author: Groupe 7
"""
__all__ = [
"DB", "Export", "Identification", "OCR", "OLR", "UI"
]
from ._db import DB
from ._export import Export
from ._identification import Identification
from ._models import *
from ._ocr import OCR
from ._olr import OLR
from ._ui import UI
class DB:
"""
Classe de gestion de la base de données
@author: Groupe 7
"""
def __init__(self) -> None:
pass
\ No newline at end of file
class Export:
"""
Classe de gestion de l'export
@author: Groupe 7
"""
def __init__(self) -> None:
pass
\ No newline at end of file
class Identification:
"""
Classe de gestion de l'identification et du regroupement des données
@author: Groupe 7
"""
def __init__(self) -> None:
pass
\ No newline at end of file
from typing import List, Tuple
class Group:
"""
Classe représentant un regroupement (boîte, chaîne de caractères, score)
@author: Groupe 7
"""
def __init__(self, box: List[List[float]], string: str, score: float) -> None:
self.box = box
self.string = string
self.score = score
\ No newline at end of file
from ._models import Group
from paddleocr import PaddleOCR, draw_ocr
from PIL import Image
from typing import List, Tuple
class OCR:
"""
Classe d'implémentation de la reconnaissance optique de caractères (OCR)
@author: Groupe 7
"""
def __init__(self) -> None:
# Il n'y a besoin d'exécuter une seule fois pour télécharger et charger
# le modèle en mémoire
# Le modèle de langage "en" a été choisi car c'est celui qui donne les
# meilleurs résultats parmi les modèles "cn", "en" et "fr".
self.ocr = self.__ocr_initialize__()
def __ocr_initialize__(self, lang='en', use_gpu=True) -> PaddleOCR:
"""
Télécharge et charge le modèle d'OCR en mémoire et renvoie l'objet
correspondant
- lang : modèle de langage utilisé
- use_gpu : True si paddlepaddle-gpu doit être utilisé,
False si paddlepaddle doit être utilisé
"""
return PaddleOCR(use_angle_cls=True, lang=lang, use_gpu=use_gpu)
def recognize(self, img_path: str) -> List[Group]:
"""
Méthode de reconnaissance optique de caractères qui renvoie la liste des
groupes trouvés.
- img_path : chemin vers l'image à utiliser
"""
groups = []
result = self.ocr.ocr(img_path, cls=True)
for idx in range(len(result)):
res = result[idx]
for line in res:
grp = Group(line[0], line[1][0], line[1][1])
groups.append(grp)
return groups
def save_ocr(self, groups: List[Group], img_path: str, output_img_path: str, font_path: str) -> Image:
"""
Génère une image d'illustration des résultats et la renvoie.
"""
image = Image.open(img_path).convert('RGB')
boxes = [line.box for line in groups]
txts = [line.string for line in groups]
scores = [line.score for line in groups]
print(image)
im_show = draw_ocr(image, boxes, txts, scores, font_path)
im_show = Image.fromarray(im_show)
im_show.save(output_img_path)
return im_show
class OLR:
"""
Classe d'implémentation de la reconnaissance optique de logos (OLR)
@author: Groupe 7
"""
def __init__(self) -> None:
pass
\ No newline at end of file
class UI:
"""
Classe d'implémentation de l'interface graphique
@author: Groupe 7
"""
def __init__(self) -> None:
pass
\ No newline at end of file
test.py 0 → 100644
from poc import *
import os
TEST_IMAGES_DIR = "data/img"
OUTPUT_DIR = "out"
FONT_PATH = "baskerville.ttf"
def main():
ocr = OCR()
groups1 = ocr.recognize(TEST_IMAGES_DIR + "/biomet.jpg")
groups2 = ocr.recognize(TEST_IMAGES_DIR + "/stryker.jpg")
ocr.save_ocr(groups1, TEST_IMAGES_DIR + "/biomet.jpg", TEST_IMAGES_DIR + "/biomet_export.jpg", os.getcwd() + "\\" + FONT_PATH)
ocr.save_ocr(groups2, TEST_IMAGES_DIR + "/stryker.jpg", TEST_IMAGES_DIR + "/stryker_exports.jpg", os.getcwd() + "\\" + FONT_PATH)
# partie BD : strs = [group.string for group in groups1]
return
if __name__ == '__main__':
main()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment