ランプ用ボールを手投げしたときの性能変化

ランプ用ビクトリーボールを1か月手投げするという、想定と違う使い方をしました。このボールをランプで転がしたとき、新品のボールと転がりがどう変わっているか、比較してみます。

ランプ用ボールを手投げする

ビクトリーボールには、手投げ用とランプ用があります。

ボールの説明については、ボッチャ専門店 ストライカスポーツの商品ページが非常に分かりやすいです。いつも利用させていただいています。

私はデイサービスなどで使うため、ランプ用ビクトリーボールを持っているのですが、家にいるとき、容赦なくこのボールで投球練習をします。

転がす想定のボールを投げ、床への落下衝撃を何度も与えてしまったので、性能がどこまで下がってしまったか気になります。

新しいランプ用ビクトリーボールが届いたのを機に、比較検証してみます。

新品ランプ用ボールを5回転がす

4mくらい、ランプで転がしてみました。ランプは10万円くらいのスタンダードランプです。ビクトリーボールはさすが、まっすぐ転がってくれます。

1か月投げたランプ用ボールを5回転がす

同じランプの設定で、1か月衝撃を与えたビクトリーボールを転がしてみます。

ボールが柔らかくなった影響で、転がる距離が短くなりました。

思った以上に距離が変わります。

5球重ねてみると

新品ボールが止まった位置を、画像処理ソフトで重ねてみました。

横のブレがほとんどないことが分かります。距離についてはボール3個分くらい誤差が出ました。

ボールを押し出す強さの差で、誤差が出たのでしょうか?

一方、柔らかくなったボールは・・・

想像以上にボールがまとまっています。

1か月投球し、地面に落ちる衝撃で、球形が崩れていると思ってました。しかし、横方向にボール1.5個分、縦方向に2個分くらいの誤差です。

コントロールがほぼ落ちず、ガードとしての能力は上がったのではないでしょうか?このボールはスーパーソフトで、さらに柔らかくなりました。

ランプ用ボールを意図的に柔らかくしたい場合は、たくさん手投げするのもよいかもしれません。

CSS filterで映像を軽量に加工

ブラウザに表示したカメラ映像を加工し、中央以外を暗くするサンプルを作りました。QRコードリーダーのような読み取りアプリに使えるUIです。すべての加工をJavaScriptで処理せず、CSSも併用した方が軽量になります。

明度・彩度変換はCSS filter利用

ブラウザで実行しているWebアプリサンプルです。真ん中の四角を通る時だけカラーになります。

Webカメラの映像全体をcanvasに転写して、中央以外の明度・彩度を変換して作ることもできますが、少し重くなります。

軽量化するため、明度・彩度のfilter CSSをかけた映像の上に、中央の映像を転写したcanvasを重ねています。

映像(videoタグ)に対しfilterをかけ、グレースケール100%、明るさを50%に加工しています。

canvasに転写した映像は、処理が間に合わないと、1フレーム裏の映像とズレが発生してしまいます。微妙なズレを許容できれば、使える手法です。

サンプルコード

このようなUIを作るときは、中央の四角部分で何か認識を行うと思います。

私の場合は、ボールの認識で使っています。

中央の四角はCSSのborder-radius、またはcanvasのclipで円にすることもできます。

2枚の紙でボッチャのキャリパー代用

手軽にボッチャボール距離を測りたいとき、紙2枚を重ねてスライドしていく方法があります。目視で判断しにくい中距離(15~30cmくらい)で、キャリパーの代用として使えます。

キャリパーは保管

ボール距離を測る道具で、一番使う機会が多いのはキャリパーです。

しかし、キャリパーの形状と可動ギミックは、子供の好奇心をくすぐり、おもちゃにされ壊されることが目に見えます。

安全のため、見えない場所に保管しました。

2枚の紙を重ねて代用

家で子供とボッチャをした際、勝敗の分からない微妙な距離になってしまいました。キャリパーを出すのは手間のため、近くにあったハガキやクーポンを利用してみます。

2枚の紙を重ねてスライドしていけば、簡易的なメジャーになります。

ざっくりとした計測なら、これで十分です。

ボールの距離が10cm以内くらいだと目視でも判断しやすいのですが、ボールが離れるほど目視が難しくなります。

測りたいけど手元にキャリパーがないときの代用としては、手軽で良い方法でした。

ランダムなOLOAのボッチャソフトボール

