1. 程式人生 > >從零開始玩人工智能—機器視覺API—01

從零開始玩人工智能—機器視覺API—01

認知服務 機器視覺 Cognitive Services Computer Vision AI

我們使用Face API做了一些有趣的嘗試。從原理上來說,人臉識別算是計算機視覺的分支。所以,接下來我們了解一下計算機視覺就很順利成章了。

計算機視覺是非常熱門的人工智能方向,而我國在這個領域有著非常領先的地位。也出現了非常多的開源技術例如Open CV。在Azure裏,微軟提供了Computer Vision API用來幫助用戶快速實現有關機器視覺的AI應用。

目前,Azure的機器視覺能夠根據2000多個能夠識別的對象返回標簽,同時也能夠識別86類事物:

技術分享圖片

這是我用Excel做的顏色分類,怎麽樣色彩繽紛吧~微軟Docs站點的如下:

技術分享圖片

當傳遞一張圖像給機器視覺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

得,報錯了。

技術分享圖片

PIL全稱Python Imaging Library,站點在這裏:http://pythonware.com/products/pil/。查了一下,PIL貌似很久遠只支持Python 2.x?還好,有替代的分支。用pillow代替了。

>pip install matplotlib

這個庫有點大……

特殊時期,所有跨境HTTPS的流量變得極不穩定,在線pip安裝完全無法完成,於是我只能想別的辦法安裝庫了。原來,Python的庫和Raspberry等Linux系統的軟件包一樣,可以在網站上下載。這就提供了斷點續傳的可能,使得無法在線安裝的包能夠通過下載之後進行安裝。

技術分享圖片

訪問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/

查看示例代碼,我發現這個庫是可以寫文件的,那麽,不顯示在輸出,我保存為圖片文件總可以吧~

技術分享圖片

請註意,對於Analyze Image方法,除了挑選視覺功能visualFeatures,還能可選使用details和language。語言除了默認的英語,還支持簡體中文哦!這也不奇怪,計算機視覺好多使用的技術和論文都有大量華人的貢獻在。微軟還特意列出了一些:https://docs.microsoft.com/en-us/azure/cognitive-services/computer-vision/research

那麽,我們看看機器視覺怎麽看天安門前的國旗護衛隊的:

技術分享圖片

一組人站在一棟建築前……這智商貌似還不怎麽高吧……天安門都不認識?不是認識20 萬商業、政治、體育和娛樂界名人,識別全世界 9000 個自然和人工地標麽?我再試試看。


技術分享圖片

換了一張圖,嗯,識別出了天安門廣場… 返回的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)就不寫了。

技術分享圖片

matplotlib的官網在:https://matplotlib.org 大致是拿來做科學數據圖形的,很厲害。

技術分享圖片

matplotlib博大精深,有時間要好好學學了。在Google的機器學習速成課程裏,就是用了Matplotlib用作數據可視化:

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

第三方 Python 庫機器學習速成課程代碼示例使用了第三方庫提供的以下功能。無需提前熟悉這些庫;您可以在需要時查詢相關內容。Matplotlib(適合數據可視化)pyplot 模塊cm 模塊gridspec 模塊


從零開始玩人工智能—機器視覺API—01