🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Neural Network Console

Neural Network Consoleは、ソニー社が開発したディープラーニング・ツール。ニューラルネットワークを視覚的に設計することが可能で、学習や評価をスムーズに実現できます。また、ニューラルネットワークを自動的に構築する機能も備わっています。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1274閲覧

USBカメラを使ったリアルタイム推論の実現

max12345

総合スコア20

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Neural Network Console

Neural Network Consoleは、ソニー社が開発したディープラーニング・ツール。ニューラルネットワークを視覚的に設計することが可能で、学習や評価をスムーズに実現できます。また、ニューラルネットワークを自動的に構築する機能も備わっています。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/01/11 08:19

編集2021/01/11 09:49

リンク内容
↑のブログを参考にして、アメリカ手話のA~Z(合計26ラベル)をカメラで認識できるシステムを作成したいと思っています。
今、皆様の助けをいただきカメラが立ち上がるところまでは上手くいきました。

#【追記】 
import nnabla as nnを追加することで、エラーメッセージはなくなりましたが、推論結果に「A」が表示されないです。
load model

[9.0499201e-13 8.3284620e-03 2.1359593e-13 9.3729278e-07 4.2998489e-02
9.3104863e-05 7.0083592e-11 8.0992570e-05 9.2842669e-07 5.9911050e-04
7.4407092e-10 2.2560068e-08 2.0808401e-04 8.7901944e-01 1.7035285e-07
4.3053884e-02 1.8338830e-04 8.9202439e-03 1.4667655e-09 1.6219448e-02
2.6256490e-15 2.4283212e-04 4.4393473e-05 5.1424081e-06 8.9699347e-07
9.0430478e-14]
イメージ説明

#CSVファイルの内容はこれで間違いないのでしょうか?うまくいかないということは恐らく違うかもしれないです。(1枚目の画像)
イメージ説明
#CSVファイルの保存場所 (2枚目の画像)
イメージ説明

Python

1import nnabla as nn 2import nnabla.functions as F 3import nnabla.parametric_functions as PF 4from nnabla.utils.data_iterator import data_iterator_csv_dataset 5import os 6import cv2 7from datetime import datetime 8import pandas as pd 9import matplotlib.pyplot as plt 10import numpy as np 11from PIL import Image 12 13def network(x, y, test=False): 14 # Input:x -> 3,250,250 15 # MulScalar 16 h = F.mul_scalar(x, 0.003921568627450981) 17 # DepthwiseDeconvolution -> 3,256,256 18 h = PF.depthwise_deconvolution(h, (7,7), name='DepthwiseDeconvolution') 19 # ReLU 20 h = F.relu(h, True) 21 # MaxPooling -> 3,128,128 22 h = F.max_pooling(h, (2,2), (2,2)) 23 # Convolution -> 16,128,128 24 h = PF.convolution(h, 16, (3,3), (1,1), name='Convolution') 25 # MaxPooling_2 -> 16,64,64 26 h = F.max_pooling(h, (2,2), (2,2)) 27 # Tanh 28 h = F.tanh(h) 29 # Affine -> 100 30 h = PF.affine(h, (100,), name='Affine') 31 # ReLU_2 32 h = F.relu(h, True) 33 # Affine_2 -> 26 34 h = PF.affine(h, (26,), name='Affine_2') 35 # Softmax 36 h = F.softmax(h) 37 # CategoricalCrossEntropy -> 1 38 #h = F.categorical_cross_entropy(h, y) 39 return h 40 41cap = cv2.VideoCapture(0) # 任意のカメラ番号に変更する 42 43new_dir_path = "./realtime/" 44os.makedirs(new_dir_path, exist_ok=True) 45 46 #カメラスタート 47while True: 48 49 ret, frame = cap.read() 50 cv2.imshow("camera", frame) 51 52 k = cv2.waitKey(1)&0xff # キー入力を待つ 53 if k == ord('p'): 54 55 # 「p」キーで画像を保存 56 57 date = datetime.now().strftime("%Y%m%d_%H%M%S") 58 path = new_dir_path + date +".png" 59 cv2.imwrite(path, frame) 60 image_gs = cv2.imread(path) 61 62 path = new_dir_path + date +".png" 63 dst = cv2.resize(image_gs,(250,250)) 64 cv2.imwrite(path, dst) 65 66 f = pd.DataFrame(columns=["x:data","y:data"]) 67 xdata = path 68 ydata = 0 69 new_name = pd.Series([xdata,ydata],index=f.columns) 70 f = f.append(new_name, ignore_index=True) 71 f.to_csv('C:\Users\username\Desktop\output\valu.csv',index=False,header = True ) 72 73 test_data = data_iterator_csv_dataset("C:\Users\username\Desktop\output\valu.csv",1,shuffle=False,normalize=True) 74 75 76 #ネットワークの構築 77 nn.clear_parameters() 78 x = nn.Variable((1,3,250,250)) 79 t = nn.Variable((1,1)) 80 y = network(x, t) 81 82 nn.load_parameters('\Users\username\Desktop\output\yubidata.files/20210108_180946\results.nnp') 83 print("load model") 84 85 86 87 path = new_dir_path + "test" +".png" 88 cv2.imwrite(path, frame) 89 image_gs = cv2.imread(path) 90 91 path = new_dir_path + date +".png" 92 dst = cv2.resize(image_gs,(250,250)) 93 cv2.imwrite(path, dst) 94 95 f = pd.DataFrame(columns=["x:data","y:data"]) 96 xdata = path 97 ydata = 0 98 new_name = pd.Series([xdata,ydata],index=f.columns) 99 f = f.append(new_name, ignore_index=True) 100 f.to_csv('C:\Users\username\Desktop\output\valu.csv',index=False,header = True ) 101 102 test_data = data_iterator_csv_dataset("C:\Users\username\Desktop\output\valu.csv",1,shuffle=False,normalize=True) 103 104 105 #ネットワークの構築 106 nn.clear_parameters() 107 x = nn.Variable((1,3,250,250)) 108 t = nn.Variable((1,1)) 109 y = network(x, t) 110 111 nn.load_parameters('C:\Users\username\Desktop\output\yubidata.files/20210108_180946\results.nnp') 112 print("load model") 113 114 for i in range(test_data.size): 115 116 x.d, t.d = test_data.next() 117 y.forward() 118 print(y.d[0]) 119 120 121 elif k == ord('q'): 122 # 「q」キーが押されたら終了する 123 124 break 125 126 # キャプチャをリリースして、ウィンドウをすべて閉じる 127cap.release() 128cv2.destroyAllWindows()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

