人工智能图像处理工具OpenCV机器学习1快速入门

作为一种人工智能,机器学习使计算机能够通过经验学习:使用过去收集的数据预测未来。最重要的是,计算机视觉是当今最令人兴奋的机器学习应用领域之一,深度学习和卷积神经网络推动创新系统,如自动驾驶汽车和谷歌的DeepMind。

在本章中,我们将讨论为什么机器学习变得如此受欢迎,并讨论它可以解决的问题类型。在整本书中,我将假设您已经掌握了OpenCV和Python的基本知识。

机器学习入门

机器学习已经存在了至少60年。 在寻求人工智能的过程中,早期的机器学习系统使用if ... else语句的手工编码规则来处理数据和做出决策。 想想一个垃圾邮件过滤器,其工作是解析传入的电子邮件并将不需要的邮件移动到垃圾邮件文件夹:

image.png

我们可以提出单词黑名单,只要它们出现在邮件中,就将电子邮件标记为垃圾邮件。如果将它们组合并嵌套在决策树中,这些专家决策规则可变得任意复杂。

image.png

手动编码这些决策规则有时是可行的,但有两个主要缺点:

  • 逻辑仅适用于单个特定任务。例如无法使用此垃圾邮件过滤器标记朋友的照片。
  • 需要深入了解问题。我们必须确切地知道哪种类型的电子邮件构成垃圾邮件及可能的例外。

这就是机器学习的用武之地。有时,任务无法很好地定义,机器学习通常可以用来提取这些隐藏的关系(也称为数据挖掘)。

如今多数智能手机可以检测到图像中的脸部。但是20几年前,这个问题没有得到解决。人类倾向于不以像素为单位思考。我们寻找定义面部特征,例如眼睛,鼻子,嘴巴等,始终没想出一套好的决策规则来定义面部。然而卷积神经网络和深度学习能识别人脸。我们所要做的只是简单地呈现面部图像的集合到机器。机器就能够发现一组特征来识别面部,这是机器学习的真正力量。我们需要的是解决问题,而不一定要找出其定义规则。好比中医能解决很多西医解决不了的问题,西医的理论认为中医的结果很多无法用西医解释,但是实际中医上也是成千上万年自然机器学习的结果。

机器学习可以解决的问题

大多数机器学习问题属于以下三个主要类别:

  • 监督学习。每个数据点都被标记或与类别。比如分类标签将图像指定为猫或狗。有训练数据和测试数据

  • 无监督学习。以某种方式组织数据或描述其结构。这可能意味着将它们分组或查找查看复杂数据的不同方式使它们看起来更简单。

  • 强化学习中,算法可以选择响应每个数据点的动作。这是机器人技术中常见的传感器方法,一个时间点的读数是一个数据点,算法必须选择机器人的下一步行动。它也非常适合物联网应用,其中学习算法在短时间内收到奖励信号。基于此,算法修改其策略以获得最高回报。

这三个主要类别如下图所示:

image.png

许多开源机器学习库提供了比OpenCV更多的功能。一个突出的例子是scikit-learn,它提供了许多最先进的机器学习算法以及丰富的在线教程和代码片段。由于OpenCV主要是为了提供计算机视觉算法而开发的,因此其机器学习功能仅限于一个名为ml的模块。OpenCV仍然提供了许多最先进的算法,但有时缺乏一些功能。为此我们需要将scikitlearn等和opencv结合。

