Aidemy成果物 簡単な赤ちゃん危険察知アプリの一部を作ってみた

1.自己紹介、受講に至った経緯

育休中に念願のAIを学びたく、Aidemy受講を決定。
【受講期間】 6ヶ月
【講座】 AIアプリ開発講座
静岡→イギリス→東京→大阪
ブログを書くのは初めて。sns好きそうに見られがち。ニガテだけどね。
人生楽しく生きたい。
在宅勤務で仕事をしたい。 結局これ1番

2.概要

・どんな人に読んで欲しいか

プログラミング初心者、育児に興味ある人

・この記事に書くこと、わかること

初心者の主観で、アプリを作成していく流れがわかります。

3.作成したプログラム

赤ちゃんの顔に布が被っているかいないかの判別機
 !呼吸ができないと危険!
赤ちゃんは自分で危険を回避する事はできません
https://sara-r3s2.onrender.com/

・作成に至った経緯

育児=大変 という概念を変えていきたい
ほぼワンオペ、誰かに頼めないなら、頼れる便利道具が欲しい。
本当はこんなの作りたい。賛同してくれる人いないのかな

こんな高技術、会社を作るレベルなんですって。研究とか、諸々。Pythonをスーパーハイテク機能を簡単に使えるものだと、勘違いしていた初心者です。
という事で、こんな素晴らしい機能の一部を自作してみる事に決定。

4.課題

・早速の課題

何人かのチューターの方からも言われましたが、赤ちゃん系のデータセットは少ない。理由、癌や医療系と違い、緊急性が無い事が多い。
自身も、育児を楽に~と考えたくらいなので、なくても困らないので研究している会社が少ないのでしょうか?

・解決

せっかくAidemyを受講したので、精度よりも、学習した事をアウトプットしてみたい。スクレイピングと水増しで、自身でデータを作成することにしてみた。

5.データの作成

<赤ちゃんの寝ている姿をスクレイピング>

#必要な機能のインストール
!pip install icrawler
#pythonライブラリの「icrawler」でBing用モジュールをインポート
from icrawler.builtin import BingImageCrawler
#赤ちゃんの寝ている姿をキーワードとするための変数を作成
search_word = "baby_sleep"
#ダウンロードするキーワード
crawler = BingImageCrawler(storage={'root_dir': search_word})
#ダウンロードする画像の最大枚数は300枚
crawler.crawl(keyword=search_word, max_num=300)

<赤ちゃんの顔に布がかかっている写真が少ない為、画像の水増しを行う>

#14枚の元画像を入手

#1枚辺り20枚をランダムに生成
from tensorflow.keras.utils import load_img, img_to_array
from keras.preprocessing.image import ImageDataGenerator
import matplotlib.pyplot as plt
import numpy as np
import os
import glob

#1枚あたり20枚の画像を水増し
N_img = 20

#入力画像の保存先パス
#input_path = "C:/github/sample/python/keras/06_image_extend/sample01_data/input/"
input_path = "./drive/MyDrive/水増し/"
#input_path = "C:/Users/hona1/OneDrive/デスクトップ/Sentiment_Analysis/static/images/covered_images/"
files = glob.glob(input_path + '/*.png')

#出力画像の保存先パス
output_path = "./drive/MyDrive/水増し/create_data/"
プ/Sentiment_Analysis/static/images/increase_covered_images/"
if os.path.isdir(output_path) == False:
os.mkdir(output_path)
for i, file in enumerate(files):
img = load_img(file)
x = img_to_array(img)
x = np.expand_dims(x, axis=0)

# ImageDataGeneratorの生成
datagen = ImageDataGenerator(
zca_epsilon=1e-06,   # 白色化のイプシロン
rotation_range=10.0, # ランダムに回転させる範囲
width_shift_range=0.0, # ランダムに幅をシフトさせる範囲
height_shift_range=0.0, # ランダムに高さをシフトさせる範囲
brightness_range=None, # ランダムに明るさを変化させる範囲
zoom_range=0.0,        # ランダムにズームさせる範囲
horizontal_flip=True, # ランダムに水平方向に反転させる
vertical_flip=True, # ランダムに垂直方向に反転させる
)

# 1枚あたり20枚の画像を水増し生成
dg = datagen.flow(x, batch_size=1, save_to_dir=output_path, save_prefix='img', save_format='jpg')
for i in range(N_img):
    batch = dg.next()

モデルの層はシンプル
2分類の為か、深い層にしたら過学習しすぎてしまったり精度が落ちた。
一応微妙に布が被っているか、いないか、どっちにも取れそうな画像を各3枚ずつ程追加してみた。

top_model = Sequential()
top_model.add(Flatten(input_shape=vgg16.output_shape[1:]))
top_model.add(Dense(256, activation='relu'))
top_model.add(Dropout(0.5))
top_model.add(Dense(2, activation='softmax'))
Test loss: 0.5831676125526428
Test accuracy: 0.7589285969734192

少ないデータを水増しして、同じような画像が多い為、精度は思うようなものではないが、アウトプットできた事に楽しみを覚える。

6.デプロイ

HTMLとCSSでちょっとデザインを楽しみながら遂にデプロイ!
やはりここでも出ました、大きな課題。
勉強がてら何度かデプロイして、いざ本番のファイルをデプロイしようとしたら↓↓↓↓↓↓↓↓

error: remote origin already exists.

講師の方に相談し、全部リセットしようという事に。
Git、Render共にアカウントを再度作成。もちろん別のメールアドレスを使用。
それでもまた出る同じエラー、既に存在しているなんてあり得ない!と思い検索検索…以下のサイトに助けられました!

考えてみればものすごく簡単な事で、見事解決!ありがとう!これを書いてくれた人。
So a possible solution here would be simply removing the existing remote:

 
git remote
git remote -v
git remote remove origin

👏!!

7.今後

赤ちゃんの泣いてる声で感情分析とか、動画での分析とか、興味があるもの沢山あるので、これからも趣味として勉強を続けていきたい。

この記事が気に入ったらサポートをしてみませんか?