【2021年年の瀬】今年の総括「新規事業は臥薪嘗胆」! [徒然日記]
もうすぐ2021年も終わろうとしていますが、まったく仕事が納まりません。今年の仕事は今年中に!と気持ちは強く持っているものの、なんとか形になるのが大晦日かなぁ、という感じ。(少なくとも今日中にはムリ)
仕事の合間の気分転換のために、このブログを書いてます。このコロナ禍にもかかわらず仕事があるということは非常にありがたい話なんですけどね。
問題なのは、仕事のがんばりとは裏腹に、成果がなかなかついてこないことです。苦しいです。会社からの期待はある程度あるのは分かっているので、気持ちは焦るばかりです。まぁ、頑張ったところで結果がついてくるものではないというのはよく分かっていますが。
新規ビジネスというのは、頑張りに比例するものでなく非線形なものというのが持論です。新しいことって受け入れられるまでに相応の時間がかかります。昔、ネットワークサービスを作ったことがあるのですが、サービス開始が1998年で、利益が出始めたのが2002年。
インターネットバブルともてはやされていた時代にもかかわらず事業化まで4年もかかりました。認知されるのに時間がかかったこともありますが、それ以上にサービスや製品が受け入れられる環境が整うのに時間がかかったのが要因です。
最近では、AIやIoTがそれに該当するでしょうか。私もその分野の仕事なので歴史は繰り返すという感じですね。コロナもあったので、インターネットよりも少し歩みが遅い感じがします。でも、今年一年の間に、これらの技術を受け入れられる環境がようやく整ってきたように思います。
来年はビジネスが一気に右肩上がりしますように。という願いを込めて、早く仕事仕上げよ。。。
(´;ω;`)
仕事の合間の気分転換のために、このブログを書いてます。このコロナ禍にもかかわらず仕事があるということは非常にありがたい話なんですけどね。
問題なのは、仕事のがんばりとは裏腹に、成果がなかなかついてこないことです。苦しいです。会社からの期待はある程度あるのは分かっているので、気持ちは焦るばかりです。まぁ、頑張ったところで結果がついてくるものではないというのはよく分かっていますが。
新規ビジネスというのは、頑張りに比例するものでなく非線形なものというのが持論です。新しいことって受け入れられるまでに相応の時間がかかります。昔、ネットワークサービスを作ったことがあるのですが、サービス開始が1998年で、利益が出始めたのが2002年。
インターネットバブルともてはやされていた時代にもかかわらず事業化まで4年もかかりました。認知されるのに時間がかかったこともありますが、それ以上にサービスや製品が受け入れられる環境が整うのに時間がかかったのが要因です。
最近では、AIやIoTがそれに該当するでしょうか。私もその分野の仕事なので歴史は繰り返すという感じですね。コロナもあったので、インターネットよりも少し歩みが遅い感じがします。でも、今年一年の間に、これらの技術を受け入れられる環境がようやく整ってきたように思います。
来年はビジネスが一気に右肩上がりしますように。という願いを込めて、早く仕事仕上げよ。。。
(´;ω;`)
イラスト図解 スマート工場のしくみ IoT、AI、RPAで変わるモノづくり
- 出版社/メーカー: 日本実業出版社
- 発売日: 2018/08/30
- メディア: 単行本(ソフトカバー)
AI/IoT特許入門~AI/IoT発明の発掘と権利化の勘所~ (現代産業選書―知的財産実務シリーズ)
- 作者: 英仁, 河野
- 出版社/メーカー: 経済産業調査会
- 発売日: 2018/06/15
- メディア: 単行本
タグ:日常
SPRESENSEでジェスチャー使って音楽を操作する「MusicGripper」の裏話 [SPRESENSE]
SPRESENSE の Qiita Advent Calendar のトリとなる記事をあげることができました。SPRESENSEと六軸センサーで傾きを検出して、音楽のボリュームと再生速度を操作するその名も「MusicGripper」です。
実は、もともとはSPRESENSEを使ったスマートグラスのようなものを作りたいと思っていましたが、0.96インチの液晶ディスプレイが、SPRESENSEで何をやっても動かない。簡単に動くと思ったのですがこれは大誤算。
レンズや鏡も準備していたのですが、これは困った。動かない原因はおいおい調べるとして、Advent Calendar のトリとしては立派なコンテンツをあげたいところ。このままでは間に合いません。
いろいろ考えた結果、前からアイディアとしてあたためていたジェスチャーで音楽を操作することを試してみることにしました。
しかし、順調にものごとが進むことは稀で、ここでもいくつかの壁がありました。一つ目はBLEと音楽再生の平行処理です。BLEの接続は前から調べていたのでなんとかなりますが、今回は音楽再生とBLE受信の平行処理をしなければなりません。
いろいろ検討したのですが、さすがPythonです。ここは ”Threading” というテクニックを使って解決しました。Pythonは正直苦手なんですが、これは直感的で使いやすいですね。
二番目に苦労したのが、再生速度を変える方法です。これがかなり面倒くさい。再生速度を早くするには、オリジナルの音源のサンプル数を間引きしてプレーヤーに渡す必要があります。一方で、再生速度を遅くするにはサンプルの間を補間する必要があります。
聞くだけでも面倒な処理ですが、ここもPythonの数値ライブラリが活躍してくれました。これらの話を、今後このブログでしていきたいと思います。
実は、もともとはSPRESENSEを使ったスマートグラスのようなものを作りたいと思っていましたが、0.96インチの液晶ディスプレイが、SPRESENSEで何をやっても動かない。簡単に動くと思ったのですがこれは大誤算。
レンズや鏡も準備していたのですが、これは困った。動かない原因はおいおい調べるとして、Advent Calendar のトリとしては立派なコンテンツをあげたいところ。このままでは間に合いません。
いろいろ考えた結果、前からアイディアとしてあたためていたジェスチャーで音楽を操作することを試してみることにしました。
しかし、順調にものごとが進むことは稀で、ここでもいくつかの壁がありました。一つ目はBLEと音楽再生の平行処理です。BLEの接続は前から調べていたのでなんとかなりますが、今回は音楽再生とBLE受信の平行処理をしなければなりません。
いろいろ検討したのですが、さすがPythonです。ここは ”Threading” というテクニックを使って解決しました。Pythonは正直苦手なんですが、これは直感的で使いやすいですね。
import time import threading n = 0 def func1(): global n while n < 10: print ('hello') time.sleep(0.5) thread1 = threading.Thread(target=func1) thread1.start() while n < 10: n = n+1 print('n='+str(n)) time.sleep(1) thread1.join()
二番目に苦労したのが、再生速度を変える方法です。これがかなり面倒くさい。再生速度を早くするには、オリジナルの音源のサンプル数を間引きしてプレーヤーに渡す必要があります。一方で、再生速度を遅くするにはサンプルの間を補間する必要があります。
聞くだけでも面倒な処理ですが、ここもPythonの数値ライブラリが活躍してくれました。これらの話を、今後このブログでしていきたいと思います。
SONY SPRESENSE メインボード CXD5602PWBMAIN1
- 出版社/メーカー: スプレッセンス(Spresense)
- メディア: Tools & Hardware
Prament BMI160 モジュール 6DOF 6 軸角速度ジャイロ + 重力加速度センサ IICSPI
- 出版社/メーカー: Prament
- メディア: エレクトロニクス
Qiita投稿第三回目!音響通信についてのまとめ [徒然日記]
三度目のQiita投稿をしました。今年はじめにかなり苦労したSPRESENSEの音響通信のまとめ記事です。
この音響通信の記事は苦労したわりにはあまり反響がなかったのですよね。音で通信できるって省電力だし、安い部品で実現できるので、個人的には結構いいよなと思っているのですが。
今回は独自に実装したのですが、できればオープンソースと足並みを揃えたいところ。minimodemはどうだろうか?と思っているのですが、いかんせん実装がLinux前提となっているので少し難しそう。
誤り訂正など、まだまだ足りないところがあるので、少しずつ成長をさせていきたいと思っています。願わくば、オーディオ機能をサブコアで動かせるようにしたいと思っています。(できるのかな?)そうすればTXとRXを別々に実装できるので非常に効率よく通信ができます。
趣味でやっていることなので、個人的な研究材料として、ゆっくりゆったりと少しずつ機能向上をさせていきたいと思います。(^^)/~
今日は Qiita Advent Calendar の担当日なので記事を投稿しました!
— よしのたろう 純国産ボード”スプレッセンス”応援団長(仮) (@Taro_Yoshino) December 19, 2021
Windows 11 のせいなのか PyAudio の処理のタイミングが微妙に変わり、度ハマってしまい投稿が遅くなってしまいました。(Windows 10では問題なし)
とりあえず間に合ってよかったhttps://t.co/vuxpzRr2MI
この音響通信の記事は苦労したわりにはあまり反響がなかったのですよね。音で通信できるって省電力だし、安い部品で実現できるので、個人的には結構いいよなと思っているのですが。
今回は独自に実装したのですが、できればオープンソースと足並みを揃えたいところ。minimodemはどうだろうか?と思っているのですが、いかんせん実装がLinux前提となっているので少し難しそう。
誤り訂正など、まだまだ足りないところがあるので、少しずつ成長をさせていきたいと思っています。願わくば、オーディオ機能をサブコアで動かせるようにしたいと思っています。(できるのかな?)そうすればTXとRXを別々に実装できるので非常に効率よく通信ができます。
趣味でやっていることなので、個人的な研究材料として、ゆっくりゆったりと少しずつ機能向上をさせていきたいと思います。(^^)/~
SONY SPRESENSE メインボード CXD5602PWBMAIN1
- 出版社/メーカー: スプレッセンス(Spresense)
- メディア: Tools & Hardware
SONY SPRESENSE 拡張ボード CXD5602PWBEXT1
- 出版社/メーカー: スプレッセンス(Spresense)
- メディア: Tools & Hardware
SPRESENSE/Arduino でAVI動画を記録 [SPRESENSE]
Qiita投稿2回目です。クリスマスまでいくつ記事がかけるかな??今回は、SPRESENSEやArduinoでAVI動画を記録するライブラリを作ってみました。ここで紹介するサンプルはSPRESENSE用ですが、ライブラリそのものはJPEG画像さえ入手できればArduinoでも使えるように設計しています。
SPRESENSEやArduinoなどの省電力のボードマイコンはカメラ用のISPが内蔵されていないので動画を撮影することはできません。でも、SPRESENSEのカメラのようにカメラモジュールがJPEG出力している場合は、Motion JPEG(AVI)で動画を簡単に記録できます。
このライブラリは実時間で記録することもできますが、FPSを指定して再生速度を指定することができます。特にタイムラプスの使用を想定しているので、数分毎に撮影した画像を指定したFPSで再生することができます。
特にSPRESENSEの場合は、低消費電力で動かすことができるので、数分おきに起動して撮影を繰り返すことでバッテリーでも長時間撮影が可能です。省電力カメラのサンプルも用意しています。夜空の撮影や、旅程の記録、自宅の監視用にぜひぞうぞ。
YoshinoTaro/AviLibrary_Arduino Contribute to YoshinoTaro/AviLibrary_Arduino development by creating an account on GitHub. github.com |
SPRESENSEやArduinoなどの省電力のボードマイコンはカメラ用のISPが内蔵されていないので動画を撮影することはできません。でも、SPRESENSEのカメラのようにカメラモジュールがJPEG出力している場合は、Motion JPEG(AVI)で動画を簡単に記録できます。
void setup() { Serial.begin(115200); theCamera.begin(); while (!theSD.begin()) { Serial.println("insert SD card"); } // Setup the still picture parameters of Spresense Camera // The image format must be JPEG theCamera.setStillPictureImageFormat( CAM_IMGSIZE_QUADVGA_H, CAM_IMGSIZE_QUADVGA_V, CAM_IMAGE_PIX_FMT_JPG); theSD.remove(filename); aviFile = theSD.open(filename, FILE_WRITE); // Initialize AVI library theAvi.begin(aviFile, CAM_IMGSIZE_QUADVGA_H, CAM_IMGSIZE_QUADVGA_V); theAvi.startRecording(); } void loop() { static uint32_t start_time = millis(); CamImage img = theCamera.takePicture(); // Add a frame. The image format must be JPEG theAvi.addFrame(img.getImgBuff(), img.getImgSize()); uint32_t duration = millis() - start_time; if (duration > recording_time_in_ms) { // Stop AVI library theAvi.endRecording(); theAvi.end(); theCamera.end(); while (true) {} } }
このライブラリは実時間で記録することもできますが、FPSを指定して再生速度を指定することができます。特にタイムラプスの使用を想定しているので、数分毎に撮影した画像を指定したFPSで再生することができます。
void setup() { Serial.begin(115200); theCamera.begin(); while (!theSD.begin()) { Serial.println("insert SD card"); } // Setup the still picture parameters of Spresense Camera // The image format must be JPEG theCamera.setStillPictureImageFormat( CAM_IMGSIZE_QUADVGA_H, CAM_IMGSIZE_QUADVGA_V, CAM_IMAGE_PIX_FMT_JPG); theSD.remove(filename); aviFile = theSD.open(filename, FILE_WRITE); // Initialize AVI library theAvi.begin(aviFile, CAM_IMGSIZE_QUADVGA_H, CAM_IMGSIZE_QUADVGA_V); // Start the timelapse specifying fps theAvi.startTimelapse(target_fps); } void loop() { static uint32_t start_time = millis(); CamImage img = theCamera.takePicture(); // Add a timelapse frame. The image format must be JPEG theAvi.addTimelapseFrame(img.getImgBuff(), img.getImgSize()); uint32_t duration = millis() - start_time; if (duration > recording_time_in_ms) { // Stop AVI library theAvi.endTimelapse(); theAvi.end(); theCamera.end(); while (true) {} } }
特にSPRESENSEの場合は、低消費電力で動かすことができるので、数分おきに起動して撮影を繰り返すことでバッテリーでも長時間撮影が可能です。省電力カメラのサンプルも用意しています。夜空の撮影や、旅程の記録、自宅の監視用にぜひぞうぞ。
void setup() { // Initialize LowPower Library LowPower.begin(); RTC.begin(); // get boot cause to check whether this boot is caused by the alarm bootcause_e bc = LowPower.bootCause(); Serial.begin(115200); theCamera.begin(); while (!theSD.begin()) { Serial.println("insert SD card"); } // Setup the still picture parameters of Spresense Camera // The image format must be JPEG theCamera.setStillPictureImageFormat( CAM_IMGSIZE_QUADVGA_H, CAM_IMGSIZE_QUADVGA_V, CAM_IMAGE_PIX_FMT_JPG); // In the case of power on / reset, the parameters are set to the initial value. if (bc != DEEP_RTC && bc != DEEP_OTHERS) { theSD.remove(filename); rec_frame = 0; movi_size = 0; file_size = 0; } else { EEPROM.get(rec_frame_address, rec_frame); // memory the recorded frame count EEPROM.get(movi_size_address, movi_size); // memory the size of the video EEPROM.get(file_size_address, file_size); // memory the file size } aviFile = theSD.open(filename, FILE_WRITE); // Initialize AVI library theAvi.begin(aviFile, CAM_IMGSIZE_QUADVGA_H, CAM_IMGSIZE_QUADVGA_V); // set parameters got from EEPROM theAvi.setTotalFrame(rec_frame); theAvi.setFileSize(file_size); theAvi.setMovieSize(movi_size); // Start the timelapse specifying fps theAvi.startTimelapse(target_fps); } void loop() { CamImage img = theCamera.takePicture(); // Add a timelapse frame. The image format must be JPEG theAvi.addTimelapseFrame(img.getImgBuff(), img.getImgSize()); // end the recording immediately theAvi.endTimelapse(); theAvi.end(); theCamera.end(); // memory the updated parameters EEPROM.put(rec_frame_address, theAvi.getTotalFrame()); EEPROM.put(movi_size_address, theAvi.getMovieSize()); EEPROM.put(file_size_address, theAvi.getFileSize()); // finish the task when the total frame is over the specified number if (theAvi.getTotalFrame() > recording_total_frames) { while (true) {} } // power off until the time specified by sleep_time LowPower.deepSleep(sleep_time); }
SONY SPRESENSE メインボード CXD5602PWBMAIN1
- 出版社/メーカー: スプレッセンス(Spresense)
- メディア: Tools & Hardware
SONY SPRESENSE カメラモジュール CXD5602PWBCAM1
- 出版社/メーカー: スプレッセンス(Spresense)
- メディア: Tools & Hardware
SONY SPRESENSE 拡張ボード CXD5602PWBEXT1
- 出版社/メーカー: スプレッセンス(Spresense)
- メディア: Tools & Hardware
タグ:Spresense
Qiita に記事を初投稿してみました! [徒然日記]
「Qiita」という技術情報共有サイトがあります。エンジニアならしらない人はいないというぐらい有名なサイトで、前から気になっていたのですが、内弁慶な私はなかなかデビューできず。
Qiitaとは
その Qiita がクリスマスに向けて Advent Calendar なるもイベントをやっていることを発見。クリスマスまでテーマについて、誰かが入れ替わりで技術記事を投稿するというものです。
SPRESENSE応援団長(仮)を自負しているからには、SPRESENSEについてなにか投稿せんといかんだろ!ということで初投稿しました!
SPRESENSEの情報についてまとめた内容です。自分なりには割ときちんとした内容になったなと思っていますので、ご一読いただければ嬉しいです!
このあとクリスマスまでに記事を3本ほど投稿をしてみようと思っています!( ー`дー´)q
Qiitaとは
その Qiita がクリスマスに向けて Advent Calendar なるもイベントをやっていることを発見。クリスマスまでテーマについて、誰かが入れ替わりで技術記事を投稿するというものです。
SPRESENSE応援団長(仮)を自負しているからには、SPRESENSEについてなにか投稿せんといかんだろ!ということで初投稿しました!
QiitaのAdvent Calendar に初めて参加してテンションあがっているので、本気度100%https://t.co/nTMIZxiOGc
— よしのたろう 純国産ボード”スプレッセンス”応援団長(仮) (@Taro_Yoshino) December 7, 2021
SPRESENSEの情報についてまとめた内容です。自分なりには割ときちんとした内容になったなと思っていますので、ご一読いただければ嬉しいです!
このあとクリスマスまでに記事を3本ほど投稿をしてみようと思っています!( ー`дー´)q
タグ:Qiita
安定化電源が壊れた(:_;) [徒然日記]
だいたい6年前くらいに購入した中華製安定化電源が壊れてしまいました。日頃からバッテリーものをよく扱うので、それほど安定化電源の稼働率は高くなかったですが、それでも6年も動いていたのは立派です。
スイッチが入らなかったり、入っても切ることができなかったりと、どうもスイッチ部分がバカになった模様。中を見ても電子部品は問題はなさそう。直してもよいのですが、放っておくと徐々に電圧が下がる品質イマイチの電源だったので、良い機会なので廃棄しようと思います。
6年経って安定化電源の選択肢も広がっていると思うので、自分へのクリスマスプレゼントとして新しく購入したいと思います。今の候補は次のものですが、どうなんだろう?安いし評判も悪くなさそう。もう少し調べて決めたいと思います。
スイッチが入らなかったり、入っても切ることができなかったりと、どうもスイッチ部分がバカになった模様。中を見ても電子部品は問題はなさそう。直してもよいのですが、放っておくと徐々に電圧が下がる品質イマイチの電源だったので、良い機会なので廃棄しようと思います。
6年経って安定化電源の選択肢も広がっていると思うので、自分へのクリスマスプレゼントとして新しく購入したいと思います。今の候補は次のものですが、どうなんだろう?安いし評判も悪くなさそう。もう少し調べて決めたいと思います。
タグ:安定化電源