

SONY NNC window版で自前の画像（ラズパイＶ２）80×80、datesets
positiveとnegative画像をそれぞれ、120枚と90枚で学習して、28×28サイズで学習結果
accuracy=1を得て、model.nnbをSDに保存。この作業のまえに、NNCクトプロジェクト例のnummber_recognition.sdcprjの学習済みmodel.nnb
をSDカードに保存後、Spresense arduino
IDEのスケッチ例、Spresense_number_recognition.inoを試した結果数字の認識が再現出来ましたので、これを手本に、  
下記の様にコード変えてみましたが、  
・・・・・  
画像サイズが28×28の偶数倍の正□角した  
#define DNN_IMG_W 28  
#define DNN_IMG_H 28  
#define CAM_IMG_W 320  
#define CAM_IMG_H 240  
#define CAM_CLIP_X _**40**_  
#define CAM_CLIP_Y 0  
#define CAM_CLIP_W **224**  
#define CAM_CLIP_H 224  
・・・・・  
static uint8_t const label[ **2** ] = { **" _positve_20pg, negative_20pg_
"**};  
・・・・・  
if (index < _**1**_ ) {  
gStrResult = String(label[index]) + String(":") + String(output[index]);  
} else {  
gStrResult = String("?:") + String(output[index]);  
}  
・・・・・  
以上3か所で  
書き込みすると、下部のライン表示部は  
71：0.00で点滅で同じ数字で、入力画像を変えても変化しない結果、

以上の3か所はほかのにも試しましたが同じ結果でした、  
おそらく、ほかに変える必要あるところは、  
labelがposiとnegaの2種類ですので、上記でよいと思いますが、  
どこをどう直せばよいのか？  
画像の判定評価の結果の確立がposiの時は0.9900以上あり、negaの時は0.001以下ですので、この評価が必要と思いますが、コードの書き方が分からないので、  
他に、2種類の判定するスケッチの例（例：リンゴとオレンジの画像を識別するスケッチ）識別するものあれば教えてもらえませんか？


CC BY-SA 4.0
2022-03-28T13:59:15.947
88073
2022-04-03T15:33:42.660
2022-04-02T07:59:27.530
51987
51987
question
spresense arduino
spresense arduino IDEでリアルタイムで自前の画像認識（正解画像と不正解画像）するスケッチを作成したい


コンソール文字列の ”71:0.00”
最初の71と表示されてしまうところはラベル文字列用のメモリが確保できていないことが原因です。後半の確率出力はこの内容ではわかりません。

そもそも文字列の定義の部分がおかしいです。

[code]

    static uint8_t const label[2] = {" positve_20pg, negative_20pg "};
    
[/code]

恐らく、"positive_20pg",
"negative_20pg"と２つの文字列を出したいのだと思いますが、その場合はそれぞれの文字列分のメモリを確保する必要があります。"positive_20pg"が13文字、"negative_20pg"が13文字ですので、null終端を考慮し、14文字の配列を確保しておけばよいでしょう。あと文字列ですので
uint8_t ではなく char のほうがふさわしいですね。

[code]

    static char const label[2][14] = { "positive_20pg","negative_20pg" };
    
[/code]

これを次のコードで出力できるか確認してください。

[code]

    static char const label[2][14] = { "positive_20pg","negative_20pg" };
    
    void setup () {
    
      Serial.begin(115200);
    
      Serial.println(label[0]);
      Serial.println(label[1]);
      
    }
    
    void loop () {}
    
[/code]

もし、これで何を言っているのかわからない場合は、 **C言語のメモリ配列**
について勉強をしてください。CやC++言語の基本中の基本ですので、まずその理解を深めておかないと、この先マイコンボードを扱うことはできません。

あと蛇足ですが、

[code]

    if (index < 1) {
    gStrResult = String(label[index]) + String(":") + String(output[index]);
    }
    
[/code]

だと、"positive_20pg" しか表示されませんが、それでいいのでしょうか？もし、そうであれば、わざわざ labelを定義する必要もない気がします。


CC BY-SA 4.0
2022-04-03T15:22:57.687
88151
2022-04-03T15:33:42.660
2022-04-03T15:33:42.660
27334
27334
88073
answer