Author Archives: chen

CV(3) Eye Mosaic

Published by:

検出領域にモザイク処理

検出した領域にモザイクをかけたりすることもできる。

Viでサンプルコードを作成

$ vi test3.py 

import cv2
  
face_cascade_path = '/usr/local/opt/opencv/share/'
                    'OpenCV/haarcascades/haarcascade_frontalface_default.xml'
eye_cascade_path = '/usr/local/opt/opencv/share/'
                   'OpenCV/haarcascades/haarcascade_eye.xml'

face_cascade = cv2.CascadeClassifier(face_cascade_path)
eye_cascade = cv2.CascadeClassifier(eye_cascade_path)

src = cv2.imread('data/src/lena_square.png')
src_gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)

faces = face_cascade.detectMultiScale(src_gray)

ratio = 0.05

for x, y, w, h in faces:
    cv2.rectangle(src, (x, y), (x + w, y + h), (255, 0, 0), 2)
    face = src[y: y + h, x: x + w]
    face_gray = src_gray[y: y + h, x: x + w]
    eyes = eye_cascade.detectMultiScale(face_gray)
    for (ex, ey, ew, eh) in eyes:
        # cv2.rectangle(face, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2)
        eye = face[ey: ey + eh, ex: ex + ew]
        small = cv2.resize(eye, None, fx=ratio, fy=ratio, interpolation=cv2.INTER_NEAREST)
        face[ey: ey + eh, ex: ex + ew] = cv2.resize(small, (ew, eh), interpolation=cv2.INTER_NEAREST)

cv2.imwrite('data/dst/opencv_eye_detect_mosaic.jpg', src)

処理結果

$ python2 test3.py
[ INFO:0] Initialize OpenCL runtime…

$ ls -al data/dst/
total 512
drwxr-xr-x 4 chen staff 128 6 25 01:45 .
drwxr-xr-x 5 chen staff 160 6 20 00:50 ..
-rw-r–r–@ 1 chen staff 108333 6 25 01:51 opencv_eye_detect_mosaic.jpg
-rw-r–r–@ 1 chen staff 110477 6 25 01:07 opencv_face_detect_rectangle.jpg

ファイル data/dst/opencv_eye_detect_mosaic.jpg が作成されたことが確認した。

Basic Operators

Published by:

基本オペレータ


この節では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

Published by:

リスト


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

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

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

参考