投稿

2015の投稿を表示しています

VS Codeでvenvがうまく動作しなくなった話

結論 venvをあきらめて、Pipenvを導入すればなぜか解決した。 経緯 Pythonの開発環境にVS Codeを使っていましたが、ある日突然、venvで作った環境が見えなくなりました。 PowerShellからは切り替えができるので、venv自体は正しく動いているようでした。 PythonとVS Codeをクリーンインストールしても状況は変わりませんでした[1]。 Pipenvの使い方 最近はPipenvというものがあるらしいので、それを導入することとしました[2][3]。 pip install pipenv 以下のように環境変数を設定することで、プロジェクトのフォルダ直下に仮想環境を構築してくれます。 PIPENV_VENV_IN_PROJECT=true VS Code上にフォルダを作成し、その直下で仮想環境を作成します。 コマンドはVS Code上のPowerShellで行いました。 例えば以下のようになります。パスやPythonのバージョンはご自身の環境に合わせてください。 *pythonの後に半角スペースがあるのでうっかり詰めないでください。 *venvファイルが作成されるという情報もありますが、私の場合はPipfileのみ作られました。 PS PS C:\Users\User Name\Documents\CODE\Python\Test> pipenv install --python 3.8 VS Code上でF1キーを押して、「reload」を検索して実行します。 これで左下のPythonのバージョンセレクトから環境選択できるはずです。 仮想環境から抜けるときは以下のコマンドを使います。 deactivate 参考文献 [1] sota0726 「VScodeを完全にアンインストールする方法(windows10)「拡張機能のホストが予期せずに終了しました。」を改善するために」閲覧日:2020/09/13 https://www.atmarkit.co.jp/ait/articles/1810/12/news026.html [2] KRiver1 「pyenv、pyenv-virtualenv、venv、Anaconda、Pipenv。私はPipenvを使う。」閲覧日:2020/09/13 h

MOCO'Sキッチンのフォントに似せるβ版

イメージ
お久しぶりです。 今回は昔に作った まな板 の話です。 2012年に料理好きの友人にMOCO'Sキッチン風のまな板を作成してプレゼントしました。 このときに使用したフォントはなんですか?という質問をもらいました。 検索してみると同じように悩んでいる人が多いようです。 結論からいうとキッチンは元ネタの画像を加工して使用していました。 英語のフォントは本当に適当です。 そのまま答えるのも申し訳ないので似たフォントを探してみました。 その結果が以下の画像です。 オリジナルの「キッチン」の部分はかなり特徴的なフォントです。  ここには、以下のフォントを使用させていただきました。 マキナス: http://moji-waku.com/makinas/index.html 「MOCO S」の部分はSimplified Arabicで「'」はArial Unicodeを使用しました。 マジマジと見ると違う部分が目立ちます。 課題は、「チ」と「ン」のフラットさの再現でしょうか。 正直フォントで頑張って再現するより、自分でラインを引いたほうが早い気がしてきました。 今度はMOCO'Sキッチン風フォントの作成に挑戦しても面白いかもしれませんね。 それでは今回はここまでです。

RICHO THETAの簡単なAndroidアプリ

イメージ
RICHO THETA を最初見たときは,あんまりピンと来なかったのですが使ってみると便利で面白いですね. そんなTHETAをいじる機会があったので,簡単なAndroid用のプログラムを作ってみました. SDKは下記のサイトからDLできます. RICHO THETA Developpers https://developers.theta360.com/ja/ SDKに付属しているサンプルプログラムは私にとって複雑で,何をしているのかわかりにくいものでした. そこで,SDKのサンプルとリファレンスを頼りに,以下のようなシャッターを切るだけの簡単なサンプルを作りました. このサンプルはCONNECT Buttonを押してTHETAに接続し,SHOOT Buttonを押してシャッターを切るというプログラムです. 切断するときはDISCONNECT Buttonを押します. THETAのステイタスからGUIを動かすサンプルとして,各操作の状況をTHETA statusというtextviewに描画しています. それではこのプログラムの説明を行います. まずは,以下のように,インターネットのpermissionを取ります. この記述は,AndroidManifest.xmlに記述します. <uses-permission android:name="android.permission.INTERNET"/> つぎに,GUIのレイアウトを設定します.デフォルトではactivity_main.xmlに記述します. <LinearLayout android:id="@+id/linearLayout1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginL

Raspberry Pi 2のケースを自作する

イメージ
Raspberry Pi 2を手に入れたのでケースを作ってみました. 市販のケースを買うのもいいですが,ケースを自作するのも楽しさの一つだと思います. 調べてみるとケースは3Dプリンタやレーザーカッターで作っるのがメジャーなようです. 3Dプリンタで作ると市販の射出成形のケースに見劣りしそうだったので,レーザーカッターをメインに使いました. レーザーカッターは基本的に板を切るものなので,積層や箱組で立体的にケースを作るという手法が多く見られました. 今回,私は板を金属の支柱で支えることでケースを作ることにしました. シンプルですが,各コネクタやIOへのアクセスを考えると悪くない選択だと思います. Raspberry Pi2とケースの部品は以下のようになります. 各部品は,自作品や在庫品を使用しています. ここを見てくれた方の参考になるよう,同等の市販品を参考に載せました. もっと安いものもありますが,趣味に使うものなので良い物を選んでいます. 天板 個数 1 アクリル t3 下板 個数1 アクリル t3 Raspberry Pi2支え用中空スペーサ 個数 4 プラスティック φ5 長さ5 mm 参考: wilco製 CPE-2605 スペーサー 丸型中空 Raspberry Pi2固定用プラネジ 個数4 M2.6 長さ8 mm 参考: wilco製 PE-0308 なべ小ねじ 下板-天板支え用両メネジ  x 4 M3 φ6 長さ25 mm 参考: wilco製 ARU-325 スペーサー 丸型両メネジ 下板-天板接続用ネジ  x 8 M3 長さ 8 mm 参考: wilco製 USLC-0308 六角穴付きスーパーローヘッドボルト 天板と下板のデータは ここ からDLできます. DXF,ISG,STLで用意したので興味のある方は是非使ってみてください. 下板のパーツのRaspberry Pi2固定用の穴はM2.6のタップでメネジをたてて下さい. それができない場合は,φ2.6の穴に拡張して,ナットで固定してください. その場合は,ナットの厚み分,プラネジを長くしてください. また,下板-天板接続用ネジの下面側のネジはナットよりも背の高いものを使用し

Python版OpenCVで色抽出を行う

イメージ
今回は,Python版のOpenCVを使ってHSV色空間で色抽出をする方法をメモしておきます. 環境は以下のとおりです. Python 2.6 OpenCV 2.4.6 更新履歴 2015/03/12 しきい値処理におけるTHRESH_BINARYとTHRESH_BINARY_INVが逆になっているのを修正しました. それでは早速スクリプトを見ていきます. import cv2 def extract_color( src, h_th_low, h_th_up, s_th, v_th ): hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV) h, s, v = cv2.split(hsv) if h_th_low > h_th_up: ret, h_dst_1 = cv2.threshold(h, h_th_low, 255, cv2.THRESH_BINARY) ret, h_dst_2 = cv2.threshold(h, h_th_up, 255, cv2.THRESH_BINARY_INV) dst = cv2.bitwise_or(h_dst_1, h_dst_2) else: ret, dst = cv2.threshold(h, h_th_low, 255, cv2.THRESH_TOZERO) ret, dst = cv2.threshold(dst, h_th_up, 255, cv2.THRESH_TOZERO_INV) ret, dst = cv2.threshold(dst, 0, 255, cv2.THRESH_BINARY) ret, s_dst = cv2.threshold(s, s_th, 255, cv2.THRESH_BINARY) ret, v_dst = cv2.threshold(v, v_th, 255, cv2.THRESH_BINARY) dst = cv2.bitwise_and(dst, s_dst) dst = cv2.bitwi

Python版OpenCVでWebカメラの画像を取得する

