1、网络程序设计总结,夏天SA16225348,项目贡献项目回顾Demo演示个人心得,内容,本次项目中,做了以下一些贡献,不过更多的时间还是在“围观中学习”,整理如下:date: 12-06 修复了image is none bug。(格式转换错误)date: 12-22 实现了简单的caffe神经网络预测性别demo(pr失败 原因:没制作文档,注释不详细。)date: 12-22 分享caffe使用经验及资料以及归一化问题,发表在讨论区中date: 12-26 修复网站无法预测多次的bugdate: 12-27 对demo参数修正,采用数据归一化处理,正确率提高至70%,填补注释和详细文档da
2、te: 12-29 整理分享了服务器搭建demo的过程,项目贡献,尝试微信公众号开发,目前做了这么一个东西(昨晚才完工,博客上还没来得及更新):,项目贡献,项目原型是以深度学习和神经网络为工具,以大数据为基础,来辅助医生判断的病例生成系统。具体过程:将血常规检验报告的图片识别出年龄、性别及血常规检验的各项数据;在识别后与该病人病例相结合进行深度学习,训练出模型根据用户拍照或者上传的图片进行识别并预测其年龄和性别,以及自动生成病例(未完成)。,项目回顾,透视变换首先是上传图片后寻找数据表格内容并透视成1000*760的矩阵(web端为了填充将图片拉大了):,项目回顾,透视主要流程:图像预处理去噪
3、采用Canny算子提取边缘调用CV2模块的findContours提取矩形轮廓,筛选对角线大于阈值的轮廓将轮廓变成线:比较最小外接矩形相邻两条边的长短,以两条短边的中点作为线的两端若线数量大于三则根据线长短继续筛选长线。,项目回顾,透视主要流程:根据三条线间的距离确定表格头部和内容的位置利用向量叉乘不可变性确定起始点(若方向相反,结果为负),将表格内容往上包含头部的一些年龄性别信息将表格切下并进行透视投影变换。,项目回顾,数据提取从透视后的表格矩阵中提取相关数据并生成相应报告。,项目回顾,主要步骤:将表格数据内容切成22份数据对每份数据调用pytesserac的OCR库进行识别web用ajax
4、异步传输json数据,项目回顾,进行预测本次项目采用的是tensorflow预测年龄性别。服务器上采用的是训练好的模型进行预测。当然因为多种原因(参数未修正,数据量不大,数据精度etc.)因此年龄识别率不高,不过性别识别率还是可以接受的。,项目回顾,预测流程:数据预处理(一般是归一化)tensorflow 初始化并预测。返回预测结果,并在前端显示,项目回顾,预测时的BUG:无法预测多次,预测多次时,控制台会报在checkpoint文件里找不到对应变量的错,项目回顾,BUG产生原因:在tensorflow中以图来表示执行任务,在每次程序运行时,全局只会默认调用一次 self.create_net
5、work()指定一个特定图,并将所有变量收集并包装起来。在第一次正常调用tf.train.Saver()创建saver时会为收集好的变量赋上自动生成的名字。这样在之后每次调用tf_predict.py中的predict函数时,因为没有指定特定graph同时之前没有调用self.create_network(),那么saver = tf.train.Saver()会构造一个默认自动生成的saver但是此刻自动生成的名字域里是没有收集到任何变量的,而且因为名字不同,在checkpoint也找不到对应变量,自然就会报错。,项目回顾,BUG产生原因:同时saver还有另一个值得注意的特性:当前后添加的
6、两个变量名相同时,saver会简单的将第二个变量名赋名为variable_(i+1),这样在查找时需要注意变量的对应关系。,项目回顾,解决方案有两种:指定固定的graph,(如本次用的就是每次都设定图为tf的默认图)tf.reset_default_graph()在每次调用predict都重新完全创建一个graph,create_network再构建saver。这种方法的缺陷显而易见,很浪费资源,而且不方便使用。,项目回顾,项目演示地址 DO服务器:BloodTestOCR Demo,DEMO演示,做项目遇到新语言,看书是个选择,但最好的是从demo学起。看清楚数据流动过程,这在调试BUG时尤为重要。不仅要清楚从哪儿来到哪儿去,还要注意格式转换print X ; print typeof(X)要动手写代码,不要太过于相信自己的记忆力,遇到问题要记录。,个人心得,