SlideShare a Scribd company logo
1 of 116
Download to read offline
リアルタイム手書き数字
認識AIを作って遊ぼう
作業環境・必要機材
• JupyterNotebook(Python環境)
• TensorFlow、Keras、h5py、OpenCV for Pythonのインストール・動作
確認済みを前提
• カメラ付きのマシンまたは外付け(USB)カメラ+マシン
なお、ぼくの環境はWin10ですので、それを前提にお話していきます。
• 甲斐 研造(Ka-k)
名前
• 福岡県産業・科学技術振興財団(ふくおかIST)
• システム開発技術カレッジ事務局
所属
• ゲーム、イラスト
趣味
• 色彩検定1級、UC級
• パーソナルカラー検定モジュール3
特技
自己紹介
大分県のマスコット
めじろん
Qiita ID:Ka-k
今日の内容とほぼ同じものを載せてます
いいねよろしくお願いします
こういうことやってます
主に技術者さん、技術を学びたい人向けに、ハンズオン
or 勉強会形式で実施している少人数制の企画
CONNPASS上でグループ運営しています
URL:https://tech-cafe.connpass.com/
おしながき
作成コンテンツの構成
AIと機械学習と深層学習
Keras
まずは深層学習を体験
OpenCV
画像処理を組み込む
遊んでみよう
はじめに
• 今回は、ディープラーニングの仕組みや原理等については詳し
くお話しません。
• ディープラーニングでモデルを作って、それを使ったコンテン
ツの制作例をお話します。
今日つくるコンテンツ
環境の準備
Anacondaのインストール
https://ai-inter1.com/python-install/
こちらのサイトを参考に、Anaconda3.7をインストールしてください
5分で簡単!AnacondaでPython3をインストール
(Windows/Mac編)
Anacondaを起動
メニューから
Anaconda3
→Anaconda Navigator
を選んで起動する
※起ち上がるまで時間がかかります
Anacondaの準備…仮想環境をつくる
※3.7しか選べない場合は3.7を選択
※環境の名前は任意の半角英数
例)Keras 等
必要なライブラリのインストール
pip install tensorflow==1.14
pip install h5py
pip install keras
pip install opencv-python
必要なライブラリのインストール
Pythonターミナル(黒い画面)上で、以下のコマンドを順番に実行
※プロンプト(こういうやつ→ >_ )が返ってきてから、次のコマンド、という風に実行
Pythonターミナル画面
Jupyter Notebookの準備
①左のメニューからHomeを選択
②Jupyterのアイコン下にある
「Install」をクリック
③「Install」が「Launch」に変
わったらOK
JupyterNotebookを起動させる
「Launch」をクリックすると、
ブラウザが起ち上がる
※既にブラウザが起ち上がってい
る場合は、新しいタブが開く
新規作業用フォルダーを作る
右上の「New」をクリック
「Folder」を選択
フォルダーの名前を変える
「Untitled Forder」という名前でフォルダーが
作られるので、名前左のチェックボックスを
チェック
左上の「Rename」をクリックする
「test」にフォルダー名を変更する
※わかる人はほかの名前でもOK
名前変更後、「test」フォルダをクリックして開く
新規ファイルを作る
右上の「New」メニューから「Python3」を選択
新規ファイルが別タブで立ち上がるので、
「Untitled」をクリック
ファイルの名前を「test」に変更
※初回は使用ブラウザを聞かれます
(次ページ参照)
※はじめてJupyterを起ち上げる場合、ブラウザを聞かれるので、普段使っているブラウザを選択
ちゃんとインストールできてるかの確認
以下のコードを入力する
import keras
import h5py
セルの実行
画面上の「Cell」メニューから、「Run Cells」を選択して実行
実行結果
以下のようになったらOK
・Using TensorFlow backend. という表示が出てくる
・左側の表示がIn[]→In[*]→In[1]のように変遷する
・エラーメッセージが出てこなければOK
・FutureWarning(次ページ)は今回は無視してOK
実行した際に、FutureWarning(以下の画像のようなやつ)が出る場合は、今回はス
ルーしてだいじょうぶです(将来的にその関数なくなるよ、という警告)
Kerasのimportでエラーが出る場合
pip uninstall tensorflow
pip install tensorflow==1.14
Pythonターミナル上で、以下のコマンドを順番に実行
※Kerasで動作するバージョンのTensorFlowをインストールし直す
AIと機械学習と深層学習
コンピュータの得意な事と不得意な事
• 2×3=?と聞いて、「6」と回答させる
• 「猫の画像を見せて」と言われたらあらかじめ用意した「猫の画像」を見せる
コンピュータは、既知の情報に既知の答えを返すのは強い
• デジタルでも手書きでも、「6」という数字は人間から見れば「6」だけど、
コンピュータは手書きの数字を「6」と認識するのが苦手
• 「猫の絵を描いて」と言われても返せない
一方で、未知のデータに対して、答えを返すのは弱い
AIと機械学習と深層学習
AI(人工知能)
マシンラーニング
(機械学習)
ディープラーニン
グ(深層学習)
マシンラーニング(機械学習)はAIに判
断材料を学習させる手法の1つ
ディープラーニング(深層学習)はさら
にそのうちの1ジャンル
コンピュータが学習した結果によって、未知の事象に
対しても応用して対応できるようになる仕組み(汎化と
いいます)
AI(人工知能)
ディープラーニングとは
今回、仕組みの話は省略します
ディープラーニングって何?
機械学習の1ジャンルで、人間の脳の仕組みをコンピュータで再現しようとしたもの
6
入力データ(画像) 出力結果画像認識
学習した結果から推
測を返す
ここで、「6」と返せるようにコンピュータに学ばせる手法がディープラーニング
ディープラーニングって何?
引用元:https://ainow.ai/2019/08/06/174245/
入力されたデータ(画像)から、例えば猫の
「耳の部分」とか「目の部分」のような特
徴を読み取り、そのデータ(画像)が何かを推
測する
小さい〇の1つ1つが、「猫のひげ」
「耳」「目」といった細かい特徴に該当
ディープラーニングのざっくりした理解
試験勉強用の問題集を用意
する
• 学習用データセット
• 正解ラベル
問題集を使って、コン
ピュータに試験勉強させる
• ディープラーニング
大学入試を受けさせる
• 画像判別
• 数値予測
Q.これは誰?
A.ガッキー
試験勉強の仕方は、人間が指示する
(モデル構築)
独学だったり
・独自モデル
有名な塾だったり
・既存モデル引用:https://qiita.com/tokkuman/items/1d83cd84bf2731f11774
ディープラーニングのプロセス
• データ収集
• 学習モデルセット作成
予想問題集を作る
• ディープラーニングモデル構築
勉強の仕方を教える
• ディープラーニング
勉強をさせる
• テストデータで学習精度を評価
実際にテストを受けさせる
ディープラーニングの注意点
• 配列データでないといけない
• 配列の要素の値が0~1じゃないといけない 等
Kerasで扱える形は決まっている
• 例えば画像判別なら最低でも以下は揃えないといけない
• 白黒か、フルカラーか
• 解像度(120px×120pxで統一、みたいな感じ)
学習したデータと同じ形じゃないと判別できない
TensorFlowとKeras
TensorFlow
• 読み方は「テンソルフロー」または「テンサーフロー」。
• Googleが提供している機械学習ライブラリ
• 自分で1からコーディングしなくてもDLモデルを構築できる
• CPUだけじゃなくてGPUも使える
テンソル
出典: フリー百科事典『ウィキペディア(Wikipedia)』
ナビゲーションに移動検索に移動
テンソル(英: tensor, 独: Tensor)とは、線形的な量または線形的な幾何概念を一般化したもので、基底を選べば、多次元の配列として表現できるようなも
のである。しかし、テンソル自身は、特定の座標系によらないで定まる対象である。個々のテンソルについて、対応する量を記述するのに必要な配列の添
字の組の数は、そのテンソルの階数とよばれる。
例えば、質量や温度などのスカラー量は階数0のテンソルだと理解される。同様にして力や運動量などのベクトル的な量は階数1のテンソルであり、力や加
速度ベクトルの間の異方的な関係などをあらわす線型変換は階数2のテンソルで表される。
物理学や工学においてしばしば「テンソル」と呼ばれているものは、実際には位置や時刻を引数としテンソル量を返す関数である「テンソル場」であるこ
とに注意しなければならない。いずれにせよテンソル場の理解のためにはテンソルそのものの概念の理解が不可欠である。
TensorFlow
機械学習においては、テンソルは入れ物です
ぐらいのざっくりした理解でOKです
Kerasとは
ディープラーニング用のPythonライブラリ
バックエンドでTheano(テアノ)やTensorFlow(テンソルフロー)等の機械
学習ライブラリが動く(公式はTensorFlow推奨)
直感的に記述できる反面、処理そのものはブラックボックス
(裏でTensorFlow等がどう動いているかは可視化されない)
要するに、(主に)TensorFlowを操作するためのフレームワーク
読み方は「ケラス」
Kerasとは
• データ収集
• 学習モデルセット作成
予想問題集を作る
• ディープラーニングモデル構築
勉強の仕方を教える
• ディープラーニング
勉強をさせる
• テストデータで学習精度を評価
実際にテストを受けさせる
主にこの部分をやって
くれるのがTensorFlow
とKeras
まずはKerasを体験
まずはKerasを体験
• Kerasにはディープラーニングを体験するための、いくつかの
データセットが用意されている
• そのうちの1つが「MNIST」と呼ばれる、手書き数字のデータ
セット
• 今回は、この「MNIST」を遊びつくそう、というのがコンセプ
ト
MNISTとは
・0~9の手書き数字のデータセット
・60,000の訓練用データと10,000のテスト用データ
・それに対応したラベルセット(回答集)
・Kerasには内包されているので、importで呼び出せる
ディープラーニング界の「Hello World!」
MNISTの中身
28×28サイズの白黒の手書き数字画像データが
入っている
引用元:https://www.codexa.net/cnn-mnist-keras-beginner/
0~9までの手書き数字と、その手書き数字が何か
の答えのデータ(label)のセット
テスト勉強用のデータセット60,000個と、テスト
用のデータセット10,000個に最初から分けられて
いる
MNISTとは
• データ収集
• 学習モデルセット作成
予想問題集を作る
• ディープラーニングモデル構築
勉強の仕方を教える
• ディープラーニングの実行
勉強をさせる
• テストデータで学習精度を評価
実際にテストを受けさせる
この部分にあたるの
がMNIST
JupyterNotebookの使い方
ここでおさらいをかねて
JupyterNotebookを起動させる
「Launch」をクリックすると、
ブラウザが起ち上がる
※既にブラウザが起ち上がってい
る場合は、新しいタブが開く
新規作業用フォルダーを作る
右上の「New」をクリック
「Folder」を選択
フォルダーの名前を変える
「Untitled Forder」という名前でフォルダーが
作られるので、名前左のチェックボックスを
チェック
左上の「Rename」をクリックする
「ARFukuoka」にフォルダー名を変更する
作業フォルダを移動する
「ARFukuoka」というフォルダ名に変わっているので、それをクリックして移動
配布したファイルをアップロードする
右上の「New」の横の「Upload」をク
リック
3つともドラッグ(またはCtrl+A)で選択し
て、「開く」を選択
右の画面のようになるので、「Upload」
を選択してアップロードを完了させる
MNISTを使って実際にディー
プラーニングをやってみる
既存ファイルの起動
アップロードした「MNIST_test.ipynb」をクリックすると、新しいタブでファイル
が起ち上がる
今回は流れだけ体験
引用元:https://ainow.ai/2019/08/06/174245/
もう一度、ディープラーニングの概念図
こういう流れでモデルを作るのだな、という感じで聞き流してください
今からやるのは、これをつく
る作業です
ディープラーニングの注意点
• 配列データでないといけない
• 配列の要素の値が0~1じゃないといけない 等
Kerasで扱える形は決まっている
• 例えば画像判別なら最低でも以下は揃えないといけない
• 白黒か、フルカラーか
• 解像度(120px×120pxで統一、みたいな感じ)
学習したデータと同じ形じゃないと判別できない
MNISTをKerasで使える形に整える
import numpy as np
from keras.datasets import mnist
from keras.utils import np_utils
#MNISTデータセット呼び出し
(X_train, y_train), (X_test, y_test) = mnist.load_data()
#データの正規化
X_train = np.array(X_train)/255.
X_test = np.array(X_test)/255.
#CNNに入れるために次元を追加
X_train = np.expand_dims(X_train, axis=-1)
X_test = np.expand_dims(X_test, axis=-1)
#ラベルのバイナリ化
y_train = np_utils.to_categorical(y_train)
y_test = np_utils.to_categorical(y_test)
※初回はMNISTのロードが入ります
画面上の「Cell」メニューから、「Run Cells」を選択して実行
※今いるセル(左側が青か緑になってる)が実行される
セルの実行
実行すると、左上がIn[] → In[*] → In[1] という風に変わっていく
DLモデルの構築
from keras.layers import Input, Dense, Conv2D, MaxPooling2D
from keras.models import Model
from keras.layers.core import Flatten
inputs = Input(shape=(28,28,1)) #入力層
conv1 = Conv2D(16, (3, 3), padding='same', activation='relu')(inputs) #畳込み層1
pool1 = MaxPooling2D((2, 2))(conv1)
conv2 = Conv2D(32, (3, 3), padding='same', activation='relu')(pool1) #畳込み層2
pool2 = MaxPooling2D((2, 2))(conv2)
flat = Flatten()(pool2) #全結合層に渡すため配列を一次元化
dense1 = Dense(784, activation='relu')(flat) #全結合層
predictions = Dense(10, activation='softmax')(dense1) #出力層
model = Model(inputs=inputs, outputs=predictions) #モデルの宣言(入力と出力を指定)
左上のIn[]がIn[2]になればOK
ディープラーニングの実行
#モデルのコンパイル、学習実行
model.compile(optimizer="sgd", loss="categorical_crossentropy", metrics=["accuracy"])
hist = model.fit(X_train, y_train, batch_size=16, verbose=1, epochs=3 validation_split=0.3)
学習結果の評価
#学習結果の評価
score = model.evaluate(X_test, y_test, verbose=1)
print("正解率(acc):", score[1])
今回は正解率(どれだけ合ってたか、で評価)
モデルの保存
#モデルを保存
model.save(“mnist.h5")
これを行うことで、学習済みモデルの使いまわしができるようになる
正解率90%でした、と言われてもイマイチピンとこない
本当にそれだけ正解できてるのか、確かめたい、可視化したい
ここまでの内容は、ディープラーニングのことを調べると結構TIPSが出てくる
改めて、今回作るコンテンツをおさらい
6
入力データ(画像) 出力結果画像認識
学習した結果から推測を
返す
見た画像がなにかを推測する
今体験してもらったのは、この
部分をつくる作業
ディープラーニングの実行と、モデルの保存で、コンピュータが手書
き数字を認識できるAI(脳の部分)が完成した
自分で書いた手書き数字を認識させ、答えさせるためには、画像を
取得する「目の部分」が必要
ディープラーニングの注意点をおさらい
• 例えば画像判別なら最低でも以下は一致していないといけない
• 白黒か、フルカラーか
• 解像度(120px×120px等)
学習したデータと同じ形じゃないと判別できない
MNISTの中身をおさらい
28×28サイズの白黒の手書き数字画像データが
入っている
引用元:https://www.codexa.net/cnn-mnist-keras-beginner/
0~9までの手書き数字と、その手書き数字が何か
の答えのデータ(label)のセット
テスト勉強用のデータセット60,000個と、テスト
用のデータセット10,000個に最初から分けられて
いる
判別させたい画像データ
引用元:https://www.codexa.net/cnn-mnist-keras-beginner/
学習した画像データ
判別させたい画像データを、MNISTに近づけることで画像判別できるようにする!
MNISTの画像としての特徴
• 28×28サイズ
• グレースケール
• 黒バックに白い文字
• 白い部分は少しぼやけてる
• 背景の黒は「完全に黒」(値がゼロ)
• 画像の縦横が同じ正方形、白い部分は完
全に白のところとグレーのところが混在
ポイント
引用元:https://www.codexa.net/cnn-mnist-keras-beginner/
画像加工処理
トリミング・
グレースケール化
2値化 白黒反転 ブラー 28×28に縮小
カメラから映像を取得して、Kerasで認識でき
るように加工するまでのプロセスイメージ
この画像処理をすべて手作業で実装すると非常に大変…
なので、今回はOpenCVという画像処理ライブラリを使って
実装していきます
OpenCV
いきなり動画は大変なので・・・
OpenCVとは
• 画像処理用のライブラリ
• カメラの呼び出しや加工が簡単に行える
• 動画を扱うことができる
必要な画像処理を実装
• ここからはコーディングしていただきます
• いきなり動画は大変なので、まずは静止画を使って練習していき
ます
新しく、「OpenCV_test.ipynb」というファイルを作ります
新規ファイルを作る
右上のメニューから「Python3」を選択
新規ファイルが別タブで立ち上がるので、
「Untitled」をクリック
ファイルの名前を「OpenCV_test」に変更
画像の読み込み準備
ソースコードと同じディレクトリに、配布データの中にある”Lenna.png“を
保存
画像を表示
import cv2 # OpenCVのインポート
image = cv2.imread(“Lenna.png”, 1) # 画像のロード
cv2.imshow(“test”, image) # 画像の表示
cv2.waitKey(0) # 何かしらの操作があるまで待つ
cv2.destroyAllWindows()# ウィンドウを破棄する
cv2.waitKey(1) # Macの人はこの行が必要
※ウィンドウはバックエンドに出てくることがあります
Cell → Run Cells もしくはShift + Enter で実行
コメントは書かなくてOK
(以降も同じ)
読み込んだ画像をグレーに変える
import cv2
image = cv2.imread(“Lenna.png”, 1)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # グレースケールに変換
cv2.imshow(“test”, image)
cv2.imshow(“gray”, gray) # 別のウィンドウで表示
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.waitKey(1) # Macの人のみ
Cell → Run Cells もしくはShift + Enter で実行
画像に四角を描く
import cv2
image = cv2.imread(“Lenna.png”, 1)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.rectangle(image, (50, 50), (100, 100), (255,0,0))
cv2.imshow(“test”, image)
cv2.imshow(“gray”, gray)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.waitKey(1) # Macの人のみ
(0, 0) 50
50
100
100
OpenCVは左上の座標が原点(0,0)
Cell → Run Cells もしくはShift + Enter で実行
画像に文字を書く
import cv2
image = cv2.imread(“Lenna.png”, 1)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.rectangle(image, (50, 50), (100, 100), (255,0,0))
cv2.putText(image, “Hello World”, (0,30), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,255,255),
1, cv2.LINE_AA) # (窓, 書き込む文字列, 座標, フォント, サイズ, 色, 太さ, 線の種類)
cv2.imshow(“test”, image)
cv2.imshow(“gray”, gray)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.waitKey(1) # Macの人のみ
Cell → Run Cells もしくはShift + Enter で実行
画像を二値化する
#前略
cv2.rectangle(image, (50, 50), (100, 100), (255,0,0))
cv2.putText(image, “Hello World”, (0,30), cv2.FONT_HERSHEY_SIMPLEX, 1,
(255,255,255), 1, cv2.LINE_AA)
_, th = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU) # 大津の方法で二値化
cv2.imshow(“test”, image)
cv2.imshow(“gray”, gray)
cv2.imshow(“thres”, th)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.waitKey(1) # Macの人のみ
Cell → Run Cells もしくはShift + Enter で実行
画像を白黒反転する
#前略
cv2.rectangle(image, (50, 50), (100, 100), (255,0,0))
cv2.putText(image, “Hello World”, (0,30), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,255,255), 1,
cv2.LINE_AA)
_, th = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU) # 大津の方法で二値化
th = cv2.bitwise_not(th) # 白黒反転
cv2.imshow(“test”, image)
cv2.imshow(“gray”, gray)
cv2.imshow(“thres”, th)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.waitKey(1) # Macの人のみ
Cell → Run Cells もしくはShift + Enter で実行
画像にブラーをかける
#前略
cv2.rectangle(image, (50, 50), (100, 100), (255,0,0))
cv2.putText(image, “Hello World”, (0,30), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,255,255), 1,
cv2.LINE_AA)
_, th = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU) # 大津の方法で二値化
th = cv2.bitwise_not(th) # 白黒反転
th = cv2.GaussianBlur(th,(9,9),0) # ブラーをかける
cv2.imshow(“test”, image)
cv2.imshow(“gray”, gray)
cv2.imshow(“thres”, th)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.waitKey(1) # Macの人のみ
Cell → Run Cells もしくはShift + Enter で実行
画像をトリミングする
#前略
cv2.putText(image, “Hello World”, (0,30), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,255,255), 1,
cv2.LINE_AA)
_, th = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU) # 大津の方法で二値化
th = cv2.bitwise_not(th) # 白黒反転
th = cv2.GaussianBlur(th,(9,9),0) # ブラーをかける
th = th[50:150, 50:150] # トリミング
cv2.imshow(“test”, image)
cv2.imshow(“gray”, gray)
cv2.imshow(“thres”, th)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.waitKey(1) # Macの人のみ
(0, 0) 50
50
150
150
th = th[50:150, 50:150]
トリミングの書き方
他と順番が逆(高さ, 幅)なので注意
画像をトリミングする
#前略
cv2.putText(image, “Hello World”, (0,30), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,255,255), 1,
cv2.LINE_AA)
_, th = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU) # 大津の方法で二値化
th = cv2.bitwise_not(th) # 白黒反転
th = cv2.GaussianBlur(th,(9,9),0) # ブラーをかける
th = th[50:150, 50:150] # トリミング
cv2.imshow(“test”, image)
cv2.imshow(“gray”, gray)
cv2.imshow(“thres”, th)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.waitKey(1) # Macの人のみ
Cell → Run Cells もしくはShift + Enter で実行
画像を縮小する
#前略
cv2.putText(image, “Hello World”, (0,30), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,255,255), 1,
cv2.LINE_AA)
_, th = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU) # 大津の方法で二値化
th = cv2.bitwise_not(th) # 白黒反転
th = cv2.GaussianBlur(th,(9,9),0) # ブラーをかける
th = th[50:150, 50:150] # トリミング
th = cv2.resize(th, (50,50), cv2.INTER_CUBIC) # 50×50にリサイズ
cv2.imshow(“test”, image)
cv2.imshow(“gray”, gray)
cv2.imshow(“thres”, th)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.waitKey(1) # Macの人のみ
Cell → Run Cells もしくはShift + Enter で実行
コードを保存!
MNISTの中身を見てみよう
画像を表示させる方法がわかったので、ちょっと脱線してMNISTの中身
を表示させてみます
新規ファイルを作る
右上のメニューから「Python3」を選択
新規ファイルが別タブで立ち上がるので、
「Untitled」をクリック
ファイルの名前を「MNIST_nakami」に変更
MNISTの中身を見てみよう
from keras.datasets import mnist
import cv2
(X_train, _), (_, _) = mnist.load_data() # MNISTをロード
cv2.imshow(“MNIST”, X_train[100]) # 画像を表示
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.waitKey(1) # Macの人のみ
・MNISTをロード(画像部分だけ)
・画像の高さと幅を取ってくる
・高さと幅を表示
・画像を表示
新規ファイルを作る
右上のメニューから「Python3」を選択
新規ファイルが別タブで立ち上がるので、
「Untitled」をクリック
ファイルの名前を「Camera_test」に変更
カメラにアクセスしてみる
import cv2
cap = cv2.VideoCapture(1) # カメラを指定
ret, frame = cap.read() # カメラから読み込み
cv2.imshow(“frame”, frame) # 表示
cv2.waitKey(0) # 操作されるまで待機
cap.release()
cv2.waitKey(1) # Macの人は追記
cv2.destroyAllWindows()
cv2.waitKey(1) # Macの人は追記
OpenCVの動画の考え方
• カメラから画像を取得できたが、静止画だった
• カメラにアクセスした瞬間の画像を表示させているだけ
• 動画として表示させるためには、カメラにアクセスしている間、
表示させた画像を更新し続ける必要がある
カメラからの映像を動画として表示する
import cv2
cap = cv2.VideoCapture(1)
#ここに追記
while(True):
ret, frame = cap.read()
cv2.imshow(“frame”, frame)
cv2.waitKey(0)
cap.release()
cv2.waitKey(1) # Macの人は追記
cv2.destroyAllWindows()
cv2.waitKey(1) # Macの人は追記
インデント下げる
ret, frame = cap.read()
cv2.imshow(“frame”, frame)
Pythonでは、whileやif等の中に処理を入れる場合、インデントを下げるというルール
カメラからの映像を動画として表示する
import cv2
cap = cv2.VideoCapture(1)
while(True):
ret, frame = cap.read()
cv2.imshow(“frame”, frame)
cv2.waitKey(0)
if k == ord(“q”) : break
cap.release()
cv2.waitKey(1) # Macの人は追記
cv2.destroyAllWindows()
cv2.waitKey(1) # Macの人は追記
ループの終了条件
キーボードの「q」が押されたらループを抜ける
ようにする
k = cv2.waitKey(1) & 0xFF
コードを保存!
リアルタイム認識
以下の動作は、できるようになった
静止画を、MNIST的な見た目にする
カメラからの映像を動画として表示する
これを組み合わせて、リアルタイム動画を加工できるようにする
リアルタイムにカメラ映像を加工する
それを都度Kerasに渡す
判定結果をリアルタイムに画面に表示させる
これで、リアルタイム手書き数字認識の実現ができる!!
コーディング
• カメラから画像を取得するコードを拡張する
import cv2
cap = cv2.VideoCapture(1)
while(True):
ret, frame = cap.read()
cv2.imshow(“frame”, frame)
k = cv2.waitKey(1) & 0xFF
if k == ord(“q”) : break
cap.release()
cv2.waitKey(1) # Macの人は追記
cv2.destroyAllWindows()
cv2.waitKey(1) # Macの人は追記
まずは、カメラの映像を加工する処理を加えていく
トリミング・
グレースケール化
2値化 白黒反転 ブラー 28×28に縮小
カメラの映像の中心に、四角を描く
OpenCVでは、左上の点が原点(0, 0)になり、右下の座標が画像の幅と高さの値になる。
(0, 0)
(800, 600)
800
600
画像の幅と高さを取得して、2で割れば、画像の
中心点がわかる!
400
300
中心が分かれば、そこから「どれだけ離れているか」
を指定すれば、中心に四角が描ける
画像の真ん中を(x,y)として、中心に100×100の四角を描きたい場合、左上の点
(x-50, y-50)と右下の点(x+50, y+50)を指定してやれば、四角を描ける
(400,300)
(400-50, 300-50)
(400+50, 300+50)
import cv2
cap = cv2.VideoCapture(1)
while(True):
ret, frame = cap.read()
#ここにコードを書く
h, w, _ = frame.shape[:3] # 画像の形(高さ,幅,チャンネル数)を取得
h_center = h//2 # y軸の中心点を取得
w_center = w//2 # x軸の中心点を取得
cv2.rectangle(frame, (w_center-71, h_center-71), (w_center+71, h_center+71), (255, 0, 0))
cv2.imshow(“frame”, frame)
k = cv2.waitKey(1) & 0xFF
#後略
中心点を求めて142×142サイズの四角を描く
※最終的に、140×140のサイズできれいに切り抜きたいので、四角は一回り大きくしておく
wとhの順番に注意
ターゲットができたので、あ
とはその部分を加工していく
各種画像処理を加えていく
#前略
ret, frame = cap.read()
h, w, _ = frame.shape[:3] # 画像の形(高さ,幅,チャンネル数)を取得
h_center = h//2 # y軸の中心点を取得
w_center = w//2 # x軸の中心点を取得
cv2.rectangle(frame, (w_center-71, h_center-71), (w_center+71, h_center+71), (255, 0, 0))
#ここにコードを書く
im = frame[h_center-70:h_center+70, w_center-70:w_center+70] # トリミング
im = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY) # グレースケール化
_, th = cv2.threshold(im, 0, 255, cv2.THRESH_OTSU) # 二値化
th = cv2.bitwise_not(th) # 白黒反転
th = cv2.GaussianBlur(th,(9,9),0) # ブラーをかける
th = cv2.resize(th,(28,28), cv2.INTER_CUBIC) # 28×28にリサイズ
cv2.imshow(“frame”, frame)
cv2.imshow(“im”, im )# 途中経過を見るために追記
k = cv2.waitKey(1) & 0xFF
#後略
th
コードを保存!
ディープラーニングさせたモデルを読み込む
• モデルデータを読み込む処理を加える
• 学習させた「mnist.h5」をソースと同じディレクトリに保存
import cv2
#ここに処理を加える
from keras.models import load_model
import numpy as np
model = load_model(“mnist.h5")
cap = cv2.VideoCapture(1)
while(True):
ret, frame = cap.read()
#後略
学習させたデータと比較できるように、カメラの映像データを加工する
import cv2
from keras.models import load_model
import numpy as np
model = load_model(“mnist.h5")
cap = cv2.VideoCapture(1)
while(True):
# 判定用データを格納する配列の初期化
Xt = []
Yt = []
ret, frame = cap.read()
#後略
判定できるように形を変換する・判定する
#前略
im = frame[h_center-70:h_center+70, w_center-70:w_center+70]
im = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
_, th = cv2.threshold(im, 0, 255, cv2.THRESH_OTSU)
th = cv2.bitwise_not(th)
th = cv2.GaussianBlur(th,(9,9),0)
th = cv2.resize(th,(28,28), cv2.INTER_CUBIC)
Xt.append(th)
Xt = np.array(Xt)/255
Xt = np.expand_dims(Xt, axis=-1)
result = model.predict(Xt, batch_size=1) # Xtと学習したデータを比較して判定結果を返す
cv2.imshow(“frame”, frame)
#後略
predictがどういう値を返すか
配布データの中の、predict_test.ipynb
※手元で実行する必要はありません。
MNISTの場合、左上から[0の可能性 1の可能性 2の可能性 …]という風に並んでいる
1番近い可能性だけ返してほしい
resultの中には、順番に0~9に一致する確率がセットされている
該当する数字(0~9)までと、その確率をセットにして、確率が高いものが右端に並
ぶようにソートする
[ [ 3, 0.1 ] [ 0 , 0.2 ] [2, 0.6] [ 1, 0.7 ] ]
[ [ 0 , 0.2 ] [ 1, 0.7 ] [2, 0.6] [ 3, 0.1 ] ]
例)
確率順で並べ替えておけば、表示するときに呼び出しやすくなる!
表示用データの作成・判定結果のソート
#前略
Xt.append(th)
Xt = np.array(Xt)/255
result = model.predict(Xt, batch_size=1)
for i in range(10):
r = round(result[0,i],2) # 小数点以下第2位までで四捨五入
r = “{0:0.2f}”.format(r) # OpenCVで表示できる型に変換
Yt.append([i, r]) # その数字が何かと一致する確率をセットで格納
Yt = sorted(Yt, key=lambda x:(x[1]))# ソート実行
cv2.imshow(“frame”, frame)
#後略
一番一致してる確率が高いものがYt[9]に[数字,一致する確率]という形で収納される
for内のインデントは下げる!
判定結果の上位1番目を画面上に表示
#前略
for i in range(10):
r = round(result[0,i],2)
r = "{0:.2f}".format(r)
Yt.append([i, r])
Yt = sorted(Yt, key=lambda x:(x[1]))
cv2.putText(frame, "1st:"+str(Yt[9]), (10,40), cv2.FONT_HERSHEY_SIMPLEX, 0.8,
(255,255,255), 1, cv2.LINE_AA)
cv2.imshow(“frame”, frame)
#後略
遊んでみよう
判定結果の上位3番目までを画面上に表示
#前略
for i in range(10):
r = round(result[0,i],2)
r = "{0:.2f}".format(r)
Yt.append([i, r])
Yt = sorted(Yt, key=lambda x:(x[1]))
cv2.putText(frame, "1st:"+str(Yt[9]), (10,40), cv2.FONT_HERSHEY_SIMPLEX, 0.8,
(255,255,255), 1, cv2.LINE_AA)
cv2.putText(frame, "2nd:"+str(Yt[8]), (220,40), cv2.FONT_HERSHEY_SIMPLEX, 0.5,
(255,255,255), 1, cv2.LINE_AA)
cv2.putText(frame, "3rd:"+str(Yt[7]), (360,40), cv2.FONT_HERSHEY_SIMPLEX, 0.5,
(255,255,255), 1, cv2.LINE_AA)
cv2.imshow(“frame”, frame)
#後略

More Related Content

What's hot

「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化marsee101
 
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しようC# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しようFujio Kojima
 
Deep Learning を実装する
Deep Learning を実装するDeep Learning を実装する
Deep Learning を実装するShuhei Iitsuka
 
LUT-Network ~本物のリアルタイムコンピューティングを目指して~
LUT-Network ~本物のリアルタイムコンピューティングを目指して~LUT-Network ~本物のリアルタイムコンピューティングを目指して~
LUT-Network ~本物のリアルタイムコンピューティングを目指して~ryuz88
 
Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用Seiya Tokui
 
高位合成でDeep learning
高位合成でDeep learning高位合成でDeep learning
高位合成でDeep learningMori Labo.
 
TensorFlowの使い方(in Japanese)
TensorFlowの使い方(in Japanese)TensorFlowの使い方(in Japanese)
TensorFlowの使い方(in Japanese)Toshihiko Yamakami
 
LUT-Network Revision2
LUT-Network Revision2LUT-Network Revision2
LUT-Network Revision2ryuz88
 
機械学習入門
機械学習入門機械学習入門
機械学習入門Fujio Kojima
 
実装ディープラーニング
実装ディープラーニング実装ディープラーニング
実装ディープラーニングYurie Oka
 
Pythonによる機械学習入門 ~SVMからDeep Learningまで~
Pythonによる機械学習入門 ~SVMからDeep Learningまで~Pythonによる機械学習入門 ~SVMからDeep Learningまで~
Pythonによる機械学習入門 ~SVMからDeep Learningまで~Yasutomo Kawanishi
 
Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015Ryosuke Okuta
 
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Pythonによる機械学習入門〜基礎からDeep Learningまで〜Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Pythonによる機械学習入門〜基礎からDeep Learningまで〜Yasutomo Kawanishi
 
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013Ryo Sakamoto
 
【Unite Tokyo 2019】たのしいDOTS〜初級から上級まで〜
【Unite Tokyo 2019】たのしいDOTS〜初級から上級まで〜【Unite Tokyo 2019】たのしいDOTS〜初級から上級まで〜
【Unite Tokyo 2019】たのしいDOTS〜初級から上級まで〜UnityTechnologiesJapan002
 
2値化CNN on FPGAでGPUとガチンコバトル(公開版)
2値化CNN on FPGAでGPUとガチンコバトル(公開版)2値化CNN on FPGAでGPUとガチンコバトル(公開版)
2値化CNN on FPGAでGPUとガチンコバトル(公開版)Hiroki Nakahara
 
LUT-Network ~Edge環境でリアルタイムAIの可能性を探る~
LUT-Network ~Edge環境でリアルタイムAIの可能性を探る~LUT-Network ~Edge環境でリアルタイムAIの可能性を探る~
LUT-Network ~Edge環境でリアルタイムAIの可能性を探る~ryuz88
 
mxnetで頑張る深層学習
mxnetで頑張る深層学習mxnetで頑張る深層学習
mxnetで頑張る深層学習Takashi Kitano
 
Deep Learningの基礎と応用
Deep Learningの基礎と応用Deep Learningの基礎と応用
Deep Learningの基礎と応用Seiya Tokui
 

What's hot (20)

「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
「ゼロから作るDeep learning」の畳み込みニューラルネットワークのハードウェア化
 
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しようC# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
 
Deep Learning を実装する
Deep Learning を実装するDeep Learning を実装する
Deep Learning を実装する
 
LUT-Network ~本物のリアルタイムコンピューティングを目指して~
LUT-Network ~本物のリアルタイムコンピューティングを目指して~LUT-Network ~本物のリアルタイムコンピューティングを目指して~
LUT-Network ~本物のリアルタイムコンピューティングを目指して~
 
Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用
 
高位合成でDeep learning
高位合成でDeep learning高位合成でDeep learning
高位合成でDeep learning
 
TensorFlowの使い方(in Japanese)
TensorFlowの使い方(in Japanese)TensorFlowの使い方(in Japanese)
TensorFlowの使い方(in Japanese)
 
LUT-Network Revision2
LUT-Network Revision2LUT-Network Revision2
LUT-Network Revision2
 
機械学習入門
機械学習入門機械学習入門
機械学習入門
 
実装ディープラーニング
実装ディープラーニング実装ディープラーニング
実装ディープラーニング
 
Pythonによる機械学習入門 ~SVMからDeep Learningまで~
Pythonによる機械学習入門 ~SVMからDeep Learningまで~Pythonによる機械学習入門 ~SVMからDeep Learningまで~
Pythonによる機械学習入門 ~SVMからDeep Learningまで~
 
Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015Chainerチュートリアル -v1.5向け- ViEW2015
Chainerチュートリアル -v1.5向け- ViEW2015
 
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Pythonによる機械学習入門〜基礎からDeep Learningまで〜Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
 
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
 
【Unite Tokyo 2019】たのしいDOTS〜初級から上級まで〜
【Unite Tokyo 2019】たのしいDOTS〜初級から上級まで〜【Unite Tokyo 2019】たのしいDOTS〜初級から上級まで〜
【Unite Tokyo 2019】たのしいDOTS〜初級から上級まで〜
 
2値化CNN on FPGAでGPUとガチンコバトル(公開版)
2値化CNN on FPGAでGPUとガチンコバトル(公開版)2値化CNN on FPGAでGPUとガチンコバトル(公開版)
2値化CNN on FPGAでGPUとガチンコバトル(公開版)
 
NumPy闇入門
NumPy闇入門NumPy闇入門
NumPy闇入門
 
LUT-Network ~Edge環境でリアルタイムAIの可能性を探る~
LUT-Network ~Edge環境でリアルタイムAIの可能性を探る~LUT-Network ~Edge環境でリアルタイムAIの可能性を探る~
LUT-Network ~Edge環境でリアルタイムAIの可能性を探る~
 
mxnetで頑張る深層学習
mxnetで頑張る深層学習mxnetで頑張る深層学習
mxnetで頑張る深層学習
 
Deep Learningの基礎と応用
Deep Learningの基礎と応用Deep Learningの基礎と応用
Deep Learningの基礎と応用
 

Similar to Enjoy handwritten digits recognition AI !!

TensorflowとKerasによる深層学習のプログラム実装実践講座
TensorflowとKerasによる深層学習のプログラム実装実践講座TensorflowとKerasによる深層学習のプログラム実装実践講座
TensorflowとKerasによる深層学習のプログラム実装実践講座Ruo Ando
 
2018/06/23 Sony"s deep learning software and the latest information
2018/06/23 Sony"s deep learning software and the latest information2018/06/23 Sony"s deep learning software and the latest information
2018/06/23 Sony"s deep learning software and the latest informationSony Network Communications Inc.
 
15分でざっくり分かるScala入門
15分でざっくり分かるScala入門15分でざっくり分かるScala入門
15分でざっくり分かるScala入門SatoYu1ro
 
Python で munin plugin を書いてみる
Python で munin plugin を書いてみるPython で munin plugin を書いてみる
Python で munin plugin を書いてみるftnk
 
Python physicalcomputing
Python physicalcomputingPython physicalcomputing
Python physicalcomputingNoboru Irieda
 
2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介
2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介
2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介Hiroki Nakahara
 
【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介
【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介
【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介UnityTechnologiesJapan002
 
Kobe.R #15 - Incanter チョットシッテル
Kobe.R #15 - Incanter チョットシッテルKobe.R #15 - Incanter チョットシッテル
Kobe.R #15 - Incanter チョットシッテルtnoda
 
Kaggle参加報告: Champs Predicting Molecular Properties
Kaggle参加報告: Champs Predicting Molecular PropertiesKaggle参加報告: Champs Predicting Molecular Properties
Kaggle参加報告: Champs Predicting Molecular PropertiesKazuki Fujikawa
 
Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)Kenta Oono
 
