アナログメーターの読取りは、前処理が重要です。

アナログメーターの読取りをする際は、人工知能で予測する前の工程で 予測精度の大半は決まってしまいます。人工知能自体の調整で出来る事は限られています。まずは、適切な撮影が重要です。人に判断がつかない画像では、人工知能も判断がつきません。次は、画像の前処理です。特にアナログメーターの針の向きが重要ですので、画像処理には定評のある、畳み込みニューラルネットワーク(CNN)と同様の前処理を行いましょう。手動で畳み込みを行うのか、人工知能に畳み込みをさせるかの違いだけです。

前処理によって 針の向きに合わせて強調したり消去したり、自由自在です。縦横斜めの畳み込みを前処理することで、人工知能の精度は格段に向上します。

import cv2
import numpy as np
gray = cv2.imread(“dx05.png”, 0)
import matplotlib.pyplot as plt
plt.imshow(gray,cmap = “gray”)
plt.show()
kernel = np.array([[-1, -1, -1],
[0, 0, 0],
[1, 1, 1]])
dst = cv2.filter2D(gray, -1, kernel)
cv2.imwrite(“./output02.png”, dst)
plt.imshow(dst,cmap = “gray”)
plt.show()
kernel = np.array([[-1, 0, 1],
[-1, 0, 1],
[-1, 0, 1]])
dst = cv2.filter2D(gray, -1, kernel)
cv2.imwrite(“./output03.png”, dst)
plt.imshow(dst,cmap = “gray”)
plt.show()
kernel = np.array([[0, -1, -2],
[1, 0, -1],
[2, 1, 0]])
dst = cv2.filter2D(gray, -1, kernel)
cv2.imwrite(“./output04.png”, dst)
plt.imshow(dst,cmap = “gray”)
plt.show()
kernel = np.array([[2, 1, 0],
[1, 0, -1],
[0, -1, -2]])
dst = cv2.filter2D(gray, -1, kernel)
cv2.imwrite(“./output00.png”, dst)
plt.imshow(dst,cmap = “gray”)
plt.show()
kernel = np.array([[-2, -1, 0],
[-1, 0, 1],
[0, 1, 2]])
dst = cv2.filter2D(gray, -1, kernel)
cv2.imwrite(“./output01.png”, dst)
plt.imshow(dst,cmap = “gray”)
plt.show()

カテゴリー: Uncategorized | アナログメーターの読取りは、前処理が重要です。 はコメントを受け付けていません

デジタルメーターの読取りは、例題のMNISTで出来ます。

人工知能を用いて デジタルメーターの読取りを行うのに 教科書の例題にあるMNISTで出来ます。

どちらかと言うと、アナログメーターの読取りよりも、デジタルメーターの読取りの方がMNISTの手書き数字の読取りに近いので、イメージしやすいですね。
やっていることは、アナログメーターもデジタルメーターも 全く同じです。
プログラムに変更点はありません。
後は、適当な学習データーを用意してあげるだけです。

カテゴリー: python, サイキットラーン | タグ: , , | デジタルメーターの読取りは、例題のMNISTで出来ます。 はコメントを受け付けていません

アナログメーターの読取りは、例題のMNISTで出来ます。

人工知能を用いて アナログメーターの読取りを行うのに 教科書の例題にあるMNISTで出来ます。

https://scikit-learn.org/stable/auto_examples/classification/plot_digits_classification.html#sphx-glr-auto-examples-classification-plot-digits-classification-py

まずは、カメラと照明を固定して撮影条件が一定となるように設置をします。一定の範囲内で撮影出来る事を保証できると、人工知能による予測精度が向上します。
次に、特定のアナログメーターを 事前に撮影して針の位置の状態をそれぞれ準備します。どの程度のデーターを準備するかは、要求する分解能に従いますが、20-30分解能もあれば、十分と思われます。
なぜなら、アナログメーター自体の精度(誤差)は、±2.5%や±1.6%程度あり、つまり、約5%や3%程度の誤差は、アナログメーターを使う時点で、許容されています。
有効桁数3桁、4桁の測定には、アナログメーターは向いていません。

事前のデーターを多く用意するため、撮影条件や照明条件を振って、許容範囲内の状態を可能な限り撮影したり、画像処理でデーターを水増しましょう。

