[Day 4] Google Vision AI - 3
Published:
Joseph
今天還是繼續多玩幾個Vision AI API好了,初步教學可以看前一篇
我這邊用的圖片是Google搜尋到的拉斯維加斯:
老實說這張圖不仔細看,還看不出來有”welcome”的字眼。code的部分一樣跑範例程式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| 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
了。
1 2 3 4 5 6 7 8 9 10 11 12
| package main
import ( "os"
vision "./modules/vision" )
func main() { vision.DetectText(os.Stdout, "./testdata/las-vegas.jpg") }
|
結果呢?來看看output:
果不其然有Welcome to Fabulous LAS VEGAS,至於你說怎麼會多了backstroke、TAO這些字?就大家來找碴一下好了XD
偉大的人臉辨識一定要來介紹一下,我這邊從flintbox抓了他的demo人臉,分成自然、開心、厭惡三種表情,把這張丟進Vision API裡訓練看看
要更多的臉這邊也有:https://data.vision.ee.ethz.ch/cvl/rrothe/imdb-wiki/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| 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則長下面這樣
有看到三個結果,並對三個結果進行情緒分析(生氣、開心、驚訝),左邊自然表情確實三個都不符合,中間開心的在Joy的部分為非常可能,最後右邊這張厭惡說實在也很難定義到底是不是生氣,所以只有一點點不可能。
至於有哪些可能呢?查了一下API文件發現有下面幾個:
- JoyLikelihood
- SorrowLikelihood
- AngerLikelihood
- SurpriseLikelihood
- UnderExposedLikelihood (曝光不足,或許可再針對這張臉做光源調整)
- BlurredLikelihood (模糊,或許可以針對比較清楚的臉做focus、比較不清楚的省略掉。)
- HeadwearLikelihood (戴頭飾?)
這個投影片第30頁有Demo了一張HeadwearLikelihood非常可能的圖,可以去體會體會。
OK!今天玩了兩個API,還把Golang整理一下,這部分就到今天結束了!
一樣看code可以到這邊 >> Github