日々精進

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

OpenCVのcvtColorを実行すると、「Unsupported depth of input image:」エラー

AI

原因はndarrayの型がuint8なことだった。float32に変換すると直った。 lab_image = cv.cvtColor(img.astype(np.float32), cv.COLOR_RGB2HSV) 参考: stackoverflow.com

Eclipseでコメントの日本語の一部が文字化けする

IT

原因はフォントがConsolasだったこと。他のフォントにすると直った。 同じPJでConsolasで問題起きてない人が居るので他にも発生条件ありそうだけどよくわからない。。 参考: qiita.com

OpenCVの色をHSVに変換した時の値とGIMPで調べたHSV値が異なる

AI

原因はOpenCVとGIMPで値の単位が異なるため。 OpenCV H: 0~180 これが一番びっくりした。。np.uint8の範囲に収めるために0~360°の範囲を半分にして0~180°にしてるんだろうけど。。 S,V:0~255 GIMP H:0~360 S,V:0~100 単位は%なので、OpenCVに合わせるなら25…

Pythonでリストの一部をfor loopを回しつつ削除する方法

AI

他の言語だと、loopのindexを最大値から減らしながらリストにアクセスし、いらない要素を消したりするが、 Pythonの場合はリスト内包表記とif文を使って新しいリストを生成するのが良いっぽい。 例えば、以下のような感じ。 somelist = [x for x in somelist…

PythonのEnumの名前を文字列で取得する

AI

Color.RED.nameのようにnameプロパティを呼ぶと、"RED"のように文字列で名前が取得出来る。 文字列で受け取った区分がどのEnumの値かを判別するときに使う。 参考: stackoverflow.com

JupyterNotebookにアクセスしようとすると、「channel 3: open failed: connect failed: Connection refuse」エラー

AI

再現手順は以下。 JupyterNotebookサーバを起動する JupyterNotebookサーバは外部公開されていないサーバなので、そのサーバへのSSHトンネルを掘る ブラウザに以下のようなURLをコピペしてJupyterNotebookを表示しようとすると、エラーが発生する http://loc…

EC2インスタンスのセキュリティグループを変更する手順

IT

EC2インスタンスに紐付くセキュリティグループを変更するにはEC2インスタンスを作り直さないといけないと思っていたが、 変更できるっぽい。。手順は以下参照。 docs.aws.amazon.com

学習データを集める時に差分プライバシーが使えそう

AI

AIは学習データをどれだけ集められるかが非常に重要だが、 個人情報などはプライバシー・セキュリティの問題で集めることが難しい。 そういう場合に差分プライバシーが使えそう。 アイデアとしては、個人を特定できないよう、各データにランダムなノイズを載…

Pythonで関数オブジェクトの型アノテーションをする

AI

Callableを使えば出来る。Callable[引数のリスト, 返値] という仕様になっている。例は以下。 multiply: Callable[[int, int], int] = lambda x, y: x * y 参考: qiita.com

pandasで「 ValueError: buffer source array is read-only」エラー

AI

pandasの不具合が原因。 0.23で発生していたが、0.24以上にバージョンアップすると直る。 参考: stackoverflow.com

DataFrameの値を書き換えるときにSettingWithCopyWarningが出る

AI

df['age'][5]のように[]を二段にしてアクセスすると発生する。これはchained indexingと呼ばれ、やってはいけない。 df.loc['age', 5]のように.locを使えば回避できる。 この警告が出る理由は以下に詳しく書かれているので是非読むことをオススメします。 日…

Pandasでカテゴリ型の列に新しいカテゴリを追加する

AI

何もしないで新しいカテゴリの値を代入するとエラーになる。 Series.cat.add_categoriesを使ってカテゴリを追加してから代入する。 参考: pandas.pydata.org

Bitvise SSH Serverにログインすると直後に接続が切れる

IT

sshサーバのログには以下のメッセージが出ていた。 <event seq="52" time="2019-05-02 20:41:20.671086 +0900" app="BvSshServer 7.21" name="W_SESSION_DISCONNECTED_ABNORMALLY" desc="Session disconnected abnormally."> <session id="1006" service="SSH" remoteAddress="192.168.0.100:59781"/> <parameters disconnectReason="FlowError"/>…</parameters></session></event>

pandas.qcutはcutする列の値に重複があると挙動がおかしくなることがある

AI

現象は以下。 TitanicのtrainデータのAgeの欠損値を22.0で埋める pd.qcut(train["Age"], 4, duplicates="drop").value_counts() を実行すると以下のようになり、要素数にかなり偏りができる (0.419, 22.0] 408 (24.0, 35.0] 220 (35.0, 80.0] 217 (22.0, 24.…

.pyファイルの絶対パスの取得方法

AI

str(Path(__file__)) だと、JupyterNotebookで実行した時にエラーになるという問題がある。 os.path.abspath("__file__") であればJupyterNotebookでも実行可能。 参考: qiita.com

JupyterNotebookで親階層のモジュールをimportする方法

AI

ディレクトリ階層が以下のようになっている場合。 grand_parent_dir > parent_dir > child_dir parent_dir/init.pyに書いている関数をimportして使いたいとする。 child_dirの下にJupyterNotebookがあるとする。 その場合、JupyterNotebookで以下のように書…

DataFrameの型指定をしてサイズを削減する手順を自動化

AI

以前の記事でDataFrameの各列の型を指定してサイズを小さく出来ると書いたが、それを自動化する。 anton0825.hatenablog.com 以下を使ってcsvを読み込むとサイズを自動的に削減してくれる。一度全部読み込んでから型変換しているので、 処理途中で使うメモリ…

サーバでコマンドを実行すると「shell-init: error retrieving current directory: getcwd: cannot access parent directories」エラー

IT

原因はカレントディレクトリが既に存在しなくなっていることだった。 ターミナルで開いているディレクトリをWinSCPで削除し、その後コマンドを実行すると発生した。 存在するディレクトリにcdしてからコマンドを実行すると直った。 参考: arika.org

sshでログインしようとすると「Connection to xxx closed.」「Exit status 254」エラー

IT

CentOSの場合は以下の手順で直る。 /etc/ssh/sshd_config の UsePAM yes を UsePAM no に変更する これでなぜ直るのかは不明。。 UsePAMはPluggable Authentication Moduleを使えるようにするかの設定で、 Pluggable Authentication Moduleは元々何も設定し…

pythonでファイルを読み込む場合のpathを書く場合の注意点

AI

"test/data/img.jpg"のように指定すると、working directoryの位置に依存してしまう。 pythonファイルの実行方法は Flaskサーバから実行する 開発環境でtestを実行する CIサーバでtestを実行する のようにいくつかあり、それぞれworking directoryが異なるこ…

pythonであるフォルダにあるファイルすべてを処理する

AI

os.listdirを使う。 from os import listdir from os.path import isfile, join onlyfiles = [f for f in listdir(mypath) if isfile(join(mypath, f))] 参考: stackoverflow.com

GitHubの検索窓はOrganization単位で色んな検索条件で検索出来る

IT

今までGitHub画面左上の検索窓でWikiも検索出来るのに気付かず、Wikiは全文検索出来ないからダメだと思っていたが、できるじゃん。。 色々検索条件も設定出来るっぽい。 help.github.com 今までナレッジ共有に別のWikiサービスを使ってたけど、これでGitHub…

pytestでオブジェクトを複数テスト間で使い回す方法

AI

例えば、Tensor Flowのコードを含むクラスの場合、Tensor FlowがGlobalな状態を持つので 同じクラスのオブジェクトを複数回作り、そのたびにcheckpointを読み込むとエラーになる。 なので、その場合はconftest.pyに以下を書く。 @pytest.fixture def foo_ser…

Flaskで単体テスト中にgcログをOFFにする

AI

conftest.pyでgc.set_debug(0)を実行する。

矩形同士の当たり判定

AI

以下に記載されている方法が簡潔で、説明もわかりやすかった。 参考: gyabo.sakura.ne.jp

二つのndarrayがすべて一致していることを判定する

AI

ndarray A,Bがある場合、 (A==B).all() のようにする 参考: stackoverflow.com

PyCharmのwatchウィンドウでList内に含まれているオブジェクトを見やすくする

AI

PyCharmのwatchウィンドウの各変数のところに表示される文字列はstr(obj)の結果なので、 何もしないとこんな感じになる。 <Point object at 0x7F156BAE92E8> これをもっと見やすくしたい・・という場合、以下のようにstrを定義する。 class Point(object): def __str__(self): return f"{self</point>…

Pythonで==のoverride

AI

eqをoverrideする。 class Foo: def __init__(self, item): self.item = item def __eq__(self, other): if isinstance(other, self.__class__): return self.__dict__ == other.__dict__ else: return False 参考: stackoverflow.com

複数のグラフをfor loopで描画する

AI

以下のように、plotを実行した後毎回showを実行する。 for y_ax in ys: ts = Series(y_ax,index=x_ax) ts.plot(kind='bar', figsize=(15,5)) plt.show() 参考: stackoverflow.com

DataFrameの列の文字列から一部を切り出して別の列を作る

AI

pandas.Series.extract を使う。例えば、Titanicで名前から敬称を抽出して別の列にするコードは以下。 train["Title"] = train["Name"].str.extract("([^\s]+)\.", expand=False).astype("category") 参考: note.nkmk.me