pythonでchainerを使った手相(生命線)診断プログラムを作っています。
[ソースコード]
import cv2
import numpy as np
from chainer import Chain, serializers
import chainer.functions as F
import chainer.links as L
class MyMLP(Chain):
def init(self, n_in=120000, n_units=100, n_out=2):
super(MyMLP, self).init(
l1=L.Linear(n_in, n_units),
l2=L.Linear(n_units, n_units),
l3=L.Linear(n_units, n_out),
)
def call(self, x):
h1 = F.relu(self.l1(x))
h2 = F.relu(self.l2(h1))
y = self.l3(h2)
return y
def preprocessing(img):
img = img[100:400,200:600]
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img = cv2.GaussianBlur(img, (3, 3), 0)
img = cv2.resize(img, (300, 400))
res, img = cv2.threshold(img, 130, 255, cv2.THRESH_BINARY_INV)
img = img.astype(np.float32) / 255
img = np.array(img).reshape(1, 120000)
return img
def main():
model = MyMLP()
serializers.load_npz('mymodel.npz', model)
capture = cv2.VideoCapture(0) if capture.isOpened() is False: raise("IO Error") while True: ret, image = capture.read() if ret == False: continue cv2.rectangle(image, (200,50), (500,450), (0,0,255), 1) cv2.imshow("Capture", image) k = cv2.waitKey(10) if k == ord('e'): img = preprocessing(image) num = model(img) print(num.data) print(np.argmax(num.data)) if k == ord('q'): break capture.release() cv2.destroyAllWindows()
if name == 'main':
main()
自分の手相を映した結果
まだまだ精度は低いですが一応生命線の短長を0か1で判別はできています。
この結果表示に例えば、結果が0ならば”あまりよくないよ”のような一言を一緒に結果として出力したいです。
そのためにはどんなコードを足せばいいか教えていただきたいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/05 08:56