べれすく!

素人プログラマによるモノづくりやブログ生活を話すブログ

【スポンサーリンク】

【超軽量で使いやすい!】ロジクールの薄型Bluetoothマウス、Pebble M350を買った話

こんにちは、べれすくです!
 
突然ですが、USBポート足りてますか?
 
私は事務作業やマイコンのプログラムな簡単な作業は薄型の2in1ノートパソコンでやっています。
薄くて軽くて性能も十分!
でもね。
 
f:id:Veresk:20200822001822j:plain
 
USBポートが1つしかないんじゃあ!
マウス挿したら終わりです。はい。
 
そこで、今回は持ち運びも便利で値段もリーズナブルなBluetoothマウスを買いました!
 

もくじ

シンプルでリーズナブル!

今回購入したBluetoothマウスはロジクールのPEBBLE M350!
f:id:Veresk:20200822003335j:plain
Amazonで3000円ほどでした。

外見をレビュー!

届いた瞬間に箱の上からでも伝わるコンパクトさに驚きました。
f:id:Veresk:20200822003757j:plain
 
想像以上に軽くてコンパクトです。
色は艶消しの黒ですね。シンプルで美しいです。
重さは電池を入れた状態でわずか100gほどです。軽いですね。
 
ボタンは3つ、右クリック、左クリック、ホイールクリックです。
3DCADや3DCGソフトをよく使う私にとって、ホイールクリックはなくてはならない存在です。
本当にありがたい!
 
f:id:Veresk:20200822003953j:plain
非常に薄いです。一番厚い部分でも3センチぐらいですね。
これならズボンのポケットや、カバンのポケットに入りそうですね。

蓋を開けて中を見てみよう。

蓋を開けて中を見てみます。
ふたは左右2つのマグネットで本体に固定されています。
マグネットの強度は程よい強さで、自重で外れたりカバンの中で外れることはまずないでしょう。
手の爪を軽くひっかけて上に持ち上げると外れます。爪切りは深爪派の私ですが、難なく外せました。 f:id:Veresk:20200822004224j:plain
単三電池1本で動きます。
私はまだ電池切れを経験したことがないですが、公式曰く18ヵ月は持つそうです。
 

接続してみよう

先ほど、蓋を開けたときにちらっと映っていましたが、このマウスはBluetoothだけじゃなく、USBレシーバーでも接続できます。
Bluetoothに対応していないパソコンでも安心ですね。
f:id:Veresk:20200822005247j:plain
これがそのUSBレシーバー。なくしちゃいそうなぐらい小さいです。
使わないときはマウスの中に入れておきましょう。
 
さて、接続ですが裏のボタンでBluetoothモードとUSBレシーバーモードを切り替えるようです。
f:id:Veresk:20200822005649j:plain
ランプが緑の時はUSBレシーバーモード。
下のボタンを1回押すと...
f:id:Veresk:20200822005759j:plain
ランプが青になり、Bluetoothモードに切り替わります。
今回はBluetoothで接続したいのでこっちですね。
先ほどのボタンを今度は3秒間長押ししてサクッとパソコンとペアリングしちゃいます。
 

【つかってみて】いいところ

軽い!薄い!コンパクト!

最大の長所はやっぱりこのサイズと軽さですね!
手にちょうど収まるサイズで、操作も快適です!
ちょっとしたポケットに入れることができるので持ち運びにもかさばりません。
以前のマウスはカバンのポケットで膨らんで地味に邪魔だったんですよね。  

とっても静か!

これは正直びっくりです。
静音マウスだとは聞いていましたが、ここまでとは...
ホイールもクリックもほとんど音がしません。ただ、押している感覚はしっかりあるんです。
普通のマウスはカチッという感じですが、このマウスはコッって感じです。
とにかく、とても触っていてとても心地いいのです!

接続が簡単!

接続はあっという間でしたね。
Windows側でBluetooth端末の検索をしたら一発でつながりましたし、不安定になることもありません。
公式曰く、10mぐらいまでなら離れてもつながるそうな。
すごいです。
あと、レシーバーにも対応しているのはポイントが高いですね。
急に別のパソコンに使うことになっても大丈夫そうです。
 
さらに、Androidにも対応しています!
接続すると、マウスカーソルが出てきてAndroidWindowsパソコンと同じように扱えます。
夢が広がりますね!

【つかってみて】 気になったところ

引っかかりが気になる...

使い始めでまず思ったのがコレ。
というのも、マウスソールがあまり滑らないものなんです。
カーソル移動がすっごく重く感じます。慣れが必要ですね...
極めつけにDPIも1000で固定です。普段、もっと早いのでちょっとストレス。
これに関しては、Windows側の設定でカーソル速度を上げることで解決するので問題ないんですけどね。

最初は慣れが必要かも

最大の長所であるこのサイズと形状ですが、使用感の面では多少の慣れが必要です。
私は今まで分厚くて丸いマウスを使っていたので、このマウスが薄すぎて掌の一部がスカスカになってしまいます。
使い始めたころは違和感がすごかったです。
まあ一週間ほどで完全に慣れたので、今では全く問題ないですね。

