Variables and Types

Published by:

変数と型


Pythonは完全にオブジェクト指向であり、「静的に型付け」されていません。使用する前に変数を宣言したり、型を宣言する必要はありません。Pythonのすべての変数はオブジェクトです。

このチュートリアルでは、いくつかの基本的な種類の変数について説明します。

番号

Pythonは2種類の数をサポートします – 整数と浮動小数点数。(これは複素数もサポートします。このチュートリアルでは説明しません)。

整数を定義するには、次の構文を使用します。

myint = 7
print(myint)

 

浮動小数点数を定義するには、次の表記法のいずれかを使用します。

myfloat = 7.0
print(myfloat)
myfloat = float(7)
print(myfloat)

 

文字列

文字列は、一重引用符または二重引用符で定義されます。

mystring = 'hello'
print(mystring)
mystring = "hello"
print(mystring)

 

この2つの違いは、二重引用符を使用するとアポストロフィを簡単に含めることができるという点です(これに対して、一重引用符を使用すると文字列が終了します)。

mystring = "Don't worry about apostrophes"
print(mystring)

 

代入は、このように同じ行にある「同時に」複数の変数に対して行うことができます。

a, b = 3, 4
print(a,b)

 

課題

この課題の目標は、文字列、整数、および浮動小数点数を作成することです。文字列には名前を付けmystring、 “hello”という単語を含める必要があります。浮動小数点数には名前を付けてmyfloat10.0の数を入れ、整数には名前を付けてmyint20の数を入れなければなりません。

参考

https://www.learnpython.org/en/Variables_and_Types

Python for Ubuntu

Published by:

pyenvの環境構築

pyenvは、複数のPythonのバージョンを管理できるコマンドラインツール、特定バージョンしか正しく動かないて、環境構築に苦労することは、コレて解決!

まず必要なパッケージをインストールする必要。

$ sudo apt-get update
$ sudo apt-get install -y git build-essential libssl-dev language-pack-id

pyenvのレポジトリから、ホームディレクトリ下の.pyenvディレクトリにクローン。

$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv

こうすることで、$HOME/.pyenvにレポジトリがクローンされる。

では、次にpyenvに必要な環境変数を設定していきましょう。今後もシェルの起動時に環境変数が設定されるように~/.bash_profile~/.bashrc * などのシェルの設定ファイルに以下のコマンドで変数定義のコードを追加。

$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc

* シェルの環境がbashではなく、zshであれば~/.zshrcなど環境に合わせて設定ファイルが違うので注意しましょう。

設定ファイルを再読込するためにも、シェルを再起動。

$ exec $SHELL

関連記事

  • http://ups.edu2web.com/2018/10/18/caffe1-install/
  • http://ups.edu2web.com/2018/10/20/tensorflow1-install/

Python Hello, World!

Published by:

VS Code install

  1. ウェブページを開く
    https://code.visualstudio.com/ 
  2. Visual Studio Code」の「 ダウンロード」をクリック.※ Linux 版, Mac 版が欲しいときは「さらに詳しく」をクリック
  3. ダウンロードした .exeファイルを実行する.

Pythonスクリプトを書いてみる

  1. Documentsの下にPythonというフォルダを作る。
  2. VS Codeのメニューから「フォルダを開く」を選択し、1で作成したフォルダを指定する。
  3. 同じくメニューから「新規ファイル」を選択し、hello.pyなどのファイル名を付ける。拡張子から自動的にpythonスクリプトと認識される。
  4. VS Codeから、勧めExtensionsが表示され、好みでインストールする。
  5. 何か適当なコードを書く。
hello.py
if True:
    print('Hello world')
  1. VS Codeのターミナル(開いてなければメニューから「新規ターミナル」を開き)で実行する。
ターミナル
/Users/chen/Documents/C >  python hello.py
Hello world

これで最低限、pythonを快適に編集できるようになった。

 

RPi : Install Python

Published by:

既存Pythonの確認

最新版の「Raspberry Pi OS」でSDを作成した場合、比較的に新しいバージョンのPythonがすでにインストールしている場合がある。

