Python×医療事務(×トロント)

#医療 / #医療事務 / #IT / #トロント / #歯科助手 / #のんびり / #備忘録 / #趣味

顔写真から年齢を推定/CNN

AI Academy | テキストを参考に顔写真で年齢推定

↓UTKファイルをダウンロード

https://drive.google.com/drive/folders/0BxYys69jI14kU0I1YUQyY1ZDRUE

ダウンロードしたファイルを右クリックしzipに変換 または 名前をUTKFace.zipに変更

Googlecolabにアップロード

f:id:chocolate22554:20210228162218p:plain

 

アップロードに結構 時間かかる

 

アップロード後、ファイル右クリック パスをコピー ○○の部分に貼り付け

z = zipfile.ZipFile('○○')

f:id:chocolate22554:20210228162608p:plain

 

エラー発生


f:id:chocolate22554:20210228162816p:plain

UTKFaceをFinder内で一旦解凍し改めてzip化し直した

名前はUTKFace 2.zip  に変わった

f:id:chocolate22554:20210228170322p:plain

 

 

するとなんかのダウンロードが始まった

エラー内にある train set?なんかtrain関係の何かがそもそもダウンロードされてなかった?

f:id:chocolate22554:20210228170303p:plain

 

そして出来ました😂

f:id:chocolate22554:20210228174001p:plain

f:id:chocolate22554:20210228174025p:plain

 

些細なことで出来ないこともあるけど些細なことで出来るからそれが醍醐味ですね^^

 

とりあえずコツコツ作ってどこかでアイデアを収束させたい

 

 

 

↓全コード

 

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import os, zipfile, io, re
from PIL import Image
from sklearn.model_selection import train_test_split
import keras
from keras.models import Sequential, Model, load_model
from keras.layers.convolutional import Conv2D, MaxPooling2D
from keras.layers.core import Dense, Dropout, Activation, Flatten
from keras.layers.pooling import GlobalAveragePooling2D
from keras.callbacks import EarlyStopping, ReduceLROnPlateau
from keras.preprocessing.image import ImageDataGenerator

image_size=100 # 入力画像のサイズ

# ZipFile()で.zipファイルを解凍
z = zipfile.ZipFile('/content/UTKFace 2.zip')
imgfiles = [ x for x in z.namelist() if re.search(r"^UTKFace.*jpg$", x)]

X=
Y=

for imgfile in imgfiles:
image = Image.open(io.BytesIO(z.read(imgfile)))
image = image.convert('RGB')
image = image.resize*1
data = np.asarray(image)
file = os.path.basename(imgfile)
# split()を用いてファイル名から年齢を取得
file_split = [i for i in file.split('_')]
X.append(data)
Y.append(int(file_split[0]))
z.close()

X = np.array(X)
Y = np.array(Y)

# print(X.shape, Y.shape)

# trainデータとtestデータに分割
X_train, X_test, y_train, y_test = train_test_split(
X,
Y,
random_state = 0,
test_size = 0.2
)
# print(X_train.shape, y_train.shape, X_test.shape, y_test.shape)

# データ型の変換&正規化
X_train = X_train.astype('float32') / 255
X_test = X_test.astype('float32') / 255

# trainデータからvalidデータを分割
X_train, X_val, y_train, y_val = train_test_split(
X_train,
y_train,
random_state = 0,
test_size = 0.2
)
# print(X_train.shape, y_train.shape, X_val.shape, y_val.shape)

# CNN
def create_model(X, y):
model = Sequential()
model.add(Conv2D(32, (3, 3), padding='same',input_shape=X.shape[1:], activation='relu'))
model.add(Conv2D(32, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (3, 3), padding='same', activation='relu'))
model.add(Flatten()) # 1次元ベクトルに変換
model.add(Dense(64, activation='relu'))
model.add(Dense(1))
model.compile(loss='mse',optimizer='Adam',metrics=['mae'])
return model

