示例#1
0
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()