ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 09.11.2023
Просмотров: 203
Скачиваний: 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()
#предположим,чтономернойзнакссамымираспознающимисясимволами (первая табличка отсортирована по убыванию длиныстроки) являетсяфактическимномернымзнаком
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()