情報工学部学生による備忘録

1学生の備忘録です。開発したときのことを思い出せるように。

Corsair HS70をPC4Uで買って半年経ったのでレビューする

おはようございます。 思いつきで筆を執っています。

前提

もともとLogitech G633を使ってました(個人輸入したのでLogitech)。

G633自体はFPSやるには普通にいい感じのゲーミングヘッドセットです。 定位も音質もそこそこいいんじゃないかと。

問題としては

  • 重い
  • コードがムダに長い

があります。

Corsair HS70をPC4Uで買った。

今年の4月から新生活が始まって、せっかくなのでワイヤレスヘッドセットを買おうと思い、ワイヤレスゲーミングヘッドセットで調べてました。

選定のメイン軸は安さでした。

ワイヤレスゲーミングヘッドセット自体種類があったわけでもないですが、10000円切れるものを探していました。

Youtubeの広告にPC4Uの広告が出ていてHS70が9000円と書いてありました。

「PC4Uってどこの会社なの…怪しくね…」みたいな感じで思ってたのですが、まあ安いしデザインもダサダサゲーミングじゃなかったので買いました。

www.pc4u.co.jp

これです。

届いた

普通に届きました。

アウトレット品と書きつつ特に問題もなく普通に。

普通に使えました。

ワイヤレス最強ですね。

オンライン授業なるものがあるのですが、スピーカーで講義を聞くと声が聞き取りにくくてしんどいのでヘッドセットで授業を受けています。

カメラは基本オフで大丈夫なので、授業聞きながら皿洗いとかもできるわけです。ワーベンリー

半年経った

使い始めて半年経ちました。

本題のレビュー

いいかんじ。

音質とかはよくわからないんですが、特に問題なく使えてます。

インターンシップで、1日(7.5時間)つけっぱということも有りましたが、充電が切れることも有りませんでした。

仮に切れても有線で使えばいいので…

ちなみに、Corsairのドライバは導入してません。

一時期導入していたのですが、謎の通知音がたまに鳴って嫌だったのと、気持ち充電の減りが速かったような気がします。

HS70の機能として、PCと連動しないボリューム(G633でボリュームを変更するとPC側で調整される)、ミュートがあります。

ミュートだけは若干残念で、G633はマイク跳ね上げミュートがありました。 跳ね上げてたらミュートしていることが視覚的にわかるわけです。(マイクの先端が赤く光ったりもする)。

HS70はミュート・アンミュートのときに音がなるだけなので、今自分がミュートしているのかミュートボタンを押さないとわからないのです。

ここだけ残念ポイントです。

それ以外はヨシ!

Aliexpressで中華メカニカルMetoo ZEROを買った

おはようございます。

中華メカニカルを買いました

詳細は以下の通り

記事を書いた理由

調べても日本人で買ってレビューしてる人が見当たらなかった。 (あんまちゃんと探せてないかも)

レビュー

写真とかは上のページで確認してください。特に変わりなくって感じなんで。

今までのキーボード歴としては、MSメンブレン、中華青軸、自称ゲーミング中華メンブレンって感じです。 ちなみに英語配列常用してます。中華キーボードもAmazonだと日本語配列多くて萎える。

使用感としては(使ったことないけど)CherryMXの赤軸と似てると思います。 クリック感はなく、音もスコスコと五月蝿くない。普通のリニアメカニカルって感じです。 キーキャップもいわゆるCherryMX互換というやつ。

打鍵感とかは値段の割に普通でとてもよい。いい買い物した

欲を言うなら

参考画像

この写真の中央近くの真っ黒モデルか、真っ白モデルがほしかった。 この公式サイトを見つけたのは、商品が届いて説明書にあるURLを辿ってからなので、探すに至らなかった。

いろんな光り方があるけど列ごとに固定の色しか光らないのでダサくて消してる。LEDの換装も考えたけどキースイッチのハンダはずさないと出来なさそうだったので諦めました。 消える設定にしてもWinキーは点きっぱなしなのよね…キー自体を無効にしたら消せるんだけどWinキーは使うから無効にできないし畜生。

まとめ

安い普通の赤軸。 デザイン(光り方含め)だけ許せない。

気が向いたらキーキャップ塗装したいです。 安く済む方法を教えて下さい…

スケッチが書き込めない中華Arduinoを直す

eBayでArduino買ったら使えなかった

パチもんのArduino nanoです.
困りました.安いからたくさん買ったんですよね…
たくさんと言っても4つで1200円ほど.

スケッチが書き込めない