对效率要求比较高的,可以考虑采用:cython、joblib、dask(相关链接

Anaconda简介

Anaconda 是一种Python语言的免费增值开源发行版,用于进行大规模数据处理、预测分析,和科学计算,致力于简化包的管理和部署。Anaconda使用软件包管理系统Conda进行包管理。Anaconda跨平台,集成了NumPy、SciPy、scikit-learn、Matplotlib和Jupyter Notebook等优秀库。

下载后直接双击安装。使用时,可以点击启动相应的编程环境:

Python(shell) : 标准CPython
IPython(shell): 相当于在命令窗口的命令提示符后输入ipython回车。pip install ipython安装的ipython用法一样。
Ipython QTConsole
IPython Notebook:直接点击打开,或者在命令提示符中输入ipython.exe notebook
Jupyter QTConsole
Jupyter Notebook:直接点击打开,或在终端中输入: jupyter notebook 以启动服务器;在浏览器中打开notebook页面地址:http://localhost:8888 。Jupyter Notebook是一种 Web 应用,能让用户将说明文本、数学方程、代码和可视化内容全部组合到一个易于共享的文档中。
Spyder:直接点击打开IDE。最大优点就是模仿MATLAB的“工作空间”
Anaconda Prompt : 命令行终端
支持其他IDE,如Pycharm
安装包管理,

列出已经安装的包:在命令提示符中输入pip list或者用conda list
安装新包:在命令提示符中输入“pip install 包名”,或者“conda install 包名”
更新包: conda update package_name
升级所有包: conda upgrade --all
卸载包:conda remove package_names
搜索包:conda search search_term
管理环境:

安装nb_conda,用于notebook自动关联nb_conda的环境
创建环境:在Anaconda终端中 conda create -n env_name package_names[=ver]
使用环境:在Anaconda终端中 activate env_name
离开环境:在Anaconda终端中 deactivate
导出环境设置:conda env export > environmentName.yaml 或 pip freeze > environmentName.txt
导入环境设置:conda env update -f=/path/environmentName.yaml 或 pip install -r /path/environmentName.txt
列出环境清单:conda env list
删除环境: conda env remove -n env_name

image.png

还可以基于用户搜索$ conda install -c user_name package_name

conda虚拟环境安装

$ conda config --add channels conda-forge
$ conda create -n Python3 python=3.5 --file requirements.txt
$ source activate Python3 # on Linux / Mac OS X
$ activate Python3 # on Windows
$ source deactivate # on Linux / Mac OS X
$ deactivate # on Windows

如果你不想安装本书环境,也可以访问:https://mybinder.org/v2/gh/mbeyeler/opencv-machine-learning/master

环境检验:

$ conda config --add channels conda-forge
$ conda create -n Python3 python=3.5 --file requirements.txt
$ source activate Python3 # on Linux / Mac OS X
$ activate Python3 # on Windows
$ source deactivate # on Linux / Mac OS X
$ deactivate # on Windows

$ jupyter notebook

这将打开浏览器窗口,显示当前目录中的文件列表。单击opencv-machine-learning文件夹,然后单击notebooks文件夹,您将找到本书的所有代码:

image.png

点击笔记01.00-A-Taste-of-Machine-Learning.ipynb,您可以通过选择Kernel> Restart&Run All来自己运行代码:


image.png

有一些方便的键盘快捷键用于Jupyter。刚开始需要知道的是:

  • 单击单元格以进行编辑。
  • 选中单元格后,按Ctrl + Enter执行其中的代码。
  • 或者,按Shift + Enter执行单元格并选择其下方的单元格。
  • 按Esc退出写入模式,然后按A键在当前选定的上方插入单元格,B在下面插入单元格。

快捷键的查看:Help > Keyboard Shortcut 或 Help > User Interface Tour


>>> import cv2
>>> cv2.__version__
'3.4.1'
>>> dir(cv2.ml)
['ANN_MLP_ANNEAL', 'ANN_MLP_BACKPROP', 'ANN_MLP_GAUSSIAN', 'ANN_MLP_IDENTITY', 'ANN_MLP_LEAKYRELU', 'ANN_MLP_NO_INPUT_SCALE', 'ANN_MLP_NO_OUTPUT_SCALE', 'ANN_MLP_RELU', 'ANN_MLP_RPROP', 'ANN_MLP_SIGMOID_SYM', 'ANN_MLP_UPDATE_WEIGHTS', 'ANN_MLP_create', 'ANN_MLP_load', 'BOOST_DISCRETE', 'BOOST_GENTLE', 'BOOST_LOGIT', 'BOOST_REAL', 'Boost_DISCRETE', 'Boost_GENTLE', 'Boost_LOGIT', 'Boost_REAL', 'Boost_create', 'Boost_load', 'COL_SAMPLE', 'DTREES_PREDICT_AUTO', 'DTREES_PREDICT_MASK', 'DTREES_PREDICT_MAX_VOTE', 'DTREES_PREDICT_SUM', 'DTrees_PREDICT_AUTO', 'DTrees_PREDICT_MASK', 'DTrees_PREDICT_MAX_VOTE', 'DTrees_PREDICT_SUM', 'DTrees_create', 'DTrees_load', 'EM_COV_MAT_DEFAULT', 'EM_COV_MAT_DIAGONAL', 'EM_COV_MAT_GENERIC', 'EM_COV_MAT_SPHERICAL', 'EM_DEFAULT_MAX_ITERS', 'EM_DEFAULT_NCLUSTERS', 'EM_START_AUTO_STEP', 'EM_START_E_STEP', 'EM_START_M_STEP', 'EM_create', 'EM_load', 'KNEAREST_BRUTE_FORCE', 'KNEAREST_KDTREE', 'KNearest_BRUTE_FORCE', 'KNearest_KDTREE', 'KNearest_create', 'LOGISTIC_REGRESSION_BATCH', 'LOGISTIC_REGRESSION_MINI_BATCH', 'LOGISTIC_REGRESSION_REG_DISABLE', 'LOGISTIC_REGRESSION_REG_L1', 'LOGISTIC_REGRESSION_REG_L2', 'LogisticRegression_BATCH', 'LogisticRegression_MINI_BATCH', 'LogisticRegression_REG_DISABLE', 'LogisticRegression_REG_L1', 'LogisticRegression_REG_L2', 'LogisticRegression_create', 'LogisticRegression_load', 'NormalBayesClassifier_create', 'NormalBayesClassifier_load', 'ParamGrid_create', 'ROW_SAMPLE', 'RTrees_create', 'RTrees_load', 'STAT_MODEL_COMPRESSED_INPUT', 'STAT_MODEL_PREPROCESSED_INPUT', 'STAT_MODEL_RAW_OUTPUT', 'STAT_MODEL_UPDATE_MODEL', 'SVMSGD_ASGD', 'SVMSGD_HARD_MARGIN', 'SVMSGD_SGD', 'SVMSGD_SOFT_MARGIN', 'SVMSGD_create', 'SVMSGD_load', 'SVM_C', 'SVM_CHI2', 'SVM_COEF', 'SVM_CUSTOM', 'SVM_C_SVC', 'SVM_DEGREE', 'SVM_EPS_SVR', 'SVM_GAMMA', 'SVM_INTER', 'SVM_LINEAR', 'SVM_NU', 'SVM_NU_SVC', 'SVM_NU_SVR', 'SVM_ONE_CLASS', 'SVM_P', 'SVM_POLY', 'SVM_RBF', 'SVM_SIGMOID', 'SVM_create', 'SVM_getDefaultGridPtr', 'SVM_load', 'StatModel_COMPRESSED_INPUT', 'StatModel_PREPROCESSED_INPUT', 'StatModel_RAW_OUTPUT', 'StatModel_UPDATE_MODEL', 'TEST_ERROR', 'TRAIN_ERROR', 'TrainData_create', 'TrainData_getSubVector', 'VAR_CATEGORICAL', 'VAR_NUMERICAL', 'VAR_ORDERED', '__doc__', '__loader__', '__name__', '__package__', '__spec__']

参考

代码:https://github.com/mbeyeler/opencv-machine-learning
中文书籍技术支持:技术支持qq群: 144081101 591302926 567351477 钉钉免费群:21745728
Machine Learning for OpenCV - 2017.pdf

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容