2018年07月 - 考えるエンジニア
FC2ブログ

Ubuntu18.04にOpenCV実行環境を作る(1)

 Windows10を卒業し、Ubuntuに切り替えて2ヶ月経ちました。何不自由なく、いや、Windows10よりも快適にPCが利用できるようになり、もう戻れない状態です(会社ではWindowsなので仕方ないですが・・)。
 さて、OpenCVをたまに使いたい時がありますが、そういえばUbuntuに切り替えた後、インストールしていなかったなと気付き、早速行動です。

 インストールを行う上で、condaパッケージを更新しますとアナウンスが出るのですが、エラーが発生することが判明し、結局、Anacondaの再インストールからスタートしました。conda_error180729.pngネットでこのエラー原因を調べていると、pythonのパッケージをインストールする際に、condaとpipを混同して利用していると痛い目に遭うとの記事を見かけ、もしかするとこれかなと思い当たる所がありました。基本的にはAnacondaを入れている環境ではcondaコマンドをメインで使い、pipは極力避けることとの情報がありました。真偽はともかく、今後要注意です。

 OpenCVは今までC++、C#(OpenCvSharp)をメインで使っていましたが、最近、Pythonの方がインストールも手軽で(CMakeを使わなくて)良いなと思っているので、楽な方を選択しました。インストール手順は以下の通りです。

1.Anacondaの再インストール
 ~$ sudo ./Anaconda3-5.2.0-Linux-x86_64.sh
2.OpenCVの専用環境作成
 ~$ anaconda-navigator
anaconda-navigatorを起動して、opencvの環境を作成します。anaconda-navigator_setting180729.png3.opencv環境へ入る
 ~$ source activate opencv
4.OpenCVのインストール
 (opencv) ~$ conda install -c menpo opencv
簡単にインストールできました。昔々からごく最近まで、Cmakeで痛い目に遭っていたのが嘘のようです。

 無事にインストールできたか、動作確認です。
以下のコードをVS code上で実行させましたが・・。
#-*- coding:utf-8 -*-
import cv2

def main():
img = cv2.imread("flower.png")
window_name="Raw Image"
cv2.imshow(window_name, img)
cv2.waitKey(3000)

if __name__ == "__main__":
main()
 動きません。以下のエラーから画面表示の問題のようです。opencv_run_error_180729.pngファイル出力は正常に動作します。そういえば、以前、jupyter notebookでOpenCVを動かした時にmatplotlibで表示したことを思い出しました。最近触っていなかったのですぐに忘れてしまいますね・・。

 気を取り直して、再実行です。
#-*- coding:utf-8 -*-
import cv2
from matplotlib import pyplot as plt

def main():
img = cv2.imread("flower.png")
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.tick_params(labelbottom=False, labelleft=False, labelright=False, labeltop=False) #scale value delete
plt.tick_params(color='white') #scale delete
plt.imshow(img)
plt.show()

if __name__ == "__main__":
main()
今度はうまく行きました。opencv_res_180729.png 7行目はBGR(opencv用)からRGB(matplotlib用)への変換、8、9行目はmatplotlibの画面に表示される目盛を消すおまじないです。消さないとこんな感じになります。opencv_res_scale_180729.png この続きとして、GUIにボタンやピクチャボックスを実装して、.NET Frameworkのように使ってみたいという欲が出てきます。そのTkinterを使った実装は次回お話します。

ブログアクセス解析を使う

 ブログのアクセスカウンタ(バーコード型のものです)を設置して2年経ちました。myblog180724.png
気が向いた時に思いのまま、地味に更新してきましたが、50,000件を超えるアクセスをいただき、また数十件を超える「拍手(いいね)」をいただき、ありがとうございました。これからも気ままに記事をアップして行きますので、気軽にお立ち寄りください。

 さて、FC2ブログに「アクセス解析」という機能があることを知り、試してみました。AccessAnalysis1_180724.png
いつ、どこのホスト(プロバイダ)から、どのページを閲覧いただいたかを記録してくれます。当然、閲覧者の個人情報までは吸い上げられませんのでご心配なく・・。AccessAnalysis2_180724.png

 5/15〜7/15の2ヶ月間の閲覧記録をまとめました。アクセスいただいたホスト総数は6,345件、閲覧総数は9,943件でした。ありがとうございます。アクセス元を大別すると、個人が54.4%でトップで、企業11.4%、大学や高専などの教育機関が7.0%と続きます。思った以上に企業や大学の方々に閲覧いただいて大変嬉しく思います。AccessAnalysisRes1_180724.png個人アクセス元のプロバイダを集計すると、以下の通りでした。AccessAnalysisRes2_180724.pngプロバイダ加入者数ランキングと似たような結果であることが分かりました。ある意味で面白い結果です。

 企業からのアクセスのトップ10は、パナソニック、日立製作所、リコー、ニコン、シャープ、google、沖電気工業、東芝、IBM、京セラでした。そうそうたる顔ぶれですね。私が勤務している会社と異なる職種の方々が閲覧されていることを思うと嬉しいですね。

 大学からのアクセスのトップ10は、東京理科大学、大分工業高等専門学校、電気通信大学、金沢工業大学、名古屋工業大学、立命館大学、兵庫県立大学、大阪大学、徳島大学、名古屋大学でした。ちなみに、私の母校も入っていました。工業系の大学や教育機関が多いように思いましたが、アップしている記事の内容から判断しても、妥当な結果なのでしょうね。

これからも、閲覧いただいている方々が満足いただけるような記事を書いて行けたらと思っています。

LibreOffice CalcでPythonマクロを使う(3)

 前回前々回と長々と話を引っ張って、ようやく今回マクロの作成と実行のお話をします。LibreOffice Calcで作成したファイル名は「test_macro.ods」とします。「ツール」-「マクロ」から「Organize python scripts」を選択します。APSO_Run0_180715.pngPython scripts - APSO」のウィンドウが開きますので、作成ファイル名(test_macro.ods)を選択し、APSO_Run1_180715.png「Menu」から「Create module」を選択します。APSO_Run2_180715.png新しいモジュール名として、「my_first_macro_calc」を入力しました。APSO_Run3_180715.pngそのモジュール名を選択し、APSO_Run4_180715.png「Menu」から「Edit」を実行すると、APSO_MacroEdit_180715.pngエディタ(私の環境ではテキストエディタ)が起動しますので、Pythonのコードを入力します。APSO_MacroEditor_180715.png実行したマクロコードは以下の通りです。A列に1〜10までの数値を入れ、B列にその二乗値、C列に平方根を計算した単純なものです。
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import uno
import numpy as np

def my_first_macro_calc():
xdoc = XSCRIPTCONTEXT.getDocument()
xsheet = xdoc.Sheets['Sheet1']

for i in range(10):
xcell = xsheet.getCellByPosition(0, i) # A-column
xcell.Value = i + 1
xcell = xsheet.getCellByPosition(1, i) # B-column
xcell.Value = (i + 1)**2
xcell = xsheet.getCellByPosition(2, i) # C-column
xcell.Value = np.sqrt(i + 1)
return
実行は「Python scripts - APSO」のウィンドウの「Execute」ボタンを押すだけです。APSO_Macro_Run0_180715.png結果は、以下の通りです。問題なく実行できました。APSO_MacroRes_180715.png
 実行は、「ツール」-「マクロ」の「マクロを実行」でも行えます。APSO_Macro_Run1_180715.pngマクロセレクターで実行するマクロを選択し、実行ボタンを押すだけです。APSO_Macro_Run2_180715.png
 LibreOffice CalcでPythonマクロを作成・編集・実行できる環境を構築できました。今後、面倒な表計算処理などに使っていこうと思います。

LibreOffice CalcでPythonマクロを使う(2)

 前回の続きです。LibreOffice CalcにPythonのマクロ実行環境を構築できましたが、マクロ編集環境がデフォルトのBASIC用であったので、今回はPython用の編集環境を構築します。

 まず、「ツール」-「拡張機能マネージャ」を選択します。ExtensionManager_start_180715.png「ほかの拡張機能をオンラインで取得」を選択します。ExtensionManager_180715.png「Extensions & Templates」の画面が出たら、「Python」で検索し、APSO_Setup1_180715.png「APSO」を選択します。APSO_Setup2_180715.png「APSO(Alternative Script Organizer for Python)」のサイトから、「apso.oxt」をダウンロードします。APSO_Setup3_180715.pngダウンロード後、①追加ボタンを押し、②apso.oxtを選択し、読み込むことで、拡張機能がセットアップされます。APSO_Setup4_180715.png
 前回、前準備としてターミナルからコマンドを実行しないと、エラーが発生するお話をしましたが、エラーは以下のものでした。Pythonの実行パスが通っていないということでしょうか??APSO_SetupError_180715.png結局、このエラーでしばらく頭がフリーズした後、いろいろ調べている中で、以下の「前準備のコマンド」に行き着き、実行した後に再度セットアップを行い、成功しました。
