[ Golang ] Go言語入門~ 画像を解析しよう ~

この記事は約4分で読めます。

 

以前は、予備知識についてでした。

 

[ Golang ] Go言語 入門~ 勉強方法 ~
本記事ではこれからGoを使ったプロダクトを作っていく上で、基本文法や、使い方等を資料としてまとめます。Go言語の勉強方法として、これをまず、予備知識として、同時進行または、先にやってみてください。

 

今回からGo言語を学びながら、実際に使えるツールやwebサイトを作っていきます。

まず最初はそもそも、なぜ作りながら学ぶのが良いのでしょうか。

作りながら学ぶ目的

  1. モチベーションを維持
  2. パッケージを知ることで、制作に必要な機能を学ぶ

文法をずっとやるより、制作物を作りながら学ぶ方がモチベーションを維持できます。

また、その際、パッケージを利用することで、必要な機能を学ぶことができます。

Go言語を楽しみましょう!

この記事の目的

パッケージを使うことで、全てを一から理解せずともプロダクトを作ることができる

ということを知ってもらうことです。

 

それでは、まず、day1、最初は画像を解析するプログラムを書きます。

一見、難しそうですが、実は簡単に作れます。それではみていきましょう

画像解析プログラムを簡単に実装する方法

パッケージとして、色々な優秀なエンジニアがプログラムを公開してくれています。それを使うことで、効率良く作成することができます。

どのパッケージを使うのか

github.com/rwcarlsen/goexif

です。

パッケージの使い方

パッケージを使うためには、自分のパソコンにパッケージをダウンロードしてくる必要があります。Goでは以下のように記述することで、ほしいパッケージを取得できます。しかし、今回はモジュールモードなので、go mod init していれば、自動で取ってきてくれます。

go get github.com/rwcarlsen/goexif

GoDocで確認する 

Goexif/exif

例えば、後で使うLatLongという関数を見てみましょう。

とあります。このように、確認することで自分が使いたい機能について、詳しく書いてあります。

実装

package main

import (
	"fmt"
	"os"

	"github.com/rwcarlsen/goexif/exif"
)

func main() {
	if len(os.Args) == 1 {
		fmt.Printf("Use: %v photo\n", os.Args[0])
	} else {
		f, err := os.Open(os.Args[1])
		if err != nil {
			fmt.Fprintf(os.Stderr, "file: %v\n", err)
			os.Exit(1)
		}
		x, err := exif.Decode(f)
		if err != nil {
			fmt.Fprintf(os.Stderr, "Decode: %v\n", err)
			os.Exit(1)
		}
		fmt.Printf("%+v", x)
		lat, long, err := x.LatLong()
		if err != nil {
			fmt.Fprintf(os.Stderr, "LatLong: %v\n", err)
			os.Exit(1)
		} else {
			fmt.Fprintln(os.Stdout, f.Name())
			fmt.Fprintln(os.Stdout, fmt.Sprintf("lat:\t%v\nlong:\t%v", lat, long))
			os.Exit(0)
		}
	}
}

 

軽く説明

11行目のos.Argsというのは、go言語が標準で実装しているパッケージ”os”というものを使っていて、osの関連の処理を実行することができます。os.Argsは実行コマンドの引数の配列が入っています。例えば、go run <file名>.go a b cだったら、[“a”,”b”,”c”]というふうに、配列で入っています。

ここでの処理は”引数が存在する=ファイルを指定している”というのが条件になっています。指定したファイルは今回だと画像を指しています。

14行目のos.Openは、ファイルを開くときのコマンドです。これで、画像ファイルを開いています。

19行目から、goexifのパッケージを使った処理です。ここから、14行目で開いた画像を解析しています。

実行結果

画像に含まれている画像を解析しました。

写真の中には緯度経度も含まれているものもあるため、写真を撮った場所がわかったりします。

悪用厳禁です。

 

[Go]Go言語入門~記事一覧~

最後に

今回は画像を解析してみました。

今回初めに伝えたかったのは、

他人が作った、パッケージを使うと簡単に機能を実装することができる。

ということです。

是非使ってみてください。

それでは。

 

タイトルとURLをコピーしました