先週AmazonでOLOAのソフトボール、赤・青単品を購入しました。安くて使いやすいソフトボールを探していましたが、予想外の商品が届きました。

本革と人工皮革

基本、ボッチャボールは同じ材質、同じ硬さを赤・青対で購入すると思います。

OLOAのソフトボールを注文すると、材質と硬さが違うものが届きました。

青いボールは本革、おそらく羊。
赤いボールは日本製(帝人コードレ製)の人工皮革を使っているようです。

赤の方は「Soft」と印字されていますが、ガチガチの硬さでした。

上の写真のように青と赤のボールを強くぶつけてみると、青はへこみ、赤はいっさい変形しません。赤の方はスーパーハードくらいの硬さです。

改めてAmazonのOLOAのソフトボール単品を見直してみると、注文フォームが変わっていました。(2022/1/12現在)

素材と硬さを選択できるになっています。

【帝人コードレ製(高級人工皮革)】ソフト
【帝人コードレ製(高級人工皮革)】ミディアム
【羊の本革製(レザー)】ミディアム

少なくとも素材はランダムではなく、選べるように改善されました。

ただ、私に届いた青ボールは、羊の本革製ソフトと思われるので、同じものは注文できないようです。

ボール性能は値段相応

手元にあるOLOAボールの重さを測ってみます。

青が274g、赤が276gで、規格的には問題ありません。

どちらもきれいな球形にするのが難しく、直進させることは困難です。当たり前ですが、ビクトリーやハンディライフと比べると、性能は劣ります。

1つ2,200円という値段で、ボッチャボールとしては格安なので、性能も値段相応にはなってしまいます。

安いボールで本革は珍しいので、新たな肌触りを体験できたことについては価値を感じます。

ボールの解説が勉強になる日本ボッチャ選手権

第23回日本ボッチャ選手権大会がYouTubeで配信されました。1日目2日目あわせて17時間の動画。面白くて見てしまいました。特に村上監督のボールの解説が勉強になります。

ボッチャボールの解説があると面白い

日本ボッチャ選手権大会の配信で各選手の持ち球について詳しい解説がありました。個人的にボールの話は好きで、興味深かったです。

杉村選手はミックス。型押し(合皮)、牛皮、羊皮など様々なボールを使い分け、廣瀬選手はビクトリーの羊皮ソフトに統一。

廣瀬選手のパワーボールは、ソフトボールで繰り出していたのですね。

パワーがあり、ソフトで「プッシュ」「ヒット」ができるなら、確かに統一球が良いと思えました。6球オールマイティに使えます。

ランプはハードボールを使うタイミング

ボールの解説で、より面白かったのがBC3の試合です。

どのタイミングで自分のハードボールを使うか、相手に使わせるかなど、ボールの解説があると、戦術の面白さが倍増します。

今まで、BC3の観戦は退屈になりやすい印象がありました。

投球精度が高すぎて、成功するかどうかのドキドキがない。
「ロビング」「バウンド」といった三次元の戦いが見られない。
ランプを使うと一投までの時間が長い。

しかし、今回はランプを使った制約が、逆に楽しさを増すメリットにもなると感じました。

転がすしかできないので、同じ硬さの統一球というわけにはいきません。

事前に用意するボールの硬さの配分から、投球で使う順番といった、制約から生まれる楽しさに気づかされました。

村上監督の解説が非常に良かったです。

JavaScriptとcanvasで自動色域調整

JavaScriptとcanvasのみで、特定の色域のボールを抽出するWebアプリを作っています。前回、手動で色域調整していたものを、自動調整できるように改修します。コードはデモサイトをご確認ください。

色抽出のための色域自動調整

赤いボールを抽出する場合、影などの暗い部分を誤って抽出してしまいます。

ボール以外で不要な部分の抽出がなくなるまで、自動で色域許容範囲を絞るようにしました。

抽出できない画像の対処

やたらと赤黒いボール(アポワテック・コネクト)の場合、識別が難しくなります。赤の彩度が低く、赤と識別しにくくなるからです。

影の部分がなくなるまで色域許容範囲を絞ると、ボールが欠けてしまいました。

この場合はボールが欠ける直前の抽出に戻すことにします。(このあたりの処理については、利用目的によって変わると思います。)

様々な状況でテスト

過去に撮ったボール画像を使って、色域自動調整がうまく機能するか試します。

野外の緑コートで赤ボール抽出