まとめ

多少気になることはありましたが、そのほとんどが慣れで解決できる問題です。
それを大きく上回る利点と使用感を持つ素敵なマウスだと思います。
 
 
今回はこのくらいにしておきましょう。
それでは!

【OpenCV4.3+Python3.6】ウェブカメラ2台でステレオマッチングして距離を見る話。

お久しぶりです。べれすくです。
 
皆さんはステレオカメラってご存知でしょうか?
最近は自動運転などで話題ですからご存知の方もおおいとおもいます。
2台のカメラの並列に並べて同時に撮影し、その見え方の違いから、カメラから映っているものまでの距離がわかるカメラのことです。 f:id:Veresk:20200727004101j:plain
今回はネットオークションで安売りしていたウェブカメラをたくさん購入したので、ステレオカメラの製作にチャレンジしたいと思います。

もくじ

 
 

オークションでウェブカメラをたくさん買いました。

テレワーク需要でウェブカメラの値段がクソ高いこの時期に買ってしまいました。
 
f:id:Veresk:20200727004326j:plain 
 
Webカメラ9個セット!!
値段にして2000円ぐらいですかね。
画像処理をやる人ならウェブカメラはいくらあってもこまりません!

開発環境

CPU : Core i7-8550U
Memory : 8GB
GPU : Intel UHD 620
 
Camera : MegaPixcel 0.3Mpixcel x10 Zoom Webcam
 
PyCharmでPython3.6、OpenCV4.3で実行しています。
↓PyCharmやOpenCVの導入については過去の記事を見てください。

veresk.hatenablog.com

早速ステレオマッチングのプログラムを組む

自分でステレオマッチングのプログラムを組むこともできるのですが、50倍ぐらいスピードが違うので、OpenCVのライブラリを使いましょう。

import cv2
import numpy as np

capture_right = cv2.VideoCapture(2)
capture_left = cv2.VideoCapture(0)

window_size = 5
minDisp = 0
numDisp = 200 - minDisp

stereo = cv2.StereoSGBM_c(
    minDisparity=minDisp,  # 視差の下限
    numDisparities=numDisp,  # 最大の上限
    SADWindowSize =15,  # SADの窓サイズ
    uniquenessRatio=10,  # パーセント単位で表現されるマージン
    speckleWindowSize=100,  # 視差領域の最大サイズ
    speckleRange=10,  # それぞれの連結成分における最大視差値
    disp12MaxDiff=1,  # left-right 視差チェックにおけて許容される最大の差
    P1=8 * 3 * window_size ** 2,  # 視差のなめらかさを制御するパラメータ1
    P2=32 * 3 * window_size ** 2,  # 視差のなめらかさを制御するパラメータ2
    fullDP = False #時間かかるけどハイクオリティにするやつ
)


cv2.namedWindow("img", cv2.WINDOW_NORMAL)

while(True):
    ret, frame_right = capture_right.read()
    ret2, frame_left = capture_left.read()

    frame_right = cv2.cvtColor(frame_right, cv2.COLOR_RGB2GRAY)
    frame_left = cv2.cvtColor(frame_left, cv2.COLOR_RGB2GRAY)

    frame_left = cv2.GaussianBlur(frame_left, (9, 9), 0)
    frame_right = cv2.GaussianBlur(frame_right, (9, 9), 0)

    cv2.imshow('frame_left',frame_left)
    cv2.imshow('frame_right',frame_right)

    disparity = stereo.compute(frame_left, frame_right)
    map = (disparity - np.min(disparity)) / (np.max(disparity) - np.min(disparity))

    cv2.imshow("img", map)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

capture_left.release()
capture_right.release()
cv2.destroyAllWindows()

サンプルコードパクってきて... 実行!! f:id:Veresk:20200727010624p:plain
ありゃありゃ。
コンパイルエラーではないけど何かしらの問題で終わっちゃったぽい。
何も表示されず。
Process finished with exit code -1073741819 (0xC0000005)かぁ
調べたところPythonのバージョン違いとかライブラリのバージョン違いとかそれっぽい。

CV3で仕様変更していた模様

どうやらOpenCV2からOpen CV3の仕様変更で cv2.StereoSGBM は cv2.StereoSGBM_create に変更になったみたい。

docs.opencv.org

ちょちょっとかえて再実行

import cv2
import numpy as np

capture_right = cv2.VideoCapture(2)
capture_left = cv2.VideoCapture(0)

window_size = 5
minDisp = 0
numDisp = 200 - minDisp

stereo = cv2.StereoSGBM_create(
    minDisparity=minDisp,  # 視差の下限
    numDisparities=numDisp,  # 最大の上限
    blockSize=15,  # SADの窓サイズ
    uniquenessRatio=10,  # パーセント単位で表現されるマージン
    speckleWindowSize=100,  # 視差領域の最大サイズ
    speckleRange=10,  # それぞれの連結成分における最大視差値
    disp12MaxDiff=1,  # left-right 視差チェックにおけて許容される最大の差
    P1=8 * 3 * window_size ** 2,  # 視差のなめらかさを制御するパラメータ1
    P2=32 * 3 * window_size ** 2,  # 視差のなめらかさを制御するパラメータ2
)