pi@raspberrypi:~ $ python -V
Python 2.7.16
pi@raspberrypi:~ $ python3 -V
Python 3.7.3
pi@raspberrypi:~ $ pip -V
pip 18.1 from /usr/lib/python2.7/dist-packages/pip (python 2.7)
pi@raspberrypi:~ $ pip3 -V
pip 18.1 from /usr/lib/python3/dist-packages/pip (python 3.7)
pi@raspberrypi:~ $

 

 

インストール

使いのSDに、Pythonがインストールしていない場合、次のコマンドでインストールしてください。

cd /home
sudo apt-get update
sudo apt-get install python-pip python-dev build-essential

関連記事

  • http://ups.edu2web.com/2018/11/13/pi-machine-learning-1-setup/
  • http://ups.edu2web.com/2018/10/21/scikit-learn1-install/
  • https://digilib.edu2web.com/2017/05/19/raspberry-pi-6-nokia-5110-lcd/
  • https://digilib.edu2web.com/2018/09/18/raspberry-pi-9-waveshare-2-13inch-e-paper-hat/

 

Mac: OpenCVの導入

Published by:

 

Homebrew OpenCVの導入

 

chen@Hong-Mac-mini Python % brew install opencv
Updating Homebrew…

沢山のメッセージが流れ、終わったらしい。

インストールしたものを確認。

最近知ったのですが、モジュールのインストールの確認だけであれば、わざわざインタラクティブシェルを起動しなくても、以下のようなコマンドで問題無いようです。

chen@Hong-Mac-mini ~ % python -c ‘import cv2’
chen@Hong-Mac-mini ~ %

 

環境設定の確認

次のコードで、現在Phthonと顔認識パッケージのバージョンの確認できる

myenv.py

import sys
import cv2
import numpy
print("sys.path:\n" + "\n".join(sys.path))
print("OpenCV: " + cv2.__version__)
print("NumPy: " + numpy.__version__)

chen@Hong-Mac-mini Python % vi myenv.py
chen@Hong-Mac-mini Python % python myenv.py
sys.path:
/Users/chen/Documents/Python
/usr/local/lib/python3.8/site-packages/cv2/python-3.8
/usr/local/Cellar/python@3.8/3.8.3_1/Frameworks/Python.framework/Versions/3.8/lib/python38.zip
/usr/local/Cellar/python@3.8/3.8.3_1/Frameworks/Python.framework/Versions/3.8/lib/python3.8
/usr/local/Cellar/python@3.8/3.8.3_1/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload
/usr/local/lib/python3.8/site-packages
/usr/local/Cellar/protobuf/3.12.3/libexec/lib/python3.8/site-packages
OpenCV: 4.3.0
NumPy: 1.19.0
chen@Hong-Mac-mini Python %

 

 

顔画像の自動収集

ソースコードの取得

chen@Hong-Mac-mini Python % git clone https://github.com/sey323/hello_ghome
Cloning into ‘hello_ghome’…
remote: Enumerating objects: 23, done.
remote: Total 23 (delta 0), reused 0 (delta 0), pack-reused 23
Unpacking objects: 100% (23/23), done.
chen@Hong-Mac-mini Python % cd hello_ghome

収集したデータの保存先

chen@Hong-Mac-mini hello_ghome % mkdir img

haarcascades PATHの修正

chen@Hong-Mac-mini hello_ghome % vi face_camera/detector.py
chen@Hong-Mac-mini hello_ghome % ll /usr/local/share/opencv4/haarcascades/haarcascade_frontalface_alt.xml
-rw-r–r–  1 chen  staff  676709  4  3 20:45 /usr/local/share/opencv4/haarcascades/haarcascade_frontalface_alt.xml

コード実行してみる

