日々精進

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

batファイルを実行すると「内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」エラー

IT

このエラーメッセージは色んな原因で出るんだろうけど・・ 自分のところで起きた時の原因は改行コードだった。 改行コードがLFの場合、batファイルの中身がascii文字のみの場合は大丈夫だが 2バイト文字が入るとエラーになる。 改行コードをCRLFにすると直っ…

ストレージ容量を食っているフォルダを探したい場合はFolderSizesが便利

IT

今まで容量空けたい場合はDiskAnalyzerを使ってたけど、重いので他のアプリを探した。 FolderSizesを使ってみたらサクサク動くので気に入った。 有料(しかもPERSONAL EDITIONで30$)だけど。。でも買ってもいいかな。 参考: www.foldersizes.com

PythonのLGPLライブラリをimportしてもソースコードは公開しなくていい

IT

LGPLライブラリを使ったらソースコード公開しないといけないもんだと思っていたが、 Pythonのimportは動的リンクで、動的リンクの場合はLGPLのライブラリをリンクしてもソースコードのライセンスはLGPLにしなくていいらしい。 参考: qiita.com future-archi…

logging.config.dictConfigを実行すると「AttributeError: 'NoneType' object has no attribute 'flush'」エラー

AI

原因はabsl-pyがデフォルトのログハンドラを書き換えてしまい、かつそいつがsys.stderrがNoneになる場合を考慮していないため。 恐らくPythonを別のプロセスからConsoleを表示させず起動すると標準エラー出力の出力先が無くてNoneになる。 無理矢理だけど、l…

environment.yamlでconda仮想環境を作ろうとするとdlibインストール時にエラーが発生する

AI

dlibインストール時にcmakeを使ってビルドするようで、cmakeが入ってないとエラーがでる。 environment.yamlを使うならdlib以外をyamlを使ってインストールして、その後手動でdlibを入れるとかになりそう。。 手動の手順が入るのが嫌だったのでbatファイルで…

conda activate/deactivateをbatファイルで実行するとそれ以降のコマンドが実行されない

AI

activate/deactivateを実行する場合は以下のようにcallを頭につけないといけない。色々罠があるなぁ。。 echo y | conda create --name myenv python=3.7.9 call conda activate myenv pip install cmake==3.18.4.post1 参考: github.com

precisionやrecallの値を計算できない場合、どう処理するべきか

AI

precisionやrecallの値をクラス毎に出し、その平均を取りたいという場合、 precisionやrecallの計算式の分母が0になり計算できなかったらどうするか。 precisionやrecallの分母が0ということはPositiveと予測したものの数が0か、LabelがPositiveであるサンプ…

conda installで「CondaValueError: Malformed version string '~': invalid character(s).」エラー

AI

condaのバージョンを上げると直った。以下を実行するとバージョンアップできる。 conda upgrade -n base conda 参考: stackoverflow.com

Pythonのテストコードでglobalな状態を変更しても他のテストの実行結果に影響を与えないようにしたい

AI

Config.PARAM = "1" のようにstaticな変数にパラメータを保持しているような場合、これを変更するテストコードがあると、そのテストコード以降に実行される別のテストコードがコケることがある。 他のテストに影響を与えないようにしたいので、fixtureを使っ…

C#(.NET)のBitmapDataクラスを使うと画像データのチャネルがBGRになる

AI

C#からPythonに画像ファイルを渡すとチャネルの並びがBGRになるという現象がおきた。 BitmapDataのデータをByte配列に変換し、先頭の要素の値を確認すると、RGB画像の先頭のピクセルの色の並びと違っていた。つまり、BGRになっていた。 以下のような記事もあ…

str([elem])はelemの__repr__を呼び出す

AI

str()でlistをシリアライズしようと思ったときのこと。 各クラスの文字列表現を変更したかったので strを各クラスで実装し、listに詰めてstr(lst)のようにstr()に渡したがstrが呼ばれない。。 調べてみると、str(lst)はlstの各要素のreprを呼ぶらしい。lstは…

OpenCVでwmvファイルを読み込むと総フレーム数やFPSの値がバグる

AI

get(cv2.CAP_PROP_FPS) や get(cv2.CAP_PROP_FRAME_COUNT) を実行すると1000とかデタラメな数字になる。 総フレーム数/FPSで動画の秒数になるかと思ったが、ならない。 これじゃあwmvをInputにして推論できないじゃん。。 3g2ファイルは大丈夫だった。 参考:…

yaml.load時に「UnicodeDecodeError: 'ascii' codec can't decode byte」エラー

AI

文字コードを適切に指定していなかったため。 例えば以下のように指定すると直る。 with open(config, 'rt', encoding='utf8') as yml: config_obj = yaml.load(yml) 参考: github.com

Pythonのログファイル出力先を動的に変更する

AI

