这篇文章主要分析recognizer.py文件

首先是此文件主要调用的库

主要调用了keras,

Keras是由纯python编写的基于theano/tensorflow的深度学习框架。Keras是一个高层神经网络API,支持快速实验,能够把你的idea迅速转换为结果。下图是使用keras搭建一个神经网络系统的大致步骤。

index = {"京": 0, "沪": 1, "津": 2, "渝": 3, "冀": 4, "晋": 5, "蒙": 6, "辽": 7, "吉": 8, "黑": 9, "苏": 10, "浙": 11, "皖": 12,"闽": 13, "赣": 14, "鲁": 15, "豫": 16, "鄂": 17, "湘": 18, "粤": 19, "桂": 20, "琼": 21, "川": 22, "贵": 23, "云": 24,"藏": 25, "陕": 26, "甘": 27, "青": 28, "宁": 29, "新": 30, "0": 31, "1": 32, "2": 33, "3": 34, "4": 35, "5": 36,"6": 37, "7": 38, "8": 39, "9": 40, "A": 41, "B": 42, "C": 43, "D": 44, "E": 45, "F": 46, "G": 47, "H": 48,"J": 49, "K": 50, "L": 51, "M": 52, "N": 53, "P": 54, "Q": 55, "R": 56, "S": 57, "T": 58, "U": 59, "V": 60,"W": 61, "X": 62, "Y": 63, "Z": 64,"港":65,"学":66 ,"O":67 ,"使":68,"警":69,"澳":70,"挂":71};chars = ["京", "沪", "津", "渝", "冀", "晋", "蒙", "辽", "吉", "黑", "苏", "浙", "皖", "闽", "赣", "鲁", "豫", "鄂", "湘", "粤", "桂","琼", "川", "贵", "云", "藏", "陕", "甘", "青", "宁", "新", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A","B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P","Q", "R", "S", "T", "U", "V", "W", "X","Y", "Z","港","学","O","使","警","澳","挂" ];def Getmodel_tensorflow(nb_classes):# nb_classes = len(charset)img_rows, img_cols = 23, 23# number of convolutional filters to usenb_filters = 32# size of pooling area for max poolingnb_pool = 2# convolution kernel sizenb_conv = 3# x = np.load('x.npy')# y = np_utils.to_categorical(range(3062)*45*5*2, nb_classes)# weight = ((type_class - np.arange(type_class)) / type_class + 1) ** 3# weight = dict(zip(range(3063), weight / weight.mean()))  # 调整权重,高频字优先model = Sequential()model.add(Conv2D(32, (5, 5),input_shape=(img_rows, img_cols,1)))model.add(Activation('relu'))model.add(MaxPool2D(pool_size=(nb_pool, nb_pool)))model.add(Dropout(0.25))model.add(Conv2D(32, (3, 3)))model.add(Activation('relu'))model.add(MaxPool2D(pool_size=(nb_pool, nb_pool)))model.add(Dropout(0.25))model.add(Conv2D(512, (3, 3)))# model.add(Activation('relu'))# model.add(MaxPooling2D(pool_size=(nb_pool, nb_pool)))# model.add(Dropout(0.25))model.add(Flatten())model.add(Dense(512))model.add(Activation('relu'))model.add(Dropout(0.5))model.add(Dense(nb_classes))model.add(Activation('softmax'))model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])return modeldef Getmodel_ch(nb_classes):# nb_classes = len(charset)img_rows, img_cols = 23, 23# number of convolutional filters to usenb_filters = 32# size of pooling area for max poolingnb_pool = 2# convolution kernel sizenb_conv = 3# x = np.load('x.npy')# y = np_utils.to_categorical(range(3062)*45*5*2, nb_classes)# weight = ((type_class - np.arange(type_class)) / type_class + 1) ** 3# weight = dict(zip(range(3063), weight / weight.mean()))  # 调整权重,高频字优先model = Sequential()model.add(Conv2D(32, (5, 5),input_shape=(img_rows, img_cols,1)))model.add(Activation('relu'))model.add(MaxPool2D(pool_size=(nb_pool, nb_pool)))model.add(Dropout(0.25))model.add(Conv2D(32, (3, 3)))model.add(Activation('relu'))model.add(MaxPool2D(pool_size=(nb_pool, nb_pool)))model.add(Dropout(0.25))model.add(Conv2D(512, (3, 3)))# model.add(Activation('relu'))# model.add(MaxPooling2D(pool_size=(nb_pool, nb_pool)))# model.add(Dropout(0.25))model.add(Flatten())model.add(Dense(756))model.add(Activation('relu'))model.add(Dropout(0.5))model.add(Dense(nb_classes))model.add(Activation('softmax'))model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])return modelmodel  = Getmodel_tensorflow(65)
#构建网络model_ch = Getmodel_ch(31)model_ch.load_weights("./model/char_chi_sim.h5")
# model_ch.save_weights("./model/char_chi_sim.h5")
model.load_weights("./model/char_rec.h5")
# model.save("./model/char_rec.h5")

然后就是构建神经网络的过程,TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理。Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow为张量从流图的一端流动到另一端计算过程。TensorFlow是将复杂的数据结构传输至人工智能神经网中进行分析和处理过程的系统。张量的理解:张量是有大小和多个方向的量。这里的方向就是指张量的阶数。我们可以将标量视为零阶张量,矢量视为一阶张量,那么矩阵就是二阶张量。

以上就是不断的调用TensorFlow中的方法来不断的调用,便于人工智能神经网的学习与分析。

然后就是开始使用完整的神经网络来完成我们需要的工作

def SimplePredict(image,pos):image = cv2.resize(image, (23, 23))image = cv2.equalizeHist(image)image = image.astype(np.float) / 255image -= image.mean()image = np.expand_dims(image, 3)if pos!=0:res = np.array(model.predict(np.array([image]))[0])else:res = np.array(model_ch.predict(np.array([image]))[0])zero_add = 0 ;if pos==0:res = res[:31]elif pos==1:res = res[31+10:65]zero_add = 31+10else:res = res[31:]zero_add = 31max_id = res.argmax()return res.max(),chars[max_id+zero_add],max_id+zero_add

将图片输入到模型进行测试predict,根据车牌颜色判断类型,深色背景白色字体返回0,类似浅色背景深色字体的返回大于零的类型。

基于HyperLPR的车牌识别(二)相关推荐

  1. 基于HyperLPR的车牌识别

    摘要: HyperLPR 是一个高性能开源中文车牌识别框架,基于keras-tensorflow实现,支持android,linux,windows,ios等多种平台. 目前已有C++实现版本和Pyt ...

  2. 基于HyperLPR的车牌识别(三)

    这一次主要分析在pipline.py中的SimpleRecognizePlate函数. 首先是time()函数,time是引用于os库中的函数,目的是调用系统的时间获取当前时间,以便于后面对于时间的显 ...

  3. 数字图像处理:基于MATLAB的车牌识别项目

    学过了数字图像处理,就进行一个综合性强的小项目来巩固一下知识吧.前阵子编写调试了一套基于MATLAB的车牌识别的项目的代码.今天又重新改进了一下代码,识别的效果好一点了,也精简了一些代码.这里没有使用 ...

  4. 基于matlab的车牌识别系统程序,基于matlab的车牌识别系统的设计(附程序).doc

    基于matlab的车牌识别系统的设计(附程序).doc 1车牌识别系统的设计1.摘要:汽车牌照自动识别系统是制约道路交通智能化的重要因素,包括车牌定位.字符分割和字符识别三个主要部分.本文首先确定车辆 ...

  5. 车牌识别与计算机编程,基于MATLAB的车牌识别程序详解.ppt

    基于MATLAB的车牌识别程序详解 自定义一个字符函数,用来从车牌区域中提取出7个字符,其中利用切割函数来进行切割. 程序:function [word,result]=getword(d) word ...

  6. 基于机器学习的车牌识别系统

    基于机器学习的车牌识别系统 本文设计的车牌处理系统主要用于通过手机.路口监视器拍到的车牌照片进行识别.由图像处理.车牌定位.字符分割和字符识别四个模块组成,该四部分需要依次执行,其中的每一模块需要利用 ...

  7. 基于神经网络的车牌识别,卷积神经网络车牌识别

    现在很多工程项目都用车牌识别系统,我想问一下车牌识别系统的原理是什么? 核心算法:从六个步骤来提取我们抓拍的车牌信息,第一:图像捕捉采集.第二:车牌定位.第三:预处理.第四:字符分割.第五:字符识别. ...

  8. 基于Matlab的车牌识别系统完整版课论文分享 快看

    基于Matlab的车牌识别系统 一.设计原理 车辆车牌识别系统的基本工作原理为:将摄像头拍摄到的包含车辆车牌的图像通过视频卡输入到计算机中进行预处理,再由检索模块对车牌进行搜索.检测.定位,并分割出包 ...

  9. 基于机器学习的车牌识别系统(Python实现基于SVM支持向量机的车牌分类)

    基于机器学习的车牌识别系统(Python实现基于SVM支持向量机的车牌分类) 一.数据集说明 训练样本来自于github上的EasyPR的c++版本,包含一万三千多张数字及大写字母的图片以及三千多张中 ...

最新文章

  1. Openresrt最佳案例 | 第2篇:Lua入门
  2. Android Service完全解析,关于服务你所需知道的一切(下)
  3. 德式秘籍:产品总监最该学会的管理方法是什么?(一)
  4. mysql百万数据删除_【MySQL】删除大量数据的具体实现
  5. tensorflow随笔-检测浮点数类型check_numerics
  6. android 中ScrollView的使用
  7. github/gitlab同时管理多个ssh key
  8. TableView下拉图片放大
  9. svn切换分支 如何判断 是否完成_SVN创建分支/合并分支/切换分支
  10. JavaScript 函数定义+内置函数使用+array对象+object类型
  11. Mysql批量更新的一个坑-allowMultiQueries=true允许批量更新
  12. JavaScript(3)——Object-Oriented Design
  13. 编译原理教程_9 运行时存储组织
  14. python difflib 编辑距离_LeetCode--072--编辑距离(python)
  15. 一个门外汉的产品设计漫谈
  16. 前端工程师如何快速的Mac装机?学会这些技巧让你的装机速度提升至少1倍!!!
  17. java解指派问题,运用Excel规划求解解决指派问题
  18. appcan java_appcan下载
  19. ios14测试版兼容软件,ios14描述文件
  20. css中的单位换算_关于网页中pt和px的单位换算!

热门文章

  1. ECharts数据可视化柱状图(渐变色)
  2. 用大白菜装centos7_U盘安装CentOS 7终极方案,简单有效
  3. 华为NE40E安全防御体系结构
  4. ARM:ELF bin Hex axf
  5. JAVA计算机毕业设计便行顺风车出行系统Mybatis+系统+数据库+调试部署
  6. 初中计算机上机考试题,初中信息技术考试操作题
  7. 阳振坤:OceanBase 4.0 核心技术解读
  8. Java实现前序遍历,中序遍历,后序遍历,层序遍历
  9. 常见的几种电脑蓝屏故障分析及处理办法
  10. ctr镜像导入报错ctr: content digest sha256:xxxxxx not found