如何用Python和深度神经网络识别图像?

简介:

只需要10几行Python代码,你就能自己构建机器视觉模型,对图片做出准确辨识和分类。快来试试吧!


视觉


进化的作用,让人类对图像的处理非常高效。


这里,我给你展示一张照片。


0?wx_fmt=jpeg


如果我这样问你:


你能否分辨出图片中哪个是猫,哪个是狗?


你可能立即会觉得自己遭受到了莫大的侮辱。并且大声质问我:你觉得我智商有问题吗?!


息怒。


换一个问法:


你能否把自己分辨猫狗图片的方法,描述成严格的规则,教给计算机,以便让它替我们人类分辨成千上万张图片呢?


对大多数人来说,此时感受到的,就不是羞辱,而是压力了。


如果你是个有毅力的人,可能会尝试各种判别标准:图片某个位置的像素颜色、某个局部的边缘形状、某个水平位置的连续颜色长度……


你把这些描述告诉计算机,它果然就可以判断出左边的猫和右边的狗了。


问题是,计算机真的会分辨猫狗图片了吗?


我又拿出一张照片给你。


0?wx_fmt=jpeg


你会发现,几乎所有的规则定义,都需要改写。


当机器好不容易可以用近似投机取巧的方法正确分辨了这两张图片里面的动物时,我又拿出来一张新图片……


0?wx_fmt=png


几个小时以后,你决定放弃。


别气馁。


你遭遇到的,并不是新问题。就连大法官,也有过同样的烦恼。


0?wx_fmt=jpeg


1964年,美国最高法院的大法官Potter Stewart在“Jacobellis v. Ohio”一案中,曾经就某部电影中出现的某种具体图像分类问题,说过一句名言“我不准备就其概念给出简短而明确的定义……但是,我看见的时候自然会知道”(I know it when I see it)。


原文如下:


I shall not today attempt further to define the kinds of material I understand to be embraced within that shorthand description (“hard-core pornography”), and perhaps I could never succeed in intelligibly doing so. But I know it when I see it, and the motion picture involved in this case is not that.


考虑到精神文明建设的需要,这一段就不翻译了。


人类没法把图片分辨的规则详细、具体而准确地描述给计算机,是不是意味着计算机不能辨识图片呢?


当然不是。


2017年12月份的《科学美国人》杂志,就把“视觉人工智能”(AI that sees like humans)定义为2017年新兴技术之一。


0?wx_fmt=jpeg


你早已听说过自动驾驶汽车的神奇吧?没有机器对图像的辨识,能做到吗?


你的好友可能(不止一次)给你演示如何用新买的iPhone X做面部识别解锁了吧?没有机器对图像的辨识,能做到吗?


0?wx_fmt=jpeg


医学领域里,计算机对于科学影像(如X光片)的分析能力,已经超过有多年从业经验的医生了。没有机器对图像的辨识,能做到吗?


0?wx_fmt=png


你可能一下子觉得有些迷茫了——这难道是奇迹?


不是。


计算机所做的,是学习。


通过学习足够数量的样本,机器可以从数据中自己构建模型。其中,可能涉及大量的判断准则。但是,人类不需要告诉机器任何一条。它是完全自己领悟和掌握的。


你可能会觉得很兴奋。


那么,下面我来告诉你一个更令你兴奋的消息——你自己也能很轻易地构建图片分类系统!


不信?请跟着我下面的介绍,来试试看。


数据


咱们就不辨识猫和狗了,这个问题有点不够新鲜。


咱们来分辨机器猫,好不好?


对,我说的就是哆啦a梦。


0?wx_fmt=png


把它和谁进行区分呢?


一开始我想找霸王龙,后来觉得这样简直是作弊,因为他俩长得实在差别太大。


0?wx_fmt=png


既然哆啦a梦是机器人,咱们就另外找个机器人来区分吧。


一提到机器人,我立刻就想起来了它。


0?wx_fmt=png


对,机器人瓦力(WALLE)。


