网络程序设计课程项目学习总结

    xiaoxiao2021-03-26  16

    指导老师:孟宁

    学习心得:

    《网络程序设计》这门课是我选的所有课中最特别的一门课。这门课所涉及的知识面很广,很多新的知识都要一边吸收一边应用。对于我这样的小白来说,开始确实是很痛苦的,但是我很庆幸我坚持下来了。 孟老师授课的方式很特别,让我们先自学,然后再分享。虽然每个人的贡献是很小的,但当所有一个个小的贡献汇集起来后,那将是一片知识的海洋。课程结束后,我才发现孟老师的良苦用心。 在整个项目的过程中,我的贡献很小。一开始,我觉得有神级别的同学在,水水就能过。但随着学习的深入,学习了一些及机器学习和神经网络方面的知识,我发现,我这种思想是要不得的。于是开始提交自己的贡献。说来惭愧,我只提交了一份代码,还是再请教了身边的大神们。不过,在这几个星期的学习中,我学到了更多的东西。 首先是我学习了很多的机器学习的算法,例如,KNN,决策树,随机森林,svm等等,以及神经网络方面的算法,例如bp神经网络,卷积神经网络,递归神经网络等等。目前还只是对这些算法有初步的了解,想要深入细节,还需要更多的努力。 其次,这门课程的学习让我对团队精神和协作能力有了更深的体会。这个课程项目的提出,改进以及最后的完善,离不开所有同学的贡献。是由于大家共同的努力,这个项目才之中实现。更重要的是,孟老师的悉心指导,才让这个项目在这么短的时间内实现。孟老师不仅在前端和后端的部分给予了我们技术层面上的指导,还时刻提醒着代码贡献者维护文档的可读性,并密切关注各模块间的接口、模块代码风格等同学们工程能力中最薄弱的环节,可以说孟老师的工作奠定了整个项目的推进是朝着正确的方向。 此外,写文档也是一件非常重要的事情,是软件开发流程中非常重要的环节。由于这个项目是所有同学共同努力的成果,没有一个好的文档,别的同学很难理解代码的意义,这样别的同学就不能快速参与该项目的开发中来,这回大大拖慢项目进度。更重要的是,在开发环境崩溃是,良好的文档可以拯救整个项目,并且对未来代码的查错,都有很大的帮助,节省大量的时间。这个项目能在这么短的时间取得这么好的成果,文档起到了很重要的作用。 最后,良好的代码风格也是很重要的环节。良好的代码风格,不但有助于代码纠错,还提升了其重用性和项目合作者之间的交流、协调。良好的代码风格让代码更容易维护,从而降低维护成本。此外,代码风格的重要性还体现在安全性和稳定性上。团队成员的代码风格的统一也是非常关键的,这样可以大大降低后期的维护成本。 这个课程已经结束了,但是学习的道路还有很长。这门课让我学会了如何解决问题,并且在解决问题的过程中不断地学习,随时总结,不断提高。这一段项目经历一定会对我以后的学习成长产生关键的指导作用。

    课程项目:

    通过实现一个医学辅助诊断的专家系统原型。在本课程中具体为实现对血常规检测报告OCR识别结果,预测人物的年龄和性别。学习机器学习的常见算法,学习和掌握神经网路常用算法。

    项目地址:

    >课程地址,详细介绍了实验要求; >主项目地址,里面包含了项目的源代码;

    >我fork的分支地址,我自己的一点贡献;

    以下是截图:

    项目分解:

    项目A1:神经网络实现手写字符识别系统项目 项目A2:血常规检验报告的图像OCR识别项目 项目A3:根据血常规检验的各项数据预测年龄和性别 项目A4:根据患者病情资料自动生成诊断报告(可选)

    项目介绍:

    项目A1:神经网络实现手写字符识别系统项目

    需求:实现一个手写字符识别系统。在网页上可以输入要写别的字符,并对字符进行识别和反馈。模型是基于bp网络,使用mnist手写字符集作为训练集生成的。 以下是运行截图。

    总结: 通过学习实现手写字符识别,我对机器学习有了初步的了解。这个项目中,使用到了BP神经网络,关于BP神经网络的一些理解,可以参考这里。本系统的源码可以在这里看到。 项目A1的关键是模型的训练以及前后端的数据交互。通过这本分的学习,我开始了解Python这门优雅简洁的语言,并且喜欢上了这么语言。这部分的学习使我了解了如何搭建简单的服务器,网页帆布作画,以及bp网络的实现过程。

    项目A2:血常规检验报告的图像OCR识别项目

    分析:把血常规检验报告的数据识别出来,再把数据作为训练集来训练模型 需求:通过网页上传图片,识别出报告单中的数据并显示在网页上 技术难点:对识别区域的锁定和剪裁。在这个项目中,只针对特定的报告单进行处理。通过对图片的预处理(包括灰度化、模糊、开闭运算等),得出报告单的特征,即图中的三条基准线。然后根据这三条基准线对图片进行水平方向上的梯度检测,然后根据检测出的线的位置,逐步确定表头和表尾,就可以很容易的进行剪裁。 在这部分,项目采用了flask+bootstrap+mongodb+vue.js来开发,这样能让项目功能更强大,更易于维护。在这一部分,我开始接触opencv,并且尝试对项目做出自己的贡献。但是基础薄弱,没能提交pull request。但是我自学了mongodb,这是我最大的收获。  

    项目A3:根据血常规检验的各项数据预测年龄和性别

    分析:预测年龄和性别,要有大量的数据来做支撑。原打算识别血常规报告单并用提取的数据做识别,项目后期,通过别的途径获得了数据。故这里只主要根据已有的数据来做预测。 功能:利用神经网络训练已知的数据,建立模型。用此模型来预测年龄和性别。 环境配置:

    安装numpy,

    sudo apt-get install python-numpy # http://www.numpy.org/

    安装opencv,

    sudo apt-get install python-opencv # http://opencv.org/

    安装OCR和预处理相关依赖,

    sudo apt-get install tesseract-ocr sudo pip install pytesseract sudo apt-get install python-tk sudo pip install pillow

    安装Flash框架、mongo

    sudo pip install Flask sudo apt-get install mongodb # 如果找不到可以先sudo apt-get update sudo service mongodb started sudo pip install pymongo

    运行:

    python view.py # upload图像,在浏览器打开http://yourip:8080

    主要函数解析:

    View.py

    Web 端上传图片到服务器,存入mongodb并获取oid; 前端采用了vue.js, mvvm模式。

    imageFilter.py

    对图像透视裁剪和OCR进行了简单的封装,以便于模块间的交互,规定适当的接口

    ocr函数-模块主函数返回识别数据

    用于对img进行ocr识别,他会先进行剪切,之后进一步做ocr识别,返回一个json对象 如果剪切失败,则返回None @num 规定剪切项目数

    Perspect函数-初步的矫正图片

    用于透视image,他会缓存一个透视后的opencv numpy矩阵,并返回该矩阵 透视失败,则会返回None,并打印不是报告 @param 透视参数

    >关于param 参数的形式为[p1, p2, p3 ,p4 ,p5]。 p1,p2,p3,p4,p5都是整型,其中p1必须是奇数。 p1是高斯模糊的参数,p2和p3是canny边缘检测的高低阈值,p4和p5是和筛选有关的乘数。 如果化验报告单放在桌子上时,有的边缘会稍微翘起,产生比较明显的阴影,这种阴影有可能被识别出来,导致定位失败。 解决的方法是调整p2和p3,来将阴影线筛选掉。但是如果将p2和p3调的比较高,就会导致其他图里的黑线也被筛选掉了。 参数的选择是一个问题。 我在getinfo.default中设置的是一个较低的阈值,p2=70,p3=30,这个阈值不会屏蔽阴影线。 如果改为p2=70,p3=50则可以屏蔽,但是会导致其他图片识别困难。 就现在来看,得到较好结果的前提主要有三个 >化验单尽量平整 >图片中应该包含全部的三条黑线 >图片尽量不要包含化验单的边缘,如果有的话,请尽量避开有阴影的边缘。

    Filter函数-过滤掉不合格的或非报告图片

    返回img经过透视过后的PIL格式的Image对象,如果缓存中有PerspectivImg则直接使用,没有先进行透视 过滤失败则返回None @param filter参数

    Autocut函数-将图片中性别、年龄、日期和各项名称数据分别剪切出来

    用于剪切ImageFilter中的img成员,剪切之后临时图片保存在out_path, 如果剪切失败,返回-1,成功返回0 @num 剪切项目数 @param 剪切参数 剪切出来的图片在BloodTestReportOCR/temp_pics/ 文件夹下 函数输出为data0.jpg,data1.jpg......等一系列图片,分别是白细胞计数,中性粒细胞记数等的数值的图片。

    Classifier.py

    用于判定裁剪矫正后的报告和裁剪出检测项目的编号

    Imgproc.py

    将识别的图像进行处理二值化等操作,提高识别率 包括对中文和数字的处理

    项目演示:

    资料分享:

    机器学习知识库

    O'Reilly数据科学的一些文章

    转载请注明原文地址: https://ju.6miu.com/read-450326.html

    最新回复(0)