chen@Hong-Mac-mini hello_ghome % python3 face_camera/camera.py img/
img//2020-07-10-180719_0.jpgis clip and saved!
img//2020-07-10-180719_0.jpgis clip and saved!
img//2020-07-10-180720_0.jpgis clip and saved!
img//2020-07-10-180720_0.jpgis clip and saved!
img//2020-07-10-180721_0.jpgis clip and saved!
img//2020-07-10-180721_0.jpgis clip and saved!
img//2020-07-10-180722_1.jpgis clip and saved!
img//2020-07-10-180722_1.jpgis clip and saved!

 

 

関連記事:

  • https://qiita.com/niwasawa/items/03b1496dbb360ca157e0 — OpenCV 4.3 + Python で Hello World と顔検出

WindowsでOpenCV

Published by:

OpenCVの導入

C:\Users\chen4\Documents\Python>pip install opencv-python [–user]
Collecting opencv-python
Downloading

環境設定の確認

次のコードで、現在Pythonと顔認識パッケージのバージョンの確認できる

myenv.py ソースコード


import sys
import cv2
import numpy
print("sys.path:\n" + "\n".join(sys.path))
print("OpenCV: " + cv2.__version__)
print("NumPy: " + numpy.__version__)

 

Pythonソースコードを動かしてみる。

C:\Users\chen4\Documents\Python>python myenv.py
sys.path:
C:\Users\chen4\Documents\Python
C:\Program Files\Python37\python37.zip
C:\Program Files\Python37\DLLs
C:\Program Files\Python37\lib
C:\Program Files\Python37
C:\Users\chen4\AppData\Roaming\Python\Python37\site-packages
C:\Program Files\Python37\lib\site-packages
OpenCV: 4.3.0
NumPy: 1.19.0

 

 

顔画像の自動収集ソースコードの取得

C:\Users\chen4\Documents\Python>git clone https://github.com/sey323/hello_ghome
Cloning into ‘hello_ghome’…
remote: Enumerating objects: 23, done.
remote: Total 23 (delta 0), reused 0 (delta 0), pack-reused 23
Unpacking objects: 100% (23/23), 12.35 KiB | 188.00 KiB/s, done.
C:\Users\chen4\Documents\Python>

haarcascades PATHの修正

WindowsのPATHは特殊のため、そのままでは動かないので、
face_camera\detector.pyファイルに書いたcascaファイルのPATHを、
WindowsのCV2インストール先に合わせて書き換える必要あります。
Pythonのcascaファイルは所在は、myenv.pyの結果を参照しましょう。

 

PythonのPathは、以下のいずれ方法で指定してください。

file = open('C:/hoge/test.txt', 'w')
file = open('C:\\hoge\\test.txt', 'w')

そのため修正したコードは次のようになります:

 

コード実行してみる

C:\Users\chen4\Documents\Python\hello_ghome>python face_camera/camera.py img/
img//2020-07-14-172718_0.jpgis clip and saved!
img//2020-07-14-172718_0.jpgis clip and saved!
img//2020-07-14-172718_0.jpgis clip and saved!
img//2020-07-14-172718_0.jpgis clip and saved!
img//2020-07-14-172718_0.jpgis clip and saved!
img//2020-07-14-172718_0.jpgis clip and saved!
img//2020-07-14-172718_0.jpgis clip and saved!
img//2020-07-14-172718_0.jpgis clip and saved!
img//2020-07-14-172719_0.jpgis clip and saved!

 

 

Introduce Solid

Published by:

Webの父、ティム・バーナーズ=リー(Tim Berners-Lee)さんがオープンソースプラットフォーム「Solid」の開発プロジェクトを立ち上げ、というニュースが出回りましたね。Inruptというスタートアップでプロジェクトを進めているそうです。

Solid POD(Personal Online Data Store: 以降POD)という個人のストレージ領域に個人のデータを保存し、他の人やサービスに読み書き権限を与える機能を持ちます。

YOU OWN YOUR DATA & CHOOSE APPS TO MANAGE IT!

Solid POD(Personal Online Data Store: 以降POD)という個人のストレージ領域に個人のデータを保存し、他の人やサービスに読み書き権限を与える機能を持ちます。具体的な機能としては、多くのSNSが持っているような以下の機能です。

  • ID管理
  • 認証とログイン
  • 認可とアクセス許可リスト
  • メッセージングと通知
  • フィードの集約や購読
  • コメントやディスカッション

