#1.概要
CNNをつかって、家のエアコンのオン・オフを見分けるAIをつくりました。
#2.はじめに
Aidemyで「ディープラーニングで画像認識モデルを作ってみよう!」の受講ルートを勉強しました。なにかアウトプットをしようと思って、この記事を書きました。
ぼくはエアコンのスイッチを消したか覚えてなくて気になることが多いです。そこで、AIでエアコンのオン・オフを判別できたら便利だなと思い作ってみました。
強迫性障害のひとにとってはすごく大事な問題です。友達に強迫性障害のような症状をもっているひとがいて、「ドアのカギを何度も確認したくなって辛い」と言っていました。
強迫性障害では、自分でもつまらないことだとわかっていても、そのことが頭から離れない、わかっていながら何度も同じ確認をくりかえしてしまうことで、日常生活にも影響が出てきます。意志に反して頭に浮かんでしまって払いのけられない考えを強迫観念、ある行為をしないでいられないことを強迫行為といいます。たとえば、不潔に思えて過剰に手を洗う、戸締りなどを何度も確認せずにはいられないといったことがあります。
(強迫性障害 厚生労働省を参照)
#3.準備
##3.1写真を撮る
自分の家のエアコンのオン・オフを見分けたいので、オン・オフの写真をそれぞれ300枚ずつ撮りました。
また、エアコンの前にカメラを取り付けて実用化もしたいと思っています。だから、カメラを取り付けられそうなエアコン前の天井付近からの写真だけにしました。
ON | OFF |
---|---|
##3.2実行環境
GPUが無料で使えるGoogle Colaboratory上で実行しました。GPUをつかうとCPUより数十倍も学習速度が速くなりとても便利です。
#4.コード
ひとによって変わりそうなところだけ載せました
##4.1画像を行列表示に変換
Udemyの【画像判定AI自作にチャレンジ!】TensorFlow・Keras・Python・Flaskで作る機械学習アプリ開発入門で勉強しました。
classes = ["on", "off"]
num_classes = len(classes)
image_size = 100
##画像の読み込み
X = []
Y = []
for index, classlabel in enumerate(classes):
photos_dir = "./" + classlabel
files = glob.glob(photos_dir + "/*.JPG")
for i, file in enumerate(files):
if i >= 301: break
image = Image.open(file)
image = image.convert("RGB")
image = image.resize((image_size, image_size))
data = np.asarray(image)
X.append(data)
Y.append(index)
X = np.array(X)
Y = np.array(Y)
##4.2 CNN
Aidemyの「CNNを用いた画像認識」で勉強したものを少し変えています。
model = Sequential()
model.add(Conv2D(32,(3,3), padding='same', input_shape=X_train.shape[1:]))
model.add(Activation('relu'))
model.add(Conv2D(32,(3,3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))
model.add(Conv2D(64,(3,3), padding='same'))
model.add(Activation('relu'))
model.add(Conv2D(64,(3,3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dense(num_classes))
model.add(Activation('softmax'))
opt = keras.optimizers.rmsprop(lr=0.0001, decay=1e-6)
model.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy'])
model.fit(X_train, y_train, batch_size=16, epochs=2, verbose=1)
#5.結果
450枚の画像で学習して150枚の画像でテストしたところ、正解率は97.3%でした
テスト画像の最初の10枚で結果を確認すると、すべて正解でした。(0がオンで、1がオフ)
写真が小さくてすみません
#6.おわりに
エアコンの吹き出し口が開いてるか閉じてるかだけのちがいだったので、見分けるのは難しいかなあと思っていましたが、結構いい精度になりました。ほとんど同じ位置からの写真だったので簡単だったのかもしれません。
QiitaやTwitterに感想やアドバイスなどのコメントをいただけると嬉しいです。
家のエアコンのオン・オフを見分けるAIをつくりました❗️
— IT暇人@AIプログラマ,ニート (@it31415) 2018年8月19日
これでエアコンを消したかどうか気になって家に戻ることはなくなります
人生ではじめての記事をQiitaに書いてみました
拡散してもらえると嬉しいです😊#Aidemynote
「エアコン消したっけ?」をAIでなくそう! https://t.co/ptay5WIbNM pic.twitter.com/stSiAbsUeD