USBで接続すると普通に反応しました. 搭載されたLEDから察するにRESETが繰り返しかかっている模様. こんなエラーがでて書き込めない状態でした. (4つのうち1つはMiniUSBが壊れてるっぽかったので連絡済み ,回答待ち)

Arduino:1.8.9 (Windows 10), ボード:"Arduino Nano, ATmega328P"

最大30720バイトのフラッシュメモリのうち、スケッチが930バイト(3%)を使っています。
最大2048バイトのRAMのうち、グローバル変数が9バイト(0%)を使っていて、ローカル変数で2039バイト使うことができます。
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x95
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x95
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x95
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x95
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x95
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x95
マイコンボードに書き込もうとしましたが、エラーが発生しました。
このページを参考にしてください。
http://www.arduino.cc/en/Guide/Troubleshooting#upload
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x95
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x95
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x95
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x95

「ファイル」メニューの「環境設定」から
「より詳細な情報を表示する:コンパイル」を有効にすると
より詳しい情報が表示されます。

キレそう!!
ってなりました.安物買いの銭失いとはまさにこのことかと. このエラーの対処法については,

リセットボタン押せば直るよ

とか

ピンから全部抜けば直るよ

みたいな記事が検索できます. 全部試したんですが全く症状は変わらず.

噂によるとブートローダーを書き込めるらしい

らしいです.
手元に奇跡的にAmazonで買った安物中華Arduino nanoがありました. ので,この使えるやつもだめになっていいという覚悟でブートローダーを書き込むことにしました. 真似する方も私は一切保証しません. 壊れてるのが使えるようになったらいいなくらいでお願いします.

ht-deko.com

neo-sahara.com

このあたりを参考に書き込みました. 私から詳しい手順は説明しませんが,

  1. 使えるArduinoに[ファイル]>[スケッチ例]>[11. ArduinoISP]>[ArduinoISP]を書き込む
  2. Arduino同士をそれっぽく配線する
  3. 使えるArduinoをUSBで接続し,[ツール]>[書き込み装置]>[Arduino as ISP]を選択
  4. [ツール]>[ブートローダーを書き込む]をします

おわり

Let's Arduino!

もうすぐ誕生日の友人にクソIoTグッズでも作ってあげようかなぁ…

それでは!

2018を振り返る

こんにちは.年末なので振り返っていきましょう.

今年のイベント

今年はいろいろありました.

インターンシップ

名古屋の小さな会社でWebRTCの調査をさせていただきました. 実はNode.jsとかガッツリ触るのは初めてでしたが,多分成果が出たと思います. ヤギさんありがとうございました.

WebRTCの技術自体は持ってるのでどこかで使いたいんですがあまり活躍の場所を見いだせないまま放置.

学祭展示

このブログのトップPVのUnityとOpenCVを使ったゲームを作りました. というのも,展示を作る上で試行錯誤したものをブログに上げただけなのですが. PVやら,ゲーム以外のとこを作ったのが割と大変だったかもしれません. Unityもガッツリ触ったのは初めてです.

PC購入

Xiaomi Mi Notebook Air 13を買いました. MacBook Pro感がすごいんですが,OSx86もできたり実質Macです. 今はQuad bootで,記事はUbuntu上で書いてます. OSは気分で使い分けてます. 使い勝手はまあまあいいのでみんなも買おう.

アプリリリース

Fontviewerというフォント管理アプリをリリースしました.

Github

コリス様にも紹介していただいてぼちぼちの反響がありました. みんなもつかってね!

総括

まあまあ色々あった年かな,と. 楽しかったです. 来年は大学編入とかがあるのであんま開発できないかなって感じです. 記事は気が向いたら書きます.

自己満記事終わり!

Unity+OpenCvSharp3でWebカメラの映像を表示する

ssssota.hatenablog.com

続きです。

お疲れ様です。 前回は画像を適当に保存するところまでしかやってないので、それではゲームに使えないだろうと表示を実装していきます。

結論から

まず、VideoCaptureクラスから取得できる画像データはMatクラスのインスタンスとして変数に保存されます。
MatのメソッドとしてImEncodeというものありますが、これを用いpng画像のバイトデータを生成します。
これを、UnityのLoadImage関数に渡すことでTextureに読み込むことができます。

さて、仕組みは以上です。
Mat -> png -> Texture2Dという風に変換するわけですね。

実装

usingディレクティブ

using UnityEngine;
// uGUIのRawImageに読み込む場合
//using UnityEngine.UI;
using OpenCvSharp;

フィールド宣言

