用python搭建神经网络 实现书籍ISBN号识别

本文介绍如何使用Python搭建神经网络来识别书籍的ISBN号码。在训练过程中,作者遇到使用MINST手写体数据集导致识别效果不佳的问题,意识到神经网络需要针对性的数据进行训练。解决方法是对ISBN号码图片进行二值化处理,然后扫描像素进行识别。最后,文章提供相关代码实现。
摘要由CSDN通过智能技术生成

如何用Python搭建神经网络并识别书籍号码

一些前言以及感想

          首先要先搭建神经网络,然后用数据集进行训练(其实就是用数字的图片集进行训练),这个地方有一个很大的坑,因为书号(或者车牌)都是印刷体,其实字体是比较规矩的,所以起初笔者用了MINST手写体数据集进行训练(字体很不规范),想法就是“不规范”的都能认出来,规范的一定也能识别出来,但问题出来了,用MINST数据集训练后,识别结果一塌糊涂,驴唇不对马嘴。上网查了一下发现神经网络对这些东西似乎很敏感(也可以说它很笨,非常非常笨),“喂一口吃一口”,没见过的东西是绝对不会的。

        训练完网络后,接下来就是对书籍的ISBN号照片进行处理(要识别ISBN总要把ISBN提取出来,去掉后面的条形码),方法也很简单,只要对照片进行简单的二值化,然后对像素进行扫描就可以(方法比较简单,因为要处理的图片比较简单),获得ISBN后将每个数字提取出来放进神将网络里面去识别就OK了。好了  话不多说,直接上代码。

import numpy
import scipy.special
import matplotlib.pyplot 
import cv2
import os


#搭建神经网络
class neuralNetwork:
    def __init__(self,Inodes,Hnodes,Onodes,Lrate):           #初始化函数
        self.inodes=Inodes
        self.hnodes=Hnodes
        self.onodes=Onodes
        self.L=Lrate
        self.activation_function=lambda x:scipy.special.expit(x)      #使用lambda匿名函数,x为参数
        self.wih = numpy.random.rand(self.hnodes, self.inodes) - 0.5  # 输入层与隐含层连接权
        #print(self.wih)
        self.who = numpy.random.rand(self.onodes, self.hnodes) - 0.5  # 输出层与隐含层连接权
        #print(self.who)

    def train(self,inputs_list,targets_list):                 #训练函数
        inputs=numpy.array(inputs_list,ndmin=2).T
        targets=numpy.array(targets_list,ndmin=2).T

        hidden_inputs=numpy.dot(self.wih,inputs)
        hidden_outputs=self.activation_function(hidden_inputs)
        final_inputs = numpy.dot(self.who, hidden_outputs)
        final_outputs = self.activation_function(final_inputs)

        output_errors=targets-final_outputs
        hidden_errors=numpy.dot(self.who.T,output_errors)

        # 更新隐层和输出层权重
        self.who+=self.L*numpy.dot((output_errors*final_outputs*(1.0-final_outputs)),numpy.transpose(hidden_outputs))
        #更新输入层与隐层之间权重
        self.wih += self.L * numpy.dot((hidden_errors * hidden_outputs * (1.0 - hidden_outputs)),
                                       numpy.transpose(inputs))

    def query(self,input_list):                         #查询函数
        inputs=numpy.array(input_list,ndmin=2).T    #convert inputs list to ad arr
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值