cv2.namedWindow("img", cv2.WINDOW_NORMAL)

while(True):
    ret, frame_right = capture_right.read()
    ret2, frame_left = capture_left.read()

    frame_right = cv2.cvtColor(frame_right, cv2.COLOR_RGB2GRAY)
    frame_left = cv2.cvtColor(frame_left, cv2.COLOR_RGB2GRAY)

    frame_left = cv2.GaussianBlur(frame_left, (9, 9), 0)
    frame_right = cv2.GaussianBlur(frame_right, (9, 9), 0)

    cv2.imshow('frame_left',frame_left)
    cv2.imshow('frame_right',frame_right)

    disparity = stereo.compute(frame_left, frame_right)
    map = (disparity - np.min(disparity)) / (np.max(disparity) - np.min(disparity))

    cv2.imshow("img", map)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

capture_left.release()
capture_right.release()
cv2.destroyAllWindows()

f:id:Veresk:20200727011132p:plain
f:id:Veresk:20200727011147p:plain
おおっ。動いた!
ギターの輪郭やテレビの端が見て取れます。
FPSも15ほど出てるので快適快適!
ここからカメラの位置とか角度、パラメータを微調整していきます。(コードは調整後の物です。)

結果

f:id:Veresk:20200727011331p:plain
f:id:Veresk:20200727011341p:plain
パラメータの調整が結構面倒くさい。
手前が白く、奥に行くにつれて黒くなります。
少しでもわかりやすくしようと思って手元の水筒を距離差が出るように映してみました。
うっすらだけど手に向かうにつれて色が黒っぽくなっていくのがわかると思います。
うーん。まぁ成功といえば成功なのかな?
 

まとめ

今回は何とか2台のカメラから大体の距離をつかむことができました。
パラメータの調整を本格的に行えばもっときれいに見えると思います。
さらにここから点群化をすると3Dに見えて面白いかもしれませんね。
 
今回はこの辺にしようと思います。
それでは!

【コスパ最強!4K?!】2万円の激安40型テレビを買ってみた話。

お久しぶりです!べれすくです。
いろいろとコロナ問題状況下でばたばたしており、なかなか更新できずいましたが、やっと落ち着いてきたので更新を再開したいと思います!

もくじ

 

 

テレビを買いました!

 
もう結構前になるんですけど、
40型激安テレビを買いました!
 
というのもですね。
たまたまヤマダアウトレットに行ったら新品テレビが投げ売りされていました。
f:id:Veresk:20200620143233j:plain
この40型テレビが
お値段なんと二万円!!
 
f:id:Veresk:20200620143305j:plain
そして元値が... 8万円?!
オリンピックが流れてしまった影響なのか、かなり強気な値段設定です。
 
f:id:Veresk:20200620143238j:plain
ダブルチューナーなので、録画しながら別番組を見ることもできますね。
HDMIが...3ポート?!
いろいろついてる機能はよくわかりませんが、同じ型のPC用モニタ買うより安いですよ...
 
画質はFull HDだとこの時私は思っていました。(理由はのちほどお話します。)
 

早速買って開けてみましょう!
念のため、1000円追加して保証を3年追加しました。追加しなくても1年はあるんですけどね。
 

付属品を見てみましょう!

 
f:id:Veresk:20200620152815j:plain
付属品はテレビ、スタンドのほかに

  • 説明書
  • mini B-CASカード
  • リモコン
  • 保証書
     
    と、とてもシンプルです。
    もちろん保証書や説明書はきちんとした日本語です。
     
    このグランプレという会社は日本にも支社があり、日本語対応とかもしてくれるそうなので、安心ですね。
    f:id:Veresk:20200620153355j:plain
    mini B-CASカードはこの紙に入っていました。
     

入力端子やポートをみてみましょう!

 
接続端子やポート類をみてみます。

f:id:Veresk:20200620154212j:plain

右側面には

  • 地デジとBS・CSのアンテナ端子
  • mini B-CASカードスロット
  • 録画用HDD増設用のUSBポート
  • HDMIポート x1

がついています。
 
f:id:Veresk:20200620154215j:plain
背面下部には

  • 光デジタル端子
  • イヤホンジャック
  • AV入力端子(赤、白、黄)
  • HDMIポート x2
  • 有線LANポート

がついています。(あっ、顔ちょっと映ってるぅうう!!)
既に、下のHDMIにはパソコンとブルーレイチューナーをつなげています。
 
HDMIポートが一つだけ側面についている理由は謎ですが、簡単につけ外しできるので結構便利です。
 

実際に使ってみましょう!

 
f:id:Veresk:20200620153532j:plain
アンテナ等の設置完了!
それでは、電源オン!
 
f:id:Veresk:20200620155613j:plain
おおっ!想像の倍くらい綺麗!
音もPC用モニタに付属しているものに比べればクリアです。
さすがにホームシアター並みの重低音はないですね。
 
f:id:Veresk:20200620155911j:plain
安いテレビだと画角が低くて、横からのぞくと反射したり黒く見えたりするんですが、このテレビはとてもきれいです。
 

欠点はある?

 
ここまで褒め殺しですが、難点がないわけではないです。
このテレビの欠点、それはリモコンセンサの場所です。
f:id:Veresk:20200620161738j:plain
このテレビの赤外線受信部が赤丸で囲んだここにあるんです。
なんで真ん中じゃないんだ!!
この位置だと
ベットの陰になってベットから操作しにくいだろ!
(完全に私事なんだよなぁ)
 
まぁこんな感じで欠点らしい欠点もなく、この値段なら担いでも買って帰りたいと思える製品です。
HDMIポートも3つ装備されているのでモニタとして買うのもいいとおもいます。

まさかの4K?!

 

f:id:Veresk:20200620170522j:plain さて、パソコンを使ってつないでみて気づいたのですが、HDMI入力に対しては4K画面に対応しているようです。
Full HDはアンテナで得たテレビ画面のことなのかな?
 
ただ、Windowsで4Kにすると細かすぎて見えずらいのでFull HDで十分です。
4Kチューナーやゲーム画面なんかを出力するにはもってこいのテレビですね!

まとめ

 
欠点らしい欠点もなく、保証もついて2万円のこのテレビ。
テレビだけでもいい性能ですが、モニタとしてかなり有能でした。
 
ブルーレイで映画を見るのが楽しみです!  
今回はこのくらいにしましょう!それでは!

【スマホカメラで一眼レフ並み?!】スマホカメラに外付けする光学12倍レンズを試してみた話。

こんにちは。べれすくです。
 
皆さんはどんなスマートフォンを選ぶとき、何を基準に選びましたか?
私はカメラ性能でした。
 
最近はトリプルレンズが主流となり、AI搭載のおかげで初心者でもとてもきれいな写真が撮れます。
 
しかし、所詮はスマホカメラ。
サイズの関係上どうしても犠牲になってしまうのがセンサーサイズ望遠倍率です。
 
そんなある日、私は本屋である雑誌を見つけました。
その雑誌とはDIME 五月号。
 
この雑誌、なんと付録にスマホ用の超望遠12倍レンズがついてます!!
f:id:Veresk:20200319232835j:plain

DIME(ダイム) 2020年 05 月号 [雑誌]

DIME(ダイム) 2020年 05 月号 [雑誌]

  • 発売日: 2020/03/16
  • メディア: 雑誌
 
 
今回はこの12倍超望遠レンズを試してみようと思います。
 

もくじ

付録を見てみよう!

まずは付録を見てみましょう。
f:id:Veresk:20200319001553j:plain
雑誌の間に厚めの箱が挟まっています。
箱ちょっとつぶれてますね。
まぁ、このくらいのことは雑誌の付録だとよくあることです。
中を見てみましょう。
 
f:id:Veresk:20200319233723j:plain
中には

  • 12倍望遠レンズ
  • スマホにレンズを固定するクリップ
  • 両端のレンズカバー
  • レンズクリーニング用の布

が入っていました。
 
望遠レンズはオールプラスチックで少し安っぽい感じはしますが、簡単に壊れる作りではなさそうです。
 

実際に装着してみよう!

今回使用するスマホは「Huawei P20 Pro」です。
f:id:Veresk:20200320014126j:plain

HUAWEI P20 Pro HW-01K docomo Midnight Blue

HUAWEI P20 Pro HW-01K docomo Midnight Blue

  • メディア: エレクトロニクス

consumer.huawei.com  
このスマホ
 
アウトカメラ:有効画素数 約4000万 + 約2000万 + 約800 万画素 CMOS 裏面照射型
 
らしいです。  
今回はこのスマホの4000万画素のメインカメラにレンズを取り付けましょう。
それではレンズを装着します!!
スマホのレンズが少し出っ張っているのでケースの上からつけたほうが安定しますね。
f:id:Veresk:20200320014412j:plain
 
おおっ、結構かっこいい!!
 

撮影してみよう!

それでは実際に撮影してみましょう。
 
今回は簡単に比較します。
詳しい比較は次の記事でしようと思います。
 
今回撮影に使用した「Huawei P20 Pro」は標準で光学ズーム3倍、デジタルズームとのハイブリッドで最大10倍まで拡大することができます
 
そちらと比較していきます!
 
とりあえず3km先のイオンの看板を見てみます。
 
まずはP20 Proの標準10倍ズーム
f:id:Veresk:20200320002354j:plain
 
次にP20 Proは等倍にして、12倍高倍率ズームレンズをつけた場合。
f:id:Veresk:20200320003423j:plain
 
真ん中らへんの赤いものがイオンの看板ですね。
 

標準のズームは画質がとてもクリアです!さすがHuawei
12倍高倍率ズームレンズはレンズ特有の癖があっていいですね!
 
一見、レンズの癖以外は違いがないように思えます。
しかし、この画像をアップするとその差は歴然になります。  
f:id:Veresk:20200320010359p:plain
12倍高倍率ズームレンズを使ったほうがディティールがしっかりしてますね。
看板の文字もそうですが、左の貯水タンクの足までしっかり見えます。
 
P20 Proの光学3倍レンズに装着して光学36倍にしたいのですが、光学3倍レンズに固定する方法がわからないです....
出来たら面白そうなんですけどね。
 

まとめ

これは想像以上にすごいものですよ!
どんなスマホでもこの倍率で撮れるのはとても魅力的です。
 
このレンズを使って、月を撮ったり、動物や植物に一歩近づいて撮れるはず!
次の記事ではそれらを撮って載せたいと思います。
↓次
【近日公開予定!】
 
今回はここまで。それでは!

【機械学習用のモバイルPCを自作しよう!】小型で外でも使えるデスクトップPCを考える話。【後編】

こんにちは!べれすくです。
 
前回はモバイルデスクトップパソコンを自作するにあたって、必要なスペックを考えました。
前回はこちら↓

veresk.hatenablog.com

今回は前回の資料をもとに、実際に持ち運び可能なデスクトップパソコンの構成を考えていこうと思います。

もくじ

少しだけおさらい

今回の目標は

  • 「Yolo v3」をリアルタイムで最低10FPS以上で動かくことができる
  • リュックサックに入る大きさ
  • 1時間以上バッテリー駆動ができる
  • できるだけ安価にハイスペック!

この4つを条件に考えていきます。
 
必要なスペックについては前回の記事をみてください。

veresk.hatenablog.com

構成を考えよう

それでは構成を考えていこうと思います。
実際に組んだわけではないので、考えが甘い部分があるとおもいます。
見つけた際はコメントで指摘してくださると助かります。
 

CPU・GPU

かなり迷ったのですが、今回はGPUを搭載しようと思います。
 
まずはCPUを選びます
今回、私はRyzen3500を選択しました。
お値段は16000円ほどです。

理由はTDPと価格、そして性能のバランスです。
今回の趣旨として持ち運べることが第一なので、消費電力はできるだけ少なくしたいです。
性能と消費電力のバランスをとるんならTDPが65Wのものが最適だと思います。
後は価格ですね。
Intelなら同価格帯にCore i5-9400Fがありますが、 こちらはRyzen5 3500に、性能で1.2倍ほどの差をつけられています。
多くの方は機械学習IntelのCPUを用いているので安心感が欲しい方はCore i5-9400Fがお勧めです。

 
 
お次はメインのGPUです。
消費電力的にかなり大きいですが、欲を言うならTensorコアを搭載したRTX2060を積みたいところです。
お値段は39500円です。

MSI GeForce RTX 2060 AERO ITX 6G OC グラフィックスボード VD6857

MSI GeForce RTX 2060 AERO ITX 6G OC グラフィックスボード VD6857

  • 発売日: 2019/02/02
  • メディア: Personal Computers

結構いい値段しますねぇ。
値段や消費電力を抑えたい人は

MSI GeForce GTX 1650 AERO ITX 4G OC グラフィックスボード VD6936

MSI GeForce GTX 1650 AERO ITX 4G OC グラフィックスボード VD6936

  • 発売日: 2019/04/23
  • メディア: Personal Computers

これがおすすめです。
これでも10FPSぐらいなら出ると思います。
ビデオメモリが4GBなので注意が必要です。
 
 
念のために、CPUとGPUの相性を見てみます
GPUの性能はCPUの性能がボトルネックになって、最大限まで引き出せないことがあるので注意しないといけません。
このサイトを使います。

pc-builds.com

Ryzen5 3500とRTX2060を欄に入れてみます。

f:id:Veresk:20200309184456p:plain

この組み合わせだと、双方の使用率が100%の時にRTX2060の性能が0.06%ほどしか損なわれません
10%以内に収まっていればいいので、それを考えるととてもいい相性です。
 

マザーボード

マザーボードを選んでいきます。
持ち運び重視でサイズはMini-ITXの中から選びます。
ソケットはRyzen5 3500なので、Socket AM4です。
第3世代のRyzen5なので、チップセットはB450を選びます。

やっぱりコスパ重視の時のマザーボードはASRockに限ります。

メモリ

規格さえ合えば、ぶっちゃけなんでもいいです。
Mini-ITXで拡張性がひくいことを考えると16GBほど積んでおけばいいと思います。

8GBx2の16GBで9677円ですか。
想像以上に安かったです。

電源・バッテリー

問題はこいつです。
今回は「1時間以上バッテリー駆動する」ことが条件にあるので、電源とバッテリーを選んでいこうと思います。
まずは、このサイトを使用して消費電力を計算します。

btopc-minikan.com

f:id:Veresk:20200309202408p:plain  
消費電力270W!
推奨電源486W以上!
想像以上に厳しいです。(そりゃそうだ)
本来であればこういうACアダプタ化のモジュールを使用してACアダプタとドローン用バッテリーを並列につなぎ、ACアダプタを抜き次第切り替える予定だったのですが、さすがに食いすぎです。

