import cv2
import os
from cardsetting import Cardsetting
from cardtrainmodel import Trainsvm
import cardpredictor as cp
def run_video_predict(video):
cardsetting = Cardsetting()
trainsvm = Trainsvm(cardsetting)
# 检测是否有训练好的数据存档
if os.path.exists(cardsetting.char_letterAnumber_traindata_path) and os.path.exists(cardsetting.char_chinese_traindata_path) and os.path.exists(cardsetting.char_one_letter_traindata_path):
print('检索到数据存档')
trainsvm.model_letterAnumber.load(cardsetting.char_letterAnumber_traindata_path)
trainsvm.model_one_letter.load(cardsetting.char_one_letter_traindata_path)
trainsvm.model_chinese.load(cardsetting.char_chinese_traindata_path)
else: # 没有则用原始数据训练模型并保存
trainsvm.train_svm()
cot1 = 0 #车道1
this_card1 = False
all_cards1 = []
this_card_nunbers1 = []
this_card_number_str1 = []
all_predict_results_to_chars1 = [[], [], [], [], [], [], [], [], []]
cot2 = 0 #车道2
this_card2 = False
all_cards2 = []
this_card_nunbers2 = []
this_card_number_str2 = []
all_predict_results_to_chars2 = [[], [], [], [], [], [], [], [], []]
cot3 = 0 #车道3
this_card3 = False
all_cards3 = []
this_card_nunbers3 = []
this_card_number_str3 = []
all_predict_results_to_chars3 = [[], [], [], [], [], [], [], [], []]
cot4 = 0 #车道4
this_card4 = False
all_cards4 = []
this_card_nunbers4 = []
this_card_number_str4 = []
all_predict_results_to_chars4 = [[], [], [], [], [], [], [], [], []]
cot = 0
fps = video.get(cv2.CAP_PROP_FPS)
print('\nFPS:', fps)
success,frame = video.read()
while success:
frame1, frame2, frame3, frame4 = vehicle_lane(frame, cardsetting)
if cardsetting.vehicle_Lane_number >= 1: #第一车道
card_screenshots1, predict_results1 = cp.run_picture_predict(frame1, trainsvm, cardsetting)
if len(predict_results1) != 0:
cot1 = 0
this_card1 = True
for i, char in enumerate(predict_results1[0]):
all_predict_results_to_chars1[i].append(char) #车牌各个字符集合
else:
if cot1 == cardsetting.fps_pass:
this_card1 = False
cot1 += 1 # 统计帧经过
if this_card1 == False and len(all_predict_results_to_chars1[0]) != 0:
for chars1 in all_predict_results_to_chars1: #各个字符去重统计数量
card_cot1 = {}
chars_sets1 = set(chars1) #转为集合去重
for chars_set1 in chars_sets1: #统计数量 加到字典
card_cot1[chars_set1] = chars1.count(chars_set1)
card_cot1 = sorted(card_cot1.items(), key = lambda x: x[1], reverse = True) #根据数量排序
print(card_cot1)
if len(card_cot1) != 0:
this_card_nunbers1.append(card_cot1[0][0]) #得到车牌各个字符串列表
result_str1 = ''
for str1 in this_card_nunbers1: #转化为字符串
result_str1 += str1
this_card_number_str1.append(result_str1)
if this_card_number_str1 not in all_cards1:
all_cards1.append(this_card_number_str1)
this_card_nunbers1 = []
this_card_number_str1 = []
all_predict_results_to_chars1 = [[], [], [], [], [], [], [], [], []]
if cardsetting.vehicle_Lane_number >= 2: #第二车道
card_screenshots2, predict_results2 = cp.run_picture_predict(frame2, trainsvm, cardsetting)
if len(predict_results2) != 0:
cot2 = 0
this_card2 = True
for i, char in enumerate(predict_results2[0]):
all_predict_results_to_chars2[i].append(char) #车牌各个字符集合
else:
if cot2 == cardsetting.fps_pass:
this_card2 = False
cot2 += 1 # 统计帧经过
if this_card2 == False and len(all_predict_results_to_chars2[0]) != 0:
for chars2 in all_predict_results_to_chars2: #各个字符去重统计数量
card_cot2 = {}
chars_sets2 = set(chars2) #转为集合去重
for chars_set2 in chars_sets2: #统计数量 加到字典
card_cot2[chars_set2] = chars2.count(chars_set2)
card_cot2 = sorted(card_cot2.items(), key = lambda x: x[1], reverse = True) # 根据数量排序
print(card_cot2)
if len(card_cot2) != 0:
this_card_nunbers2.append(card_cot2[0][0]) #得到车牌各个字符串列表
result_str2 = ''
for str2 in this_card_nunbers2:#转化为字符串
result_str2 += str2
this_card_number_str2.append(result_str2)
if this_card_number_str2 not in all_cards2:
all_cards2.append(this_card_number_str2)
this_card_nunbers2 = []
this_card_number_str2 = []
all_predict_results_to_chars2 = [[], [], [], [], [], [], [], [], []]
if cardsetting.vehicle_Lane_number >= 3: #第三车道
card_screenshots3, predict_results3 = cp.run_picture_predict(frame3, trainsvm, cardsetting)
if len(predict_results3) != 0:
cot3 = 0
this_card3 = True
for i, char in enumerate(predict_results3[0]):
all_predict_results_to_chars3[i].append(char) #车牌各个字符集合
else:
if cot3 == cardsetting.fps_pass:
this_card3 = False
cot3 += 1 #统计帧经过
if this_card3 == False and len(all_predict_results_to_chars3[0]) != 0:
for chars3 in all_predict_results_to_chars3: #各个字符去重统计数量
card_cot3 = {}
chars_sets3 = set(chars3) #转为集合去重
for chars_set3 in chars_sets3: #统计数量 加到字典
card_cot3[chars_set3] = chars3.count(chars_set3)
card_cot3 = sorted(card_cot3.items(), key=lambda x: x[1], reverse=True) #根据数量排序
print(card_cot3)
if len(card_cot3) != 0:
this_card_nunbers3.append(card_cot3[0][0]) #得到车牌各个字符串列表
result_str3 = ''
for str3 in this_card_nunbers3: #转化为字符串
result_str3 += str3
this_card_number_str3.append(result_str3)
if this_card_number_str3 not in all_cards3:
all_cards3.append(this_card_number_str3)
this_card_nunbers3 = []
this_card_number_str3=[]
all_predict_results_to_chars3 = [[], [], [], [], [], [], [], [], []]
if cardsetting.vehicle_Lane_number >= 4: #第四车道
card_screenshots4, predict_results4 = cp.run_picture_predict(frame4, trainsvm, cardsetting)
if len(predict_results4) != 0:
cot4 = 0
this_card4 = True
for i, char in enumerate(predict_results4[0]):
all_predict_results_to_chars4[i].append(char) #车牌各个字符集合
else:
if cot4 == cardsetting.fps_pass:
this_card4 = False
cot4 += 1 #统计帧跳过
if this_card4 == False and len(all_predict_results_to_chars4[0]) != 0:
for chars4 in all_predict_results_to_chars4: #各个字符去重统计数量
card_cot4 = {}
chars_sets4 = set(chars4) #转为集合去重
for chars_set4 in chars_sets4: #统计数量 加到字典
card_cot4[chars_set4] = chars4.count(chars_set4)
card_cot4 = sorted(card_cot4.items(), key = lambda x: x[1], reverse = True) # 根据数量排序
print(card_cot4)
if len(card_cot4) != 0:
this_card_nunbers4.append(card_cot4[0][0]) #得到车牌各个字符串列表
result_str4 = ''
for str4 in this_card_nunbers4:#转化为字符串
result_str4 += str4
this_card_number_str4.append(result_str4)
if this_card_number_str4 not in all_cards4:
all_cards4.append(this_card_number_str4)
this_card_nunbers4 = []
this_card_number_str4 = []
all_predict_results_to_chars4 = [[], [], [], [], [], [], [], [], []]
cot += 1
print('Frame:', cot)
cv2.imshow('Frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
success, frame = video.read()
return(all_cards1, all_cards2, all_cards3, all_cards4)
def vehicle_lane(frame, cardsetting):
"""车道分割"""
if cardsetting.vehicle_Lane_number == 1:
frame1=frame[0:, cardsetting.Lane1:cardsetting.Lane2]
frame2=None
frame3=None
frame4=None
elif cardsetting.vehicle_Lane_nu
基于python下的 车牌识别代码
1星 需积分: 50 194 浏览量
2019-03-25
13:15:35
上传
评论 33
收藏 41.07MB ZIP 举报
糖纸.
- 粉丝: 44
- 资源: 4
最新资源
- C语言基础-C语言编程基础之Leetcode编程题解之第39题组合总和.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第38题外观数列.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第37题解数独.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第36题有效的数独.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第35题搜索插入位置.zip
- index.wxml
- C语言基础-C语言编程基础之Leetcode编程题解之第33题搜索旋转排序数组.zip
- 基于Python实现的手写数字识别系统源码.zip
- 从网页提取禁止转载的文字
- C语言基础-C语言编程基础之Leetcode编程题解之第32题最长有效括号.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