参考

RPi : 機械学習 (1)

Published by:

Raspberry Pi を利用した機械学習について試す。

OpenCV、TensorFlow、Kerasをインストール

3 wget https://github.com/mt08xx/files/raw/master/opencv-rpi/libopencv3_3.4.0-20180115.1_armhf.deb
4 sudo apt install -y ./libopencv3_3.4.0-20180115.1_armhf.deb
5 sudo ldconfig
6 pip3 install numpy==1.13
7 sudo apt-get install libblas-dev liblapack-dev python3-dev libatlas-base-dev gfortran python3-setuptools
8 sudo pip3 install https://github.com/lhelontra/tensorflow-on-arm/releases/download/v1.8.0/tensorflow-1.8.0-cp35-none-linux_armv7l.whl
10 sudo apt-get install python3-h5py
11 sudo pip3 install keras==2.1.6

画像判別サンプル

12 git clone https://github.com/karaage0703/keras-pi
13 cd keras-pi

テスト用のカメラ画像を用いて判別(1)

14 python3 pred.py -l ./model/labels.txt -m ./model/mnist_deep_model.json -w ./model/weights.99.hdf5 -t ./data/test.jpg

次のエラーで撃沈

RuntimeError: module compiled against API version 0xc but this version
of numpy is 0xb
RuntimeError: module compiled against API version 0xc but this version
of numpy is 0xb
RuntimeError: module compiled against API version 0xc but this version
of numpy is 0xb

テスト用のカメラ画像を用いて判別(2)

numpyをアップデートして、再度試す。

15 python3 -c “import jupyter, matplotlib, numpy, scipy, sklearn
16 pip install -U numpy
17 python3 pred.py -l ./model/labels.txt -m ./model/mnist_deep_model.json -w ./model/weights.99.hdf5 -t ./data/test.jpg

同じエラーで撃沈

RuntimeError: module compiled against API version 0xc but this version
of numpy is 0xb
RuntimeError: module compiled against API version 0xc but this version
of numpy is 0xb
RuntimeError: module compiled against API version 0xc but this version
of numpy is 0xb

では、keras==2.1.6にしたら、どうでしょうか?

23 sudo pip3 install keras==2.1.6

結果は同じエラー。

テスト用のカメラ画像を用いて判別(3)

pi@raspberrypi:~ $
pi@raspberrypi:~ $ python3
Python 3.5.3 (default, Sep 27 2018, 17:25:39)
[GCC 6.3.0 20170516] on linux
Type “help”, “copyright”, “credits” or “license” for more information.
>>> import keras
Using TensorFlow backend.
RuntimeError: module compiled against API version 0xc but this version
of numpy is 0xb
RuntimeError: module compiled against API version 0xc but this version
of numpy is 0xb
RuntimeError: module compiled against API version 0xc but this version
of numpy is 0xb
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
File “/usr/local/lib/python3.5/dist-packages/keras/__init__.py”,
line 3, in <module>
from . import utils
File “/usr/local/lib/python3.5/dist-packages/keras/utils/__init__.py”,
line 25, in <module>
from .multi_gpu_utils import multi_gpu_model
File “/usr/local/lib/python3.5/dist-packages/keras/utils/multi_gpu_utils.py”,
line 7, in <module>
from ..layers.merge import concatenate
File “/usr/local/lib/python3.5/dist-packages/keras/layers/__init__.py”,
line 4, in <module>
from ..engine import Layer
File “/usr/local/lib/python3.5/dist-packages/keras/engine/__init__.py”,
line 8, in <module>
from .training import Model
File “/usr/local/lib/python3.5/dist-packages/keras/engine/training.py”,
line 11, in <module>
from scipy.sparse import issparse
File “/usr/local/lib/python3.5/dist-packages/scipy/sparse/__init__.py”,
line 229, in <module>
from .csr import *
File “/usr/local/lib/python3.5/dist-packages/scipy/sparse/csr.py”,
line 15, in <module>
from ._sparsetools import csr_tocsc, csr_tobsr, csr_count_blocks, \
ImportError: numpy.core.multiarray failed to import
>>> exit
Use exit() or Ctrl-D (i.e. EOF) to exit
>>>
pi@raspberrypi:~ $ sudo pip3 install keras==2.1.6
Requirement already satisfied: keras==2.1.6 in
/usr/local/lib/python3.5/dist-packages
Requirement already satisfied: pyyaml in
/usr/local/lib/python3.5/dist-packages (from keras==2.1.6)
Requirement already satisfied: scipy>=0.14 in
/usr/local/lib/python3.5/dist-packages (from keras==2.1.6)
Requirement already satisfied: numpy>=1.9.1 in
/usr/local/lib/python3.5/dist-packages (from keras==2.1.6)
Requirement already satisfied: six>=1.9.0 in
/usr/lib/python3/dist-packages (from keras==2.1.6)
Requirement already satisfied: h5py in /usr/lib/python3/dist-packages
(from keras==2.1.6)
pi@raspberrypi:~ $