GTX1650にすればこのアダプタでも足りそうですが、RTX2060ではどう考えても足りないです。
もはやここまでか…

もはやポータブル電源案件です。
少し大きくなりますが致し方ありませんね。
大きくなるといってもこのポータブル電源は279 x 109 x 132 mmなので、Mini-ITXマザーボードが170 x 170 mmであることを考えると大したサイズアップはないです。
通学に使うようなリュックサックには入りそうです。

値段は24690円です。
 
288Whもあれば、フルパワーで動かしても1時間持つかもしれませんね。 外ではこのポータブル電源につないで処理を行いましょう。
家に帰った後は、外して直で家のコンセントに挿してもいいですし、このポータブル電源をつないだままポータブル電源を充電してもいいです。
パススルー機能に対応しているので、充電しながら給電できます。
もうパソコンをこのポータブル電源にくっつけちゃってもいいかもしれませんね。
 
 
それでも不満や不安がある人はグラボを変えるか電力を絞りましょう。 MSI製のグラボなので、純正ソフトを使ってパワーリミットをかければ最高に達しても落ちることはないはずです。
実際問題、ノート用RTX2060は25%ほどクロック数を落として電圧も下げることで消費電力を半分にしているそうな。
それだけクロック数を下げても、10%ほどしか性能が落ちないのはすごいです。
 
マザーボードにつなぐ電源は別に必要です。
サイズを考慮してSFXの電源にします。

ファンがうるさいらしいですが、気にしません。
500W以上のSFX電源の中では一番安いので。
 

ディスプレイ

最近はノートパソコン用のモバイルディスプレイがあるのでそれを使いましょう。
外で使うにあたって、コードがUSBかHDMIのみのものがいいです。
間違ってACアダプタから給電するものを選んでしまうと大変です。
 
おすすめはこれですね。
画面が大きめで、スピーカーまで内蔵しています。

ケース

これはないほうがいいです。
私なら3Dプリンタでポータブル電源に取り付けられるように作ります。

でもって、グラボはこういう延長ゲーブルを使用して寝かします
フルサイズグラボを寝かして配置できるmini-itxケースはあってもいいと思うのです。

 
まぁ、どうしてもというならこの辺でしょうね。
グラボが挿せるケースを探すとその分大きく成ります。
ぶっちゃけ邪魔ですね。

総額とまとめ

この想定だと、
 
CPU:16311円
GPU:39480円
マザーボード:13892円
メモリ:9677円
SSD:14278円
電源:10569円
ポータブル電源:24690円
ディスプレイ:17500円
PCI-Express 16x ケーブル:3200円
 
総額:149567円
総重量:約7.0kg
 
 
ギリギリを責めればもっと安くなりますが、大体15万ぐらいです。
あと4万円出せば、RTX2060搭載のノートパソコンが買えます。
性能はこちらが上ですが、ノートパソコンは重量が2kgほどです。
 
どうしてデスクトップパソコン用CPUやGPUをモバイル用途で使えないかがわかった気がします。
とても現実的じゃないですね。
 
うーん、残念!
おとなしくバイトでもしてゲーミングノートを買うことにします。
 
今回はここのくらいにしておきましょう。
それでは!

【機械学習用のモバイルPCを自作しよう!】小型で外でも使えるデスクトップPCを考える話。【前編】

こんにちは!べれすくです。
 
今回は妄想企画です。
実際に組んだわけではないので、そこら辺の理解はお願いします。
 
さて、最近は身近な物にもDeapLeaningを用いることがふえてきました。
しかしDeapLeaningは学習にも仕分けにも結構なスペックが必要なんだとか。(深層学習エアプの見解です。)
それこそ、一般的なノートパソコンじゃ厳しいほどに...
 
ロボットに積みたいのに、持ち運べないデスクトップPCがメインってどういうこと?!
ハイスペックノートパソコンは...めっちゃ高い!(値段が)
 
 
ならば自作しようではないか!!  
 
今回はYOLOv3リアルタイム10FPS程度で動かせるようなスペックのモバイルデスクトップPC自作について考えたいと思います!

もくじ

モバイルデスクトップPCの定義を考えよう

今回、モバイルデスクトップパソコンというわけのわからない単語が出ています。
意味は容易に想像できると思いますが、「持ち運びできるデスクトップPC」です。
 
ではそんなことが可能なのでしょうか?
理論的には可能だと思います。ただ今はやりの薄いノートパソコンにははるかに劣る携帯性だと思いますけどね。
 
今回は、「リュックサックに入る」ことと、理論上「1時間以上、外で使える」ことを念頭において考えたいと思います。

YOLOv3を10FPSで動かすのに必要なスペックを考えよう

これに関しては推測になります。
探してもあまり載ってないんですよね。
古いのでよければ一応公式から出ています。

pjreddie.com

  • 基本的に一枚10万円のTitanXを4枚刺し、安価に済ませるならGTX980Tiの4枚刺し
  • 14万円のパソコンに40万円分のGPU足して64万円!150万円以下じゃん!安い!