sudo apt-get install libreoffice-script-provider-python

 次回はマクロの作成から実行までをお話します

LibreOffice CalcでPythonマクロを使う(1)

 以前、ケチばかり付いていた「Windows10環境」で使っていたHPノートですが、「Ubuntu環境」に生まれ変わって、サクサクと問題なく利用でき、パソコンストレスからも解放されました。Windowsさん、「はい、さようなら」です。

 UbuntuにはLibreOffice(リブレオフィス)というマイ○ソソフトのOfficeのようなものがデフォルトでインストールされていますが、OpenOffice.orgから派生したソフトウェアとのことです。高価なMS-Officeとは違い、無償というのが良いですね。
 OpenOffice.orgは10年前ぐらいに、会社でExcelを購入してもらえずに現場で使ったことがありましたが、Excelに慣れている人にとってはぎこちない動きで、データを確認するぐらいなら使えるかな?と思っていました。
 今回、LibreOfficeでExcelに対応する表計算ソフトCalcを使ってみましたが、10年前を十分払拭できるほど、Excelの操作と遜色なく使うことができました。大したものです。さらにマイ○ソソフト離れを加速させます。

 LibreOffice-Calcをさらに快適に使うために、いろいろ物色していた所、マクロ機能も持っていることを発見。さっそく味見をしようと「ツール」-「マクロ」-「マクロの管理」で確認した所、LibreOffice Basicという文字が・・。LibreOffice_BASIC_select_180715.png LibreOffice BasicはVBAに似たマクロ言語とのこと。ネット情報ではマクロ言語としてJavaScript、Python、BeanShell(Java)も利用できると書かれてあったので、いまさらBASICはどうかなと思いつつ、Pythonを使ってみようと思い立ちました。

 Pythonのマクロ実行環境を構築する上でつまづいた所がありましたので、以下、備忘録です。

 本実装する前に、私のPCではLibreOfficeでPythonを実行する環境が十分整っていなかったのか?「前準備」が必要でした。以下のコマンドをターミナルから実行しました。
sudo apt-get install libreoffice-script-provider-python
このコマンドを実行すると「マクロの管理」に「Python」の項目が追加されました。LibreOffice_BASIC_Python_select_180715.png「Python」を実行すると、「Pythonマクロ」ウィンドウが開き、サンプルマクロが3つあることが確認できました。SampleMacroRun_180715.pngその中の1つを実行すると、LibreOffice Writerが起動し、サンプル結果が表示されました。Pythonマクロが正しく動作しているようです。SampleMacroRes_180715.png
 マクロ実行時に注意すべき点は「LibreOfficeのセキュリティ」をデフォルト設定から変更する必要があったことです。「ツール」-「オプション」で「セキュリティ」を選択し、「マクロセキュリティ」ボタンを押します。SecuritySetting1_180715.pngセキュリティレベルを「中」に変更しました。SecuritySetting2_180715.pngまた「詳細」の「オプションの機能」の「マクロの記録を有効にする」にもチェックを入れました。SecuritySetting3_180715.png
 Pythonマクロは実行できるようになりましたが、残念なことに「ツール」-「マクロ」の中の「マクロの編集」を実行すると、Pythonではなく、デフォルトのBASICのマクロ編集画面が出てきます。Python用の編集画面は別途準備する必要があるようです。長くなりましたので、続きは次回お話します。

Beatlesでテキストマイニング

 テキストマイニングの題材を探していました。今回は、Beatlesの全213曲を題材にワードクラウドとTreeTaggerで調べてみました。今回分析した全曲のワード総数は37,461語です。個別アルバム毎も合わせて調べました。

 全曲のワードクラウドの結果は以下の通りです。プログラムは以前のブログで紹介したものと同じで、R Studio上で実行しています。Beatles_all_wc_180715.png 上位からlove、know、don(?)、can、baby、yeah、nowのワードが確認されます。donは「don't」の「don」と「't」が分断された前半のワードですね。意味のないワードで削除したいのですが、設定をどのように変更したらよいのでしょうか?現在調べられていません・・・。
 その他、動詞(know)、助動詞(can)や感嘆詞(yeah)が混在した結果が得られました。分かりにくいので「名詞」だけのキーワードを抽出すべく、TreeTaggerで細かく見ることにしました

 TreeTagerのプログラムも以前のブログで紹介したものをマイナー修正して実行させました。全ワードをTreeTaggerで処理した結果は以下の通りです。Beatles_all_word_180715.png 圧倒的に多いのはPP(Personal pronoun:人称代名詞)で、NN(Noun:名詞)、RB(adverb:副詞)が続きます。今回はこれらの中で、名詞(NN、NP:固有名詞等)のみを抽出しました。結果は以下の通りです。Beatles_songs_keywords_180715.png 全ワードの結果は上位から、love、baby、girlでした。ワードクラウドの結果と同様にloveがトップです。Beatlesがラブソングを中心に歌ってきたことが分かります。

 アルバムによって、トップキーワードが異なるのも興味深いですね。特に活動の前期と後期(Revolver、あるいはSgt.Pepper'sが境界でしょうか?)でキーワードが変化している所も非常に面白いです。前期の曲には、Yeah、Ohなどの掛け声、コーラスやメインボーカルとの掛け合い、キーワードの連呼などの特徴がありますが、後期の曲は、ラブソング以外の幅広いジャンルのもの、特定の登場人物の物語、空想的な話に基づいたものが増えて来ていることがキーワードから見えてきます。これまた面白いですね。

 簡単なテキストマイニングでもこのような特徴が見えてきました。ワードだけでなく、例えば曲のコード(C、Am、G7など)も同じように分析すると何か興味深い関係を見い出せるかもしれません。時間を見つけて、遊んでみようと思います。

本日臨時休業也

 よく雨が降りますね。台風7号が過ぎ去った後から止むことはありません。気象警報が解除されないまま、近所を流れる川の水嵩やその上流のダムの貯水量、放水量をネットで定期的に調べています。

 通勤で利用しているJRの運行予定を昨夜(7/5)から確認していましたが、変更もなく、「完全運休」です。あぁ、またかぁ。結局、今日は会社に行けず「臨時休業」です。以前も台風の後の河川の増水でJRが完全に止まったことがありました。その時は、車で会社に向かいましたが、本来1.5時間で行ける所が、渋滞で7時間かかってしまいました。その教訓から、今回はあっさりと会社に行くのを諦めました。

 JR西日本はすぐに運転を取りやめますね。この前の大阪北部地震の時は仕方ないですが・・。今日の路線マップは最近良く見かける赤一色です。現在も変わらずです。JR-west_map180706.png
 関西圏のJRの主力線(Aライン:敦賀ー米原ー京都ー大阪ー姫路ー播州赤穂(上郡))は路線が長過ぎるんですよね。どこかで事故や遅れが出ると途端にすぐ遅れる、運休になるのが頻発しています。また、私の住んでいるド田舎では代替輸送してくれる私鉄も並走していないので、JRが動かないと即会社に行けないことになります(そんな所に住んでいるのはてめえのせいなのですが・・)。収益性、乗客の利便性を考えると路線を長くした方が良いのかもしれませんが、最近は逆効果なのではないかと思っています。

 それにしても、JRは復旧も遅いですね。関西の私鉄は地震後の復旧が目覚ましい速さでした。JR宝塚線の事故以来、安全運行に(過度に)慎重になっているのは理解しますが、もう少し気張って欲しいものです。

ご訪問者数

(Since 24 July, 2016)

タグクラウド


プロフィール

Dr.BobT

Author: Dr.BobT
興味のおもむくままに生涯考え続けるエンジニアでありたい。

月別アーカイブ

メールフォーム

名前:
メール:
件名:
本文: