· Joseph · AI & Machine Learning  · 4 min read

[Day 4] Google Vision AI - 3

今天還是繼續多玩幾個Vision AI API好了,初步教學可以看前一篇

Detech text in images

我這邊用的圖片是Google搜尋到的拉斯維加斯: las-vegas.jpg

老實說這張圖不仔細看,還看不出來有”welcome”的字眼。code的部分一樣跑範例程式

package vision

import (
  "context"
  "fmt"
  "io"
  "log"
  "os"
  vision "cloud.google.com/go/vision/apiv1"
)

func DetectText(w io.Writer, file string) error {
	ctx := context.Background()

	client, err := vision.NewImageAnnotatorClient(ctx)
	if err != nil {
		return err
	}

	f, err := os.Open(file)
	if err != nil {
		return err
	}
	defer f.Close()

	image, err := vision.NewImageFromReader(f)
	if err != nil {
		return err
	}
	annotations, err := client.DetectTexts(ctx, image, nil, 10)
	if err != nil {
		return err
	}

	if len(annotations) == 0 {
		fmt.Fprintln(w, "No text found.")
	} else {
		fmt.Fprintln(w, "Text:")
		for _, annotation := range annotations {
			fmt.Fprintf(w, "%q\n", annotation.Description)
		}
	}

	return nil
}

這邊因為我把它寫進module的緣故,所以把DetechText改成了大寫開頭,主程式只要import vision "./modules/vision"就可以使用vision.DetechText了。

package main

import (
  "os"

  vision "./modules/vision"
)

func main() {
  // vision.DetectLabel(os.Stdout, "./testdata/furniture.jpg")
  vision.DetectText(os.Stdout, "./testdata/las-vegas.jpg")
}

結果呢?來看看output: detech-text-output.jpg

果不其然有Welcome to Fabulous LAS VEGAS,至於你說怎麼會多了backstrokeTAO這些字?就大家來找碴一下好了XD

Detect faces

偉大的人臉辨識一定要來介紹一下,我這邊從flintbox抓了他的demo人臉,分成自然、開心、厭惡三種表情,把這張丟進Vision API裡訓練看看 face.jpg

要更多的臉這邊也有:https://data.vision.ee.ethz.ch/cvl/rrothe/imdb-wiki/

func DetectFaces(w io.Writer, file string) error {
  ctx := context.Background()

  client, err := vision.NewImageAnnotatorClient(ctx)
  if err != nil {
    return err
  }
  defer client.Close()

  f, err := os.Open(file)
  if err != nil {
    return err
  }
  defer f.Close()

  image, err := vision.NewImageFromReader(f)
  if err != nil {
    return err
  }
  annotations, err := client.DetectFaces(ctx, image, nil, 10)
  if err != nil {
    return err
  }
  if len(annotations) == 0 {
    fmt.Fprintln(w, "No faces found.")
  } else {
    fmt.Fprintln(w, "Faces:")
    for i, annotation := range annotations {
      fmt.Fprintln(w, "  Face", i)
      fmt.Fprintln(w, "    Anger:", annotation.AngerLikelihood)
      fmt.Fprintln(w, "    Joy:", annotation.JoyLikelihood)
      fmt.Fprintln(w, "    Surprise:", annotation.SurpriseLikelihood)
    }
  }
  return nil
}

output則長下面這樣 detech-face-output.jpg 有看到三個結果,並對三個結果進行情緒分析(生氣、開心、驚訝),左邊自然表情確實三個都不符合,中間開心的在Joy的部分為非常可能,最後右邊這張厭惡說實在也很難定義到底是不是生氣,所以只有一點點不可能。 至於有哪些可能呢?查了一下API文件發現有下面幾個:

  1. JoyLikelihood
  2. SorrowLikelihood
  3. AngerLikelihood
  4. SurpriseLikelihood
  5. UnderExposedLikelihood (曝光不足,或許可再針對這張臉做光源調整)
  6. BlurredLikelihood (模糊,或許可以針對比較清楚的臉做focus、比較不清楚的省略掉。)
  7. HeadwearLikelihood (戴頭飾?)

這個投影片第30頁有Demo了一張HeadwearLikelihood非常可能的圖,可以去體會體會。

OK!今天玩了兩個API,還把Golang整理一下,這部分就到今天結束了! 一樣看code可以到這邊 >> Github

Back to Blog

Related Posts

View All Posts »

[Day 5] Google Vision AI - 子系列最終章

今天是Google Vision AI這子系列最後一章節,我們今天要來講Vision AI的Auto ML Vision。我玩的是GCP上面的UI介面,側邊欄打開找到Vision點進去就可以看到了: AutoML-Vision.jpg

[Day 3] Google Vision AI - 2

今天來入門Google Vision AI的API,文件部分可以看這裡。練功嘛!語言部分我就來順便玩一下一直想入門的Golang。 跟著Quickstarts裡的Using client libraries走先。 打開或選擇專案 select-project.jpg 這邊要注意你的ProjectName跟ProjectID不見得會一樣,每個地方會用到不同的資訊。

[Day 2] Google Vision AI - 1

Google Vision AI分成兩個服務:AutoML Vision、Vision API,我們今天先講Vision API。 Vision API要講什麼?講什麼都比不過先來玩看看。 選擇圖片:

[Day 30] Google AI & ML Products 系列總結

這系列文章出自於一個無窮無盡的bug的解題時間,想不到如何解bug、又想不出要寫什麼主題,參考完大家的方向以後,我發現這類型的文章很少、又很實用,才下定決心透過鐵人賽推廣 Google AI & ML Products。 在這次的挑戰裡,給了自己三個目標: 更熟悉docker 開始玩Golang 入門大部分的Google AI & ML Products 但也因為Google AI & ML Products太多了,所以把它分了很多子系列進行,現在再來回顧一下這次的內容。 前面先來個提醒,如果過程中你們有Deploy model做Online predict的,如果測完一定要記得刪掉,不然你deploy的model就會一直被收費喔。