從零開始玩人工智能—機器視覺API—01
計算機視覺是非常熱門的人工智能方向,而我國在這個領域有著非常領先的地位。也出現了非常多的開源技術例如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