緑のコートで赤いボールは識別しやすいです。

野外だったため、イチョウの葉が少し入っていましたが、黄色は認識されません。モミジだと認識されてしまいます。

少し反射する黒床で赤ボール抽出

黒い床に、赤いボールが少し反射している状態で抽出します。

反射の赤を除外でき、きれいに抽出できました。彩度の高い赤ボールで、識別しやすかった影響もあると思います。

解像度が低い赤ボール抽出

解像度の低いボールは、陰影がつぶれて抽出しやすい場合があるようです。にじみが激しい画像だと抽出が難しくなるので、必ずしも解像度が低い方が良いとは言えません。

カオスな場所での赤ボール抽出

モルモット、ペットボトル、赤い鉄棒があるカオスな画像で抽出します。(子供がボッチャボールでモルモットの小屋を作っていました。)

色抽出だと赤い鉄棒は除外できません。がんばって色域を絞ろうと動作するため、ボールの下の暗い部分が欠けてしまいました。

ボッチャでこんなところにボールを投げることはありません。ただ、体育館にある赤いラインテープを認識する場面はあるかもしれず、その場合はボールの抽出率が下がります。

フローリングの青ボール抽出

続いて青いボールの抽出です。右下のロゴの部分が識別できず欠けていますが、青色でもおおむね抽出の問題はありません。

緑コートの青ボール抽出

緑コートで青いボールの抽出は、最初問題がありました。緑と青を誤認します。抽出条件を改修し、青だけが抽出されるように調整しました。

最難関アポワテック・コネクトの抽出

認識したいボールの中で、最難関のボールがあります。

アポワテック・コネクトというボッチャボールなのですが、青ではなく黒に近いボールです。なぜこの色なのか・・・。

このボールの識別は、既存のコードでは無理でした。色の識別パターンを、赤・青・コネクトブルーと3種類に分類して、処理を変えることにしました。

アポワテック・コネクト用の特別処理で、ある程度識別できるようになりました。

キャリブレーションとして使えるレベルに

ここまで作ってきたのは、ボール認識のキャリブレーションを行うプログラムです。

ボールの色、床の色、照明条件、カメラ解像度など、様々な変数が想定される環境では、その環境に合わせた調整、キャリブレーションが必要になります。

今回は、JavaScriptとcanvasを使い、最低限のコードで軽量にキャリブレーションを行うことを目指していました。

使えるレベルのキャリブレーションになったので、実際に使いたいWebアプリに移設しようと思います。

色抽出で床の茶色を除外する

JavaScriptとcanvasを使って、軽量な色抽出方法を探る続きです。前回、抽出がうまくいかなかったボールの影の部分を調整しました。RGBの値について配分も評価すると、より抽出精度が上がります。

影の色抽出は難しい

赤いボールを色で抽出するとき、影の部分の抽出は難しいです。

色は暗くなるほど彩度が低くなり、R、G、Bの値に差がなくなります。

前回の色抽出では、赤ボールの影を抽出できず、逆にほかのボールの影が反応してしまいました。

赤みの強い床で、暖色の光を当てた画像で検証しているので、難易度が高い気もします。ただ、このような環境でも、赤ボールを抽出するようにはしたいです。

木材にはG成分が含まれる

誤認している木材の色は茶色やベージュです。この色はRとGの成分が多く、対してボールの影はR成分だけが多いです。

つまり、G成分を判断すれば、フローリングなどの木材の誤認を防げるかと思います。

抽出精度がかなり上がる

仮に、R成分の半分以上G成分を含む場合は茶色とみなし、除外して抽出します。

この条件を加えると、かなりの精度で抽出できるようになりました。

さすがにロゴの部分は欠けてしまいますが、色のみでの抽出としては、これくらいで十分だと思います。

色の抽出は当初、RGBをHSV(色相、彩度、明度)に変換してから評価した方が簡単だと思っていましたが、canvasがRGBの配列なので、変換にパワーを使ってしまいます。

RGBのまま色の抽出精度を上げられたことで、軽量化できました。

引き続き、自動で色域を判断する機能を追加しようと思います。

色域の許容範囲は足し算・引き算で広げる

JavaScriptとcanvasを使った軽量な色抽出方法を研究しています。色域の許容範囲の計算については、単純に基準のRGBそれぞれの値に、同じ数を足し算、引き算して広げていくのが良いようです。

特定の色だけを抽出したい