# 学習過程を可視化するための関数
def plot_history(history):
plt.plot(history.history['loss'],"o-",label="loss",)
plt.plot(history.history['val_loss'],"o-",label="val_loss")
plt.title('model loss')
plt.xlabel('epoch')
plt.ylabel('loss')
plt.legend(loc='upper right')
plt.show()
 
# Data Augmentation
datagen = ImageDataGenerator(
featurewise_center = False,
samplewise_center = False,
featurewise_std_normalization = False,
samplewise_std_normalization = False,
zca_whitening = False,
rotation_range = 0,
width_shift_range = 0.1,
height_shift_range = 0.1,
horizontal_flip = True,
vertical_flip = False
)

# EarlyStopping
early_stopping = EarlyStopping(
monitor = 'val_loss',
patience = 10,
verbose = 1
)

# reduce learning rate
reduce_lr = ReduceLROnPlateau(
monitor = 'val_loss',
factor = 0.1,
patience = 3,
verbose = 1
)

# 学習
model = create_model(X_train, y_train)
history = model.fit_generator(
datagen.flow(X_train, y_train, batch_size = 128),
steps_per_epoch = X_train.shape[0] // 128,
epochs = 50,
validation_data = (X_val, y_val),
callbacks = [early_stopping, reduce_lr],
shuffle = True,
verbose = 1)

model.save('age_prediction.hdf5')

# モデルの読み込み
model = load_model('age_prediction.hdf5')

# testデータ30件の予測値
preds=model.predict(X_test[0:30])

# 正解値&予測値を出力
plt.figure(figsize=(16, 6))
for i in range(30):
plt.subplot(3, 10, i+1)
plt.axis("off")
pred = round(preds[i][0],1)
true = y_test[i]
if abs(pred - true) < 3.0:
plt.title(str(true) + '\n' + str(pred))
else:
plt.title(str(true) + '\n' + str(pred), color = "red")
plt.imshow(X_test[i])
plt.show()

*1:image_size, image_size

ORCA お試し版

MACにて下記URLを元に操作

www.orca.med.or.jp

 

macOS/x64の tar.gz をクリックしてダウンロードします。  と記載があったがイマイチわからないのでとりあえず一番上にあった最新のものをダウンロード

f:id:chocolate22554:20210228140958p:plain

 

HP 右上の 「↓」のダウンロードボタンクリック openjdkダブルクリック ダウンロードフォルダ内にて勝手に解凍される

f:id:chocolate22554:20210228141113p:plain

monsiajをダウンロード。サイトに飛ぶのでなくダウンロードが早急にされる
https://ftp.orca.med.or.jp/pub/java-client2/monsiaj-loader-2.0.27-all.jar

私の場合Java入っていなかったためJavaもダウンロード

 

その後、ターミナル  を起動

 

ダウンロードしたフォルダに移動します。 と記載があるが 「Command  +  スペースキー」にてspotlight検索にてアプリケーションフォルダに移動できる Siriでも移動できるかも?

f:id:chocolate22554:20210228141607p:plain

いい加減覚えよう。 `command > /dev/null 2>&1`の意味 - Qiita

その後長々と書いていたが デスクトップにmonsiajがあれば開くのでいいのかな?と思った

f:id:chocolate22554:20210228142323p:plain

次からは下記参照して作業

www.jma-receipt.jp

 

 

サーバ▷http://trial.orca.med.or.jp:8000/rpc

ユーザー▷trial

を入力すると下記画面が開かれた

 

f:id:chocolate22554:20210228142452p:plain

 

 

色々触った結果 シンプルだがショートカットキーが充実していてマウスを持たなくても操作できる

これについて良いことは時間のロスが少なくなること

またPCに慣れている人には比較的使いやすくスムーズ、変な癖や意味のわからないルールがなく比較的使いやすかった

 

難点は、おためし版だからか動作が重かったこと

