前言
开始之前,我们先来看这样一个提问:
相信看完 @X_AirDu 的回答我们已经对 Python 有了一个大概的了解。那接下来就让我们更深入的了解 Python 吧~
Python 入门
已经描述了python的美好,开始学啦,做好如下准备:
电脑,必须的。不管是什么操作系统。
上网,必须的。没有为什么。
除了这些,还有一条,非常非常重要,写在最后:这是自己的兴趣。
是否非常想学好 Python,一方面被琐事纠缠,一直没能动手,另一方面,担心学习成本太高,心里默默敲着退堂鼓?
幸运的是,Python 是一门初学者友好的编程语言,想要完全掌握它,你不必花上太多的时间和精力。
废话不多说,学会一门语言的捷径只有一个: Getting Started
Programming Computer Vision with Python 学习笔记
《Programming Computer Vision with Python》是一本介绍计算机视觉底层基本理论和算法的入门书,通过这本收可以学到有关对象识别、基于内容的图像搜索、光学字符识别、光流法、跟踪、三维重建、立体成像、增强现实、姿态估计、全景创建、图像分割、降噪、图像分组等技术的实现原理。
英文版PDF下载:https://it-ebooks.info/book/836/
中文版介绍:http://book.douban.com/subjec...
目录及章节简介
先介绍基本的图像处理,包括图像的读取、转换、缩放、导数计算、画图和保存,这些知识将为后面内容的学习打下基础。
首先介绍跟图像处理、显示有关两个库:NumPy和Matplotlib,然后介绍增强图像对比度的实现原理。
原书对于PCA的讲解只有一小节,一笔带过的感觉,但我发现PCA是一个很重要的基础知识点,在机器机视觉、人脸识别以及一些高级图像处理技术时都被经常用到,所以本人自行对PCA进行了更深入的学习。
上一个笔记主要是讲了PCA的原理,并给出了二维图像降一维的示例代码。但还遗留了以下几个问题:
在计算协方差和特征向量的方法上,书上使用的是一种被作者称为compact trick的技巧,以及奇异值分解(SVD),这些都是什么东西呢?
如何把PCA运用在多张图片上?
所以,我们需要进一步的了解,同时,为示例对多张图片进行PCA,我选了一个跟书相似但更有趣的例子来做——人脸识别。
SciPy库,与之前我们使用的NumPy和Matplotlib,都是scipy.org提供的用于科学计算方面的核心库。相对NumPy,SciPy库提供了面向更高层应用的算法和函数(其实也是基于NumPy实现的),并以子模块的形式组织,每个子模块对应不同的应用领域。
边缘检测(edge detection)是最重要的图像处理技术之一,图像边缘检测大幅度地减少了数据量,并且剔除了可以认为不相关的信息,保留了图像重要的结构属性,为后续图像理解方法提供了基础。
数学形态学(mathematical morphology)关注的是图像中的形状,它提供了一些方法用于检测形状和改变形状。起初是基于二值图像提出的,后来扩展到灰度图像。二值图像就是:每个像素的值只能是0或1,1代表描绘图像的点,0代表背景。
基本的形态学运算包括:腐蚀(erosion)、膨胀(dilation)、开(opening)、闭(closing),对于这些运算,都需要用到被称为结构元素(Structuring element)的模板,一般为方形,以小矩阵的形式表示,但它的元素的值只能是0或1,它代表的是一个集合,这个集合罩在原图像上,可以跟原图像的形状进行集合运算。
图像去噪(Image Denoising)的过程就是将噪点从图像中去除的同时尽可能的保留原图像的细节和结构。这里讲的去噪跟前面笔记提过的去噪不一样,这里是指高级去噪技术,前面提过的高斯平滑也能去噪,但高斯平滑去噪的同时也把边缘模糊化了,另外使用形态学的方法去噪是指去除一些粗的椒盐噪声。对于一幅密布噪点的图像,如果使其变得清晰又保留边缘细节,这是高级去噪技术所要解决的问题。
角检测(Corner detection)是指检测图像中具有代表性的(我们感兴趣的)角点,一般讲为形状或边缘的拐角处,这些点可以大略标记对象在图像中的轮廓和位置,如果从一个图像序列中检测每个图像的角点,就可以找出图像之间存在的相关和相对应的角点,这对比如全景拼接(多张图片拼接成一张全景图片)很有用。
角检测还可以用在运动检测、物体识别等方面。
现在考虑一个全景图拼接的应用场景,假设现有两张图片需要拼接成一张全景图,这两张图片是通过相机右转一定角度拍摄出来的,两张图片有部分取景是重叠的。如何实现拼接?当然这是一个不简单的问题,我们现在只考虑实现拼接目标的第一步:找出图像中重叠的内容,以及分别在两张图片中的位置。
尺度不变特征变换(Scale-invariant feature transform, 简称SIFT)是图像局部特征提取的现代方法——基于区域/图像块的分析。在上篇笔记里我们使用的图像之间对应点的匹配方法,不适用于不同尺度的图像。有许多应用场景需要对不同尺度(即分辨率、缩放、旋转角度、亮度等都可能存在不同)的图像进行特征识别和匹配,这就需要一种特征提取方法,通过这种方法提取出来的特征描述,可以不受尺度的影响,SIFT算法就是这种方法的实现。
SIFT算法的应用非常广泛,包括物体识别、机器人地图感知与导航、全景拼接、3D建模、手势识别、影像追踪和动作比对等,原书后面章节的算法也会多次用到它。SIFT算法的过程较复杂,本文只是粗略介绍其关键步骤,以便引出SURF——基于SIFT的改进算法。
ORB(Oriented FAST and Rotated BRIEF)可用来替代SIFT(或SURF),它对图像更具有抗噪特性,是一种特征检测高效算法,其速度满足实时要求,可用于增强图像匹配应用。
ORB的算法基于FAST角检测(Features from accelerated segment test)和BRIEF(Binary Robust Independent Elementary Features)特征描述符,这也是它名字的由来。
Python 进阶
在实际生产中,机器学习工作现在看起来,白天像是个算法工程师的活,晚上就变成运维+测试了。Python 一直以来也都受到测试工程师和运维工程师的偏爱,下面是几个经典的注释活用case。
在Python社区文化的浇灌下,演化出了一种独特的代码风格,去指导如何正确地使用Python,这就是常说的pythonic。一般说地道(idiomatic)的python代码,就是指这份代码很pythonic。Python的语法和标准库设计,处处契合着pythonic的思想。而且Python社区十分注重编码风格一的一致性,他们极力推行和处处实践着pythonic。所以经常能看到基于某份代码P vs NP (pythonic vs non-pythonic)的讨论。pythonic的代码简练,明确,优雅,绝大部分时候执行效率高。阅读pythonic的代码能体会到“代码是写给人看的,只是顺便让机器能运行”畅快。
python语言的一些高阶用法主要有以下几个特性:
generators生成器用法
collections包常见用法
itertools包常见用法
packing/unpacking封包/解包特性
Decorators装饰器
Context Managers上下文管理期
以上几个特性我会针对应用场景,使用注意事项,应用举例几个维度分别进行讲解,如果有同学对某个特性特别熟悉则可以直接跳过。
python处理文本的功能非常强大,但是如果是初学者,没有搞清楚python中的编码机制,也经常会遇到乱码或者decode error。本文的目的是简明扼要地说明python的编码机制,并给出一些建议。
无论项目中还是面试都离不开装饰器话题,装饰器的强大在于它能够在不修改原有业务逻辑的情况下对代码进行扩展,权限校验、用户认证、日志记录、性能测试、事务处理、缓存等都是装饰器的绝佳应用场景,它能够最大程度地对代码进行复用。
简单来说,正则表达式就是用来匹配特定内容的字符串。举个例子来讲,如果我想找出由a、b组成的,以abb结尾的字符串,比如ababb,那么用正则表达式来表示就是[ab]*abb。
python中一切皆为对象,且python3统一了类与类型的概念,类型就是类。
基于面向对象设计一个款游戏:英雄联盟,每个玩家选一个英雄,每个英雄都有自己的特征和和技能,特征即数据属性,技能即方法属性,特征与技能的结合体就一个对象。
从一组对象中提取相似的部分就是类,类所有对象都具有的特征和技能的结合体。
在python中,用变量表示特征,用函数表示技能,因而类是变量与函数的结合体,对象是变量与方法(指向类的函数)的结合体。
Python源码理解: '+=' 和 'xx = xx + xx'的区别
现在我们大概明白了+=实际上是干嘛了: 它应该能算是一个加强版的+, 因为它比+多了一个写回本身的功能.不过是否能够写回本身, 还是得看对象自身是否支持, 也就是说是否具备Py_NotImplemented标识, 是否支持sq_inplace_concat, 如果具备, 才能实现, 否则, 也就是和 + 效果一样而已.
Python 可以做什么
总所周知,Python 做爬虫很方便,有现成的库,这是很多从入门级选手到专业级选手都在做的。Python 也可以做游戏。Python 还很受黑客的青睐,在黑客领域的应用就不多说了。此外 Python 做网站也无压力,比如知乎的主站后台就是基于 Python 的 tornado 框架,豆瓣的后台也是基于 Python。可以不负责任地说,Python 几乎可以做任何事情。Python 还可以做桌面程序,Python 有很多 UI 库,可以很方便地完成一个 GUI 程序,比如大名鼎鼎的 Dropbox,就是用 Python 实现的服务器端和客户端程序。
爬虫
python爬虫基础知识,至此足够,接下来,在实战中学习更高级的知识。
随着大数据时代的到来,人们对数据资源的需求越来越多,而爬虫是一种很好的自动采集数据的手段。
那么,如何才能精通Python网络爬虫呢?学习Python网络爬虫的路线应该如何进行呢?在此为大家具体进行介绍。
Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容
在上一篇python使用xslt提取网页数据中,要提取的内容是直接从网页的source code里拿到的。但是一些Ajax动态内容是在source code找不到的,就要找合适的程序库把异步或动态加载的内容加载上来,交给本项目的提取器进行提取。
python可以使用selenium执行javascript,selenium可以让浏览器自动加载页面,获取需要的数据。selenium自己不带浏览器,可以使用第三方浏览器如Firefox,Chrome等,也可以使用headless浏览器如PhantomJS在后台执行。
爬虫实战系列
Web 程序开发
Tornado 是由 Facebook 开源的一个服务器“套装”,适合于做 python 的 web 或者使用其本身提供的可扩展的功能,完成了不完整的 wsgi 协议,可用于做快速的 web 开发,封装了 epoll 性能较好。文章主要以分析 tornado 的网络部分即异步事件处理与上层的 IOstream 类提供的异步IO,其他的模块如 web 的 tornado.web 以后慢慢留作分析。
最近闲暇无事,阅读了一下tornado的源码,对整体的结构有了初步认识,与大家分享
最近开发新项目一直在学习tornado的知识,在前人的基础上找了些最佳实践,记录如下,备查。
Tornado 简单入门教程:
这两天在学着用Python + Tornado +MongoDB来做Web开发(哈哈哈这个词好高端)。学的过程中查阅了无数资料,也收获了一些经验,所以希望总结出一份简易入门教程供初学者参考。完整的教程将尽可能(233)遵循下面的目录顺序。
Demo1是一个简单的博客系统(=。=什么网站都叫系统)。我们从这个简单的系统入手,去了解P+T+M网站的内部逻辑,并记住一些“规则”,方便我们进一步自己开发。
在Demo1里面,我们练习了如何部署应用、tornado框架的基本结构以及应用如何处理请求。
其实Demo1算不上一个博客啦。一个最基本的信息系统一定要包含对数据库的增、删、改和查。所以这次,我们来将Demo1升级为Demo2,添加上基本的增删改查。
图像与视频处理
一直断断续续的用过几次 OpenCV,感觉熟练掌握它的使用方法已经变的非常必要了,正好找到一个很不错的英文教程,就以此为起点,详细记录一下对 OpenCV 的学习过程吧。
准备工作
图像处理
视频处理
科学计算
和那些数据科学比赛不同,在真实的数据科学中,我们可能更多的时间不是在做算法的开发,而是对需求的定义和数据的治理。所以,如何更好的结合现实业务,让数据真正产生价值成了一个更有意义的话题。
数据科学项目的完整流程通常是这样的五步骤:
需求定义=》数据获取=》数据治理=》数据分析=》数据可视化
最近在用Python做中文自然语言处理。使用的IDE是PyCharm。PyCharm确实是Python开发之首选,但用于科学计算方面,还略有欠缺。为此我尝试过Enthought Canopy,但Canopy感觉把问题搞得复杂化,管理Python扩展也不太方便。直到今天我发现了Anaconda。
Anaconda是一个和Canopy类似的科学计算环境,但用起来更加方便。自带的包管理器conda也很强大。
数据分析
你学习Python时能犯的最简单的错误之一就是同时去尝试学习过多的库。当你努力一下子学会每样东西时,你会花费很多时间来切换这些不同概念之间,变得沮丧,最后转移到其他事情上。
所以,坚持关注这个过程:
理解 Python 基础
学习 Numpy
学习 Pandas
学习 Matplolib
numpy对python的意义非凡,在数据分析与机器学习领域为python立下了汗马功劳。现在用python搞数据分析或机器学习经常使用的pandas、matplotlib、sklearn等库,都需要基于numpy构建。毫不夸张地说,没有numpy,python今天在数据分析与机器学习领域只能是捉襟见肘。
机器学习
真若有心于数据领域,甚或欲从事数据科学之职业。请对Python有信心,值得你付出时间。想走机器学习之路,Scikit-learn是你最好的选择,一边操作实例,一边阅读文档,再辅助以相关的理论基础,持之数日,则大业可成也。
Python机器学习工具:Scikit-Learn介绍与实践
官方的解释很简单: Machine Learning in Python, 用python来玩机器学习。
Scikit-learn的优点:
构建于现有的NumPy(基础n维数组包),SciPy(科学计算基础包), matplotlib(全面的2D/3D画图),IPython(加强的交互解释器),Sympy(Symbolic mathematics), Pandas(数据结构和分析)之上,做了易用性的封装。
简单且高效的数据挖掘、数据分析的工具。
对所有人开放,且在很多场景易于复用。
BSD证书下开源。
相信很多人都想过让人工智能来帮你赚钱,但到底该如何做呢?瑞士日内瓦的一位金融数据顾问 Gaëtan Rickter 近日发表文章介绍了他利用 Python 和机器学习来帮助炒股的经验,其最终成果的收益率跑赢了长期处于牛市的标准普尔 500 指数。虽然这篇文章并没有将他的方法完全彻底公开,但已公开的内容或许能给我们带来如何用人工智能炒股的启迪。机器之心对本文进行了编译介绍,代码详情请访问原文。
欧拉函数(Euler' totient function )
gamma函数的求导会出现所谓的欧拉函数(phi),在一篇论文中我需要对好几个欧拉函数求值,结果不能理解,立即去google,发现了一个开源的python库可以用来计算欧拉函数
用 Python 来做一些神奇好玩的事情吧
Python可谓是现在很多人正在学或者想学的一个脚本语言了,提到学习自然就少不了拿项目练手,可是一般的项目根本提不起兴趣嘛,这10个项目可是非常有趣的,不信你看看。
最近需要用到Python来操作excel表,读取表格内容到数据库。所以就搜索了相关资料。查找了一下,可以操作excel表的几个库有以下几个:
openpyxl 这个是推荐使用的库,可以读写Excel 2010以上格式,以.xlsx结尾的文件。
xlsxwriter 这个支持.xlsx,但是只支持写入,格式化等操作,不支持读取。
xlrd 这个支持读取数据,支持以xls结尾的文件,也就是比较老的格式。
xlwt 这个和上面的相对应,支持写入书和格式化数据,支持xls结尾的文件格式。
xlutils 这个是整合了xlrd和xlwt两个库的功能。
经过对比我还是选择了openpyxl这个库,下面针对这个库的使用进行说明
随着去年alphago 的震撼表现,AI 再次成为科技公司的宠儿。AI涉及的领域众多,图像识别中的人脸识别是其中一个有趣的分支。百度的BFR,Face++的开放平台,汉王,讯飞等等都提供了人脸识别的API,对于老码农而言,自己写一小段代码,来看看一张图片中有几个人,没有高大上,只是觉得好玩,而且只需要7行代码。
动手实操 | 如何用 Python 实现人脸识别,证明这个杨幂是那个杨幂?
当前,人脸识别应用于许多领域,如支付宝的用户认证,许多的能识别人心情的 AI,也就是人的面部表情,还有能分析人的年龄等等,而这里面有着许多的难度,在这里我想要分享的是一个利用七牛 SDK 简单的实现人脸识别的方法,当然七牛的 SDK 中提供了很多的拓展,在返回的 JSON 中包含着如年龄等信息,这里就不进行分享了。这里我们要使用的是七牛云平台中由第三方数据处理提供的 API。
写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来就可以直接用的 library 分分钟就可以写出一个爬虫出来,今天就琢磨着写一个爬虫,将廖雪峰的 Python 教程 爬下来做成 PDF 电子书方便大家离线阅读。
我用Python分析了42万字的歌词,为了搞清楚民谣歌手们在唱些什么
听了这么多年民谣,我有一种感觉,就是很多歌都似曾相识,但是仔细一想,又哪一首都想不起来,为了搞清楚这群流浪在祖国大地的现代游吟诗人们都在唱些什么,我做了一些数据分析的工作。
今天一大早奔来图书馆,想想了微信很简洁也很强大的一个工具,最近微信的新闻还是比较多的, 比如:小程序、时间轴等,这不是重点,重点是看到了一个基于python的微信开源库:itchat,玩了一天。Python曾经对我说:"时日不多,赶紧用Python"。
Python爬虫,看看我最近博客都写了啥,带你制作高逼格的数据聚合云图
今天一时兴起,想用python爬爬自己的博客,通过数据聚合,制作高逼格的云图(对词汇出现频率视觉上的展示),看看最近我到底写了啥文章。
wechat_sender 是基于 wxpy 和 tornado 实现的一个可以将你的网站、爬虫、脚本等其他应用中各种消息 (日志、报警、运行结果等) 发送到微信的工具。
使用 wechat_sender 很简单,只需要有个人微信号,然后用个人微信号启动 wechat_sender 服务。
使用Python实现聊天机器人的方案有多种:AIML、chatterBot以及图灵聊天机器人和微软小冰等。
考虑到以后可能会做一些定制化的需求,这里我选择了chatterBot。
chatterbot是一款python接口的,基于一系列规则和机器学习算法完成的聊天机器人。具有结构清晰,可扩展性好,简单实用的特点。
NoSQL 这个词在近些年正变得随处可见, 但是到底 "NoSQL" 指的是什么? 它是如何并且为什么这么有用? 在本文, 我们将会通过纯 Python (我比较喜欢叫它, "轻结构化的伪代码") 写一个 NoSQL 数据库来回答这些问题。
Python 讲堂
讲师:
@kimg1234,知乎专栏 爬虫入门到精通系统教程 的作者,对爬虫技巧有特别的研究,熟悉HTTP协议。
内容简介:
如何爬取异步加载的网页
如何解析请求中的参数
headers中的Accept如何应用
如何优雅的获取JavaScript中的内容
如何解决爬取网页过程中遇到的问题
讲师:
@Christoph,浙江财经大学数据分析和大数据计算客座教授,德国不莱梅大学数学博士
内容简介:
近年来,深度学习已经带动了机器学习的革命性进展:用于分类图像和自动翻译的深层神经网络模型已经达到了过去无法想象的程度。
我们将快速概述深度神经网络和激活函数,然后使用 TFlearn 构建图像分类器。 TFlearn 使用类似 sklearn 的接口,一个流行的 Python 机器学习库,利用谷歌的 TensorFlow 的底层计算和加快开发过程。 听课只需具备一些 Python 知识即可,无需机器学习背景。
社区技术群
SegmentFault 官方目前开放的微信技术群如下:
SF.GG 后端攻城狮交流群
SF.GG 前端攻城狮交流群
SF.GG 北京技术交流群
SF.GG 上海技术交流群
SF.GG 广州技术交流群
SF.GG 深圳技术交流群
SF.GG 杭州技术交流群
以上群组仅限程序员加入,需要入群的小伙伴请添加管理员微信好友:mgr_segmentfault,备注『群名称+SF用户ID』,审核成功后会拉你进入相应技术群。
(本期完)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。