Файл: Автоматизация и управление.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 09.11.2023

Просмотров: 192

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
возможныхзнаковвпорядкеубывания(отнаибольшего числа символов до наименьшего числа символов)listOfPossiblePlates.sort(key = lambda possiblePlate: len(possiblePlate.strChars), reverse = True)

#предположим,чтономернойзнакссамымираспознающимисясимволами (первая табличка отсортирована по убыванию длиныстроки) являетсяфактическимномернымзнаком

licPlate = listOfPossiblePlates[0]

cv2.imshow("imgPlate", licPlate.imgPlate) #показываетсяобрезанныйномернойзнак

cv2.imshow("imgThresh", licPlate.imgThresh) if len(licPlate.strChars) == 0:

print("\nno characters were detected\n\n") # выводитсясообщение

return # выход из программы#endif

drawRedRectangleAroundPlate(imgOriginalScene, licPlate) #изображается красный прямоугольник вокруг номерного знакаprint("\nlicense plate read from image = " + licPlate.strChars + "\n") #выводитсятекстномерногознака

print("") writeLicensePlateCharsOnImage(imgOriginalScene, licPlate) #выводится текстномерногознаканакартинкеcv2.imshow("imgOriginalScene", imgOriginalScene)

cv2.imwrite("imgOriginalScene.png", imgOriginalScene) #записатьизображение вфайл

#endifelse

cv2.waitKey(0) #окна остаются открытыми, пока не пользовательненажмет клавишу

return

#endmain
def drawRedRectangleAroundPlate(imgOriginalScene, licPlate): p2fRectPoints = cv2.boxPoints(licPlate.rrLocationOfPlateInScene) #получить4вершиныповернутогопрямоугольника

cv2.line(imgOriginalScene, tuple(p2fRectPoints[0]), tuple(p2fRectPoints[1]),

SCALAR_RED, 2) #draw4redlines

cv2.line(imgOriginalScene, tuple(p2fRectPoints[1]), tuple(p2fRectPoints[2]), SCALAR_RED, 2)

продолжениеприложенияА

cv2.line(imgOriginalScene, tuple(p2fRectPoints[2]), tuple(p2fRectPoints[3]), SCALAR_RED, 2)

cv2.line(imgOriginalScene, tuple(p2fRectPoints[3]), tuple(p2fRectPoints[0]),
SCALAR_RED, 2)

#endfunction

def writeLicensePlateCharsOnImage(imgOriginalScene, licPlate): ptCenterOfTextAreaX = 0 #этобудетцентробласти,вкоторуюбудет записан текст

ptCenterOfTextAreaY = 0

ptLowerLeftTextOriginX = 0 #этобудетнижнийлевыйугол области,вкоторуюбудет записантекст

ptLowerLeftTextOriginY = 0

sceneHeight, sceneWidth, sceneNumChannels = imgOriginalScene.shape plateHeight, plateWidth, plateNumChannels = licPlate.imgPlate.shape intFontFace = cv2.FONT_HERSHEY_SIMPLEX #выберите

простой шрифт jane

fltFontScale = float(plateHeight) / 30.0 #базовыймасштабшрифтаповысотеобластиномерногознака

intFontThickness = int(round(fltFontScale * 1.5)) #толщинаосновногошрифтавмасштабешрифта

textSize, baseline = cv2.getTextSize(licPlate.strChars, intFontFace, fltFontScale, intFontThickness)

#распакуйтеповернутыйпрямоугольниквцентральнуюточку,ширинуивысоту,атакжеугол

( (intPlateCenterX, intPlateCenterY), (intPlateWidth, intPlateHeight), fltCorrectionAngleInDeg ) = licPlate.rrLocationOfPlateInScene intPlateCenterX = int(intPlateCenterX) # убедитесь, что центрявляется целымчислом

intPlateCenterY = int(intPlateCenterY)

ptCenterOfTextAreaX = int(intPlateCenterX) # горизонтальноерасположениетекстовойобластитакоеже, какномернойзнак

if intPlateCenterY < (sceneHeight * 0.75): #еслиномернойзнакнаходится вверхнейчасти¾изображения

ptCenterOfTextAreaY = int(round(intPlateCenterY)) + int(round(plateHeight * 1.6)) #символыпишутсячуть ниже

else: # иначеномерной

знакнаходитсявнижнейчетвертиизображения

ptCenterOfTextAreaY = int(round(intPlateCenterY)) - int(round(plateHeight

* 1.6)) # символы пишутся над табличкой#endif

textSizeWidth,

textSizeHeight = textSize #ширинаивысотатекстаptLowerLeftTextOriginX = int(ptCenterOfTextAreaX - (textSizeWidth / 2)) ptLowerLeftTextOriginY = int(ptCenterOfTextAreaY + (textSizeHeight / 2))

ОкончаниеприложенияА

cv2.putText(imgOriginalScene, licPlate.strChars, (ptLowerLeftTextOriginX, ptLowerLeftTextOriginY), intFontFace, fltFontScale, SCALAR_YELLOW, intFontThickness)

#endfunction

if __name__ == "main__": main()