def main(): print("Loading Images ...") # KNN ML Model ################################################################################################################ blnKNNTrainingSuccessful = DetectChars.loadKNNDataAndTrainKNN( CLASS_TXT_DIR, FLAT_IMG_DIR) # attempt KNN training if blnKNNTrainingSuccessful == False: print("\nerror: KNN traning was not successful\n") return # end if # Loading Images ############################################################################################################## BR_IMGS = os.listdir(DATASET_DIR) BR_IMGS = [img for img in BR_IMGS if ".jpg" in img] extractedPlates = [] numberPlateList = [] filename = [] # Write extracted plates images to path print("Begin Pre-processing images ...") for BR_IMG in BR_IMGS: BR_IMG_path = DATASET_DIR + BR_IMG imgOriginal = cv2.imread(BR_IMG_path) listOfPossiblePlates = DetectPlates.detectPlates(imgOriginal) listOfPossiblePlates = DetectChars.detectCharsInPlates( listOfPossiblePlates) # Sorting list of possible plates in DESC order (the one with most chars recognized) listOfPossiblePlates.sort( key=lambda possiblePlate: len(possiblePlate.strChars), reverse=True) licPlate = listOfPossiblePlates[0] extractedPlates.append(licPlate.imgPlate) numberPlateList.append(BR_IMG.rsplit('.', 1)[0]) cv2.imwrite(EXTRACTED_PLATES_DIR + BR_IMG, licPlate.imgPlate) # Export list of number plate to csv WriteNumberPlateList(numberPlateList) print("Completed pre-processing and export list of number plates.") # Pre-process extracted plates and export processed image file print("Begin Image Pre-processing for OCR..") ocr_preprocessed_plates = OCR.preprocess(extractedPlates, numberPlateList, PREPROCESSED_PLATES_DIR) # OCR the preprocessed extracted plates and export the OCR Output to csv OCROutput = OCR.OCR(ocr_preprocessed_plates) print("Completed Image Pre-processing for OCR and export to csv.") # Accuracy result based on predicted number plate vs actual number plates OCR_Result = OCR.CheckOCR(OCROutput, numberPlateList) # Export Result to csv ExportActualAndPredictedNumberPlate(numberPlateList, OCROutput) return # end of main()