[第2版]Python機械学習プログラミング 第15章
[第2版]Python機械学習プログラミング 第15章[第2版]Python機械学習プログラミング 第15章
[第2版]Python機械学習プログラミング 第15章Haruki Eguchi
 
「機械学習とは?」から始める Deep learning実践入門
「機械学習とは?」から始める Deep learning実践入門「機械学習とは?」から始める Deep learning実践入門
「機械学習とは?」から始める Deep learning実践入門Hideto Masuoka
 
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」fukuoka.ex
 
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用de:code 2017
 
研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門ryos36
 
[機械学習]文章のクラス分類
[機械学習]文章のクラス分類[機械学習]文章のクラス分類
[機械学習]文章のクラス分類Tetsuya Hasegawa
 

Similar to Enjoy handwritten digits recognition AI !! (20)

Introduction of Python
Introduction of PythonIntroduction of Python
Introduction of Python
 
TensorflowとKerasによる深層学習のプログラム実装実践講座
TensorflowとKerasによる深層学習のプログラム実装実践講座TensorflowとKerasによる深層学習のプログラム実装実践講座
TensorflowとKerasによる深層学習のプログラム実装実践講座
 
2018/06/23 Sony"s deep learning software and the latest information
2018/06/23 Sony"s deep learning software and the latest information2018/06/23 Sony"s deep learning software and the latest information
2018/06/23 Sony"s deep learning software and the latest information
 
