「Numpy」って日本語でなんと読めばいいのでしょうか?ググっても分かりませんでした。ポンダッドです。

数値計算ライブラリ「numpy」を利用する事で機械学習に関わる様々な処理が捗る様なので試してみました。

1
2
3
4
5
import cv2
import numpy as np
img = cv2.imread('samuel.jpg')
print(img)

OpenCV を使いこんな記述をして実行してみます。

1
2
3
4
5
6
7
8
9
10
$ python3 work11.py
[[[128 141 96]
[129 142 98]
[128 140 87]
...,
(略)
...,
[108 118 153]
[106 119 152]
[104 117 150]]]

画像samuel.jpgのGBR3色の配列を表示することが出来ました。

思わず「パイソンパイセン、マジ…」と呟きそうになりますが、少し冷静になり中身を調べて見ることにします。

numpy

先日試してみたpandasはデータ解析で広く利用されるモジュールですが、こちらのnumpyは複数の配列に対しての計算を行えるモジュールだそうです。

ものは試しでやって見ることにします。

1
2
3
4
5
6
7
8
9
10
11
12
import numpy as np
a = np.array([[1,2], [3,4]])
b = np.array([[5,6], [7,8]])
# 足し算
print(np.add(a,b))
# 引き算
print(np.subtract(a,b))
# 掛け算
print(np.multiply(a,b))
# 割り算
print(np.divide(a,b))

実行してみます。

1
2
3
4
5
6
7
8
9
10
11
$ python3 work12.py
[[ 6 8]
[10 12]]
[[-4 -4]
[-4 -4]]
[[ 5 12]
[21 32]]
[[ 0.2 0.33333333]
[ 0.42857143 0.5 ]]
[[ 1. 1.41421356]
[ 1.73205081 2. ]]

pythonで利用するlistを配列として利用するよりも高速で処理が行える為、このnp.array()を配列として利用することが多い様です。

複雑な処理を高速に行うためにこの様なモジュールを使うんですね。

カラーの写真を白黒に変換する

さて、このモジュールを利用してカラー写真を白黒写真に変換してみます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import numpy as np
import cv2
## opencvでビデオキャプチャ
cap = cv2.VideoCapture(0)
while(True):
 ## ビデオキャプチャ画像をストリーミング
ret, frame = cap.read()
cv2.imshow("Show FLAME Image", frame)
k = cv2.waitKey(1)
# sキー押下で実行
if k == ord('s'):
# 画像を保存
cv2.imwrite("output.png", frame)
# GBR画像の3次元配列を表示
img = cv2.imread("output.png")
print(img)
# 白黒画像に変換
gray_img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
# 白黒画像を保存
cv2.imwrite("gray_output.png", gray_img)
# 白黒画像の2次元配列を表示
print(gray_img)
elif k == ord('q'):
break
cap.release()
cv2.destroyAllWindows()

numpy配列を確認してみます。

まずはカラー画像から

1
2
3
4
5
6
7
8
9
[[[149 171 194]
[149 171 194]
[146 172 190]
...,
(略)
...,
[101 85 75]
[101 83 71]
[103 85 73]]]

白黒画像はこんな感じです。

1
2
3
4
5
6
7
[[167 167 166 ..., 252 251 253]
[170 166 168 ..., 250 250 252]
[162 160 162 ..., 247 247 248]
...,
[ 75 75 72 ..., 88 89 88]
[ 82 77 71 ..., 89 87 88]
[ 82 80 76 ..., 89 87 89]]

画像のピクセルの配列一つ一つを変換する事でカラーから白黒に変換しています。

まとめ

画像関係を機械学習させるには、数値計算ライブラリが必要になる様なので少し試してみました。

続いてはは文字認識を試してみたいなと思います。

参考書籍・サイト

Pythonによるスクレイピング&機械学習 開発テクニック BeautifulSoup,scikit-learn,TensorFlowを使ってみよう


画像処理入門講座 : OpenCVとPythonで始める画像処理 - POSTD

行列やベクトルを扱うことができるNumPyに入門 - YoheiM.NET