[SerializeField] private int m_WebCamIndex = 0;
private Texture2D m_Texture;
private VideoCapture m_Video;
private Mat m_Frame;

Startメソッド

private void Start()
{
    // m_WebCamIndexによって指定されたウェブカメラを初期化
    m_Video = new VideoCapture(m_WebCamIndex);

    // Texture2Dをウェブカメラのサイズ、フォーマットで初期化
    m_Texture = new Texture2D(
        m_Video.FrameWidth, // ウェブカメラのwidth
        m_Video.FrameHeight, // ウェブカメラのheight
        TextureFormat.RGB24, // フォーマットを指定
        false // ミップマップ設定(よくわかっていない)
    );

    // テクスチャを適用したいオブジェクトにスクリプトを登録する
    // 以下どちらか
    // 1. スクリプトをuGUIのRawImageに登録している場合
    GetComponent<RawImage>().texture = m_Texture;
    // 2. スクリプトをオブジェクトに登録している場合
    GetComponent<Renderer>().material.mainTexture = m_Texture;
}

Updateメソッド

private void Update
{
    // ウェブカメラから画像読み込み
    m_Video.Read(m_Frame);
    // MatオブジェクトをPNGデータに変換、読み込み
    m_Texture.LoadImage(m_Frame.ImEncode());
}

OnDestroyメソッド

private void OnDestroy()
{
    // カメラを閉じる処理を書かないと起動し続ける
    // .NETのバージョンをイジってないと動かないかもしれません
    m_Video?.Dispose();
    m_Video = null;
}

以上です。
Unityに慣れている人には特に難しくないと思います。
問題としては、そこそこ処理が重い点でしょうか。 私はコルーチンで15fpsで動作させてゲームに導入しています。
マルチスレッドの方が相応しいのでしょうが、Unityの一部機能が別スレッドでは使えない関係もあり導入は容易ではないと思います。
私はよくわからず妥協しました。

余談

今回の記事は、このブログの総アクセス数がキリ番を達成したので書きました。
閲覧頂きありがとうございます。アクセス数は励みです。
コメントもぜひ残していってください。

Unity 2018とOpenCvSharpで無料で顔認識までやってみる

お久しぶりです。
学祭の関係でUnityとOpenCVやってます。 文献が全然見つからなくて少し苦労したのでメモ。

Unity

有名ですね。3Dでゲームつくるやつです。 Unity 2018.1でやります。2017とかはだいたい同じように出来るかと思いますが、5とかはわからないです。

OpenCV

こっちは画像処理のライブラリ。3.4.1を使っていきます。

OpenCvSharp

C#OpenCVを使えるようにしたものです。日本の方が作成していてC#+OpenCVの中では日本語の文献が多いです。 C#OpenCVを使わないのであれば公式が提供するPyhton2や、C++Javaなんかを使ったほうがいいんじゃないでしょうか。

追記2018/09/07 OpenCV for Unityなどのアセットもありますが、学生なので有料は躊躇する大きなポイントです。
OpenCvSharpはフリーなので導入こそ手間はかかりますが、無料でOpenCVが使えるので積極的に活用していきましょう。

ライブラリをUnityに追加

正直ここが一番苦労しました。今でも怪しいですが、踏んだ手順だけ残しておきます。

  1. NuGet for Unityアセットを追加
  2. Unityを再起動してNuGet for Unityを有効化
  3. メニューバーNuGetからManage NuGet Packagesを選択してマネージャを起動
  4. OpenCvSharp3をInstall(←時間かかるやつ)
  5. AssetsフォルダにPackagesフォルダ、その中にOpenCvSharpのフォルダが作成されてる
  6. x64とx86のライブラリがぶつかるのでAssets/Packages/OpenCvSharp3-~~~~~/NativeDlls/のx86を削除
  7. Unityを再起動(念の為)

以上です。

追記2018/11/06

Unity であらゆる C#(.NET) パッケージを使う(例:opencv) - Qiita こちらのページでリンクを貼っていただきまして、「お気をつけください」と言われてしまいました。 私が手探りでやっているなかx86のものを削除しないと動作しなかったために、こちらの手順を紹介すると同時に、自身へのメモとして残しました。 当時の私がUnityやC#、各種ライブラリの扱いを詳しくわかっていなく、また、きちんと検証をしなかったことをお詫び申し上げます。

こちらの手順は、当時の記憶としてそのまま残しますのでご了承ください。

スクリプト