すでにインストールされている。結果は同じ。

テスト用のカメラ画像を用いて判別(4)

numpy==1.13にしたら、どうでしょうか?

pi@raspberrypi:~ $ sudo pip3 install numpy==1.13
Collecting numpy==1.13
Downloading https://www.piwheels.org/simple/numpy/numpy-1.13.0-cp35-cp35m-linux_armv7l.whl (6.1MB)
100% |████████████████████████████████| 6.1MB 23kB/s
Installing collected packages: numpy
Found existing installation: numpy 1.15.4
Uninstalling numpy-1.15.4:
Successfully uninstalled numpy-1.15.4
Successfully installed numpy-1.13.0
pi@raspberrypi:~ $ cd keras-pi
pi@raspberrypi:~/keras-pi $ python3 pred.py -l ./model/labels.txt -m ./model/mnist_deep_model.json -w ./model/weights.99.hdf5 -t ./data/test.jpg
Using TensorFlow backend.
RuntimeError: module compiled against API version 0xc but this version of numpy is 0xb
RuntimeError: module compiled against API version 0xc but this version of numpy is 0xb
RuntimeError: module compiled against API version 0xc but this version of numpy is 0xb
Traceback (most recent call last):
File “pred.py”, line 6, in <module>
from keras.preprocessing.image import array_to_img, img_to_array, load_img
File “/usr/local/lib/python3.5/dist-packages/keras/__init__.py”, line 3, in <module>
from . import utils
File “/usr/local/lib/python3.5/dist-packages/keras/utils/__init__.py”, line 25, in <module>
from .multi_gpu_utils import multi_gpu_model
File “/usr/local/lib/python3.5/dist-packages/keras/utils/multi_gpu_utils.py”, line 7, in <module>
from ..layers.merge import concatenate
File “/usr/local/lib/python3.5/dist-packages/keras/layers/__init__.py”, line 4, in <module>
from ..engine import Layer
File “/usr/local/lib/python3.5/dist-packages/keras/engine/__init__.py”, line 8, in <module>
from .training import Model
File “/usr/local/lib/python3.5/dist-packages/keras/engine/training.py”, line 11, in <module>
from scipy.sparse import issparse
File “/usr/local/lib/python3.5/dist-packages/scipy/sparse/__init__.py”, line 229, in <module>
from .csr import *
File “/usr/local/lib/python3.5/dist-packages/scipy/sparse/csr.py”, line 15, in <module>
from ._sparsetools import csr_tocsc, csr_tobsr, csr_count_blocks, \
ImportError: numpy.core.multiarray failed to import
pi@raspberrypi:~/keras-pi $

結果も同じだ!

 

TensorFlow(2) Classifier

Published by:

tensorflowのClassifier(分類器)を作ってみると思った。

調査

まず調査

分類したいものを集め

分類器を訓練

分類器の実装

まとめ

参考

  1. https://qiita.com/NoriakiOshita/items/4f20114ee7d3713b345f — TensorFlowでうなぎと寿司を判定するAndroidアプリを作ってみた.
  2. https://qiita.com/believe2200/items/c4858507f9d270797666 — 機械学習でイケメン(ブサメン)判定アプリを作ってみる。
  3. http://nilhcem.com/android/custom-tensorflow-classifier – Android – Add some machine learning to your apps, with TensorFlow

scikit-learn(2) 線形サポートベクトルマシン

Published by:

下記のBB本の続きだが、

カラー図解 Raspberry Piではじめる機械学習 基礎からディープラーニングまで

Google Colaboratory環境は、Piとほぼ同じとわかったので、これからの実験はGoogle Colaboratoryで行う。

線形サポートベクトルマシンのコードがよくわからないので、そのままコピペ

# -*- coding: utf-8 -*-
from sklearn import datasets, svm
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap

# アヤメのデータをロードし、変数irisに格納
iris = datasets.load_iris()

# 特徴量のセットを変数Xに、ターゲットを変数yに格納
X = iris.data
y = iris.target

# 特徴量を外花被片の長さ(sepal length)と幅(sepal width)の
# 2つのみに制限(2次元で考えるため)
X = X[:,:2]

# ターゲットは2 (iris virginica) でないもの, 
# つまり iris setosa (0) と iris versicolor (1) のみを対象とする
# (領域の2分割)
X = X[y!=2]
y = y[y!=2]

# 分類用にサポートベクトルマシン (Support Vector Classifier) を用意
clf = svm.SVC(C=1.0, kernel='linear')
# データに最適化
clf.fit(X, y)

##### 分類結果を背景の色分けにより表示

# 外花被片の長さ(sepal length)と幅(sepal width)の
# 最小値と最大値からそれぞれ1ずつ広げた領域を
# グラフ表示エリアとする
x_min = min(X[:,0]) - 1
x_max = max(X[:,0]) + 1
y_min = min(X[:,1]) - 1
y_max = max(X[:,1]) + 1

# グラフ表示エリアを縦横500ずつのグリッドに区切る
# (分類クラスに応じて背景に色を塗るため)
XX, YY = np.mgrid[x_min:x_max:500j, y_min:y_max:500j]

# グリッドの点をscikit-learn用の入力に並べなおす
Xg = np.c_[XX.ravel(), YY.ravel()]

# 各グリッドの点が属するクラス(0か1)の予測をZに格納
Z = clf.predict(Xg)

# Zをグリッド上に並べなおす
Z = Z.reshape(XX.shape)

# クラス0 (iris setosa) が薄オレンジ (1, 0.93, 0.5, 1)
# クラス1 (iris versicolor) が薄青 (0.5, 1, 1, 1)
cmap01 = ListedColormap([(0.5, 1, 1, 1), (1, 0.93, 0.5, 1)])

# 背景の色を表示
plt.pcolormesh(XX, YY, Z==0, cmap=cmap01)

# 軸ラベルを設定
plt.xlabel('sepal length')
plt.ylabel('sepal width')

##### ターゲットに応じた色付きでデータ点を表示

# iris setosa (y=0) のデータのみを取り出す
Xc0 = X[y==0]
# iris versicolor (y=1) のデータのみを取り出す
Xc1 = X[y==1]

# iris setosa のデータXc0をプロット
plt.scatter(Xc0[:,0], Xc0[:,1], c='#E69F00', linewidths=0.5, edgecolors='black')
# iris versicolor のデータXc1をプロット
plt.scatter(Xc1[:,0], Xc1[:,1], c='#56B4E9', linewidths=0.5, edgecolors='black')

# サポートベクトルを取得
SV = clf.support_vectors_
# サポートベクトルの点に対し、赤い枠線を表示
plt.scatter(SV[:,0], SV[:,1], c=(0,0,0,0), linewidths=1.0, edgecolors='red')

# 描画したグラフを表示
plt.show()

結果の出力