みなさんこんにちわ、こんばんわ

SAIです。

 

お盆休みですね。

SAIもお盆休みに突入しました。

 

画像認識をするということで、

実績のある方法をトレースすることで試してみたいと思います。

 

色々参考になりそうなサイトを眺めていたのですが、

どうも動かしている言語がPythonという言語のサンプルが多そうです。

 

検出方法に関してはOpenCVが多そうですね。

 

とりあえず、

Python これは、SAIの知らない言語です。

 

 

実装するにあたりPythonという言語を

SAIが理解できなければ、話になりません。

 

 

まずは、PythonをSAIが理解できるか?

この判断が必要そうです。

 

SAIが知っているのは、

1990年代のBASIC(手続き型)

 PC98やベーシックマスターで使ってましたね。

2000年代のC言語(手続き型)およびC++言語(オブジェクト指向 )

      、そしてJava(オブジェクト指向 )

 これらは仕事として使っていましたので、それなりに知識はあります。

 

そのほか、おまけ程度に、CAPLとかマニアックなのもいくつか知っていますが、

この程度。

 

最近?の言語(C#とかRuby)とかはよく知りません。

 

調べてみると、Pythonは(オブジェクト指向 )型の言語だそうですね。

 

理解には苦しまなさそうな気がします!

 

 

Pythonの勉強によさそうなサイトを探していると、

Python Japan (www.python.jp)というサイトを見つけました。

ゼロからのPython入門講座 - python.jp

 

このサイト、公式化と思いきや、

 

>Pythonの公式サイトではなく、Pythonを開発する Python Software Foundation とも無関係です。

 

とのことで、個人のサイトのようですが、

とても良い教科書で助かりました。

(手続き型言語としての教科書です。)

 

C/C++言語との決定的な違いは、以下のような気がしてきました。

 

C言語の構文やサブルーチンは{}でくくることで判断し、

インデントに関してはプログラマのセンスに任されている。

------------------------------------------------

if((a==b) && (a>0))

{

// a=b and a>0 の時の処理 ---- 同一インデントで書いてもいい

printf("a=b and a>0");

}else if(a<b)

   // a<bの時の処理 ---- インデントをした方が見やすい

   printf("a<b");

{

}else{ printf("a>=b"); } // a>bの時の処理 1行に無理やり書いてもいい

 

------------------------------------------------

Pythonは、

構文やサブルーチンはインデントの階層により行う。

 -> インデントが超重要!な言語といえそう。

===============================================

if a=b and a>0 :  

    print("a=b")    a=bの時の処理 ---- インデントを1層増やさないとエラー

elif a<b:  

   printf("a<b")

else :

   printf("a>=b"):

# ifと同じインデントの処理が書かれた、elseの終了

 ===============================================

 

どうやら、

ネストでインデントをしっかりすれば、コードが見やすくなる

という思想で作られた言語のようですね。

 

また、PythonはC言語のようにメモリ管理をしなくてよく、

初心者でも扱いやすい言語ともいえそうです。

 

ぶっちゃけ、変数は作ったら作りっぱなしでよい言語

といえるでしょう。

 ⇒組み込みには向いてなさそうだなぁ・・・

 

SAIはこの考え方嫌いですね。

特に、メモリ枯渇にうるさい組み込み系では問題になるんだよね。

(だから、Android 1.6くらいの初期にJavaを使いたくなくなった)

 

 

そしてもうひとつ。

SAIの知っている言語のうち、

BASICはともかく、他の言語は{}が主体の言語です。

 

SAIにとっては読みにくい(汗)

 

とはいえ、基本的なチュートリアルをやってみたところ、

全く理解できない訳ではなさそうです。

 

 

概念を覚える、遊びで使う分には問題ないでしょう。

 

 

ということで、

3時間くらい?かかりましたが基本学習しました。

 

後は、実践で覚えようと思います。

 

続く。

 

晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ

雑談

組み込み系って、メモリを大切にしないと、メモリ枯渇でNewに失敗して

適切な処理をしていないと、最悪リセットするんですよね。

 

C++で携帯電話を作っていた時、

プロジェクトが大きいため、

機能によっては割と初心者的なエンジニアや、PCソフト上がりのエンジニアも

参画していたんですよね。

 

メモリの仕組みを理解しきれていないためか、

newとdeleteを繰り返したことによりメモリの断片化が発生

⇒挙句、メモリ領域としては空き領域が沢山あるはずなのに、

 連続領域としてメモリが取れないなんてことが発生して

 リセットするというパターンを何度か見てきました。

 

Javaはメモリを管理しない代わりに、

メモリが足りなくなるとガベージコレクションが走りますね。

ただ、故意的にガベージコレクションを動作させないと、

パフォーマンスを必要としているタイミングで走ってしまう危険性もあるんですよね。

 

そして、参照なのか実態なのかよくわからない状態で、

必要なメモリをコピーと間違えて破壊する初心者が現れる訳です。

 

SAIが携帯電話開発者として働いていたころは、

携帯電話というものは、緊急時に電話が掛けられなければ、命に係わる。

フリーズなんてありえない!

ということで、堅牢に作りなさいと言う風潮でした。


そんなわけで、SAIは組み込みの仕事でJavaを使いたくない

というか、アドレスがわからないので、メモリを破壊されたときに

解析が超面倒なんですよね。

特に、自動変数が壊されると、アドレスが不明なので解析なんて最悪です。

 

Javaはお遊び専用言語と解釈した理由がそこにあります。

 

今のスマフォは平気でフリーズやアプリ再起動しますね。

スマフォは、携帯電話ではなくモバイルPCという認識なのですかね。

 

若いPCを触ったことがある世代が増えたことで

そういうもんだという認識が広がってくれたのかもしれません。

 

そういう時代なら、

Javaで開発してもいいかな。。

 

晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ晴れ

 

SAIでした。

 

 

みなさんこんにちわ、こんばんわ

SAIです。

 

お盆休みですね。

SAIもお盆休みに突入しました。

 

「電子工作」Arduinoで遊ぼうというブログを一旦放置して、

 

画像認識をやってみようと思います。

 

いまさらSAIが画像認識に興味を持った理由は

 

こんな広告を見たから。

 

楽しそうですね。

SAIの心をくすぐります。

 

ただ、画像認識用にデバイスを買うとなると、

お財布との相談になります。

 

この手のデバイスで一番有名なのは、raspberry Pi

 

JetsonNano と raspberry Pi (以降ラズパイ)で悩んでいました。

 

JetsonNanonVidia製ということもあり、画像認識は得意のはずです。

とはいえ、インターネット上のサンプル量でいうと、ラズパイが有利であるはず。

 

 

色々考えてたんですが、

カメラがあれば、勉強なんてPCでもできるんじゃないか?

まずはPC上で机上確認 PCで動作確認 してもいいんじゃないか?

 

と考えたのです。

 

 

というわけで、

このお盆休みの間にやること

 

①家族サービス

       

②ビート君の整備をする

       

③画像認識の勉強

       

で行こうと思います。

 

 

②は、暑くてあきらめることが大はず。(笑)
 

 

というわけで、

早速 お盆休みが8/7からスタートです!

 

口笛口笛口笛口笛口笛口笛口笛口笛口笛

 

まず、SAIの基礎知識ですが、

20年くらい前に大学の博士課程の友人(先輩)に概念を聞いた程度

 

①検出したいものの画像の特徴抽出

 輪郭を強調したり、

 色成分を強調したりして特徴を出す

 

②検出する画像のを検索

 画像の左上から①で検出した特徴と一致するか、

 ①の特徴を回転や拡縮して一致するか少しづつサーチしながら検索

 

という方法をしていると聞きました。

 

この話を聞いたとき、①の特徴抽出が難しそうで、

認識処理のキーになるんだろうなと思った記憶があります。

 

 

ちなみに、動作検知の場合1コマ前の画像と今回の画像の色成分を引き算すると

動きのあったドットが色として現れる

その色成分の移動方向を時系列に表現するとモーションになる

と、言っていましたね。

 

うまく言葉にできないですが、黄色い棒を上から棒を振り下ろすと、

ひとつ前の画像から

①なくなった部分が青

②増えた部分が赤

として、画像比較すると、青と赤が下のようにずれた画像になる。

 

 

ということですね。

ただ、当時のCPU速度ではリアルタイムは無理で、

撮影した動画を結構な時間をかけて解析して、

それでも方向程度しか認識できてなかったです。

 

そんな20年前の知識はもはや古代の遺産のはず。

 

なので、最新の情報を入手するところから始めます。

 

 

古いプログラマーのSAIですが、

GitHubなんてものを最近知りました。

 

画像認識

調べてみると、結構ソースが公開されていますね。


サーっと見てみると、

OpenCVという認識と

Python という言語の参考資料が多そうです。

 

SAIとしてはどちらも初ですね。

OpenCVはコマンドラインから動かせそう。

 

Pythonに関しては・・・

1からお勉強ですね。

 

 

 

画像認識って、

処理を作ることより、

特徴抽出の方法や、サンプル画像の出来栄えの方が

非常に認識効率に影響するように思います。

 

大量のサンプルの選定と学習の部分が非常に大変になりそうです。

 

まずは、誤認でも良いので認識をさせるところから始め、

間違いを学習していくスタンスになるのかな?

 

まずは最新の考え方を読み込まねば。

 

 

みなさんこんにちわ、こんばんわ。

SAIです。

 

今日はしょうもない話です。

 

 

現実って甘くないですよね。

 

 

何の話かというとブログの話。

 

このブログ、更新周期が悪いですよね。

 

解ってます。

モチベーションの問題なんです。

 

 

個人の日記的に書いているブログとはいえ、

アメブロは閲覧数がカウントされています。

 

日記ブログとはいえ、時間を使って書いているものです。

 

 

やっぱり閲覧数が気になってしまうところです。

 

 

 

SAIですが、

実は3つほどブログを書いています。

 

 

1つ目はこのブログ。

2つ目はゲーム

3つ目は自動車関連。

 

その中で、リアルサイドは

一番人気がないです(爆)

 

 

 

リアルサイドという通り、現実よりの話を書いているのですが、

最近は電子工作寄りですね。

 

そもそも、アメブロは電子工作とかプログラムとか。

そっち系のブログには向いていないので仕方ない。

 

 

QIITAとかで書けば閲覧数は増えるでしょうね。

 

 

 

それは判ってるんですが・・・

何でも書くブログにしたいんだから仕方ない!

 

 

 

で、更新が悪い理由ですが、

このブログの来訪者を暴露。。

 

 

ここ一か月の来訪者は、この程度です。

 

前職の時代は、当時の友人が見に来てくれていたので、

色々書いていました。

が、当時はなんやかんやで、mixiの方がメインだったかな?

 

 

それでも、閲覧してくださる方がいるというのは良いことです。

 

 

 

が、

 

これに対して、一番人気の高いブログが・・・

 

 

ゲームのブログ。

 

閲覧数はなんと10倍以上なんだよね。

 

 

なんの役にも立たないゲームの話。

 

何の身にもつかないゲームの話。

 

 

 

なんですが、

 

なんの教養にも、なんの役にも立たないとわかっていても、

 

 

それでも、見てくれる人が多いと、書いちゃう!

 

 

そして、

 

ブログを書くために、ネタを用意、ゲームを頑張っちゃう!

 

やめられない止まらない~

 

 

悪循環!

 

 

というかね。


 

相方に、電子回路とかプログラムとか機材を扱うと嫌がられるし、

猫にも邪魔される(壊される)から。

 

 

そもそも毎日片づけないと文句言われるってどうよね。

 

 

ブレッドボード片づけたら回路が断線して、また接続しなおしって手間すぎるのよね。

 

作業は進まなくて飽きる。

 

 


 

SAIの現実世界よ!

 

非常に、学習のしにくい現実。。

 

 

みんなこんなもんなのかなぁ・・・

 

 

独身時代は良かったなぁ・・・

 

 

資金も潤沢だったし。

 

 

SAIでした。