白旗製作所

pythonのエラー「Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll.」

Pythonで書いたスクリプトをWindowsコマンドラインから実行しようとした際,
("python hogehoge.py"を実行)
「Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll.」
というエラーが発生して,スクリプトが実行できませんでした.
Pythonスクリプトの中身はChainerでNNモデルを作成し,
学習済みモデルを読み込んで実行するものです.

環境は以下です.
Python 3.5.4 Anaconda
OS:Windows 7 Ultimate 64bit

以下のサイトには,Intel MKLをダウンロード・インストールして
System32フォルダにmkl_のつくdllをコピーすれば解決すると記載がありましたが,
私の環境では改善しませんでした.
pythonで機械学習:windowsで「Intel MKL」DLL エラー
pythonのエラー「Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll.」が解決

その後,エラーメッセージに出ていたlibiomp5md.dllというライブラリを
以下からダウンロードしてpythonのスクリプトファイルと同じフォルダに置くことで解決しました.

libiomp5md.dll-Dll ファイルダウンロード
このlibiomp5md.dllというライブラリですが,IntelのOpenMPというライブラリ群の一つで
Intel IPP7.0で提供が終了しているそうです.
今(2018/5),最新版はIPP9.0のようなので,最新版のMKLでは含まれていなかったのかも知れません.

スポンサーサイト
  1. 2018/05/27(日) 15:43:22|
  2. Python
  3. | トラックバック:0
  4. | コメント:0

紙の英文をテキストとして読み込み日本語翻訳する方法

紙でしか入手できなかった本や論文をPCに取り込むのですが、
PDF化だけでなく英文を日本語に翻訳して表示したいことが良くあります。

スキャナでPDF化したあとPDFソフトに付属するOCR機能を使ってテキスト化したあと
Google翻訳にかけるのも手ですが、PDFのOCRだと改行が無駄に入って文書として翻訳できなかったり
OCRの性能によって読み取れたり読み取れなかったりします。
また、OCR機能の付属するPDFソフトは優良だったりします。

以下の方法では、無料で手軽に英文誌をPCに取り込んで日本語に翻訳できます。

①英語文書を写真撮影するかスキャナで取り込む
 なるべく高画質なデジカメか、スキャナで文書を取り込みます。
 取り込み形式は画像(JPEG)やPDFどちらも大丈夫です。
 複数枚取り込むなら連続して同一のPDFファイルにしておくのが良いです。

②GoogleDriveにアップロード
 GoogleDriveの適当なフォルダにアップロードします。

③GoogleDocsで開く
 アップロードした写真orPDFファイルを右クリックで選択し、
 Open with→Google Docsとします。
 すると、少し読み込みに時間がかかりますが、
 クラウド上のOCR機能で文字認識されたテキストがGoogle Docsで表示されます。

④Google翻訳にかける
 Google Docs上部のメニューバーから、Tools→Translate Documentを選択します。
 するとポップアップが表示されます。言語をJapaneseとしてファイル名を指定してTransrateすると
 翻訳されたテキストがGoogle Docsの別ファイルとして保存されます。
 便利!
  1. 2018/05/17(木) 19:07:10|
  2. 自炊
  3. | トラックバック:0
  4. | コメント:0

ArrayListを使った行列(配列の配列)の取扱い

Javaで行列計算を行なうとき,普段は固定長でのためdouble[][]型としていたのですが,
DBからのデータ取得時などに可変長としたいことがあり,ArrayListを使用しました.
ArrayListと行列(double[][])データへの変換がわかりにくかったのでメモしておきます.

①ArrayListからdouble[][]への変換
ArrayListで行列データを定義するには,以下を行います.

ArrayListの入れ子にしてしまうと,行列へのキャストが面倒になりますし,
データ構造もわかりにくくなるので,double[]配列をArrayList化します.

ArrayListにはデータを以下のように追加していきます.

データを追加し終わった後,double[][]行列に変換するには,以下を行います.

toArray()することでArrayListの中身がObject[]クラスで配列化されますので,
実体としてはdouble[]の配列でdouble[][]となります.これをキャストして
double[][]型の変数に入れます.

引数なしのtoArray()を使うと,返り値がObject[]型のままとなり
キャストができずClassCastExceptionで例外となってしまいます.
そのため,引数には必ず変換先の配列を入れておきます.
事前に変換先を用意していない場合は同じ型のデータをnewして入れます.


