Help us understand the problem. What is going on with this article?

アナログメーターの読取りは、例題の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と同等のクラス分類です。データーが十分あれば、トレーニングとテストに分けたり、過剰適合の検証をしたり、パラメーターの調整をしたり、色々できます。

ana00.png
ana00.png

ana01.png
ana01.png

ソースコード
データー準備
画像ファイルを下記に保管してます。
https://bono0.com/

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)))

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした