All posts by chen

Basic Operators

基本オペレータ


この節ではPythonで基本的な演算子を使う方法を説明します。

算術演算子

他のプログラミング言語と同じように、加算、減算、乗算、除算の演算子を数値と共に使用できます。

number = 1 + 2 * 3 / 4.0
print(number)

答えがどうなるかを予測してみてください。Pythonは操作の順番に従いますか?

利用可能な別の演算子は、除算の整数剰余を返すモジュロ(%)演算子です。配当率%divisor =剰余。

remainder = 11 % 3
print(remainder)

2つの乗算記号を使用すると、べき乗の関係になります。

squared = 7 ** 2
cubed = 2 ** 3
print(squared)
print(cubed)

文字列で演算子を使用する

Pythonは、加算演算子を使った文字列の連結をサポートしています。

helloworld = “hello” + ” ” + “world”
print(helloworld)

Pythonは、文字列を繰り返して連続する文字列を形成することもサポートしています。

lotsofhellos = “hello” * 10
print(lotsofhellos)

リストでの演算子の使用

リストは加算演算子で結合することができます。

even_numbers = [2,4,6,8]
odd_numbers = [1,3,5,7]
all_numbers = odd_numbers + even_numbers
print(all_numbers)

文字列の場合と同様に、Pythonは乗算演算子を使用して繰り返しシーケンスで新しいリストを作成することをサポートします。

print([1,2,3] * 3)

演習課題

この課題の目標は、x_listand という2つのリストを作成することです。y_listこれらのリストには、それぞれ変数xandの10個のインスタンスが含まれていますy。あなたはとも呼ばれるリストを作成するために必要とされているbig_list変数が含まれ、xそしてyあなたが作成した二つのリストを連結して、10回ずつ。

x = object()
y = object()

# TODO: change this code
x_list = [x]
y_list = [y]
big_list = []

print("x_list contains %d objects" % len(x_list))
print("y_list contains %d objects" % len(y_list))
print("big_list contains %d objects" % len(big_list))

# testing code
if x_list.count(x) == 10 and y_list.count(y) == 10:
    print("Almost there...")
if big_list.count(x) == 10 and big_list.count(y) == 10:
    print("Great!")

 

Lists

リスト


リストは配列と非常によく似ています。それらは任意のタイプの変数を含むことができ、それらはあなたが望むだけ多くの変数を含むことができます。リストは非常に簡単な方法で反復することもできます。これはリストを作成する方法の例です。

mylist = []
mylist.append(1)
mylist.append(2)
mylist.append(3)
print(mylist[0]) # prints 1
print(mylist[1]) # prints 2
print(mylist[2]) # prints 3

# prints out 1,2,3
for x in mylist:
    print(x)

 

存在しないインデックスにアクセスすると、例外(エラー)が発生します。

mylist = [1,2,3]
print(mylist[10])

 

課題

この課題では、 “append”リストメソッドを使って正しいリストに数字と文字列を追加する必要があります。「数」リストに数字1、2、および3を追加し、文字列変数に単語「hello」と「world」を追加する必要があります。

角かっこ演算子を使用して、変数second_nameに名前リストの2番目の名前を入力する必要もあります[]。インデックスは0から始まるので、リストの2番目の項目にアクセスする場合、そのインデックスは1になります。

参考

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

Variables and Types

変数と型


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

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!

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

既存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:~ $

現時点のPi OSに対応するpythonはpython 3.7。

 

インストール

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

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

Python3.9をインストールする

現時点のPi OSに対応するpythonより新しいパージョンは必要な場合、ソースからインストールする。

#準備
sudo apt-get update
sudo apt-get upgrade -y
#ソースのダウンロード
#ダウンロードしたソースの展開
tar zxvf Python-3.9.4.tgz
#コンパイル&インストール
cd Python-3.9.4
./configure
make
sudo make install
#バージョン確認
python3.9 -v

関連記事

  • 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の導入

 

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 %

 

 

顔画像の自動収集

ソースコードの取得

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.

収集したデータの保存フォルダを作成

 % cd hello_ghome

% mkdir img

haarcascades PATHの修正

OpenCVでは、顔・目などを検出できるカスケード識別器の学習済みファイルhaarcascadesを事前に用意されています。

OpenCVインストールしたなら、haarcascadesファイルのもうどこかに置いてる。まず、locateコマンドでhaarcascadesファイルの場所を確認してください。
 % locate  haarcascade_frontalface_alt.xml
見つからないなら、Githubからgit cloneしましょう。
次は、テキストエディタで face_camera/detector.py の haarcascades に対応PATHの修正。
% vi face_camera/detector.py

コード実行してみる

 % python 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

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

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)

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 $

結果も同じだ!