②double[][]配列からArrayListへの変換
この場合,java.util.Arrays.asList()を使用します.
このメソッドはstaticなため,インスタンスは必要なく使用できます.

asList()で得たListはそのままだと従前のArrayList<>とは別クラスであり
add()などの関数が使用できません.そこで,asList()で得たListでさらに
ArrayListのインスタンスを定義してやる必要があります.

こうすることでadd()も使えるdouble[]のArrayListが作成できます.


参考文献:
Listから配列への変換,配列からListへの変換
http://www.dab.hi-ho.ne.jp/sasa/biboroku/java/toArray.html


Arrays.asList() で生成した ArrayList が add() を使えないワケ - Qiita
https://qiita.com/chooyan_eng/items/08f977525e5f4e4acd7e

  1. 2018/05/13(日) 12:23:40|
  2. Java
  3. | トラックバック:0
  4. | コメント:0

python matplotlibからベクタ形式画像ファイルの出力

Python matplotlibで描画した画像のベクタ形式での画像出力に
少し手間取ったので,方法をメモしておきます.


(1)通常のpngファイル出力
通常のPNGファイルであれば,出力先ファイルの拡張子をpngにしておけば
plt.savefig()で勝手にPNGで出力してくれます.

import matplotlib.pyplot as plt
plt.plot(x, y)
file = figure.png
plt.savefig(file)


(2)Windowsメタファイル(EMF)出力
plt.savefigが対応している出力形式にemfは含まれないため,
拡張子をemfにしても出力されません.

plt.savefigが対応する画像形式のうち,svgというベクタ形式ファイルで出力すると,
別途Inkscapeというソフトでsvg→emfに変換出来るようです.
Pythonから使いやすいように,inkscapeを呼び出すスクリプトを作成しておきます.

①Inkscapeのインストール
https://inkscape.org/ja/download/windows/より,installer(exe)をダウンロードして
Inkscapeをインストールします.

②スクリプトの作成
以下の内容をテキストファイルに入力し,"svg2emf.cmd"という名前で
パスの通った場所に保存しておきます.
内容としては,"inkscape.exe SVGファイルのフルパス名 -M 拡張子をemfに変えたフルパス名"を
コマンドプロンプトで実行させるものになります.

@echo off
set inkscape="C:\Program Files\inkscape\inkscape.exe"
%inkscape% %1 -M %~dpn1.emf

③pythonで以下を記述します.
import matplotlib.pyplot as plt
import os
plt.plot(x, y)
file = C:\Users\User\figure.svg
plt.savefig(file)
os.system("svg2emf "+file)

これでsvg出力した後emf変換まで出来るようになりました.


(3)PostScriptファイル(EPS)出力
通常,plt.savefigで拡張子をpsまたはepsにすると,PostScriptファイルを出力できます.

しかしながら,私の環境では以下のようなエラーが出て出力することができませんでした.

UnicodeEncodeError: 'latin-1' codec can't encode characters in position 18-19: ordinal not in range(256)

恐らく図に利用している文字列等のエンコードエラーだと思うのですが,解決法がわかりませんでした.
どのみちPPT等で作成したemf画像もepsに変換して利用しようと思っていたため,
汎用的なemf→eps変換ソフトで対応することにしました.
どうやらMetafile to EPS Converterというソフトで変換できるようです.

①Metafile To EPS Converterのインストール
http://wiki.lyx.org/Windows/MetafileToEPSConverterからインストーラをダウンロードし
インストールします.

②スクリプトの作成
以下の内容を"emf2eps.cmd"という名前でパスの通った場所に保存します.

@echo off
set metafile2eps="C:\Program Files (x86)\Metafile to EPS Converter\metafile2eps.exe"
%metafile2eps% %1 %~dpn1.eps

③pythonでの実行
svgファイルを出力してemfに変換した後,以下を実行すればepsが作成されます.
os.system("emf2eps "+os.path.splitext(file)[0]+".emf")

これでめでたくEPSファイルも作成できました.

参考:
Windows版 Inkscape の入手
matplotlibのグラフをemfファイル形式に変換
SVG ファイルを EMF ファイルに変換して PowerPoint に貼り付ける
Metafile to EPS Converter
Metafile to EPS Converter で Windows Metafile を EPS に変換
バッチファイルでファイルパスからファイル名や拡張子を自由に取り出す方法
  1. 2018/01/04(木) 13:13:44|
  2. Python
  3. | トラックバック:0
  4. | コメント:1