診療では1秒でも大事な時間なので ぐるぐるマークが出てロードされると冷や汗もの

あとは今回短時間触っていないためわからないが検査結果の画像等はカルテに反映できない? あと、診療録と算定を入れる部分が同じ画面にない? のでDr等の記録・検査後の画像も参照して私は算定項目を算定しているので困るかも?

トライアルなのでわからないがどうなのだろうか・・・というのが感想だった

 

 

↓マニュアルもしっかりホームページ上で公開されていて良い

manual.orca.med.or.jp

 

NextSeed について 2020年段階

html css Java   基礎コース(オンライン)

エンジニアになるコース(夜間じっくりコース、オンライン

旅人留学 5万~(一旦終わった)

 

 

サーバーサイド php 本格的にする

 

20-30万稼ぐは無理だが  5万ぐらいなら〇

ツテ=独立になる

2-3個→ポートフォリオをつくってもらう

NextSeedの仲間や先輩等、コミュニティー を結構重視・強調していた

 

snackmeという会社が卒業生の方がいて ツテと運で掴み取ってきたとこもある 

 

週2 2回 =4h マンツーマン  グループ=クラスで 議論する、教え合う

PHP=webエンジニアとして

adobe XD=デザイン

 

200時間勉強必要?

チーム開発 役割分担する 擦り合わせ 1つの物を作成する

別でプロダクト作る 講師に質問する

追いつけてなければ講師が気づく

半年=400hの時間

 

ゴールが見えやすい

個人個人の特性に合わせてカスタマイズ等をしてくれるということ

 

paiza Flask 入門 レッスン2 1~

f:id:chocolate22554:20201008155121p:plain

f:id:chocolate22554:20201008155205p:plain

POSTメソッドはデータをメッセージボードに、GETメソッドはURLへ

 

#1 データベース→テーブルを選択

phpアドミンを(admin?)使うと簡単にMYSQLを確認・実行できる +SQLを実行しなくてもデータの追加・変更・削除ができる

pythonコードからMYSQLに接続しデータの表示 今回はターミナルから

 

データベースを操作するためのライブラリをインポート

import pymysql

動作確認用にテキストを出力

print("テスト”)

データベースに接続するためのコード(コネクションを定義)

f:id:chocolate22554:20201008165630p:plain

 

charsetは文字コードのこと

データベースからデータを取り出す

 

f:id:chocolate22554:20201008165809p:plain

cursor= の一行は現在操作しようとしているデータの位置を表しているオブジェクト

このカーソルのexecuteメソッドでsqlを実行

fetchallで結果を取り出している

forから取り出したいデータを取り出すコード

 

 

 

 

<一旦はここまで随時追記していきたいです>

Flask Web開発入門

 

 

render_templateを用いる際には、templatesフォルダを作成する必要があり、作成していないとhtmlファイルを読み込むことが出来ない

f:id:chocolate22554:20210111203731p:plain

クイックスタート — Flask Documentation (1.1.x)

lib-arts.hatenablog.com

 

app.py

from flask import Flask,render_template

app = Flask(__name__)

@app.route('/')
def index():
return render_template('index.html', message="花子さん")

if __name__ == "__main__":
app.run(port=8000, debug=True)

templatesフォルダ内にindex.html

<!DOCTYPE html>
<html>
<head>
<title>flask練習</title>
</head>
<body>
<h1>こんにちは{{ message }}</h1>
</body>
</html>

コマンド実行

python app.py 

 

 

 

Webサービスを作る=幾つか異なる役割を持ったサーバ構成(ユーザー情報を管理するDBサーバや、APIサーバー、またはWebサーバーや画像サーバなど)

 

APIサーバはクライアントからHTTPもしくはHTTPSリクエストを受けとる→リクエストのパラメータに従って処理+DBサーバーから情報を受け取る→クライアントにレスポンスを返す

 

 

 

<今の状態ではここまで随時追記していきたいです>