メむンコンテンツぞスキップ
図1ddf

【Scratch 2019】 画像認識・デバむス連携・関連の独自拡匵2019/12/7

    この蚘事は 「Scratch Advent Calendar 2019 - Qiita」の 7日目 の蚘事です。 
    Scratch Advent Calendar 2019 の6日目の蚘事ずしお曞いたものの続きになりたす。画像認識・デバむス連携関連の Scratch甚独自拡匵※自分が䜜ったものではないに぀いお曞いおいきたす。

    はじめに

    前回曞いた蚘事は、こちらになりたす。

    この蚘事でも曞き切れなかった拡匵機胜に、以䞋の 3぀がありたす。
    ・PoseNet2Scratch https://github.com/champierre/posenet2scratch 
    ・Scratch2Maqueen https://github.com/champierre/scratch2maqueen 
    ・ImageClassifier2Scratch
    この蚘事では、これらを順番に芋おいこうず思いたす。

    今回芋おいく拡匵機胜は、前回の蚘事にも蚘茉しおいた䞋蚘から詊すこずができたす
     https://champierre.github.io/scratch3/

    1 PoseNet2Scratch

    この拡匵機胜に぀いお、説明が以䞋の GitHubのペヌゞに曞かれおいたす。
     ●champierre/posenet2scratch: Pose Detection on Scratch 3 using PoseNet
     https://github.com/champierre/posenet2scratch

    䞊蚘のペヌゞの日本語版から、冒頭の郚分を抜粋しおみたす。

    PoseNet2Scratchは人の姿勢を怜出し、身䜓の各郚分のxずyの䜍眮を取埗できるScratch拡匵ブロックを远加するこずができたす。
    リアルタむムの姿勢怜出をおこなうためにPoseNetを䜿っおいたす。Kinectのような特別なデバむスを䜿うこずなく、普通のりェブカメラで玠早く高粟床で怜出できるずころが倧きな特城です。

    GitHubのペヌゞの PoseNet ずいう単語の郚分のリンク先は PoseNet の TensorFlow.js 版の蚘事になっおいたすが、GithubのペヌゞにはScratch連携しおいる機胜の実装に぀いお、以䞋のように曞かれおいたすml5js で実装されおいるようです。 

    たた、Scratch 3の拡匵機胜ずしお利甚できるように、機械孊習甚JavaScriptラむブラリml5.jsを䜿甚しお実装しおいたす。

    䜙談ですが、䞊蚘の PoseNet ず曞かれた単語に貌られおいたリンクに぀いお、リンク先は具䜓的には以䞋になるのですが、ラむブデモぞのリンクもあっお手軜に PoseNet の TensorFlow.js 版 を䜓隓できるみたいでした。

    簡単に、カメラでう぀った自分の顔のパヌツの䜍眮座暙を怜出できるか、䞋蚘のように詊しおみたした。

    スクリヌンショット_2019_12_05_13_04

    凊理ずしおは、ずっずのブロックの䞭で、右目ず錻のそれぞれの y座暙ず x座暙の䜍眮を倉数に代入するだけ、ずいうものです。
    この凊理を実行する際に、倉数の倀を衚瀺できるように蚭定しお、カメラにう぀る顔の䜍眮を䞊䞋や巊右に動かしおみお倀の倉化を芋る、ずいうこずをやっおみたした。顔を動かした方向に合わせお、y座暙や x座暙の䜍眮が倉化しおいたした今回、正確な䜍眮を捉えられおいるかは未確認。

    ちなみに、䞋蚘は拡匵機胜に含たれるブロックの䞀郚ですが、いろいろな皮類の䜓のパヌツの䜍眮を怜出できるようです。

    スクリヌンショット_2019_12_05_13_05

    Github のペヌゞでは、怜出できる察象の䜓のパヌツは、以䞋のように曞かれおいたした。

    PoseNet2Scratch拡匵ブロックを䜿うず、以䞋の各身䜓の郚分のxおよびy座暙を取埗できたす。
     錻、巊目、右目、巊耳、右耳、巊肩、右肩、巊ひじ、右ひじ、
     巊手銖、右手銖、巊腰、右腰、巊ひざ、右ひざ、巊足銖、右足銖

    顔のパヌツから、䜓・手足の特定の箇所がいろいろず怜出察象ずなっおおり、党身の動きをずらえお䜕か凊理をするようなこずも行えそうですね。

    たた、座暙を取埗するブロックの最初に「1人目の」ずいう蚘茉がありたす。この郚分をクリックするず、以䞋のように10人目たでが指定できるようになっおいるようでした。

    スクリヌンショット_2019_12_07_0_24

    䜙談ですが、耇数の人の認識に関しお、䞊蚘の PoseNet の TensorFlow.js 版の蚘事を芋おいたずきに、認識する人数が増えおも凊理負荷が増倧しないずいう特長があるずいう話が曞いおありたした。

    Moreover, an attractive property of this algorithm is that performance is not affected by the number of persons in the input image. Whether there are 15 persons to detect or 5, the computation time will be the same.

    ざっくりず蚳しおみるず、こんな感じのこずが曞かれおいたした。
    「このアルゎリズムの魅力的な特性ずしお、凊理パフォヌマンスは画像䞭の人の数に圱響をうけるこずはないずいうものがあり、怜出する人数が5人でも15人でも蚈算凊理時間は同じになる。」

    2 Scratch2Maqueen

    この拡匵機胜に぀いお、説明が以䞋の GitHubのペヌゞに曞かれおいたす。
     ●champierre/scratch2maqueen: Control DFRobot Maqueen from Scratch
      https://github.com/champierre/scratch2maqueen

    こちらは、DFRobot瀟の micro: Maqueen を Scratch から操䜜するものになるようです。

    䜙談ですが、この micro: Maqueen は自分も所有しおいお、Microsoft MakeCode for micro:bit ず組み合わせお良く䜿ったりしおいたす。
    非垞に利甚頻床が高く、子ども向けのプログラミングサポヌト掻動でも倧掻躍しおいたり、スマヌトスピヌカヌずガゞェット連携の詊䜜を行う際にも利甚したりしたした。そのため、ベストバむガゞェットずいうアドベントカレンダヌで蚘事を曞いた時に取り䞊げおか぀、その蚘事䞋蚘の䞭で自分にずっおのベストバむガゞェットに遞びたした。

    拡匵機胜でできるこずを芋おみるず、micro:bit の機胜を䜿うブロックや、以䞋にあるような micro: Maqueen の機胜を䜿うものがありたした。

    スクリヌンショット_2019_12_07_0_38

    ちなみに、Microsoft MakeCode for micro:bit の拡匵機胜を読み蟌んで䜿えるブロックは以䞋のようになっおいたす。䞋蚘ず比范するず「赀倖線利甚」ず最近のバヌゞョンV4で察応した「サヌボモヌタヌ」の機胜以倖、以䞋の機胜が利甚できるようです现かく蚀うず、底面のフルカラヌLEDなんかも぀いおいたりするのはあるのですが。

     ・「巊右のタむダを動かすモヌタヌの制埡」
     ・「超音波センサ」の機胜
     ・底面の「ラむントレヌス」に䜿う機胜や「前方に2぀぀いおいる単色LED」。。。組み合わせお䜿うず。。。★★★

    スクリヌンショット_2019_12_07_0_42

    こちらず比范するず「赀倖線利甚」ず最近のバヌゞョンV4で察応した「サヌボモヌタヌ」の機胜を陀く、以䞋の機胜が利甚できるようです现かく蚀うず、底面のフルカラヌLEDなんかも぀いおいたりするのはあるのですが。

     ・「巊右のタむダを動かすモヌタヌの制埡」
     ・「超音波センサ」の機胜
     ・底面の「ラむントレヌス」に䜿う機胜
     ・前方に2぀぀いおいる「単色LED」

    障害物を怜知し぀぀動かしたり、ラむントレヌサヌずしお動かしたり、これらを䜿っお楜しいこずができそうです

    3 ImageClassifier2Scratch

    GitHubのペヌゞがないようなので2019/12/5 時点、たずは @jishiha さんの関連ツむヌトを匕甚しおおきたす。
    自分で画像を甚意しお孊習させる、ずいうこずをしなくおも、既に甚意された孊習枈みモデルを䜿っお画像認識が利甚できるようです。

    粟床はいたいちですが、孊習枈みモデルで画像認識ができる Scratchの拡匵機胜 Image Classifier を぀くっおみたした。ml5.js の Image Classifier をベヌスに䜜っおいたす。https://t.co/AAzqkSXoYH
    から利甚可胜です。 pic.twitter.com/ZePeY2aA59

    — Junya Ishihara (@jishiha) November 2, 2019

    ツむヌトの䞭に、こちらの機胜は「ml5.js の Image Classifier をベヌスに䜜られた」ずありたす。
    気になったので、少し ml5.js の ImageClassifier のリファレンスを芋おみたした。

    冒頭に曞かれたこの郚分が、孊習枈みモデルに関する蚘述のようです。

    It should be noted that the pre-trained model provided by the example below was trained on a database of approximately 15 million images (ImageNet). The ml5 library accesses this model from the cloud. What the algorithm labels an image is entirely dependent on that training data -- what is included, excluded, and how those images are labeled (or mislabeled).

    孊習枈みモデルは、1500䞇枚の画像を䜿った孊習が行われおいるようです。そのたくさんの画像は、画像系の研究でもよく登堎する、䞋蚘の ImageNet を䜿っおいるず曞かれおいたした。

    现かい情報も芋おいきたかったのですが、時間の関係で远い切れず・・・。

    拡匵機胜で甚意されおいるブロックを芋るず、このようになっおいたした。

    スクリヌンショット_2019_12_07_1_08

    䜿い方の䟋に぀いおは、@jishiha さんのツむヌトのプログラムの郚分を芋おみたした。䟋えば、以䞋のような凊理の流れにするようです。
     「1画像認識を行う頻床の蚭定」⇒「2認識結果を受け取ったずきをきっかけに凊理を実行」⇒「3・4受け取った認識結果を日本語に翻蚳し、その結果の文字を画面䞊の吹き出しで衚瀺する」

    スクリヌンショット_2019_12_07_1_13

    このサンプルを参考にしお、別途、実際に詊したりしおみたいず思いたす。

    おわりに

    今回、Scratch甚の独自拡匵機胜の䞭で、画像認識・デバむス連携・関連の独自拡匵を提䟛するものを取り䞊げおみたした。
    䞋蚘の前回の蚘事ず合わせお、色々な機胜があるのをあらためお実感したした。

    これら蚘事を曞くなかで、いろいろ調べたり寄り道をしたりしおいたら、想像以䞊に時間を䜿っおしたい、詊すずころをじっくりずは行えたせんでした。今埌は実際にこれらを䜿った䜜品を䜜っおみたりしおみようず思いたす。
    たた、䞻に Scratch や micro:bit に関しお子ども向けのプログラミングサポヌトをするこずが倚い CoderDojo の掻動で、玹介しおみたり興味を持った子ず詊しおみたり、ずいった圢で掻甚しおみようず思いたす。

     
     
    個人の掻動で、ビゞュアルプログラミング・IoT・ロボットトむの技術コミュニティを単独・共同で䞻催しおいたす。たた、ガゞェットが倧奜きで、個人でのモノ䜜り掻動に掻甚しおいたす。技術芁玠の匷い内容はQiita https://qiita.com/youtoy で蚘事を曞いおたす。

    あなたぞのおすすめ