「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 cap = cv2.VideoCapture(0) while(True): ret, frame = cap.read() cv2.imshow("Show FLAME Image", frame) k = cv2.waitKey(1) if k == ord('s'): cv2.imwrite("output.png", frame) img = cv2.imread("output.png") print(img) gray_img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) cv2.imwrite("gray_output.png", gray_img) 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