調べた限り、出力先だけを修正することはできず、 logging.config.dictConfig(config)でログ周りの設定を一括で行い、 出力先も修正することになりそう。 例えば以下のような感じ config: dict = self._load_config() if "myFileHandler" in config["handler…

conda install -c s3://backet_name ...を実行するとError: boto3 is required for S3 channelsエラー

IT

conda install -c s3://backet_name package_name のようなコマンドを実行すると以下のエラーがでた。 Error: boto3 is required for S3 channels. Please install with `conda install boto3` Make sure to run `source deactivate` if you are in a conda …

pythonからheadless chromeを実行すると「Message: unknown error: net::ERR_CONNECTION_TIMED_OUT」エラー

IT

原因はProxyの設定がないため。Proxy環境で動かす人が少ないのか、情報が少なくて困った。。 以下のようにオプションでProxyを設定すると直った。 なお、 --proxy-server=http://domain.com:8888 のようにdns名でProxyを設定すると「ERR_NO_SUPPORTED_PROXIE…

cv2.VideoCapture.get(cv2.CAP_PROP_FRAME_COUNT)が返す総フレーム数は正確では無い

AI

以下によると、get(cv2.CAP_PROP_FRAME_COUNT)は動画の大体の総フレーム数を返すらしい。 stackoverflow.com 正確な総フレーム数を計算するのって時間かかるのかな・・かなり謎な仕様だ。

conda env create -f environment.yamlを実行すると「An unexpected error has occurred. Conda has prepared the above report」エラー

IT

原因はenvironment.yamlがUTF-16LEでencodeされていたことだった。 BOMなしUTF-8にすると直った。

EaseUS todo backupでバックアップを復元すると「ターゲットディスクに十分な空き容量がありません」エラー

IT

バックアップ取ったのと同じディスクに復元しようとしているのに容量が足りないとはなぜ・・と思っていたら 原因は復元先のディスクにEFIシステムパーティションが残っていることだった。 セクタバイセクタで復元しようとしていたからちょっとでもバックアッ…

ピボットグラフでデータが無いところの間隔を詰めないようにする

IT

最近便利に使っているエクセルのピボットグラフだが、デフォルトではデータの無い部分を描画しない。 なので、例えば多峰性のヒストグラムをかいた場合、各ピークが結構離れていて間にデータがない区間があるとその部分は詰められるのでピーク同士は結構近く…

cv2.imreadがNoneを返す・cv2.imwriteがエラーを吐く

IT

cv2.imread、cv2.imwriteは日本語に対応していないので、パスに日本語が入っているとNoneを返したりエラーになったりする。 なので以下で紹介されているコードを使って回避した。ありがたや~ qiita.com

データの可視化はエクセルが便利

IT

データ分析のためにグラフを描く場合、matplotlibを使うことが多かったけど、結構時間がかかるんだよな。。(慣れてないだけかも) エクセルのピボットグラフでやってみたら思った以上に簡単に、インタラクティブにグラフを描けるのでビックリした。これはす…

COCO minivalとは

AI

Browse the State-of-the-Art in Machine Learning | Papers With Codeでよく見るCOCO minivalとはなんぞやと思っていたが、 COCOのvalのうち5000件を取り出してvalidation setにしたものらしい。 物体検出ではこのデータセットを使うのが標準的らしい。なる…

aws s3 syncやaws s3 cpを速くする

AI

aws s3 syncはバケットに入っているファイルが多いほど重くなる。 aws s3 cp --recursiveを使った方が良い。 aws configureでmax_concurrent_requestsの値を大きくすると速くなる。 参考: stackoverflow.com aws.amazon.com docs.aws.amazon.com

ndarrayのマイナスの値を0にする

AI

arr[arr < 0] = 0 でいける。簡単にかけていいなぁ。 参考: www.relief.jp

「error: (-2:Unspecified error) in function '__cdecl cv::impl::`anonymous-namespace'::CvtHelper<struct cv::impl::`anonymous namespace'::Set<3,4,-1>,struct cv::impl::A0xe227985e::Set<3,4,-1>,struct cv::impl::A0xe227985e::Set<0,2,5>,2>::CvtHelper(const class

AI

cv2.cvtColorに渡すndarrayの型をunit8にしたら直った。 参考: qiita.com

cv2.imwriteで書き出すファイルのパスに日本語が入っていると文字化けする

AI

OpenCVがマルチバイト文字に対応していないのが原因。 以下の記事にcv2.imwriteを使わずにファイルを書き出す方法があるのでこれで解決出来た。 qiita.com

ArcFaceを動かすと「Shape of unspecifie arg: conv0_weight changed. This can cause the new executor to not share parameters with the old one. Please check for error in network.If this is intended, set partial_shaping=True to suppress this warning」エラー

AI

ArcFaceはinputの形としてchannel firstを想定しているが、channel lastで渡すとこのエラーが出る。 エラーメッセージから原因が想像できない。。 channel firstに変換すると直る。 参考: github.com

ArcFaceを動かすと「Object arrays cannot be loaded when allow_pickle=False」エラー

AI

原因はnumpyのバージョン1.16.3からload関数の仕様が変わったため。 np.load('/path/to/file.npy', allow_pickle=True)のようにallow_pickle=Trueを追加するか、 numpyのバージョンを下げる。ただし、np.loadで悪意のあるファイルを読み込むと任意のコードが…

.gitignoreで特定のファイルだけ無視しない設定

IT

以下のように書きたくなるが、これはだめ。 tmp/ !tmp/tmp.txt フォルダの無視設定は後から書き換えられないらしい。以下のように各フォルダ毎に除外設定と例外設定をする必要がある。 tmp/* !tmp/tmp.txt tmp/tmp2/* !tmp/tmp2/tmp.txt なぜこんな仕様なん…