Tryag File Manager
Home
||
Turbo Force
||
B-F Config_Cpanel
Current Path :
/
paip
/
script
/
lpr
/
detectron2_LPR
/
Or
Select Your Path :
Upload File :
New :
File
Dir
//paip/script/lpr/detectron2_LPR/lpr_test.py
import subprocess import time import os, sys, glob import detectron2_lpd_inference import recog_demo import detectron2_lpr_inference import flask from flask import request, jsonify from flask_cors import CORS from dateutil.parser import parse from collections import deque, Counter import pandas as pd import uuid import matplotlib.pyplot as plt from datetime import datetime import cv2 from PIL import ImageFont, ImageDraw, Image import numpy as np import shutil import cnn_lpr_inference # set sys path to import PyDBconnector #HOME_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), os.pardir) HOME_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__))) MODULE_DIR = 'util' sys.path.append(os.path.join(HOME_PATH, MODULE_DIR)) from PyDBconnector import PyDBconnector def lpr_detecting(): df = pd.DataFrame(columns=['IMAGE_NAME', 'DATE', 'LPR_RESULT', 'TYPE']) # 이미지 경로 설정 data_dir = "/gate/data/test_dataset" FileList = glob.glob(data_dir + '/*.jpg', recursive=True) img_namess = FileList print(f'파일 갯수 : {len(img_namess)}') for idx, d in enumerate(img_namess): # if idx >=40 : # break print(f"<<<<<<<<<<<<<<<<<<<<<<<< {idx} >>>>>>>>>>>>>>>>>>>>>>>>>>") # print("numnber = ", idx) start_time = time.time() # image_name = d.split("/")[-1] # image_dir = d.split("/")[:] image_dir, image_name = os.path.split(d) if image_dir[-1] != "/": image_dir = image_dir + "/" image_time = parse(image_name.split("_")[2][:-3]) print('날짜 및 시간 : ', image_time) print('이미지 경로 :', image_dir) print('이미지 이름 :', image_name) # detection = detectron2_lpd_inference.LicensePlate_Detector.getInstance() # recognition = detectron2_lpr_inference.LicensePlate_Recognition.getInstance() # recog = recog_demo.Recognition.getInstance() try: # Detection start = time.time() lpd_result, out_img, license_plate_type = detection.Predict_LPD(image_dir, image_name) end = time.time() print("번호 Detection 시간 : " + f"{end - start:.5f} sec") # Recognition start1 = time.time() lpr_result = recognition.Predict_LPR(lpd_result) lpr_result = lpr_result[0] # recog.recog(lpd_result) end1 = time.time() print("번호 Recog 시간 : " + f"{end1 - start1:.5f} sec 번호 결과 : {lpr_result} 번호판 종류 : {license_plate_type}") df.loc[idx] = [image_name, image_time, lpr_result, license_plate_type] ########################### # 예측한 결과 이미지 저장 out_img_copy = out_img.get_image()[:, :, ::-1].copy() # img = np.full(shape=(512, 512, 3), fill_value=255, dtype=np.uint8) img = Image.fromarray(out_img_copy) draw = ImageDraw.Draw(img) font = ImageFont.truetype("/usr/share/fonts/NanumFont/NanumMyeongjoExtraBold.ttf", 40, encoding="UTF-8") #font = ImageFont.truetype("~/usr/share/fonts/nhn-nanum/NanumGothicExtraBold.ttf", 40, encoding="UTF-8") org = (50, 100) draw.text(org, lpr_result, font=font, fill=(0, 0, 0)) out_img_put_text = np.array(img) # numpy_img = np.array(out_img_put_text).copy() # cv_img = cv2.cvtColor(numpy_img, cv2.COLOR_RGB2BGR) # out_img_puttext = cv2.putText(img, lpr_result, (350, 40), cv2.FONT_HERSHEY_PLAIN, 2, (0, 0, 0), 1, cv2.LINE_4) size, BaseLine = cv2.getTextSize(lpr_result, cv2.FONT_HERSHEY_SIMPLEX, 2, 4) cv2.rectangle(out_img_put_text, org, (org[0] + size[0], org[1] + size[1]), (0, 0, 0)) cv2.circle(out_img_put_text, org, 3, (255, 0, 255), 2) jpg_index = image_name.rfind('.jpg') plt_image = image_name[0:jpg_index] + "_lprDetectionResult.jpg" plt_dir = image_dir + 'result' try: os.makedirs(plt_dir) except OSError: if not os.path.isdir(plt_dir): raise save_dir = plt_dir + '/' + plt_image # 원본 이미지 복사 shutil.copyfile(image_dir+image_name, plt_dir+"/"+image_name) # result 이미지 저장 plt.imsave(save_dir, out_img_put_text) except Exception as e: print(e) end_time = time.time() print(f"<<<< detect_result finish {end_time - start_time:.5f} sec >>>>") print(df) df.to_csv('lpr_result.csv', index=False, columns=['IMAGE_NAME', 'DATE', 'LPR_RESULT', 'TYPE'], encoding='utf-8-sig') if __name__ == '__main__': print('-------------------- LPR model loading ---------------------') detection = detectron2_lpd_inference.LicensePlate_Detector.getInstance() #recognition = detectron2_lpr_inference.LicensePlate_Recognition.getInstance() recognition = cnn_lpr_inference.LicensePlate_Recognition.getInstance() #dbConn = PyDBconnector() lpr_detecting()