とか言ってくるんでお話になりません。
 
とてもじゃないですが学生の持てるマシンじゃないですし、これ1000W以上食います。絶対。(TitanXはTDP250W)
こんなもの19Vで賄おうものなら53Aも流れます。53000mAhのモバイルバッテリーとかあるんだろうか...
家庭用非常電源の域だし、あっても絶対にリュックに入らないですね。
参考にならず!
 
ということで試した人のデータを探します。

 
GPUを使うと早いのはわかるのですが、GPU使用時にCPUの性能で差が出るのかというのもわからないです。
そもそも、機械学習用チップとデスクトップPC用のCPUをベンチマーク等で比べていいもんかという問題もあります。
 
まぁいろいろ見ていきましょう。

こちらのサイトによると、JetsonシリーズだとこのくらいFPSが出るらしいです。(画面サイズ不明)
f:id:Veresk:20200305220352p:plain

demura.net

いずれもGPUを用いた値だそうです。
やはりTensorコアに対応したGPU機械学習に強いということがわかりますね。
f:id:Veresk:20200305222519p:plain
Tensorコア搭載のJetsonの性能を見る限り、これ以上のGPUが必要になりそうです。
まぁ、市販で買えるグラボでTensorコア積んでるのってRTXシリーズしかないので、どれ選んでも余裕で越えますけどね。
ちなみにこのJetsonは15万円ほどします。省電力だけあっていいお値段しますねぇ。

Tensorコアを使わないGPUを使うとどうなんでしょうか。
github.com こちらのページのYolo v3に関する話を少しまとめると
 

  • 「Yolo v2」は「最大400Gflop-SP/FPS」、「Yolo v3」は「最大700Gflop-SP/FPS」(双方共に832x832)

  • 「Yolo v2」は「最大100Gflop-SP/FPS」、「Yolo v3」は「最大175Gflop-SP/FPS」(双方共に416x416)

  • 「Yolo v3」で「GTX970」で「20FPS程度」(416x416)

  • GPUの内蔵メモリが少ないとエラーが出る(GTX750で確認)

 
 
こんなものですかね。
このスレッド自体、失敗者に教える意味合いが強いのでどこまで参考になるかはわかりません。
HD画質(1280x720)で10FPS出そうと思うと7000Gflop-SPでぎりぎり?なので、GTX1070 TIぐらいは必要になりそうです。
しかし、こちらの記事だと「GTX1070」で「4K(4096x2160)」でも「18-20FPS」ほど出るらしいのであまり心配しなくてもいいのかもしれません。(ほんとかなぁ)

www.nakasha.co.jp

詳しい比較は後にするとして、GTX1070も電力をそこそこ食うので、ある程度の妥協は必要になりそうです。

 
続いてCPUのみでの運用を見てみましょう。
今更ですが、手法云々はわからんのでごちゃまぜです。
先ほどのスレッドで、「Core i7-7820QH」を用いて実験した結果、 f:id:Veresk:20200306000117p:plain
このような結果になっていました。

ここまで低いのは少しおかしい気もしますが、まぁ参考程度に見ましょう。  
 
続いてこちらのサイト。

qiita.com

こちらによると「Core i7-8750H」で「4-5FPS」だそうです。
 
 
ただ、同じ人の記事でMultiProcess + MultiThread による折衷実装をすると、「13FPS」まで上がるそうです。
正直、ここまでできる気がしないのであまり参考になりませんね...。

qiita.com

GitHubにやり方が上がっているとはいえ、この人は天才の域だと思います。素直に尊敬。
CPUのみで10FPSを出そうと思ったら、Core i7-8750は超えている必要がありそうです。(上位CPUなのでこれ以上はキツい)
 

ノートパソコンならどのくらいの値段がするのか考えよう

BTOとか上げていけばキリがないので、今回はAmazonに売っているものの中で見てみます。
まず気になるのがRTXシリーズ搭載ノートパソコンですね。
 
まずはRTX2060から見てみます。

iiyama製 152280円

MSI製 179986円

DELL製 178400円

おっ、想像していたよりは安いですね。
これなら3か月ほどバイトをすれば学生でも狙える値段です。
ただ重量的に重そうではあります。  
続いてRTX2070

iiyama製 207780円

ASUS製 226500円

MSI製 255000円

20万円から25万円ほどですね。
やはり高い。さすがゲーミングノートPC。
 
最後にRTX2080です。

Acer製 294166円

iiyama製 334480円

RAZER製 439780円 

基本的には30万から40万ほどです。
ここまで来るとさすがに手が出ません。

先ほどのページでGTX1070でもいい結果が出ていたのでそれも見てみましょう。

一番安いのでこの価格ですね。
これならどう考えてもRTX2060のほうがお得です。
TensorコアなしでもGTX1070に比べ、1.2倍の性能を持っていますから。
簡単な機械学習をする人がノートパソコンを買うならRTX2060搭載のものが一番お勧めですね。
ただ、性能的なコスパで言うならRTX2070搭載ノートPCが最高です。
 

次回は実際に構成を考えよう