プログラム自体は、MNISTと同等のクラス分類です。データーが十分あれば、トレーニングとテストに分けたり、過剰適合の検証をしたり、パラメーターの調整をしたり、色々できます。

人工知能は、画像を見てクラス分類しているだけです。アナログメーターの概念を認識したり針や目盛を理解しているわけではありません。過剰な要求仕様を求めなければ、アナログメーターの読取りは、例題のMNISTで出来ますね。

ソースコード
データー準備
import numpy as np
import matplotlib.pyplot as plt
import cv2
i=np.ndarray([32,32,3])
data=np.ndarray([10,32,32,3])
data[:]=0
i=plt.imread(“ana00.png”)
plt.imshow(i)
plt.show()
i = cv2.resize(i, (32,32))
data[0,:,:,:]=i
plt.imshow(i)
plt.show()
i=plt.imread(“ana01.png”)
i = cv2.resize(i, (32,32))
data[1,:,:,:]=i
i=plt.imread(“ana02.png”)
i = cv2.resize(i, (32,32))
data[2,:,:,:]=i
i=plt.imread(“ana03.png”)
i = cv2.resize(i, (32,32))
data[3,:,:,:]=i
i=plt.imread(“ana04.png”)
i = cv2.resize(i, (32,32))
data[4,:,:,:]=i
i=plt.imread(“ana05.png”)
i = cv2.resize(i, (32,32))
data[5,:,:,:]=i
i=plt.imread(“ana06.png”)
i = cv2.resize(i, (32,32))
data[6,:,:,:]=i
i=plt.imread(“ana07.png”)
i = cv2.resize(i, (32,32))
data[7,:,:,:]=i
i=plt.imread(“ana08.png”)
i = cv2.resize(i, (32,32))
data[8,:,:,:]=i
i=plt.imread(“ana09.png”)
i = cv2.resize(i, (32,32))
data[9,:,:,:]=i

学習と予測
import matplotlib.pyplot as plt
from sklearn import datasets, svm, metrics
from sklearn.model_selection import train_test_split
x = data.reshape((10,-1))
y=np.array([0,1,2,3,4,5,6,7,8,9])
X_train=x
X_test=x
y_train=y
y_test=y
classifier = svm.SVC(gamma=0.001)
classifier.fit(X_train, y_train)
predicted = classifier.predict(X_test)
print(“Classification report for classifier %s:\n%s\n”
% (classifier, metrics.classification_report(y_test, predicted)))

カテゴリー: python, サイキットラーン | タグ: , , | アナログメーターの読取りは、例題のMNISTで出来ます。 はコメントを受け付けていません

python 022 恐怖カメラ(anaconda編)

ANACONDA(WINDOWS版)で実行する手段。

ANACONDAをインストールする。
 https://www.anaconda.com/distribution/
 PYTHONバージョン3.7.5

OPENCVをインストールする。
 バージョン3.4.2
 anaconda prompt コマンドプロンプトを開く。
 必要であれば環境設定、condaアップグレード。
 conda install opencv を実行する。

cv01c.pyファイルを実行する。
 cv01c.py を名前を付けて保存する。
 anaconda prompt コマンドプロンプトを開く。
 cd desktop 保存したファイルの場所へ移動する。
 python cv01c.py を実行する。

終了する。
 「q」を押す。
 「capture.mov」動画ファイルが保存される。

カテゴリー: python | タグ: , , | python 022 恐怖カメラ(anaconda編) はコメントを受け付けていません

python 021 恐怖カメラ(windows編)

WINDOWSパソコンで実行する手段。

PYTHON3.7をインストールする。
 MICROSOFT STOREを開く。
 バージョン3.7と3.8がある。
 お間違えなく。

OPENCVをインストールする。
 バージョン4.2.0
 cmd コマンドプロンプトを開く。
 必要であれば環境設定、pipアップグレード。
 pip install opencv-python を実行する。

cv01c.pyファイルを実行する。
 cv01c.py を名前を付けて保存する。
 cmd コマンドプロンプトを開く。
 cd desktop 保存したファイルの場所へ移動する。
 python cv01c.py を実行する。

終了する。
 「q」を押す。
 「capture.mov」動画ファイルが保存される。

カテゴリー: python | タグ: , , | python 021 恐怖カメラ(windows編) はコメントを受け付けていません

python 020 恐怖カメラ