すみません,そのブログ書いたものです.

具体的にやりたいこと

  • 1フレームごとに1枚の画像に対して26のラベルのどれかを推論する

すでに学習済みで.nnpファイルがある.
と勝手に仮定します.

疑問

  • valu.csvは何のために使っているデータでしょうか?

余分なところ

  • 2回この処理が入ってますが,初めの方は消しても良いと思います.
#ネットワークの構築 nn.clear_parameters() x = nn.Variable((1,3,250,250)) t = nn.Variable((1,1)) y = network(x, t) nn.load_parameters('\Users\username\Desktop\output\yubidata.files/20210108_180946\results.nnp') print("load model")

前回述べたかもしれませんが,
valu.csvは推論に使うための私が作ったcsvファイルでした.
そのため1フレームの画像パス1つだけが格納されていれば良いです.
(yのラベルは適当でよい)
つまり,画像の2行目までで良い(いまのcsvファイルの形式だと2~27行目までの画像が読み込まれてそれに対して一枚ずつ推論した結果が出力される)

あと出力されるデータ(y.d[0])はAとはでません.
[0.9,0.1,0.0 ...]
のように26次元の確率分布?のリストが出力されます.
この場合は一枚の画像の推論結果は
0番目の確率が90%, 1番目の確率が10%を意味する.

蛇足

このサイトのようにcsvファイルを介さずに画像を渡した方が,賢いです.
こうすることで無駄なcsvファイル(valu.csv)を作らないで済むのでパフォーマンスも良い.

https://arkouji.cocolog-nifty.com/blog/2019/02/sony-neural-net.html

投稿2021/01/12 00:45

meJ15

総合スコア55

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jbpb0

2021/01/12 01:54

質問者さんへ コードの print(y.d[0]) のすぐ下に print(np.argmax(y.d[0])) を(インデントを合わせて)追加したら、何番目が一番確率が高いか表示されると思います ただし、順番は1からではなく0から数えます もし、学習させたときの教師データの順番がアルファベット順(A, B, C...X, Y, Z)だったなら、 class_names = ['A', 'B', 'C', (略) 'X', 'Y', 'Z'] をコードの cap = cv2.VideoCapture(0) のすぐ上に(インデントを合わせて)追加して、このコメントの最初に書いた print(np.argmax(y.d[0])) のすぐ下に print(class_names[np.argmax(y.d[0])]) を(インデントを合わせて)追加したら、推定結果がアルファベットで表示されると思います 上記 class_names =... の(略)は、省略しないで全部書いてください 手元で動かせないので、もしかしたら書き方のミスを見落としてるかもしれませんが、基本的にはこんな感じでやります
guest

0

プログラムの最初に

import nnabla as nn

を追加してください。

投稿2021/01/11 08:49

ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問