我给你准备好了119张哆啦a梦的照片,和80张瓦力的照片。图片已经上传到了这个Github项目(https://github.com/wshuyi/demo-python-image-classification)。


请点击这个链接(https://link.jianshu.com/?t=https%3A%2F%2Fgithub.com%2Fwshuyi%2Fdemo-python-image-classification%2Farchive%2Fmaster.zip),下载压缩包。然后在本地解压。作为咱们的演示目录。


解压后,你会看到目录下有个image文件夹,其中包含两个子目录,分别是doraemon和walle。


0?wx_fmt=png


打开其中doraemon的目录,我们看看都有哪些图片。


0?wx_fmt=png


可以看到,哆啦a梦的图片真是五花八门。各种场景、背景颜色、表情、动作、角度……不一而足。


这些图片,大小不一,长宽比例也各不相同。


我们再来看看瓦力,也是类似的状况。


0?wx_fmt=png


数据已经有了,下面我们来准备一下环境配置。


环境


我们使用Python集成运行环境Anaconda。


请到这个网址(https://www.anaconda.com/downloads)下载最新版的Anaconda。下拉页面,找到下载位置。根据你目前使用的系统,网站会自动推荐给你适合的版本下载。我使用的是macOS,下载文件格式为pkg。


0?wx_fmt=png


下载页面区左侧是Python 3.6版,右侧是2.7版。请选择2.7版本。


双击下载后的pkg文件,根据中文提示一步步安装即可。


0?wx_fmt=png


安装好Anaconda后,我们需要安装TuriCreate。


请到你的“终端”(Linux, macOS)或者“命令提示符”(Windows)下面,进入咱们刚刚下载解压后的样例目录。


执行以下命令,我们来创建一个Anaconda虚拟环境,名字叫做turi。


conda create -n turi python=2.7 anaconda


然后,我们激活turi虚拟环境。


source activate turi


在这个环境中,我们安装最新版的TuriCreate。


pip install -U turicreate



转自:http://blog.csdn.net/nkwshuyi/article/details/78956890


目录
相关文章
|
16天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
16天前
|
程序员 开发者 Python
Python网络编程基础(Socket编程) 错误处理和异常处理的最佳实践
【4月更文挑战第11天】在网络编程中,错误处理和异常管理不仅是为了程序的健壮性,也是为了提供清晰的用户反馈以及优雅的故障恢复。在前面的章节中,我们讨论了如何使用`try-except`语句来处理网络错误。现在,我们将深入探讨错误处理和异常处理的最佳实践。
|
3天前
|
机器学习/深度学习 算法 算法框架/工具
数据分享|PYTHON用KERAS的LSTM神经网络进行时间序列预测天然气价格例子
数据分享|PYTHON用KERAS的LSTM神经网络进行时间序列预测天然气价格例子
24 0
|
1天前
|
机器学习/深度学习 存储 监控
数据分享|Python卷积神经网络CNN身份识别图像处理在疫情防控下口罩识别、人脸识别
数据分享|Python卷积神经网络CNN身份识别图像处理在疫情防控下口罩识别、人脸识别
10 0
|
3天前
|
存储 网络协议 关系型数据库
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
|
3天前
|
机器学习/深度学习 算法 Python
Python用RNN神经网络:LSTM、GRU、回归和ARIMA对COVID19新冠疫情人数时间序列预测
Python用RNN神经网络:LSTM、GRU、回归和ARIMA对COVID19新冠疫情人数时间序列预测
47 12
|
7天前
|
机器学习/深度学习 TensorFlow 算法框架/工具
使用Python构建简单的图像识别应用
本文将介绍如何利用Python语言及其相关库来构建一个简单但功能强大的图像识别应用。通过结合OpenCV和深度学习模型,我们将展示如何实现图像的特征提取和分类,从而实现对图像中物体的自动识别和分类。无需复杂的算法知识,只需一些基本的Python编程技巧,你也可以轻松地创建自己的图像识别应用。
|
8天前
|
机器学习/深度学习 Python
Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析
Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析
19 0
|
8天前
|
JSON 网络协议 API
Python网络编程面试题精讲
【4月更文挑战第15天】本文介绍了Python网络编程的面试重点,包括基础Socket编程、HTTP协议与requests库、异步编程与asyncio库。通过实例解析常见面试题,强调了非阻塞套接字、异常处理、HTTP状态码检查以及异步任务管理等关键点。提供代码示例帮助读者巩固概念,助力面试准备。
16 0
|
10天前
|
机器学习/深度学习 存储 测试技术
使用PYTHON中KERAS的LSTM递归神经网络进行时间序列预测
使用PYTHON中KERAS的LSTM递归神经网络进行时间序列预测
19 0