赤、青のボールを検出するWebアプリを作っています。しかし、検出精度が非常に悪いです。

検出する色域の許容範囲計算が適切でないのだと思います。

どうやって許容範囲を計算した方がよいのか、検証用のWebアプリを別途作って調べました。

掛け算で許容範囲を計算

前回出した赤ボールの色の平均を基準にして、サンプル画像から赤ボールのみを抽出してみます。

まず色の抽出の許容範囲を、基準から掛け算で算出しました。

例えば基準がR:100 G:20 B:20の色であれば、以下のように掛け算で許容範囲を出します。

下限(基準×0.5)~上限(基準×1.5)
R: 50~150
G: 10~30
B: 10~30

作っているWebアプリもこの掛け算で許容範囲を計算していたのですが、改めてみると、これでは明るい色が抽出できません。

赤の明るい部分はG、Bの値も高くなるので、抽出できなくなります。

意味もなく掛け算を使ったのですが、この方法は誤りです。

足し算・引き算で許容範囲を計算

単純に基準に同じ数を足し算、引き算した方がよいです。

例えば基準をR:100 G:20 B:20の色として、プラスマイナス50で許容範囲を出します。

下限(基準-50)~上限(基準+50)
R: 50~150
G: -30~70 ※実際は0~70
B: -30~70

こちらの方が赤色のボールを抽出できます。

地味に時間をかけて調査しましたが、単純な結論でした。

暗い赤色の抽出は一工夫必要

色抽出はまだ改善の余地があります。

色抽出の許容範囲を広げていくと、赤いボールの暗い部分より先に、ほかの部分の影を検出してしまいます。

ここも色成分の違いを判断すれば、である程度精度を上げられるでしょう。次回試します。

JavaScriptとcanvasで色の平均値を取得する

画像に映っているボールの色の平均値を取得したくなりました。ボールの場所が決まっているなら、JavaScriptとcanvasで色の平均を出すことができます。

色の平均値が欲しくなる場面

Webアプリでボールの色を覚えさえるプログラムを作っています。

当初は、ボールの中心の色をピックアップしていました。しかし、意図しない色が取得される場合があります。

ボールのツヤ、描かれているロゴ、縫い目などの色を誤認するようです。特にツヤは照明環境に左右され、どうにもできない場合もありました。

ピンポイントでの色取得は難しいため、ボール全体の色の平均値を取得することにします。

JavaScriptとcanvasで色の平均値取得

画像からボールを切り抜いて、1pxずつ色を調べます。

R,G,Bの値をそれぞれ合算していき、最後にpx数で割れば色の平均が出せます。

実際にテストしたコードです。

利用したimg/ball.jpgも合わせて掲載します。テストコードを実行する場合にご利用ください。

ライブラリなしで軽量に計算できる

JavaScriptで画像解析をしようとすると、OpenCV.jsのような重たいライブラリを読み込まないといけないかと思っていました。

しかし、JavaScriptとcanvasだけで、すべてのピクセルを色の配列に変換して取得できます。

これにより、簡単な画像処理ならライブラリなしで軽量に処理できることが分かりました。

ボッチャ・アプローチ練習アプリ(開発中)

ボッチャ・アプローチ練習アプリを開発中です。先日、超音波センサーで作ったものを、スマホだけで実現できないか試行錯誤しています。試作アプリは採点精度が低く、引き続き改善を行います。

カメラでボールを認識

ジャックボールの目の前にボールを投げる練習。それをスマホのカメラを使って採点し、結果を記録していきます。

最初に投球するボールの色を認識させ、練習開始です。

初球、0点・・・。

10球投げてみます。(早送りです。)

ボールの認識が悪く、採点が不正確になってしまいました。

だいたい成功、失敗くらいなら判定できますが、外光、照明、カメラ性能で採点の精度がだいぶ変わりそうです。

通信せずに認識精度を上げられるか?

Googleなどが公開している画像認識技術を使えば、精度の高い採点は可能でしょう。

ただ、投球画像を大量にサーバーに送る必要があり、通信量やセキュリティが気になります。

採点以外にも、ボールを投げたか?投げ終わってボールを回収したか?も映像を元に識別しており、練習時間が長いと膨大な通信になりそうです。

そのため、スマホのローカルで完結し、しかもスマホバッテリーの消費が少ない認識方法を模索しています。

引き続きアプローチ練習アプリの改善を行います。