wwW3aitt显示“页面升级浏览不到里面3aittcom的内容”怎么解决?

&p&&a href=&https://link.zhihu.com/?target=https%3A//en.wikipedia.org/wiki/Lambda_calculus& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Lambda calculus - Wikipedia&/a&(几乎包含所有的lambda calculus知识)&/p&&p&&a href=&https://link.zhihu.com/?target=https%3A//en.wikipedia.org/wiki/Alonzo_Church& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Alonzo Church - Wikipedia&/a&&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//lambda-the-ultimate.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Lambda the Ultimate&/a&&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//blog.csdn.net/utensil/article/details/1761857& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Alonzo Church的λ演算(摘自彭罗斯《皇帝新脑》)&/a&&/p&&p&系列博文:&/p&&ol&&li&&a href=&https://link.zhihu.com/?target=http%3A//blog.csdn.net/g9yuayon/article/details/748684& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&博客推荐:good math, bad math之Lambda算子简介&/a&&/li&&li&&a href=&https://link.zhihu.com/?target=http%3A//blog.csdn.net/g9yuayon/article/details/759778& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&lambda算子简介1.a - CSDN博客&/a&&/li&&li&&a href=&https://link.zhihu.com/?target=http%3A//blog.csdn.net/g9yuayon/article/details/790953& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&lambda算子 1.b - CSDN博客&/a&&/li&&li&&a href=&https://link.zhihu.com/?target=http%3A//blog.csdn.net/g9yuayon/article/details/1062514& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&lambda算子3:阿隆佐.丘齐(Alonzo Church)的天才&/a&&/li&&li&&a href=&https://link.zhihu.com/?target=http%3A//blog.csdn.net/g9yuayon/article/details/1126396& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&lamdba算子4:布尔值和选择 - CSDN博客&/a&&/li&&li&&a href=&https://link.zhihu.com/?target=http%3A//blog.csdn.net/g9yuayon/article/details/1271319& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Lambda算子5b:How of Y&/a&&/li&&/ol&&p&&a href=&https://link.zhihu.com/?target=http%3A//jjyy.guru/y-combinator& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&浅谈Y组合子 - 瀚阳的博客&/a&&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//www.cnblogs.com/coeuschen/category/656468.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SICP - 随笔分类 - Coeus Chen - 博客园&/a&(大到可以小说的Y组合子·系列博文)&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//liujiacai.net/blog//lambda-calculus-introduction/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&编程语言的基石--Lambda calculus&/a&&/p&&p&几本短小精炼的电子书(英文):&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//www.cs.man.ac.uk/%7Ehsimmons/BOOKS/lcalculus.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&cs.man.ac.uk/~hsimmons/&/span&&span class=&invisible&&BOOKS/lcalculus.pdf&/span&&span class=&ellipsis&&&/span&&/a&——H. Simmons and A. Schalk&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//www.inf.fu-berlin.de/inst/ag-ki/rojas_home/documents/tutorials/lambda.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&inf.fu-berlin.de/inst/a&/span&&span class=&invisible&&g-ki/rojas_home/documents/tutorials/lambda.pdf&/span&&span class=&ellipsis&&&/span&&/a&——R. Rojas&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//www.cs.bham.ac.uk/%7Eaxj/pub/papers/lambda-calculus.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&cs.bham.ac.uk/~axj/pub/&/span&&span class=&invisible&&papers/lambda-calculus.pdf&/span&&span class=&ellipsis&&&/span&&/a&——A. Jung&/p&&p&相关有趣的网络站点:&/p&&p&&a href=&https://link.zhihu.com/?target=https%3A//plato.stanford.edu/entries/lambda-calculus/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&The Lambda Calculus&/a&&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//www.jfsowa.com/logic/alonzo.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&The Calculi of Lambda Conversion&/a&&/p&&p&&a href=&https://link.zhihu.com/?target=https%3A//ryanflannery.net/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Ryan Flannery&/a&&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//www.cap-lore.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Norman Hardy&/a&&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//www.cs.cmu.edu/%7Eiev/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Ian E. Voysey&/a&&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//safalra.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Safalra's Website&/a&&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//www.dmi.unict.it/%7Ebarba/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Franco Barbanera- Dipartimento di Matematica e Informatica&/a&&/p&&p&&a href=&https://link.zhihu.com/?target=https%3A//quod.lib.umich.edu/i/icmc/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&International Computer Music Conference Proceedings&/a&&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//www.iep.utm.edu/lambda-calculi/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&iep.utm.edu/lambda-calc&/span&&span class=&invisible&&uli/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//www.iep.utm.edu/lambda-calculi/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Internet Encyclopedia of Philosophy&/a&&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//www.iep.utm.edu/lambda-calculi/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&iep.utm.edu/lambda-calc&/span&&span class=&invisible&&uli/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&/p&
(几乎包含所有的lambda calculus知识)系列博文:
&figure&&img src=&https://pic1.zhimg.com/v2-9bfde0b1d122054bbe309d38_b.jpg& data-rawwidth=&744& data-rawheight=&244& class=&origin_image zh-lightbox-thumb& width=&744& data-original=&https://pic1.zhimg.com/v2-9bfde0b1d122054bbe309d38_r.jpg&&&/figure&&p&&b&作者:马超&/b&&/p&&p&&b&来源:微信公众号 DeveloperPython&/b&&/p&&p&&b&更多精彩文章,关注专栏:&/b&&a href=&https://zhuanlan.zhihu.com/passer& class=&internal&&学习编程 - 知乎专栏&/a&&/p&&p&&br&&/p&&p&&b&1. 扯淡&/b&&/p&&p&&br&&/p&&p&首先说明下,这篇文章篇幅过长并且大部分是链接,因此非常适合在电脑端打开访问。&/p&&p&本文内容摘自 Github 上有名的 &b&Awesome Python&/b&。这是由 vinta 在 14 年发起并持续维护的一个项目。&/p&&p&&b&Awesome Python&/b& 涵盖了 Python 的方方面面,主要有 Web框架、网络爬虫、网络内容提取、模板引擎、数据库、图片处理、数据可视化、文本处理、自然语言处理、机器学习、日志、代码分析等。学会这些库,保证你在 Python 方面&b&会有质的飞跃&/b&。&/p&&p&以下内容是我基于 &b&Awesome Python&/b& 和部分中文文档做出的翻译和归纳,由于内容过多,这篇只是归纳的第一部分,后续会持续更新。每个条目由 库名 + 装逼名言 + 链接 组成。&/p&&p&&br&&/p&&p&&b&2. 管理面板 ( Admin Panels)&/b&&/p&&p&&br&&/p&&p&Admin 面板的开源库&/p&&ul&&li&Ajenti - 你的服务器应该拥有的管理面板&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/ajenti/ajenti& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/ajenti/ajent&/span&&span class=&invisible&&i&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&django-suit - Django管理面板的替代品(非营利组织可免费使用)&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=http%3A//djangosuit.com/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&djangosuit.com/&/span&&span class=&invisible&&&/span&&/a&&/p&&ul&&li&django-xadmin - 拥有很多不错功能的 Django Admin 替代品&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/sshwsfc/xadmin& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/sshwsfc/xadm&/span&&span class=&invisible&&in&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&flask-admin - 一个简单可扩展的 Flask 管理界面框架&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/flask-admin/flask-admin& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/flask-admin/&/span&&span class=&invisible&&flask-admin&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&flower - 一个 Celery 集群的实时监控和网页管理工具&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/mher/flower& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/mher/flower&/span&&span class=&invisible&&&/span&&/a&&/p&&ul&&li&Grappelli - Django 管理面板的一个非常骚气的皮肤&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=http%3A//grappelliproject.com/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&grappelliproject.com/&/span&&span class=&invisible&&&/span&&/a&&/p&&ul&&li&Wooey - Django的一个应用,可为 Python 脚本自动创建网页 UI&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/wooey/wooey& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/wooey/wooey&/span&&span class=&invisible&&&/span&&/a&&/p&&p&&br&&/p&&p&&b&3. 算法和设计模式 (Algorithms and Design Patterns)&/b&&/p&&p&&br&&/p&&p&Python 实现的一些算法和设计模式&/p&&ul&&li&algorithms - 一个 Python 的算法模块&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/nryoung/algorithms& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/nryoung/algo&/span&&span class=&invisible&&rithms&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&PyPattyrn - 一个实现了常见设计模式的简单且有效的 Python 库&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/tylerlaberge/PyPattyrn& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/tylerlaberge&/span&&span class=&invisible&&/PyPattyrn&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&python-patterns - Python 设计模式的汇总&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/faif/python-patterns& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/faif/python-&/span&&span class=&invisible&&patterns&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&sortedcontainers - 高效的,纯 Python 实现的 SortedList、SortedDict 和 SortedSet 类型。&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=http%3A//www.grantjenks.com/docs/sortedcontainers/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&grantjenks.com/docs/sor&/span&&span class=&invisible&&tedcontainers/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&br&&/p&&p&&b&4. 反垃圾技术 ( Anti-spam )&/b&&/p&&p&&br&&/p&&p&一些与垃圾邮件对抗的库&/p&&ul&&li&django-simple-captcha - 一个简单、高效、可定制的 Django App,可以给任意 Django 表单添加验证码&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/mbi/django-simple-captcha& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/mbi/django-s&/span&&span class=&invisible&&imple-captcha&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&django-simple-span-blocker - 简单的垃圾邮件屏蔽组件&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/moqada/django-simple-spam-blocker& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/moqada/djang&/span&&span class=&invisible&&o-simple-spam-blocker&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&br&&/p&&p&&b&5. 资源管理器 ( Asset Management ) &/b&&/p&&p&&br&&/p&&p&管理、压缩、减小网站资源的工具 &/p&&ul&&li&django-compressor - 压缩链接和内联的 JavaScript 或者 CSS 到单独的缓存文件中&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/django-compressor/django-compressor& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/django-compr&/span&&span class=&invisible&&essor/django-compressor&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&django-pipeline - Django 的资源打包库&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/jazzband/django-pipeline& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/jazzband/dja&/span&&span class=&invisible&&ngo-pipeline&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&django-storages - Django 的自定义存储后端的工具集合&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/jschneier/django-storages& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/jschneier/dj&/span&&span class=&invisible&&ango-storages&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&fanstatic - 打包、优化并且将静态文件依赖作为 Python 的包来提供&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=http%3A//www.fanstatic.org/en/latest/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&fanstatic.org/en/latest&/span&&span class=&invisible&&/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&fileconveyor - 用于检测和同步文件到 CDN、S3 和 FTP 的守护程序&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=http%3A//wimleers.com/fileconveyor& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&wimleers.com/fileconvey&/span&&span class=&invisible&&or&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&flask-assets - 可以帮助你将网页资源集成到 Flask App 中&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/miracle2k/flask-assets& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/miracle2k/fl&/span&&span class=&invisible&&ask-assets&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&jinja-assets-compressor - 一个 Jinja 的扩展程序,用来编译和压缩你的资源&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/jaysonsantos/jinja-assets-compressor& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/jaysonsantos&/span&&span class=&invisible&&/jinja-assets-compressor&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&webassets - 对你的静态资源进行打包、压缩、管理,并生成独一无二的缓存 URL&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/miracle2k/webassets& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/miracle2k/we&/span&&span class=&invisible&&bassets&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&br&&/p&&p&&b&6. 音频 ( Audio )&/b&&/p&&p&&br&&/p&&p&一些用来控制音频的库 &/p&&ul&&li&audiolazy - Python 的 DSP (数字信号处理) 包&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/danilobellini/audiolazy& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/danilobellin&/span&&span class=&invisible&&i/audiolazy&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&audioread - 交叉库(GStreamer + Core Audio + MAD + FFmpeg)音频解码&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/beetbox/audioread& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/beetbox/audi&/span&&span class=&invisible&&oread&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&beets - 一个音乐库管理工具以及 MusciBrainz 标签添加工具&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=http%3A//beets.io/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&beets.io/&/span&&span class=&invisible&&&/span&&/a&&/p&&ul&&li&ncmbot - 网易云音乐的 Python Api 库&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=http%3A//xiyoumc.0x2048.com/ncmbot& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&xiyoumc.0x2048.com/ncmb&/span&&span class=&invisible&&ot&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&dejavu - 音频指纹提取和识别&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/worldveil/dejavu& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/worldveil/de&/span&&span class=&invisible&&javu&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&eyeD3- 一个用来操作音频文件的工具,包含 ID3 元文件的 MP3 文件&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=http%3A//eyed3.nicfit.net/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&eyed3.nicfit.net/&/span&&span class=&invisible&&&/span&&/a&&/p&&ul&&li&id3reader - 一个用来读取 MP3 原始数据的 Python 库&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//nedbatchelder.com/code/modules/id3reader.py& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&nedbatchelder.com/code/&/span&&span class=&invisible&&modules/id3reader.py&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&m3u8 - 一个用来解析 m3u8 文件的模块&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/globocom/m3u8& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/globocom/m3u&/span&&span class=&invisible&&8&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&mingus - 一个高级的音乐理论和曲谱包,支持 MIDI 文件和回访功能&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=http%3A//bspaans.github.io/python-mingus/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&bspaans.github.io/pytho&/span&&span class=&invisible&&n-mingus/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&mutagen - 一个用来处理音频原始数据的 Python 组件&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/quodlibet/mutagen& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/quodlibet/mu&/span&&span class=&invisible&&tagen&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&pyAudioAnalysis-
Python 的音频分析库,包含:特征提取、分类、分段和应用&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/tyiannak/pyAudioAnalysis& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/tyiannak/pyA&/span&&span class=&invisible&&udioAnalysis&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&pydub - 通过简单、高 Level 的接口来操作音频文件&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/jiaaro/pydub& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/jiaaro/pydub&/span&&span class=&invisible&&&/span&&/a&&/p&&ul&&li&pyechonest - Echo Nest API 的 Python 客户端&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/echonest/pyechonest& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/echonest/pye&/span&&span class=&invisible&&chonest&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&talkbox-
一个用来处理语音和信号的 Python 库&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=http%3A//scikits.appspot.com/talkbox& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&scikits.appspot.com/tal&/span&&span class=&invisible&&kbox&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&TimeSide - 开源的 Web 音频处理框架&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/Parisson/TimeSide& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/Parisson/Tim&/span&&span class=&invisible&&eSide&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&tinytag - 一个用来读取 mp3 、ogg、flac 以及 Wave 文件原始数据的库。&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/devsnd/tinytag& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/devsnd/tinyt&/span&&span class=&invisible&&ag&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&br&&/p&&p&&b&7. 授权&/b&&/p&&p&&br&&/p&&p&一些实现授权方案的库&/p&&p&&b&OAuth&/b&&/p&&ul&&li&Authomatic - 简单但强大的框架,可以用来做身份验证和授权&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=http%3A//peterhudec.github.io/authomatic/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&peterhudec.github.io/au&/span&&span class=&invisible&&thomatic/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&django-allauth - Django 的 授权程序&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/pennersr/django-allauth& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/pennersr/dja&/span&&span class=&invisible&&ngo-allauth&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&django-oauth-toolkit - Django 开发者的礼物, OAuth 2&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/evonove/django-oauth-toolkit& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/evonove/djan&/span&&span class=&invisible&&go-oauth-toolkit&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&Flask-OAuthlib - 供 Flask 使用的 OAuth 1.0/a 和 2.0 的客户端实现&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/lepture/flask-oauthlib& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/lepture/flas&/span&&span class=&invisible&&k-oauthlib&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&OAuthLib - 通用且完整的 OAuth 请求和签名逻辑&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/idan/oauthlib& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/idan/oauthli&/span&&span class=&invisible&&b&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&python-oauth2- 一个完全测试的抽象接口,用来创建 OAuth 客户端和服务端&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/joestump/python-oauth2& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/joestump/pyt&/span&&span class=&invisible&&hon-oauth2&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&python-social-auth - 一个简单设置的通用化验证方式&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/omab/python-social-auth& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/omab/python-&/span&&span class=&invisible&&social-auth&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&rauth - OAuth 1.0/a 、2.0 和 Ofly 的 Python 库&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/omab/python-social-auth& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/omab/python-&/span&&span class=&invisible&&social-auth&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&sanction - 一个炒鸡简单的 OAuth2 客户端的实现&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/demianbrecht/sanction& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/demianbrecht&/span&&span class=&invisible&&/sanction&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&br&&/p&&p&&b&Others&/b&&/p&&ul&&li&jose - 针对 JavaScript 对象签名和加密的草稿&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/demonware/jose& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/demonware/jo&/span&&span class=&invisible&&se&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&PyJWT - JSON Web 令牌草稿的实现01&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/jpadilla/pyjwt& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/jpadilla/pyj&/span&&span class=&invisible&&wt&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&python-jws - JSON Web 签名草稿的实现02&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/brianloveswords/python-jws& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/brianloveswo&/span&&span class=&invisible&&rds/python-jws&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&python-jwt - 一个用来生成和验证 JSON Web Token 的模块&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/davedoesdev/python-jwt& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/davedoesdev/&/span&&span class=&invisible&&python-jwt&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&br&&/p&&p&&b&8. 构建工具&/b&&/p&&p&&br&&/p&&p&将源代码编译为软件&/p&&ul&&li&BitBake - 类似于 Linux 的 make-file 的构建工具&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=http%3A//www.yoctoproject.org/docs/1.6/bitbake-user-manual/bitbake-user-manual.html& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&yoctoproject.org/docs/1&/span&&span class=&invisible&&.6/bitbake-user-manual/bitbake-user-manual.html&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&buildout - 从多个组件来创建、组装和部署应用的构建系统&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=http%3A//www.buildout.org/en/latest/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&buildout.org/en/latest/&/span&&span class=&invisible&&&/span&&/a&&/p&&ul&&li&PlatformIO - 多平台构建工具&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/platformio/platformio-core& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/platformio/p&/span&&span class=&invisible&&latformio-core&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&PyBuilder - 纯 Python 的可持续化构建工具&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/pybuilder/pybuilder& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/pybuilder/py&/span&&span class=&invisible&&builder&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&SCons - 软件构建工具&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=http%3A//www.scons.org/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&scons.org/&/span&&span class=&invisible&&&/span&&/a&&/p&&p&&br&&/p&&p&&b&9. CMS &/b&&/p&&p&&br&&/p&&p&内容管理系统&/p&&ul&&li&django-cms - 一个基于 Django 的开源、企业级的 CMS 系统&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//www.django-cms.org/en/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&django-cms.org/en/&/span&&span class=&invisible&&&/span&&/a&&/p&&ul&&li&djedi-cms - 一个轻量级且非常强大的 Django CMS,考虑到了插件、内联编辑以及性能&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=http%3A//djedi-cms.org/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&djedi-cms.org/&/span&&span class=&invisible&&&/span&&/a&&/p&&ul&&li&FeinCMS - 基于 Django 构建的最高级的内容管理系统之一。&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=http%3A//www.feincms.org/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&feincms.org/&/span&&span class=&invisible&&&/span&&/a&&/p&&ul&&li&Kotti - 基于Pyramid 的高 Level 、Pythonic 的 Web 应用框架&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=http%3A//kotti.pylonsproject.org/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&kotti.pylonsproject.org&/span&&span class=&invisible&&/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&Mezzanine - 一个强大的、可持续的、灵活的内容管理平台&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=http%3A//mezzanine.jupo.org/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&mezzanine.jupo.org/&/span&&span class=&invisible&&&/span&&/a&&/p&&ul&&li&Opps - 一个基于 Django 为杂志、报纸网站以及大流量门户网站所设计的 CMS 平台&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=http%3A//opps.github.io/opps/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&opps.github.io/opps/&/span&&span class=&invisible&&&/span&&/a&&/p&&ul&&li&Plone - 一个构建于开源应用服务器 Zope 之上的 CMS 平台&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//plone.org/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&plone.org/&/span&&span class=&invisible&&&/span&&/a&&/p&&ul&&li&Quokka - 基于 Flask 和 MongoDB 的灵活、可扩展的小型 CMS&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=http%3A//quokkaproject.org/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&quokkaproject.org/&/span&&span class=&invisible&&&/span&&/a&&/p&&ul&&li&Wagtail - 一个 Django 内容管理系统&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//wagtail.io/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&wagtail.io/&/span&&span class=&invisible&&&/span&&/a&&/p&&ul&&li&Widgy - 基于 Django 的最新 CMS 框架&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=http%3A//mezzanine.jupo.org/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&mezzanine.jupo.org/&/span&&span class=&invisible&&&/span&&/a&&/p&&p&&br&&/p&&p&&b&10. Caching&/b&&/p&&p&&br&&/p&&p&缓存数据的库&/p&&ul&&li&Beaker - 一个应用在 Web 程序、独立的Python 脚本和应用程序的缓存和会话库&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/bbangert/beaker& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/bbangert/bea&/span&&span class=&invisible&&ker&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&DiskCache - SQLite 和文件支持的缓存后端,具有比 memcached 和 redis 更快的查找&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=http%3A//www.grantjenks.com/docs/diskcache/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&grantjenks.com/docs/dis&/span&&span class=&invisible&&kcache/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&django-cache-machine - Django 模块的自动化缓存和时效&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/django-cache-machine/django-cache-machine& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/django-cache&/span&&span class=&invisible&&-machine/django-cache-machine&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&django-cacheops - 具有自动粒度时间驱动失效的 ORM 缓存&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/Suor/django-cacheops& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/Suor/django-&/span&&span class=&invisible&&cacheops&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&django-viewlet - 具有缓存控制功能的渲染模板组件&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/5monkeys/django-viewlet& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/5monkeys/dja&/span&&span class=&invisible&&ngo-viewlet&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&dogpile.cache - 这是 Beaker 的下一代替代品,由同一作者开发&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=http%3A//dogpilecache.readthedocs.io/en/latest/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&dogpilecache.readthedocs.io&/span&&span class=&invisible&&/en/latest/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&HermesCache - Python 缓存库,具有基于标签的失效和 dogpile effect 保护功能&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//pypi.python.org/pypi/HermesCache& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&pypi.python.org/pypi/He&/span&&span class=&invisible&&rmesCache&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&johnny-cache - Django 应用的一个缓存框架&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/jmoiron/johnny-cache& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/jmoiron/john&/span&&span class=&invisible&&ny-cache&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&pylibmc - libmemcached 接口的 Python 封装&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/lericson/pylibmc& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/lericson/pyl&/span&&span class=&invisible&&ibmc&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&br&&/p&&p&&b&11. ChatOps Tools&/b&&/p&&p&&br&&/p&&p&用于开发聊天机器人的库&/p&&ul&&li&Errbot - 用来实现自动聊天工具的,最简单、最流行的聊天机器人&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=http%3A//errbot.io/en/latest/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&errbot.io/en/latest/&/span&&span class=&invisible&&&/span&&/a&&/p&&p&&br&&/p&&p&&b&12. Code Analysis and Linter&/b&&/p&&p&&br&&/p&&p&进行代码分析、解析和操作代码库的组件和工具&/p&&p&&b&代码分析&/b& &/p&&ul&&li&coala - 语言独立并且易扩展的代码分析应用&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=http%3A//coala.io/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&coala.io/&/span&&span class=&invisible&&&/span&&/a&&/p&&ul&&li&code2flow - 将你的 Python 和 JavaScript 代码转换为 DOT(流程图)的工具&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/scottrogowski/code2flow& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/scottrogowsk&/span&&span class=&invisible&&i/code2flow&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&pycallgraph - 这个库可以将你的 Python 应用的调用图进行可视化&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/gak/pycallgraph& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/gak/pycallgr&/span&&span class=&invisible&&aph&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&pysonar2 - Python 的类型推断和检索工具&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/yinwang0/pysonar2& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/yinwang0/pys&/span&&span class=&invisible&&onar2&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&br&&/p&&p&&b&Linter 工具&/b& &/p&&ul&&li&Flake8 - 模块化源代码检索工具:pep8、pyflakes 以及 co&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//pypi.python.org/pypi/flake8& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&pypi.python.org/pypi/fl&/span&&span class=&invisible&&ake8&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&pylama - Pyhton 和 JavaScript 的代码审查工具&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/scottrogowski/code2flow& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/scottrogowsk&/span&&span class=&invisible&&i/code2flow&/span&&span class=&ellipsis&&&/span&&/a&&/p&&ul&&li&Pylint - 一个完整的可定制的源代码分析工具&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=https%3A//www.pylint.org/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&pylint.org/&/span&&span class=&invisible&&&/span&&/a&&/p&&p&&br&&/p&&p&匆匆忙忙,新的一周又开始,希望第一部分的库能帮助到你的工作。当然,后续会继续更新。&/p&
作者:马超来源:微信公众号 DeveloperPython更多精彩文章,关注专栏: 1. 扯淡 首先说明下,这篇文章篇幅过长并且大部分是链接,因此非常适合在电脑端打开访问。本文内容摘自 Github 上有名的 Awesome Python。这是由 vinta 在 14 年发…
车牌识别基于图像分割和图像识别理论,对含有车牌识别车辆号牌的图像进行分析处理,从而确定牌照在图像中的位置,并进一步提取和识别出文本字符。车牌识别过程包括图像采集、预处理、车牌定位、字符分割、字符识别、结果输出等一系列算法运算,其运行流程如下图所示:&figure&&img src=&https://pic3.zhimg.com/v2-30af3f6d0a69fa75bf823c_b.jpg& data-rawwidth=&453& data-rawheight=&517& class=&origin_image zh-lightbox-thumb& width=&453& data-original=&https://pic3.zhimg.com/v2-30af3f6d0a69fa75bf823c_r.jpg&&&/figure&&/p&&p&1.图像采集&/p&&p&  根据车辆检测方式的不同,图像采集一般分为两种,一种是静态模式下的图像采集,通过车辆触发地感线圈、红外或雷达等装置,给相机一个触发信号,相机在接收到触发信号后会抓拍一张图像,该方法的优点是触发率高,性能稳定,缺点是需要切割地面铺设线圈,施工量大;另一种是视频模式下的图像采集,外部不需要任何触发信号,相机会实时地记录视频流图像,该方法的优点是施工方便,不需要切割地面铺设线圈,也不需要安装车检器等零部件,但其缺点也十分显著,由于算法的极限,该方案的触发率与识别率较之外设触发都要低一些。&/p&&p&  2.预处理&/p&&p&  由于图像质量容易受光照、天气、相机位置等因素的影响,所以在识别车牌之前需要先对相机和图像做一些预处理,以保证得到车牌最清晰的图像。一般会根据对现场环境和已经拍摄到的图像的分析得出结论,实现相机的自动曝光处理、自动白平衡处理、自动逆光处理、自动过爆处理等,并对图像进行噪声过滤、对比度增强、图像缩放等处理。去噪方法有均值滤波、中值滤波和高斯滤波等;增强对比度的方法有对比度线性拉伸、直方图均衡和同态滤波器等;图像缩放的主要方法有最近邻插值法、双线性插值法和立方卷积插值等。&/p&&p&  逆光图像&figure&&img src=&https://pic2.zhimg.com/v2-aeaef6bea824c2f1ddb94_b.jpg& data-rawwidth=&256& data-rawheight=&194& class=&content_image& width=&256&&&/figure&&/p&&p&  过曝图像&figure&&img src=&https://pic3.zhimg.com/v2-41e538b3b29bdbd40e6a_b.jpg& data-rawwidth=&250& data-rawheight=&188& class=&content_image& width=&250&&&/figure&&/p&&p&  有噪声图像&figure&&img src=&https://pic2.zhimg.com/v2-aeaef6bea824c2f1ddb94_b.jpg& data-rawwidth=&256& data-rawheight=&194& class=&content_image& width=&256&&&/figure&&/p&&p&  3.车牌定位&/p&&p&  从整个图像中准确地检测出车牌区域,是车牌识别过程的一个重要步骤,如果定位失败或定位不完整,会直接导致最终识别失败。车牌定位方法一般会依据纹理特征、颜色特征和形状特征等信息,采用投影分析、连通域分析、机器学习等算法检测车牌。投影分析方法根据车牌字符与背景交替出现的次数相比于其他情况要多这个特征,通过图像在水平和垂直方向的投影分析来定位车牌。连通域分析根据车牌中的每个字符都是一个连通域且这些连通域的结构和颜色都一致的特征,通过检测并合并这些连通域来定位车牌;机器学习的思路是,先使用从很多个车牌样本中提取出来的特征把一个弱分类器训练成一个强分类器,再使用这个强分类器对图像进行扫描检测从而定位到车牌。由于复杂的图像背景,且要考虑不清晰车牌的定位,所以很容易把栅栏,广告牌等噪声当成车牌,所以如何排除这些伪车牌也是车牌定位的一个难点。为了提高定位的准确率和提高识别速度,一般的车牌识别系统都会设计一个外部接口,让用户自己根据现场环境设置不同的识别区域。&/p&&p&  基于连通域分析的车牌定位方法流程图&figure&&img src=&https://pic4.zhimg.com/v2-2eef8ed82cdbc02c41575e5_b.jpg& data-rawwidth=&281& data-rawheight=&301& class=&content_image& width=&281&&&/figure&&/p&&p&  4.车牌校正&/p&&p&  由于受拍摄角度、镜头等因素的影响,图像中的车牌存在水平倾斜、垂直倾斜或梯形畸变等变形,这给后续的识别处理带来了困难。如果在定位到车牌后先进行车牌校正处理,这样做有利于去除车牌边框等噪声,更有利于字符识别。目前常用校正方法有:Hough变换法,通过检测车牌上下、左右边框直线来计算倾斜角度;旋转投影法,通过按不同角度将图像在水平轴上进行垂直投影,其投影值为0的点数之和最大时的角度即为垂直倾斜角度,水平角度的计算方法与其相似;主成分分析法,根据车牌背景与字符交界处的颜色具有固定搭配这一特征、求出颜色对特征点的主成分方向即为车牌的水平倾斜角度;方差最小法,根据字符在垂直方向投影点的坐标方差最小导出垂直倾斜角的闭合表达式,从而确定垂直倾斜角度;透视变换,利用检测到的车牌的四个顶点经过相关矩阵变换后实现车牌的畸变校正。&/p&&p&  水平和垂直倾斜&figure&&img src=&https://pic2.zhimg.com/v2-198b8fcfe5f0c2f654c949_b.jpg& data-rawwidth=&408& data-rawheight=&494& class=&content_image& width=&408&&&/figure&&/p&&p&  梯形畸变&figure&&img src=&https://pic2.zhimg.com/v2-c248cbb8ef8f1e870a1a_b.jpg& data-rawwidth=&507& data-rawheight=&88& class=&origin_image zh-lightbox-thumb& width=&507& data-original=&https://pic2.zhimg.com/v2-c248cbb8ef8f1e870a1a_r.jpg&&&/figure&&/p&&p&  5.字符分割&/p&&p&  定位出车牌区域后,由于并不知道车牌中总共有几个字符、字符间的位置关系、每个字符的宽高等信息,所以,为了保证车牌类型匹配和字符识别正确,字符分割是必不可少的一步。字符分割的主要思路是,基于车牌的二值化结果或边缘提取结果,利用字符的结构特征、字符间的相似性、字符间间隔等信息,一方面把单个字符分别提取出来,也包括粘连和断裂字符等特殊情况的处理;另一方面把宽、高相似的字符归为一类从而去除车牌边框以及一些小的噪声。一般采用的算法有:连通域分析、投影分析,字符聚类和模板匹配等。污损车牌和光照不均造成的模糊车牌仍是字符分割算法所面对的挑战,有待更好的算法出现并解决以上问题。&figure&&img src=&https://pic1.zhimg.com/v2-3d1f39beb60abd0b6a4e7a9563fcc757_b.jpg& data-rawwidth=&326& data-rawheight=&380& class=&content_image& width=&326&&&/figure&&/p&&p&  6.字符识别&/p&&p&  对分割后的字符的灰度图像进行归一化处理,特征提取,然后经过机器学习或与字符数据库模板进行匹配,最后选取匹配度最高的结果作为识别结果。目前比较流行的字符识别算法有:模板匹配法、人工神经网络法、支持向量机法和Adaboost分类法等。模板匹配法的优点是识别速度快、方法简单,缺点是对断裂、污损等情况的处理有一些困难;人工神经网络法学习能力强、适应性强、分类能力强但比较耗时;支持向量机法对于未见过的测试样本具有更好的识别能力且需要较少的训练样本;Adaboost分类法能侧重于比较重要的训练数据,识别速度快、实时性较高。我国车牌由汉字、英文字母和阿拉伯数字3种字符组成,且具有统一的样式,这也是识别过程的方便之处。但由于车牌很容易受外在环境的影响,出现模糊、断裂、污损字符的情况,如何提高这类字符和易混淆字符的识别率,也是字符识别的难点之一。易混淆字符包括:0与D、0与Q、2与Z、8与B、5与S、6与G、4与A等。&/p&&p&  污损车牌&figure&&img src=&https://pic4.zhimg.com/v2-1d4cb05e594c6a4090cce_b.jpg& data-rawwidth=&198& data-rawheight=&134& class=&content_image& width=&198&&&/figure&&/p&&p&  7.车牌结果输出&/p&&p&  将车牌识别结果以文本格式输出,包括车牌号,车牌颜色,车牌类型等。&/p&&p&  车牌输出结果&figure&&img src=&https://pic1.zhimg.com/v2-30d621b8504a8dfd6c74459ecb572c3b_b.jpg& data-rawwidth=&392& data-rawheight=&64& class=&content_image& width=&392&&&/figure&&/p&&p&有想了解更多的,可以一起交流哦&/p&
车牌识别基于图像分割和图像识别理论,对含有车牌识别车辆号牌的图像进行分析处理,从而确定牌照在图像中的位置,并进一步提取和识别出文本字符。车牌识别过程包括图像采集、预处理、车牌定位、字符分割、字符识别、结果输出等一系列算法运算,其运行流程如…
&figure&&img src=&https://pic1.zhimg.com/d4c56be0ac08d38df7f221_b.jpg& data-rawwidth=&500& data-rawheight=&278& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic1.zhimg.com/d4c56be0ac08d38df7f221_r.jpg&&&/figure&OCR是一个古老的研究领域,简单说就是把图片上的文字转化为文本的过程。在最近几年随着大数据的发展,广大爬虫工程师在对抗验证码时也得用上OCR。所以,这篇文章主要说的OCR其实就是图片验证码的识别。OCR并不是我的研究方向,我研究这个问题是因为OCR是一个可以同时用CNN,RNN两种算法都可以很好解决的问题,所以用这个问题来熟悉一个深度学习框架是非常适合的。我主要通过研究这个问题来了解&a href=&https://link.zhihu.com/?target=https%3A//github.com/dmlc/mxnet& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&mxnet&/a&。&p&验证码识别的思路非常暴力,大概就是这样:&/p&&ol&&li&去噪+二值化&/li&&li&字符分割&/li&&li&每个字符识别&/li&&/ol&&br&&p&验证码的难度在这3步上都有反应。比如&/p&&ol&&li&噪声:加一条贯穿全图的曲线,比如网格线,还有图的一半是白底黑字,另一半是黑底白字。&br&&/li&&li&分割:字符粘连,7和4粘在一起。&/li&&li&识别:字符各种扭曲,各种旋转。&/li&&/ol&&p&但相对而言,难度最大的是第2步,分割。所以就有人想,我能不能不做分割,就把验证码给识别了。深度学习擅长做端到端的学习,因此这个不分割就想识别的事情交给深度学习是最合适的。&/p&&h2&基于CNN的验证码识别&/h2&&p&基于CNN去识别验证码,其实就是一个图片的多标签学习问题。比如考虑一个4个数字组成的验证码,那么相当于每张图就有4个标签。那么我们把原始图片作为输入,4个标签作为输出,扔进CNN里,看看能不能收敛就行了。&/p&&p&下面这段代码定义了mxnet上的一个DataIter,我们用了python-captcha这个库来自动生成训练样本,所以可以假设训练样本是无穷多的。&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&k&&class&/span& &span class=&nc&&OCRIter&/span&&span class=&p&&(&/span&&span class=&n&&mx&/span&&span class=&o&&.&/span&&span class=&n&&io&/span&&span class=&o&&.&/span&&span class=&n&&DataIter&/span&&span class=&p&&):&/span&
&span class=&k&&def&/span& &span class=&nf&&__init__&/span&&span class=&p&&(&/span&&span class=&bp&&self&/span&&span class=&p&&,&/span& &span class=&n&&count&/span&&span class=&p&&,&/span& &span class=&n&&batch_size&/span&&span class=&p&&,&/span& &span class=&n&&num_label&/span&&span class=&p&&,&/span& &span class=&n&&height&/span&&span class=&p&&,&/span& &span class=&n&&width&/span&&span class=&p&&):&/span&
&span class=&nb&&super&/span&&span class=&p&&(&/span&&span class=&n&&OCRIter&/span&&span class=&p&&,&/span& &span class=&bp&&self&/span&&span class=&p&&)&/span&&span class=&o&&.&/span&&span class=&n&&__init__&/span&&span class=&p&&()&/span&
&span class=&bp&&self&/span&&span class=&o&&.&/span&&span class=&n&&captcha&/span& &span class=&o&&=&/span& &span class=&n&&ImageCaptcha&/span&&span class=&p&&(&/span&&span class=&n&&fonts&/span&&span class=&o&&=&/span&&span class=&p&&[&/span&&span class=&s1&&'./data/OpenSans-Regular.ttf'&/span&&span class=&p&&])&/span&
&span class=&bp&&self&/span&&span class=&o&&.&/span&&span class=&n&&batch_size&/span& &span class=&o&&=&/span& &span class=&n&&batch_size&/span&
&span class=&bp&&self&/span&&span class=&o&&.&/span&&span class=&n&&count&/span& &span class=&o&&=&/span& &span class=&n&&count&/span&
&span class=&bp&&self&/span&&span class=&o&&.&/span&&span class=&n&&height&/span& &span class=&o&&=&/span& &span class=&n&&height&/span&
&span class=&bp&&self&/span&&span class=&o&&.&/span&&span class=&n&&width&/span& &span class=&o&&=&/span& &span class=&n&&width&/span&
&span class=&bp&&self&/span&&span class=&o&&.&/span&&span class=&n&&provide_data&/span& &span class=&o&&=&/span& &span class=&p&&[(&/span&&span class=&s1&&'data'&/span&&span class=&p&&,&/span& &span class=&p&&(&/span&&span class=&n&&batch_size&/span&&span class=&p&&,&/span& &span class=&mi&&3&/span&&span class=&p&&,&/span& &span class=&n&&height&/span&&span class=&p&&,&/span& &span class=&n&&width&/span&&span class=&p&&))]&/span&
&span class=&bp&&self&/span&&span class=&o&&.&/span&&span class=&n&&provide_label&/span& &span class=&o&&=&/span& &span class=&p&&[(&/span&&span class=&s1&&'softmax_label'&/span&&span class=&p&&,&/span& &span class=&p&&(&/span&&span class=&bp&&self&/span&&span class=&o&&.&/span&&span class=&n&&batch_size&/span&&span class=&p&&,&/span& &span class=&n&&num_label&/span&&span class=&p&&))]&/span&
&span class=&k&&def&/span& &span class=&nf&&__iter__&/span&&span class=&p&&(&/span&&span class=&bp&&self&/span&&span class=&p&&):&/span&
&span class=&k&&for&/span& &span class=&n&&k&/span& &span class=&ow&&in&/span& &span class=&nb&&range&/span&&span class=&p&&(&/span&&span class=&bp&&self&/span&&span class=&o&&.&/span&&span class=&n&&count&/span& &span class=&o&&/&/span& &span class=&bp&&self&/span&&span class=&o&&.&/span&&span class=&n&&batch_size&/span&&span class=&p&&):&/span&
&span class=&n&&data&/span& &span class=&o&&=&/span& &span class=&p&&[]&/span&
&span class=&n&&label&/span& &span class=&o&&=&/span& &span class=&p&&[]&/span&
&span class=&k&&for&/span& &span class=&n&&i&/span& &span class=&ow&&in&/span& &span class=&nb&&range&/span&&span class=&p&&(&/span&&span class=&bp&&self&/span&&span class=&o&&.&/span&&span class=&n&&batch_size&/span&&span class=&p&&):&/span&
&span class=&c1&&# 生成一个四位数字的随机字符串&/span&
&span class=&n&&num&/span& &span class=&o&&=&/span& &span class=&n&&gen_rand&/span&&span class=&p&&()&/span&
&span class=&c1&&# 生成随机字符串对应的验证码图片&/span&
&span class=&n&&img&/span& &span class=&o&&=&/span& &span class=&bp&&self&/span&&span class=&o&&.&/span&&span class=&n&&captcha&/span&&span class=&o&&.&/span&&span class=&n&&generate&/span&&span class=&p&&(&/span&&span class=&n&&num&/span&&span class=&p&&)&/span&
&span class=&n&&img&/span& &span class=&o&&=&/span& &span class=&n&&np&/span&&span class=&o&&.&/span&&span class=&n&&fromstring&/span&&span class=&p&&(&/span&&span class=&n&&img&/span&&span class=&o&&.&/span&&span class=&n&&getvalue&/span&&span class=&p&&(),&/span& &span class=&n&&dtype&/span&&span class=&o&&=&/span&&span class=&s1&&'uint8'&/span&&span class=&p&&)&/span&
&span class=&n&&img&/span& &span class=&o&&=&/span& &span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&imdecode&/span&&span class=&p&&(&/span&&span class=&n&&img&/span&&span class=&p&&,&/span& &span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&IMREAD_COLOR&/span&&span class=&p&&)&/span&
&span class=&n&&img&/span& &span class=&o&&=&/span& &span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&resize&/span&&span class=&p&&(&/span&&span class=&n&&img&/span&&span class=&p&&,&/span& &span class=&p&&(&/span&&span class=&bp&&self&/span&&span class=&o&&.&/span&&span class=&n&&width&/span&&span class=&p&&,&/span& &span class=&bp&&self&/span&&span class=&o&&.&/span&&span class=&n&&height&/span&&span class=&p&&))&/span&
&span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&imwrite&/span&&span class=&p&&(&/span&&span class=&s2&&&./tmp&&/span& &span class=&o&&+&/span& &span class=&nb&&str&/span&&span class=&p&&(&/span&&span class=&n&&i&/span& &span class=&o&&%&/span& &span class=&mi&&10&/span&&span class=&p&&)&/span& &span class=&o&&+&/span& &span class=&s2&&&.png&&/span&&span class=&p&&,&/span& &span class=&n&&img&/span&&span class=&p&&)&/span&
&span class=&n&&img&/span& &span class=&o&&=&/span& &span class=&n&&np&/span&&span class=&o&&.&/span&&span class=&n&&multiply&/span&&span class=&p&&(&/span&&span class=&n&&img&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&o&&/&/span&&span class=&mf&&255.0&/span&&span class=&p&&)&/span&
&span class=&n&&img&/span& &span class=&o&&=&/span& &span class=&n&&img&/span&&span class=&o&&.&/span&&span class=&n&&transpose&/span&&span class=&p&&(&/span&&span class=&mi&&2&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&)&/span&
&span class=&n&&data&/span&&span class=&o&&.&/span&&span class=&n&&append&/span&&span class=&p&&(&/span&&span class=&n&&img&/span&&span class=&p&&)&/span&
&span class=&n&&label&/span&&span class=&o&&.&/span&&span class=&n&&append&/span&&span class=&p&&(&/span&&span class=&n&&get_label&/span&&span class=&p&&(&/span&&span class=&n&&num&/span&&span class=&p&&))&/span&
&span class=&n&&data_all&/span& &span class=&o&&=&/span& &span class=&p&&[&/span&&span class=&n&&mx&/span&&span class=&o&&.&/span&&span class=&n&&nd&/span&&span class=&o&&.&/span&&span class=&n&&array&/span&&span class=&p&&(&/span&&span class=&n&&data&/span&&span class=&p&&)]&/span&
&span class=&n&&label_all&/span& &span class=&o&&=&/span& &span class=&p&&[&/span&&span class=&n&&mx&/span&&span class=&o&&.&/span&&span class=&n&&nd&/span&&span class=&o&&.&/span&&span class=&n&&array&/span&&span class=&p&&(&/span&&span class=&n&&label&/span&&span class=&p&&)]&/span&
&span class=&n&&data_names&/span& &span class=&o&&=&/span& &span class=&p&&[&/span&&span class=&s1&&'data'&/span&&span class=&p&&]&/span&
&span class=&n&&label_names&/span& &span class=&o&&=&/span& &span class=&p&&[&/span&&span class=&s1&&'softmax_label'&/span&&span class=&p&&]&/span&
&span class=&n&&data_batch&/span& &span class=&o&&=&/span& &span class=&n&&OCRBatch&/span&&span class=&p&&(&/span&&span class=&n&&data_names&/span&&span class=&p&&,&/span& &span class=&n&&data_all&/span&&span class=&p&&,&/span& &span class=&n&&label_names&/span&&span class=&p&&,&/span& &span class=&n&&label_all&/span&&span class=&p&&)&/span&
&span class=&k&&yield&/span& &span class=&n&&data_batch&/span&
&span class=&k&&def&/span& &span class=&nf&&reset&/span&&span class=&p&&(&/span&&span class=&bp&&self&/span&&span class=&p&&):&/span&
&span class=&k&&pass&/span&
&/code&&/pre&&/div&&p&下面这段代码是网络结构:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&def get_ocrnet():
data = mx.symbol.Variable('data')
label = mx.symbol.Variable('softmax_label')
conv1 = mx.symbol.Convolution(data=data, kernel=(5,5), num_filter=32)
pool1 = mx.symbol.Pooling(data=conv1, pool_type=&max&, kernel=(2,2), stride=(1, 1))
relu1 = mx.symbol.Activation(data=pool1, act_type=&relu&)
conv2 = mx.symbol.Convolution(data=relu1, kernel=(5,5), num_filter=32)
pool2 = mx.symbol.Pooling(data=conv2, pool_type=&avg&, kernel=(2,2), stride=(1, 1))
relu2 = mx.symbol.Activation(data=pool2, act_type=&relu&)
conv3 = mx.symbol.Convolution(data=relu2, kernel=(3,3), num_filter=32)
pool3 = mx.symbol.Pooling(data=conv3, pool_type=&avg&, kernel=(2,2), stride=(1, 1))
relu3 = mx.symbol.Activation(data=pool3, act_type=&relu&)
flatten = mx.symbol.Flatten(data = relu3)
fc1 = mx.symbol.FullyConnected(data = flatten, num_hidden = 512)
fc21 = mx.symbol.FullyConnected(data = fc1, num_hidden = 10)
fc22 = mx.symbol.FullyConnected(data = fc1, num_hidden = 10)
fc23 = mx.symbol.FullyConnected(data = fc1, num_hidden = 10)
fc24 = mx.symbol.FullyConnected(data = fc1, num_hidden = 10)
fc2 = mx.symbol.Concat(*[fc21, fc22, fc23, fc24], dim = 0)
label = mx.symbol.transpose(data = label)
label = mx.symbol.Reshape(data = label, target_shape = (0, ))
return mx.symbol.SoftmaxOutput(data = fc2, label = label, name = &softmax&)
&/code&&/pre&&/div&&p&上面这个网络要稍微解释一下。因为这个问题是一个有顺序的多label的图片分类问题。我们在fc1的层上面接了4个Full Connect层(fc21,fc22,fc23,fc24),用来对应不同位置的4个数字label。然后将它们Concat在一起。然后同时学习这4个label。目前用上面的网络训练,4位数字全部预测正确的精度可以达到95%左右(因为是无穷多的训练样本,所以只要能不断训练下去,精度还是可以提高的,只是我训练到95%左右就停止训练了)。&br&&/p&&p&用CNN解决验证码识别有个问题,就是必须针对固定长度的验证码去做。如果长度不固定,或者是手写一行字的识别这种长度肯定不固定的问题,CNN就没办法了。这个时候就需要引入序列学习的模型了。&/p&&h2&基于LSTM+CTC的验证码识别&/h2&&p&LSTM+CTC被广泛的用在语音识别领域把音频解码成汉字,从这个角度说,OCR其实就是把图片解码成汉字,并没有太本质的区别。而且在整个过程中,不需要提前知道究竟要解码成几个字。&/p&&p&这个算法的思路是这样的。假设要识别的图片是80x30的图片,里面是一个长度为k的数字验证码。那么我们可以沿着x轴对图片进行切分,切成n个图片,作为LSTM的n个输入。在最极端的例子里,n=80。那么就是把图片的每一列都作为输入。LSTM有n个输入就会有n个输出,而这n个输出可以通过CTC计算和k个验证码标签之间的Loss,然后进行反向传播。&/p&&p&&figure&&img src=&https://pic1.zhimg.com/66418cba4311abd02bcd2f_b.jpg& data-rawwidth=&516& data-rawheight=&425& class=&origin_image zh-lightbox-thumb& width=&516& data-original=&https://pic1.zhimg.com/66418cba4311abd02bcd2f_r.jpg&&&/figure&我们同样用python-captcha自动生成验证码作为训练样本,用如下的代码来定义网络结构:&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&k&&def&/span& &span class=&nf&&lstm_unroll&/span&&span class=&p&&(&/span&&span class=&n&&num_lstm_layer&/span&&span class=&p&&,&/span& &span class=&n&&seq_len&/span&&span class=&p&&,&/span&
&span class=&n&&num_hidden&/span&&span class=&p&&,&/span& &span class=&n&&num_label&/span&&span class=&p&&):&/span&
&span class=&n&&param_cells&/span& &span class=&o&&=&/span& &span class=&p&&[]&/span&
&span class=&n&&last_states&/span& &span class=&o&&=&/span& &span class=&p&&[]&/span&
&span class=&k&&for&/span& &span class=&n&&i&/span& &span class=&ow&&in&/span& &span class=&nb&&range&/span&&span class=&p&&(&/span&&span class=&n&&num_lstm_layer&/span&&span class=&p&&):&/span&
&span class=&n&&state&/span& &span class=&o&&=&/span& &span class=&n&&LSTMState&/span&&span class=&p&&(&/span&&span class=&n&&c&/span&&span class=&o&&=&/span&&span class=&n&&mx&/span&&span class=&o&&.&/span&&span class=&n&&sym&/span&&span class=&o&&.&/span&&span class=&n&&Variable&/span&&span class=&p&&(&/span&&span class=&s2&&&l&/span&&span class=&si&&%d&/span&&span class=&s2&&_init_c&&/span& &span class=&o&&%&/span& &span class=&n&&i&/span&&span class=&p&&),&/span&
&span class=&n&&h&/span&&span class=&o&&=&/span&&span class=&n&&mx&/span&&span class=&o&&.&/span&&span class=&n&&sym&/span&&span class=&o&&.&/span&&span class=&n&&Variable&/span&&span class=&p&&(&/span&&span class=&s2&&&l&/span&&span class=&si&&%d&/span&&span class=&s2&&_init_h&&/span& &span class=&o&&%&/span& &span class=&n&&i&/span&&span class=&p&&))&/span&
&span class=&n&&last_states&/span&&span class=&o&&.&/span&&span class=&n&&append&/span&&span class=&p&&(&/span&&span class=&n&&state&/span&&span class=&p&&)&/span&
&span class=&k&&assert&/span&&span class=&p&&(&/span&&span class=&nb&&len&/span&&span class=&p&&(&/span&&span class=&n&&last_states&/span&&span class=&p&&)&/span& &span class=&o&&==&/span& &span class=&n&&num_lstm_layer&/span&&span class=&p&&)&/span&
&span class=&c1&&# embeding layer&/span&
&span class=&n&&data&/span& &span class=&o&&=&/span& &span class=&n&&mx&/span&&span class=&o&&.&/span&&span class=&n&&sym&/span&&span class=&o&&.&/span&&span class=&n&&Variable&/span&&span class=&p&&(&/span&&span class=&s1&&'data'&/span&&span class=&p&&)&/span&
&span class=&n&&label&/span& &span class=&o&&=&/span& &span class=&n&&mx&/span&&span class=&o&&.&/span&&span class=&n&&sym&/span&&span class=&o&&.&/span&&span class=&n&&Variable&/span&&span class=&p&&(&/span&&span class=&s1&&'label'&/span&&span class=&p&&)&/span&
&span class=&n&&wordvec&/span& &span class=&o&&=&/span& &span class=&n&&mx&/span&&span class=&o&&.&/span&&span class=&n&&sym&/span&&span class=&o&&.&/span&&span class=&n&&SliceChannel&/span&&span class=&p&&(&/span&&span class=&n&&data&/span&&span class=&o&&=&/span&&span class=&n&&data&/span&&span class=&p&&,&/span& &span class=&n&&num_outputs&/span&&span class=&o&&=&/span&&span class=&n&&seq_len&/span&&span class=&p&&,&/span& &span class=&n&&squeeze_axis&/span&&span class=&o&&=&/span&&span class=&mi&&1&/span&&span class=&p&&)&/span&
&span class=&n&&hidden_all&/span& &span class=&o&&=&/span& &span class=&p&&[]&/span&
&span class=&k&&for&/span& &span class=&n&&seqidx&/span& &span class=&ow&&in&/span& &span class=&nb&&range&/span&&span class=&p&&(&/span&&span class=&n&&seq_len&/span&&span class=&p&&):&/span&
&span class=&n&&hidden&/span& &span class=&o&&=&/span& &span class=&n&&wordvec&/span&&span class=&p&&[&/span&&span class=&n&&seqidx&/span&&span class=&p&&]&/span&
&span class=&k&&for&/span& &span class=&n&&i&/span& &span class=&ow&&in&/span& &span class=&nb&&range&/span&&span class=&p&&(&/span&&span class=&n&&num_lstm_layer&/span&&span class=&p&&):&/span&
&span class=&n&&next_state&/span& &span class=&o&&=&/span& &span class=&n&&lstm&/span&&span class=&p&&(&/span&&span class=&n&&num_hidden&/span&&span class=&p&&,&/span& &span class=&n&&indata&/span&&span class=&o&&=&/span&&span class=&n&&hidden&/span&&span class=&p&&,&/span&
&span class=&n&&prev_state&/span&&span class=&o&&=&/span&&span class=&n&&last_states&/span&&span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&p&&],&/span&
&span class=&n&&param&/span&&span class=&o&&=&/span&&span class=&n&&param_cells&/span&&span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&p&&],&/span&
&span class=&n&&seqidx&/span&&span class=&o&&=&/span&&span class=&n&&seqidx&/span&&span class=&p&&,&/span& &span class=&n&&layeridx&/span&&span class=&o&&=&/span&&span class=&n&&i&/span&&span class=&p&&)&/span&
&span class=&n&&hidden&/span& &span class=&o&&=&/span& &span class=&n&&next_state&/span&&span class=&o&&.&/span&&span class=&n&&h&/span&
&span class=&n&&last_states&/span&&span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&p&&]&/span& &span class=&o&&=&/span& &span class=&n&&next_state&/span&
&span class=&n&&hidden_all&/span&&span class=&o&&.&/span&&span class=&n&&append&/span&&span class=&p&&(&/span&&span class=&n&&hidden&/span&&span class=&p&&)&/span&
&span class=&n&&hidden_concat&/span& &span class=&o&&=&/span& &span class=&n&&mx&/span&&span class=&o&&.&/span&&span class=&n&&sym&/span&&span class=&o&&.&/span&&span class=&n&&Concat&/span&&span class=&p&&(&/span&&span class=&o&&*&/span&&span class=&n&&hidden_all&/span&&span class=&p&&,&/span& &span class=&n&&dim&/span&&span class=&o&&=&/span&&span class=&mi&&0&/span&&span class=&p&&)&/span&
&span class=&n&&pred&/span& &span class=&o&&=&/span& &span class=&n&&mx&/span&&span class=&o&&.&/span&&span class=&n&&sym&/span&&span class=&o&&.&/span&&span class=&n&&FullyConnected&/span&&span class=&p&&(&/span&&span class=&n&&data&/span&&span class=&o&&=&/span&&span class=&n&&hidden_concat&/span&&span class=&p&&,&/span& &span class=&n&&num_hidden&/span&&span class=&o&&=&/span&&span class=&mi&&11&/span&&span class=&p&&)&/span&
&span class=&n&&label&/span& &span class=&o&&=&/span& &span class=&n&&mx&/span&&span class=&o&&.&/span&&span class=&n&&sym&/span&&span class=&o&&.&/span&&span class=&n&&Reshape&/span&&span class=&p&&(&/span&&span class=&n&&data&/span&&span class=&o&&=&/span&&span class=&n&&label&/span&&span class=&p&&,&/span& &span class=&n&&target_shape&/span&&span class=&o&&=&/span&&span class=&p&&(&/span&&span class=&mi&&0&/span&&span class=&p&&,))&/span&
&span class=&n&&label&/span& &span class=&o&&=&/span& &span class=&n&&mx&/span&&span class=&o&&.&/span&&span class=&n&&sym&/span&&span class=&o&&.&/span&&span class=&n&&Cast&/span&&span class=&p&&(&/span&&span class=&n&&data&/span& &span class=&o&&=&/span& &span class=&n&&label&/span&&span class=&p&&,&/span& &span class=&n&&dtype&/span& &span class=&o&&=&/span& &span class=&s1&&'int32'&/span&&span class=&p&&)&/span&
&span class=&n&&sm&/span& &span class=&o&&=&/span& &span class=&n&&mx&/span&&span class=&o&&.&/span&&span class=&n&&sym&/span&&span class=&o&&.&/span&&span class=&n&&WarpCTC&/span&&span class=&p&&(&/span&&span class=&n&&data&/span&&span class=&o&&=&/span&&span class=&n&&pred&/span&&span class=&p&&,&/span& &span class=&n&&label&/span&&span class=&o&&=&/span&&span class=&n&&label&/span&&span class=&p&&,&/span& &span class=&n&&label_length&/span& &span class=&o&&=&/span& &span class=&n&&num_label&/span&&span class=&p&&,&/span& &span class=&n&&input_length&/span& &span class=&o

我要回帖

更多关于 3aitt com 的文章

 

随机推荐