📃
【Amazon Rekognition】 aws-sdk-goでテキストを検出する
はじめに
Amazon Rekognitionについて前回に続いての、アウトプットです。
今回はテキストを検出してみます。
環境
- go 1.17
- github.com/aws/aws-sdk-go v1.42.9
今回検証する画像
1枚目
2枚目
3枚目
この3枚の写真からどのテキストが検出されるか検証してみます。
最初の画像はAWS Rekognitonのサンプル画像です。
2枚目はAWS Rekogntionページです。
3枚目は家にあった割り箸です。
では、早速やってみます。
ソースコード
package main
import (
"fmt"
"io/ioutil"
"log"
"os"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/rekognition"
)
const path = "image/"
//ここで画像の名前を定義します
var imageName1 = path + "cup.png"
var imageName2 = path + "Rekognition.png"
var imageName3 = path + "割り箸.jpg"
func main() {
// AWSセッション作成
sess := session.Must(session.NewSession())
// Rekognitionクライアントを作成
svc := rekognition.New(sess, aws.NewConfig().WithRegion("ap-northeast-1"))
// 画像ファイルを取得。ここに上記で指定した画像の名前を入力する
file, err := os.Open(imageName3)
if err != nil {
log.Fatal(err)
}
// 最後に画像ファイルを閉じます
defer file.Close()
// 画像ファイルのデータを読み込み
bytes, err := ioutil.ReadAll(file)
if err != nil {
fmt.Println(err.Error())
return
}
// svc.DetectTextに渡すパラメータを設定
params := &rekognition.DetectTextInput{
Image: &rekognition.Image{
Bytes: bytes,
},
}
// svc.DetectTextを実行
result, err := svc.DetectText(params)
if err != nil {
fmt.Println(err.Error())
return
}
//取得出来たテキストだけ出力
for _, text := range result.TextDetections {
fmt.Println(*text.DetectedText)
}
}
画像を配列にしてfor文で回すと、どの画像のテキストか分からなくなると思ったので、
1枚ずつ実行しました。
以下が結果です。
出力結果
1枚目
IT'S
MONDAY
but keep
Smiling
IT'S
MONDAY
but
keep
Smiling
2枚目
Amazon Rekognition
X
Rekognition X- <a target='_blank'
href='https://docs.aws.amazon.com/rekognition/latest/dg/text-detection.h<a> Learn more
-
Amazon
Rekognition
X
Rekognition
X-
<a
target='_blank'
href='https://docs.aws.amazon.com/rekognition/latest/dg/text-detection.h<a>
Learn
more
-
3枚目
:bb
:PP
Otemoto B
:bb
:PP
Otemoto
B
という結果でした。
残念ながら日本語は検出出来ないようです。
otemotoは検出出来ました。
今回の写真にはありませんでしたが、英字の他に数字も検出出来るようです。
詳細はこちらをご覧ください。
さいごに
Rekognitonは簡単に使えて便利ですね。
日本語も検出してくれたら、もっと使い道が広がるのになぁ〜と思いました。
カスタムラベルというのがあって、日本語を機械学習させる方法もあるらしいです。
参考
Discussion