今回は、Webカメラから一枚画像を撮影し、顔認識したものを保存するというスクリプトを作成しました。
プログラムはOpenCvSharp3で検索するのを推奨します。僕もまだ手探りです。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using OpenCvSharp;

public class Test : MonoBehaviour {

    // Use this for initialization
    void Start () {
        using (var video = new VideoCapture(0))
        {
            //保存先行列
            var frame = new Mat();
            //保存
            video.Read(frame);
            //分類器
            var haarcascade = new CascadeClassifier("Assets/haarcascades/haarcascade_frontalface_default.xml");
            //グレースケール
            var gray = new Mat();
            Cv2.CvtColor(frame, gray, ColorConversionCodes.BGR2GRAY);
            //検出
            var faces = haarcascade.DetectMultiScale(gray);
            //検出箇所に円を描画
            foreach (OpenCvSharp.Rect face in faces)
            {
                var center = new Point
                {
                    X = (int)(face.X + face.Width * 0.5),
                    Y = (int)(face.Y + face.Height * 0.5)
                };
                var axes = new Size
                {
                    Width = (int)(face.Width * 0.5),
                    Height = (int)(face.Height * 0.5)
                };
                Cv2.Ellipse(frame, center, axes, 0, 0, 360, Scalar.Red, 4);
                print("Found!");
            }
            //保存
            frame.SaveImage("ThisIsYourFaces.png");
        }
    }
    
    // Update is called once per frame
    void Update () {
    }
}

少々雑な記事ですがメモということでお許しを。それでは。

追記2018/09/05

続き

続き書きました。 ssssota.hatenablog.com

PWA(プログレッシブウェブアプリ)は流行るのか

PWAは流行るのか

 最近少しずつ頭角を表してるPWAですが、果たしてこれは流行るのか、学習すべきなのかを個人的に考察してみたいと思います。久々の投稿ですがよろしくお願いします。

PWAとは

 PWAはProfressive Web Appの略でWebのアプリ化の技術のことを指すようです。 この技術はGoogleが主体で動いており、Microsoftも対応を宣言したことで話題になっています。

 具体的には、TwitterやGoogleMapなどが対応しているようですね。 このようなサイトにアクセスすると、スマホのホームにアイコンを置くことができるようになります。 ホームにアイコンを置いてインストール判定になると、オフラインでの起動や、通知の発行がされるようになります。

 自信がないのでご自分で調べてみてください。PWAとは

メリット

 PWAのメリットは、スマホのアプリのような振る舞いを示すことができる点です。

 先に述べたように、PWAを用いることでWebページがオフラインで閲覧できたり、通知を発行できるようになるわけです。 通知が発行できるということは、バックグランドの処理にも対応するということであり、Webアプリの表現の幅は拡がるといえます。

 さらに、通常のアプリと違い、比較的大きな手続きであるインストールの手間がかかりません。 莫大なインストールはなくなり、Webページのキャッシュを保存するのみでインストールしたような振る舞いを見せます。

 これは、アプリ開発者やWebエンジニアにもメリットを与えるでしょう。簡単なアプリはJavaやKotlin、Swiftを記述せず、Webの知識のみで実装されます。 WEBデザイナでもすぐにアプリのデザインを行うことができます。HTMLとCSSを記述するだけなので。

技術的な問題

 PWAという技術はService Workerという技術を介してブラウザに依存します。つまり、ブラウザが対応しない限り使うことができないということになります。Google ChromeFireFoxと言ったブラウザは対応していますが、iOSSafariWindowsのEdgeは未対応です(対応予定はあります)。

 これが指すことは、ブラウザが全面的に対応しなかった場合に利用される可能性がぐっと下がることを指します。よって早急な対応が求められているわけです。

学習コスト

 開発者にはService Workerを始めとする技術の学習コストがかかります。Googleはこのステップをはじめてのプログレッシブ ウェブアプリというサイトで支援しています。このページでは、解説に沿ったソースコードを配布しているので比較的とっつきやすいと思います。

 そこまで大きな負担になるようには感じられません。また、この技術を触れるデメリットは特にはないでしょう。

結論

 流行ると思います。

 デメリットもしっかり挙げて行きたかったのですが、大きなメリットが目立つばかりでデメリットはそこまで感じられませんでした。

 流行らないとしたらアプリとPWAが同居する、Twitterなどのサービスだけではないでしょうか。また、サービス自体が弱いものも流行らないでしょう。

 PWAのメリットを有効に活用できれば、非常に大切な技術に成長していくと思います。また技術者にはぜひ導入を検討してほしいと学生ながらに思います。

ありがとうございました。