2017年に買ってよかったもの一覧

もう年が明けてしまいましたが、昨年(2017年)に購入してよかったものを
忘備録的に書いておこうと思います。

①オカムラ オフィスチェア シルフィ―

自宅のデスク用に椅子を新調しました。
ヘッドレストとひじ掛けがついているものでなるべく座り心地が良く安いものをと考え、
何回か試しに座りに行って、オカムラのものを購入しました。
アーロンチェアなども良かったのですが、さすがに価格が高すぎました。

②Lenovo ThinkPad X230

2013年のモデルですが、中古が3万円以内で入手できます。
メモリ16GBに増設してSSDに換装しても5万円以内でそこそこ使えるノートPCが作れます。
2017年モデルのX270はいまでも10万ほどしますし形が不格好なので、購入するのを躊躇してしまいました。
サブのノートPCならこれでも十分です。

③USB充電器+マジックテープ+ケーブルクリップ

どこかでデスク裏にUSB充電器を張り付けるというライフハック記事を読んで
やってみましたが、とても効果的でした。ケーブルを数種類差しておけばすぐに充電できます。
デスク裏に張り付けておけば散らかりません。

④リンナイ ガスコンロラクシエ+グリルプレート

これまでガスコンロのグリルはあまり使っていませんでした。理由としては、
・用途が魚を焼くだけなので、魚を食べないと使わない。
・焼き加減の調整が難しくよく焦がす。
・油が跳ねたり網から落ちたりして掃除が大変。
といったところです。

ところが、最新のガスコンロ+グリルプレートを試してみると、使い勝手がよくなっており、驚かされました。
・プレートなので油が落ちない。基本的には使うたびにプレートを洗えばよい。
・焼き加減・時間を調整する機能がついており、焦げる前に知らせて、火を止めてくれる。 (反応せず焦がすこともあります。)
・魚がかなりおいしく焼ける。
・魚だけでなく、肉や野菜、パン、もちなどが焼けるので、オーブン替わりに使える。
などなど。
手軽に焼き料理ができるため、使用頻度が格段に上がり料理の幅も増えました。

⑤ゆずスコ

ゆず胡椒風味の辛味調味料です。和食のみならず洋食にも合うので、
何か味に変化が欲しいときは、とりあえずかけておけばピリ辛でおいしくなります。
また、夕飯のメニューを考えるのが面倒なときに、余りの野菜や肉をカットして
塩とゆずスコふってグリルプレートで焼いたりしています。
別メーカーがレモン風味のものなんかも出してます。

関東だと入手性が悪く、通販は高価なため、
福岡に行ったときに買いだめしとく必要があるのが難点。

⑥フードプロセッサー 山本電気 MasterCut YE-MM41

料理の際に、みじん切りやマッシュなどが面倒だったので購入。
手持ちのタイプは重たく腕が疲れるので選択肢から外していて
据え置きタイプで比較検討したのですが、
・普通替刃が何種類もあって使い分けや保管が面倒だが、
 本品は替刃が2種のみで回すスピードによって仕上がりを調整できる
・カップがステンレス製で、暖かい材料でも使える
という点で選択。

ユニクロ フリースセット(シルキー・長袖)
真冬でも室内ならこれ一枚で過ごせるほど暖かいです。
1日着てすぐ買い増ししました。
無地タイプは色の種類が少ないのが難点。
無駄なワッペンとかつけなくても良いのに。

ニトリ 完全二層式 ふんわり吸湿発熱掛ふとん シングル(N
ウォームSP T S)

この価格帯ではかなり暖かい部類なのではないでしょうか。
普通はシングルで1万円を超えますが、本品は8000円ほど。
これ以上の価格帯の布団は暖かさが増すより軽くなるだけですし、
暖かさが足りなければこれを2枚重ねしたほうが安く済みます。
私は比較的寒がり・冷え性なのですが、これ一枚で十分と思うほどでした。


書き出してみると、思ったほど家電やガジェットとか買わなかった1年でした。
来年はもう少し買い替えなどしたいと思っています。
  1. 2018/01/03(水) 19:25:03|
  2. ライフハック
  3. | トラックバック:0
  4. | コメント:0
次のページ