OpenCVを使うときは主にC++を使っているのですが,Pythonでも使えると何かと便利なので使い方を調べてみました. 今回は,Webカメラから画像を取得する方法をメモしておきます. ちなみにPython 2.6を使っている関係で,OpenCV 2.4.6を使っています. それでは早速スクリプトを見ていきます. import cv2 if __name__=="__main__": capture = cv2.VideoCapture(0) if capture.isOpened() is False: raise("IO Error") cv2.namedWindow("Capture", cv2.WINDOW_AUTOSIZE) while True: ret, image = capture.read() if ret == False: continue cv2.imshow("Capture", image) if cv2.waitKey(33) >= 0: cv2.imwrite("image.png", image) break cv2.destroyAllWindows() まずは,0番のカメラを引数にしてVideoCaptureクラスをインスタンス化します. capture = cv2.VideoCapture(0) 次に,isOpenedメソッドを使ってWebカメラに接続できているか確認します. もしできていなければIOエラーをだします. if capture.isOpened() is False: raise("IO Error") Webカメラで取得した画像を表示するCaptureという名前のウィンドウを設定します. cv2.WINDOW_AUTOSIZEを指定すると,表示する画像に応じてウィンドウの大きさが自動的に決まります. cv2.

ggplot2を使ってみる

最近,機械学習の勉強会でRをいじる機会がありました. Rは機械学習や統計に関するパッケーが充実しているのは大変魅力的です. そして,ggplot2という強力なグラフの描画用のパッケーがすごいです. Excelではこんな見栄えのよいグラフを作れないよなと感動してしまいます. 今日はそんなRのggplot2で基本的な図の描画をしてみます. まずggplot2をインストールしていない場合は,以下の用なコードでインストールしてください. コードを入力するとCRAN mirrorというウィンドウが現れるので,Japanあたりのミラーを指定してください. install.packages("ggplot2", dependencies = TRUE) package ‘ggplot2’ successfully unpacked and MD5 sums checked というメッセージがでればインストール成功です. インストールが無事終わったら,以下のようにライブラリをロードします. library('ggplot2') まずは,データフレームを作ります. set.seed(1) x.1 <- rnorm(1000) y.1 <- rnorm(1000) label.1 <- ifelse(rbinom(1000, size = 1, prob = 0.5), TRUE, FALSE) data.1 <- data.frame(X = x.1, Y = y.1, L = label.1) x.1とy.1には正規分布に従う乱数を1000個ずつ生成して格納します. label.1には,二項分布に従う乱数を生成し,1ならTRUE,0ならFALSEを格納します. これらのベクトルからデータフレーム data.1を作成します. データフレームの準備が出来たので,まずはXを0.4ずつに区切ってヒストグラムを描画します. ggplot()にデータフレームと使用するデータのラベルを指定し,描画する環境を設定します. その環境にgeom_histogram()で生成したヒストグラムを重ねることで,グラフを描画します. hist.1 <- ggplot(data.1, ae

OpenCVでチェスボードの交点を検出する

イメージ
最近OpenCVを使うことが増えたので,メモ代わりに情報を残しておきます. 今回は,OpenCVを使ってチェスボードの交点を探します. 以下の,チェスボードの交点を探します. チェスボードのデータをPDFで置いておきますので,よろしければA4用紙に印刷して使用ください. chess_board_A4_7x10.pdf チェスボードの交点位置を求めるプログラムは以下のようになります. #include "opencv2/core/core.hpp" #include "opencv2/calib3d/calib3d.hpp" #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" bool find_chess_corners( cv::Mat image, cv::vector *corners, cv::Size pattern_size, cv::Size chess_size ) { bool is_find = cv::findChessboardCorners(image, pattern_size, *corners); if( is_find != true ) { return false; } cv::Mat gray( image.rows, image.cols, CV_8UC1 ); cv::cvtColor(image, gray, CV_BGR2GRAY); cv::cornerSubPix(gray, *corners, chess_size, cv::Size(-1, -1), cv::TermCriteria(CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 20, 0.01)); return true; } int main(int argc, const char ** argv) { cv: