我们使用Face API做了一些有趣的尝试。从原理上来说,人脸识别算是计算机视觉的分支。所以,接下来我们了解一下计算机视觉就很顺利成章了。

    计算机视觉是非常热门的人工智能方向,而我国在这个领域有着非常领先的地位。也出现了非常多的开源技术例如Open CV。在Azure里,微软提供了Computer Vision API用来帮助用户快速实现有关机器视觉的AI应用。

     目前,Azure的机器视觉能够根据2000多个能够识别的对象返回标签,同时也能够识别86类事物:

image

    这是我用Excel做的颜色分类,怎么样色彩缤纷吧~微软Docs站点的如下:

Analyze Categories

    当传递一张图像给机器视觉API后,会根据以上的类别、对象,返回标签、属性以及它们对应的评分。当然,除了分析图片,还可以使用人工智能识别图片的内容,使用一句话给你答复;也可以使用OCR来识别图片中的文字,识别手写文本,按照图片的内容和给定的大小自动生成合适的缩略图等等……

    感觉酷炫得无从下手吧?还好微软也给了不少示例代码~ 看示例代码可以学到好多东西,比如对json的处理…居然有这种操作…

image_caption = analysis["description"]["captions"][0]["text"].capitalize()

    居然直接就一级一级的挖到想要的数据了~学习了。

%matplotlib inline 
from PIL import Image 
from io import BytesIO 
import matplotlib.pyplot as plt

    又是一波秀操作的~不满足于输出json,这是要在照片上涂涂画画的吧?看着是要导入几个库。Python的默认安装貌似没有,老老实实安装吧。

>pip install pil

    得,报错了。

image

    PIL全称Python Imaging Library,站点在这里:http://pythonware.com/products/pil/。查了一下,PIL貌似很久远只支持Python 2.x?还好,有替代的分支。用pillow代替了。

>pip install matplotlib

    这个库有点大……

    特殊时期,所有跨境HTTPS的流量变得极不稳定,在线pip安装完全无法完成,于是我只能想别的办法安装库了。原来,Python的库和Raspberry等Linux系统的软件包一样,可以在网站上下载。这就提供了断点续传的可能,使得无法在线安装的包能够通过下载之后进行安装。

image

    访问https://pypi.python.org/pypi ,就可以搜索需要的软件包进行下载。下载之后,一样可以通过pip安装离线的软件包。

>pip install c:\download\matplotlib-2.1.2-cp35-cp35m-win_amd64.whl

    安装matplotlib的时候,自然会要求安装依存的其他软件包,有的小,直接就下载安装了,有的比matplotlib还大,只能再次离线下载。如果你也遇到和我一样的困扰,这里有包的依存关系,可以一起下载了安装。

matplotlib-2.1.2-cp35-cp35m-win_amd64.whl
     cycler-0.10.0-py2.py3-none-any.whl 
     pytz-2018.3-py2.py3-none-any.whl
     pyparsing-2.2.0-py2.py3-none-any.whl
     python_dateutil-2.6.1-py2.py3-none-any.whl
     numpy-1.14.1-cp35-none-win_amd64.whl
     pyparsing-2.2.0-py2.py3-none-any.whl

    安装完包,自然就回到代码进行运行了。可是…又报错了…

%matplotlib inline

^

SyntaxError: invalid syntax

    仔细研究一番,原来这种写法是需要jupyter notebook或者ipython console的,貌似试运行在’osx’, ‘qt4’, ‘qt5’, ‘gtk3’, ‘wx’, ‘qt’, ‘gtk’, ‘tk’系统下,估计写Doc的人用的是Mac OS~更详细的问答可以看这里:

https://stackoverflow.com/questions/30878666/matplotlib-python-inline-on-off

https://stackoverflow.com/questions/47007130/matplotlib-inline-error-in-python-3-6-2

    对着屏幕上我特别喜欢的Visual Studio Code,难道我就木有办法了?不能放弃,我继续了解matplotlib的用法,终于有一篇blog给到我提示了:

https://www.data-blogger.com/2017/11/15/python-matplotlib-pyplot-a-perfect-combination/

    查看示例代码,我发现这个库是可以写文件的,那么,不显示在输出,我保存为图片文件总可以吧~

image

    请注意,对于Analyze Image方法,除了挑选视觉功能visualFeatures,还能可选使用details和language。语言除了默认的英语,还支持简体中文哦!这也不奇怪,计算机视觉好多使用的技术和论文都有大量华人的贡献在。微软还特意列出了一些:https://docs.microsoft.com/en-us/azure/cognitive-services/computer-vision/research

    那么,我们看看机器视觉怎么看天安门前的国旗护卫队的:

temp

    一组人站在一栋建筑前……这智商貌似还不怎么高吧……天安门都不认识?不是认识20 万商业、政治、体育和娱乐界名人,识别全世界 9000 个自然和人工地标么?我再试试看。


temp1

    换了一张图,嗯,识别出了天安门广场… 返回的json数据如下:

{
  "categories": [
    {
      "detail": {
        "landmarks": [
          {
            "confidence": 0.9956175088882446,
            "name": "Tiananmen Square"
          }
        ]
      },
      "name": "building_street",
      "score": 0.7421875
    },
    {
      "detail": {
        "landmarks": [
          {
            "confidence": 0.9956175088882446,
            "name": "Tiananmen Square"
          }
        ]
      },
      "name": "outdoor_",
      "score": 0.01171875
    }
  ],
  "color": {
    "accentColor": "0051B1",
    "dominantColorBackground": "Blue",
    "dominantColorForeground": "Black",
    "dominantColors": [
      "Blue", "Grey"
    ],
    "isBwImg": false
  },
  "description": {
    "captions": [
      {
        "confidence": 0.8968637267424504,
        "text": "a large red building with Tiananmen Square in the background"
      }
    ],
    "tags": [
      "building", "outdoor", "red", "sitting", "large", "clock", "front",
      "street", "top", "parked", "train", "white", "sign", "track", "old",
      "station", "city", "man", "standing", "tower", "bus"
    ]
  },
  "metadata": {
    "format": "Jpeg", "height": 273, "width": 820
  },
  "requestId": "8e1c16f7-3d03-4a0f-8e2f-b50150374959"
}

    不是说支持简体中文么?是的:

{
  "categories": [
    {
      "name": "\u5efa\u7b51_\u8857\u9053",
      "score": 0.7421875
    },
    {
      "name": "\u6237\u5916_",
      "score": 0.01171875
    }
  ],
  "metadata": {
    "format": "Jpeg",
    "height": 273,
    "width": 820
  },
  "requestId": "14f74b94-8dbe-491c-966f-9fcdd0c599f3",
  "tags": [
    {
      "confidence": 0.9926539659500122,
      "name": "\u5efa\u7b51"
    },
    {
      "confidence": 0.9916537404060364,
      "name": "\u6237\u5916"
    },
    {
      "confidence": 0.9839764833450317,
      "name": "\u5929\u7a7a"
    },
    {
      "confidence": 0.8205077052116394,
      "name": "\u7ea2"
    }
  ]
}

    “你骗我,哪有中文啊?” 中文其实以UNICODE提供了,把\u5929\u7a7a这种放到转换网站转换一下:http://www.pdtools.net/tools/unicode.jsp 限于篇(Lan)幅(Duo)就不写了。

image

    matplotlib的官网在:https://matplotlib.org 大致是拿来做科学数据图形的,很厉害。

image

    matplotlib博大精深,有时间要好好学学了。在Google的机器学习速成课程里,就是用了Matplotlib用作数据可视化:

    https://developers.google.cn/machine-learning/crash-course/

第三方 Python 库机器学习速成课程代码示例使用了第三方库提供的以下功能。无需提前熟悉这些库;您可以在需要时查询相关内容。Matplotlib(适合数据可视化)pyplot 模块cm 模块gridspec 模块