SeRanet
SeRanetSeRanet
SeRanet
 
15分でざっくり分かるScala入門
15分でざっくり分かるScala入門15分でざっくり分かるScala入門
15分でざっくり分かるScala入門
 
Python で munin plugin を書いてみる
Python で munin plugin を書いてみるPython で munin plugin を書いてみる
Python で munin plugin を書いてみる
 
Python physicalcomputing
Python physicalcomputingPython physicalcomputing
Python physicalcomputing
 
2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介
2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介
2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介
 
【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介
【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介
【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介
 
Kobe.R #15 - Incanter チョットシッテル
Kobe.R #15 - Incanter チョットシッテルKobe.R #15 - Incanter チョットシッテル
Kobe.R #15 - Incanter チョットシッテル
 
Kaggle参加報告: Champs Predicting Molecular Properties
Kaggle参加報告: Champs Predicting Molecular PropertiesKaggle参加報告: Champs Predicting Molecular Properties
Kaggle参加報告: Champs Predicting Molecular Properties
 
Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)
 
[第2版]Python機械学習プログラミング 第15章
[第2版]Python機械学習プログラミング 第15章[第2版]Python機械学習プログラミング 第15章
[第2版]Python機械学習プログラミング 第15章
 
「機械学習とは?」から始める Deep learning実践入門
「機械学習とは?」から始める Deep learning実践入門「機械学習とは?」から始める Deep learning実践入門
「機械学習とは?」から始める Deep learning実践入門
 
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
 
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
 
研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門
 
2012 ce116 crowbar_snct_shirai
2012 ce116 crowbar_snct_shirai2012 ce116 crowbar_snct_shirai
2012 ce116 crowbar_snct_shirai
 
R高速化
R高速化R高速化
R高速化
 
[機械学習]文章のクラス分類
[機械学習]文章のクラス分類[機械学習]文章のクラス分類
[機械学習]文章のクラス分類
 

Recently uploaded

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 

Recently uploaded (8)

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 

Enjoy handwritten digits recognition AI !!