今回、かなりパーツの候補が絞れました。
次回は今回の資料をもとに、実際にモバイルデスクトップパソコンのパーツ構成を考えていこうと思います。
 
つぎ↓

veresk.hatenablog.com

 
今回はこのあたりにしましょう。それでは!

【PycharmとPython】超簡単にOpenCVの環境を整える話。

こんにちは!べれすくです。
 
前回はVisualStudio2019でC++OpenCV環境を整える話をしました。
↓前回

veresk.hatenablog.com

今回は、PythonOpenCVの環境を整える話をします。
C++と比べるととても簡単です。
 
それではやっていきましょう!

もくじ

Pycharmを入れよう!

Python統合開発環境で有名なのがAnacondaですが、Anacondaは基本的にCondaを使用するためpipの使用が非推奨です。
一応、使えないこともないのですがpipを入れたばかりにプログラムが動かないということが多々あります。
pipにしかないライブラリもあるので、Condaしか使えない環境だとかなり不便なのです。(ソフトウェアとしては使いやすいんですけどね。)
 
そこで、今回は統合開発環境にPycharmを選択します。
PycharmはUIがシンプルでわかりやすく、pipをメインとしているのでAnacondaよりライブラリの問題は起きにくいです。
それでは導入していきましょう。
 
Pycharmをダウンロードしましょう。

www.jetbrains.com

コミュニティを選択してダウンロードします。
ダウンロードしたら、インストールしましょう。
何も考えずにNextを押しまくりましょう。簡単にインストールが完了します。
f:id:Veresk:20200302213052p:plain
 

Pythonを入れよう!

PycharmはPythonを別個でインストールしてプロジェクト毎に好きなバージョンにかえることができます。
そのためのPythonをインストールしましょう。

www.python.org

今回は3.7のみを入れます。(3.8はいろいろエラーがでるので現状使いたくないです。)
ライブラリによっては過去のバージョンしか使えないものもあるので、必要に応じて追加してください。
簡単に済ませたいのでインストーラをダウンロードします。
f:id:Veresk:20200302234036p:plain
指示に従ってインストールします。
カスタマイズとかせずにインストールすればいいです。
カスタマイズしてファイルパスを変えた人はファイルパスを覚えていてくださいね。
f:id:Veresk:20200302234053p:plain
 

仮想環境とプロジェクトを作ろう!

それでは早速Pycharmを起動します。(設定をインポートするか聞いてきたら「しない」にチェックを入れてください)
初めは右下の設定を開きます
f:id:Veresk:20200302213813p:plain
 
「Appearance & Behavior」の中の「SystemSetting」中にある「Reopen last project on startup」のチェックを外します
OKを押します。
f:id:Veresk:20200302214656p:plain

次にCreate New Projectを押します。(すでにプロジェクトがあるのは気にしないでください)
f:id:Veresk:20200302215839p:plain
プロジェクトの場所をお好きな場所に設定し、「Base interpreter」を先ほどのPythonの場所に設定します。(私は3.7と3.8の2つが入っているので2つ表示されています。)
基本的に自動的に設定されます。
f:id:Veresk:20200302221623p:plain
「Create」をクリックするとプロジェクトができます。
 

OpenCVをインポートしよう!

OpenCVをインポートしましょう。
「File」タブから、「Setting」にすすみます。
f:id:Veresk:20200302225053p:plain
「Project :<プロジェクト名>」タブ内の「Project Interpreter」に進み、一番右の+マークを押します。
f:id:Veresk:20200302224333p:plain
OpenCV」と検索し、「opencv-python」をクリックしてインストールします。
インストール出来たらOpenCVの導入は完了です。(opencv-pythonをインストールするとついてくると思いますが、なければnumpyもインストールしてください。)
f:id:Veresk:20200302230847p:plain  
エラーが出る場合はpipをアップグレードしてください。 下のターミナルから以下のコマンドを実行します。

python -m pip install --upgrade pip

f:id:Veresk:20200302230636p:plain
赤い文字でエラーみたいなのが出るかもしれませんが気にしなくていいです。
完了したらもう一度「opencv-python」をインストールしてみてください。
 

サンプルプログラムをうごかしてみよう!

プロジェクトファイルの名前のファイルを右クリックし、「New」から「Python File」を選択します。
f:id:Veresk:20200302224914p:plain ファイル名は「main」にします。
f:id:Veresk:20200302223957p:plain
これで、プログラムを書きこむことができます。

import cv2
import numpy as np

img = np.full((200, 200, 3), 128, dtype=np.uint8)

cv2.imshow('windows', img)
cv2.waitKey(0)

コードエディター上で右クリックし、「Run」を押します。
f:id:Veresk:20200303002242p:plain
灰色のwindowが表示されれば成功です。

まとめ

今回はPycharmをつかってOpenCVを動かすまでをやりました。
PythonOpenCVは導入がとても簡単な上、ほかのライブラリとの組み合わせが多彩です。
この特性を生かせば、少ないコードで大きなプログラムを作れます。
夢が広がりますね。
 
今回はこの辺にしておきましょう。それでは!