閑古鳥

オールドプログラマの日記。プログラミングとか病気(透析)の話とか。

OpenCVのMatが強かった

C++版のMat構造体って表現力豊かだなーと思っていましたが、oepratorも色々用意されていて今まで書いてたコードも冗長だったなと気付かされました。

OpenCV: cv::MatExpr Class Reference

Matとdoubleを比較してマスクを得る…みたいなことができるので、これを使うとPythonと同じくらいのコード量で同じことができます。

Pythonというかnumpyだと、配列(画像)中の0以外の値を全部255にしたい、という場合に以下のように書けますが

mat = np.array([
    0, 1, 0,
    1, 1, 1,
    0, 1, 0])
mat[mat != 0] = 255

C++もこれだけでいけました。

cv::Mat mat = (cv::Mat_<uint8_t>(3, 3) <<
            0, 1, 0,
            1, 1, 1,
            0, 1, 0);
mat.setTo(255, mat != 0);

さすがに直接代入することはできなさそうですが、十分簡潔です。OpenCVの場合、大抵は用意されている関数を使う方がパフォーマンスも出るので、用意されている機能はゴリゴリ使う方がコードもどんどん短くなって気持ちよさそうです。

ヤクルトの宅配を頼んでみた

なんとなく、透析導入してから1日1本ヤクルトを飲んでいます。特に便秘が改善するとか体感できる何かはないのですが、量が少ないので飲み過ぎることもなくていいかな、と。

ただスーパーで10本入りのものを10日置きに買うのも面倒になってきたので、宅配を頼んでみました。これもいわゆるサブスクですか。

ヤクルトの宅配なら送料無料のヤクルト届けてネット

ネットで申し込めて、支払いはカード、週一で置き配してくれるので人との接触が一切無しで完結していて素晴らしいです。

毎週一週間分置いていってくれ、翌週の分から不要になったらやはりネットでキャンセルもできるようです。旅行に行くから一時停止とかもしやすそうで、なかなかよいUXですね。いや、本来あらゆるネットサービスがこうあるべきだと思いますが…。

ヤクルト、店売りだとNewヤクルトでシロタ株200億含んでいるみたいですが宅配用のヤクルト400だと400億、さらにヤクルト1000だと1,000億とインフラがすごいことになっています。なんかストレスも軽減されるみたいなので頼んでみたけど1週間で987円はちょっとブルジョア感ありますね。まぁ1杯500円のコーヒーとか飲んでるのに比べればまだまだですが(何が?)。

ネックスピーカー買ってみた

仕事で使っていたUSBヘッドセットが断線したのか音がうまく聞こえなくなってしまい、線がないやつなら切れることもなくなるのでは?とワイヤレスのものを買ってみました。

SRS-NB10 | アクティブスピーカー/ネックスピーカー | ソニー

Bluetooth接続、充電はUSB Type-C。

ヘッドホン付けて長時間通話することなんて滅多にないのですが、1時間以上話す場合はこういうタイプの方が耳が痛くならなくていいかも。思ったより軽くて、首にかけていても負担もありませんでした。

当たり前ですが無線になると通話中に移動とかもできるので、ちょっと離れたところにある物を取りに行くとか、なんならトイレにも行けるので(試したことはありませんが)通話中のちょっとしたストレスみたいなのからも解放されて良いですね。

Coke On Pass

Coke ON Pass 毎日飲める自販機サブスク!|Coke ON(コーク オン)

月2700円で、1日1回Coke On対応自販機で飲み物がもらえるというサービス。毎日100円以上の飲み物を交換するとまぁちょっとお得になるよというやつ。

家のすぐ近くの自販機がCoke Onに対応していたので試しに使って見ています。特に特筆するようなことはないですが、自販機を冷蔵庫代わりにできるのは悪くないなと思いました。

よく頼むのはジョージアのカフェラテいろはすの桃。なんだかんだ容量多い方がごくごく飲めていいですね。500mlはほぼ1日分の飲水量なので、あまりごくごく飲んではいけないのですが…。

単価だけ見るとCOSTAが270mlで180円と一番高く、元を取ろうとするならこれなんですが、乳製品ばかりだとリンが高くなってしまうのでたまの贅沢になっています。食事制限考えると100円の麦茶とかの方が無難なんですよね…。

新型コロナウイルスの予防接種を受けてきた

7/15に接種券が届き、自治体の接種に応募して受けてもらってきました(ファイザー)。接種券すらなかなか届かない、と嘆いていましたが今日時点で接種率が5割程度というのを見ると、十分速かったな…と思います。基礎疾患持ちの致死率の高さに怯えていましたが、少しは安心できそうです。

2週間経つまでは変わらぬ感染対策は必要ですし、2週間経った後は抗体も減り続けるので、生活自体は変わらないと思いますが(そもそも常時デバフ持ちになってから、マスクは基本装備だったので正常運転ではある)。

1日目

肩が痛くなっただけで、大きな副反応はありませんでした。着替えがちょっと辛いくらい。

2日目

肩の痛みは1回目より軽かったです(慣れた?)が、今回は発熱もついてきました。と言っても38.2度くらいで、38度未満なら普通に活動できるくらいなので、大したことはなかったです。関節痛とかもほとんどありませんでしたし。

副反応全く無いとそれはそれで気になりそうなので、ほどよく反応してくれて良かったかもしれません。

画像処理の教科書買った

画像処理を雰囲気でやっていたけど、調べ物とかする時の語彙力が欲しくなり、以下の本を購入。

ディジタル画像処理 [改訂第二版]

ディジタル画像処理 [改訂第二版]

  • 公益財団法人画像情報教育振興協会(CG-ARTS協会)
Amazon

販売元のサイトで目次(PDF)が見られますが、画像とは何なのか~から著作権まで非常に幅広く解説されています。ざっと眺めるだけでもわかった気になれます(おい)。主に関心があったのは画像処理アルゴリズムについてですが、こちらも網羅されていてよかったです。機械学習ニューラルネットも抑えています。

Kindle版を買ったのですが、PCのブラウザでも読めてよかったです。さすがにスマホはきついかなぁ。

こちらはOpenCVのリファレンス。ディジタル画像処理はソースコードやライブラリには触れられていないので、それぞれのアルゴリズムを手っ取り早く使うにはOpenCVのどの関数を使えば良いか、がこちらでわかります。まぁ、そういうのは名前さえ知っていればググれるのですけど。OpenCVオープンソースですし公式のリファレンスマニュアルで大体足りるのですが、日本語でざーっと眺められるのは楽しいです。

こちらも目次がすごいですが、これ見て面白そうと思ったらポチってもいいのではないかと。

混合行列わからん!

Confusion Matrixって混乱行列じゃん! 左右盲なのかわからないけど、右左も間違えるのにこんなの覚えられませんわ。

というわけでsklearnに全部やってもらう。

from sklearn.metrics import confusion_matrix, accuracy_score, precision_score, recall_score, f1_score

# 混合行列を求める
y_true = [1, 1, 1, 0, 0, 0]
y_pred = [1, 0, 0, 1, 0, 0]
print(confusion_matrix(y_true, y_pred))

# そもそもprecisionはどうするんだっけ?とか考えなくてもいい
print(accuracy_score(y_true, y_pred))
print(precision_score(y_true, y_pred))
print(recall_score(y_true, y_pred))
print(f1_score(y_true, y_pred))

実装はこれでよくても、実際にやっていくにはやっぱりちゃんと理解しないといけないのでしょうけど、なかなかカンペ見ながらでないと混乱してしまいますね。