日々精進

新しく学んだことを書き留めていきます

import insightfaceを実行すると「ModuleNotFoundError: No module named 'numpy.core._multiarray_umath'」エラー

原因は pip install insightface を実行するとpip版のnumpyがインストールされるが、それではだめでconda版のnumpyを使わないといけないため。

以下を実行すると直った。

pip uninstall numpy
conda install numpy

参考:

github.com

SecureRandomのSeedがLinux環境で固定できない

以下の現象が起きた。

  • Windows環境ではSecureRandomのコンストラクタにSeed値を渡すとSeedを固定できる(=同じ文字列を何度も暗号化すると毎回同じ値が出力される)
  • Linux環境では同じコードでもSeedを固定できない

docs.oracle.com

↑のHPに以下の記載がある。ここから、Linux環境ではSeed生成や乱数生成時に/dev/randomから真の乱数を生成していると予想される。Linux環境ではコンストラクタにSeedを渡してもそれは無視されて/dev/randomから取得した値を使うようになっているのではと思われる。

注: 実装によっては、generateSeedメソッドおよびnextBytesメソッドは、たとえばそれらがUNIX系オペレーティング・システムの/dev/randomから読み取る必要がある場合に、エントロピーが収集されるときにブロックされることがあります。

参考:

stackoverflow.com

gist.github.com

SSD MobileNetV3のpretrained modelはmodel zooにある

SSD MobileNetV3のpretrained modelを探していたが、意外と見付からなくて困った。

最終的には以下にあったものを使った。

github.com

MobileNetV3という名前のモデルにはImageNetで学習したもの(=物体検出モデルではなく、画像分類モデル)もあり、混乱した。。

以下はMS COCOのIDとクラス名の対応リスト。

gist.github.com

クライアント証明書でWebアプリの認証をする方法

クライアント証明書での認証のやり方を調べてみたところ以下でできるっぽい。(未検証ですが・・)

  • Global Signなどでクライアント証明書を取得する
  • クライアント証明書をクライアント端末とサーバの両方のルート証明書としてインストールする
  • https通信する時にクライアント証明書を必須とするようWebサーバを設定する

クライアント側は証明書をインストールしておく以外は何もしなくていいっぽい。アプリの対応が不要なのは嬉しい。 以下のサイトが参考になりました。

jp.globalsign.com

milestone-of-se.nesuke.com

jp.cybozu.help

Jacksonはgetterもjsonに出力する

Jacksonを使ってオブジェクトをjson形式にシリアライズしていたんだけど、 getString のようなメソッドを定義したらjsonの項目に"string"が追加された。。 メソッド名がgetXxxx(booleanの場合はisXxxx)の場合、自動的に出力対象になるらしい。 この仕様罠だからやめてほしい。。

参考:

qiita.com