画像処理のライブラリ OPENCVを使ってみましょう。
OPENCVは 画像データーの前処理を行います。
 カメラ入力
 各種フィルター処理
 特徴量抽出
その後、人工知能で学習を行えます。

何も無い白い画面からでも
特徴量を抽出できます。
特徴量が ウヨウヨと動きます。
若干 恐怖を感じます。
まずは、OPENCVをインストールして 添付ファイルを実行するだけです。

 conda install opencv
 pip install opencv-python
 python cv01c.py

パソコンのカメラを使って 
 動画処理・
 リアルタイム処理・
 特徴量抽出・
 動画保存
を行ういます。
ローカルPCのリソースのみで
画像の前処理を 一通り実施します。
終了する際は。「q」を押します。
更に、動画は自動保存されます。「capture.mov」
皆さん お楽しみください。

名前を付けて保存 https://bono0.com/wp-content/uploads/2020/03/cv01c.py 

カテゴリー: python | タグ: , , | python 020 恐怖カメラ はコメントを受け付けていません

python 019 ひな型

サイキットラーンのデーターセットには
 クラス分類 アヤメの品種
 回帰 ボストン住宅価格
などがあります。これを使うと人工知能のひな型も簡単です。
モデルは、決定木ベースのランダムフォレストが便利です。 クラス分類も回帰も対応可能で しかもお利口で、 人工知能任せでも R二乗スコアが0.98と最高のスコアが出ます。 とりあえず、このひな形があれば 何とかなります。

from sklearn import datasets
from sklearn import ensemble
data=datasets.load_iris()
data=datasets.load_boston()
x=data.data
y=data.target
mod=ensemble.RandomForestClassifier()
mod=ensemble.RandomForestRegressor()
mod.fit(x,y)
pre=mod.predict(x)
import matplotlib.pyplot as plt
plt.scatter(y,pre)
plt.show()

 

カテゴリー: python, サイキットラーン | python 019 ひな型 はコメントを受け付けていません

python 018 交互作用

サイキットラーンの線形回帰において、データーの観察は重要です。入力と出力の関係に指数が影響しているならば、指数の入力を新たに用意する必要があります。ボストン住宅価格に指数のデーターを追加してあげます。R二乗スコアが0.92に改善しました。

サイキットラーンでの交互作用は、専用の関数が用意されています。PolynomialFeatures を使いましょう。便利です。

from sklearn import datasets
data=datasets.load_boston()
x=data.data
y=data.target
from sklearn.preprocessing import PolynomialFeatures
poly=PolynomialFeatures(2)
poly.fit(x)
x=poly.transform(x)
from sklearn.linear_model import LinearRegression
mod=LinearRegression()
mod.fit(x,y)
pre=mod.predict(x)
import matplotlib.pyplot as plt
plt.scatter(y,pre)
plt.show()
mod.score(x,y)

カテゴリー: python, サイキットラーン, リナックス | タグ: | python 018 交互作用 はコメントを受け付けていません

python 017 LinearRegression

サイキットラーンの人工知能は、ニューラルネットワーク以外も沢山あります。まずは、線形回帰です。エクセルでもお馴染みの 人工知能ですね。サイキットラーンの線形回帰がエクセルよりも 優れている点は、複数のxを学習可能で、重回帰と呼ばれてます。まずは、ボストン住宅価格の分析です。R二乗スコアは、0.74です。もう少し頑張りましょう。

from sklearn import datasets
data=datasets.load_boston()
x=data.data
y=data.target
from sklearn.linear_model import LinearRegression
mod=LinearRegression()
mod.fit(x,y)
pre=mod.predict(x)
import matplotlib.pyplot as plt
plt.scatter(y,pre)
plt.show()
mod.score(x,y)

カテゴリー: python, サイキットラーン, リナックス | タグ: | python 017 LinearRegression はコメントを受け付けていません

python 016 datasets

サイキットラーンなどのライブラリーには、教科書によく出てくるデーターセットが含まれています。まずは、読み込みましょう。そして、眺めましょう。

from sklearn import datasets
data=datasets.load_iris()
x=data.data
y=data.target
import pandas as pd
df=pd.DataFrame(x)
df[“target”]=y
pd.plotting.scatter_matrix(df,c=y,figsize=(5,5))

カテゴリー: python, サイキットラーン, ニューラルネットワーク, リナックス | タグ: | python 016 datasets はコメントを受け付けていません