みなさんこんにちは。文系女子SEのほりごたつ(@horigotatsuSE)です。
と悩んでいませんか?
最近「機械学習」という言葉があふれるようになりました。
機械学習とはその名の通り、AIのような機械に勉強させることです。
これをやることで、AIが動くようになるんですね。
という方もいるでしょう。
機械学習でよくつかわれる言語として人気なのがPythonという言語。
今回は現役SEの私が実際に勉強してみた感触をお伝えしていきます。
この記事の信頼性
私自身は文系未経験からSEになりました。
現在はCOBOLという言語を用いた開発をしており、現場では開発責任者にもなっています。
ですが、COBOL以外の言語は正直初心者同然。
今回は初心者目線でPythonの感触をお伝えできればと思います。
AI開発といえばPythonの理由
まずは、AI開発といえばPythonと言われる理由について
Pythonの言語の特徴をお伝えしていきます。
AI開発で人気なPythonの特徴
ではまずPythonの特徴から説明していきますね。
Pythonの特徴は以下の通りです。
1.簡単にプログラムが書けて動かせる
2.誰がプログラムを書いても同じような出来栄えになる
3.結果、「他人が見ても理解しやすい」プログラムができあがる
Pythonは最近になって急に人気になってきた印象があります。
▼SEの登竜門、基本情報技術者試験でもCOBOLの代わりにPythonが用いられるように
プレス発表 基本情報技術者試験における出題を見直し
最近になって急に人気になってきた理由、それは
AI開発で人気の言語だということ。
AI需要が高まってきた今だからこそ、Python人気が高まってきたんですね。
AI開発でPythonが人気の理由
ではなぜAI開発でPythonが人気なのでしょうか。
その理由はPythonの以下の強みにあります。
1.高度な数値計算が可能
2.高度な科学計算が可能
AI開発言語Pythonを現役SEが勉強してみた
AI開発言語Pythonの基本
まずはプログラミングといえば「hello,world」と言う通り
表示の構文からゆっくり覚えていきたいと思います。
表示については「print」で実行できます。
1 2 3 | print ('これで定数表示ができる') print ('文字列' + str[25]) print (f'Fを使うと{変数}の内容を表示できる') |
・ ”(シングルクォーテーション)で囲めば文字列として認識される。
・ 囲まなければ数値として認識される。
・ 文字列と数値を連結したい場合は数値をstr[]で文字タイプに置き換えれば連結可能。
・ print()のカッコ内にfを入れると変数表示のサイン
C言語だとprintf がお決まりですが、pythonだとprint (f~ になるのがポイントですね。
さて、続いては定数・変数・計算について。
基礎の中でもややプログラミング寄りになってきました。
1 2 3 4 5 | TEISU = 800 tasizan = kazu + kazu1 hikizan = kazu - kazu1 kakezan = kazu * kazu1 warizan = kazu / kazu2 |
実はpythonには定数という概念がなく、
変数に数字を入れることで定数として扱えるというだけのようです。
そのため、定数はしっかり大文字で定義し、分かりやすくすることがマナーですね。
そう、上記の例では、tasizanという変数に足し算の計算を代入しています。
これによって、kazuとkazu1にどんな数字が入ってきても計算可能ということです。
・ 他の言語と同じく、変数には計算でも定数でも代入可能。
・ 定数がないため、変数に固定の数字を入れてしまうことで定数として扱う
・ 計算は基本的にExcelと同じ
AI開発言語Pythonの応用~OpenCV~
さて、一気に応用編へ。OpenCVというものについてです。
javaでいうところのimportでパッケージからクラスを使えるみたいな印象ですね。
簡単に言うとだれでも使える技集で、これをプログラム内に切ることで簡単に技を使えるイメージです。
Open Source Computer Vision Library の略インテルが開発した画像処理、画像解析、機械学習の機能をまとめたプログラムの集まり。
以下のような機能を持つ。・ 画像ファイルを読み込んで表示
・ 画像をファイルへ保存
・ 直線や曲線の描画
・ 画像へ文字を描画
・ 画像にフィルタ処理して加工
・ 画像の特徴を抽出
たとえば、
1 2 3 4 5 6 7 8 | RESIZE_WIDTH = 800 img_height = img.shape[0] #shape[0]で縦サイズが分かる img_width = img.shape[1] #shape[1]で横サイズが分かる if img_width > RESIZE_WIDTH: img_resize = cv2.resize(img,(RESIZE_WIDTH,ing(RESIZE_WIDTH / img_width * img_height))) else: img_resize = img img_gray = cv2.cvtColor(img_resize, cv2.COLOR_RGB2GRAY) |
このようにcv2.はじまりのものを中に切ることで、
今回でいえばリサイズとグレースケール(色の境界をなくす)ことを簡単に組み込めるんですね。
上記のプログラムの中では以下2つのオープンソースを使って、横幅が800px以上なら800pxにリサイズした上でグレースケール化しています。
cv2.cvtColor(画像、変換させる方法)
cv2.resize(画像、拡大・縮小したときの大きさ)
このあたりが勉強不足なのですが、
Pythonで画像を扱う時には0番目が(縦)と1番目が(横)みたいになっているのかと。
さて、上記プログラムでグレースケール化した理由ですが、
顔検出がこのような仕組みになっているため、
色の境界をなくして輪郭をくっきりさせる必要があるからです。
グレースケール化した画像を、
さらに評価器にあてこむプログラムをつくることで、
画像の特徴を抽出したりもできるわけですね。
Pythonはそこまで難しくないかも!
最後のグレースケール化のプログラムを見てもらえばわかる通り、
かなり複雑な内容なのに、実際に組んでいるのは変数に代入する処理くらいなんですよね。
OpenCVがかなり有能でこれをどれだけ使いこなせるかがカギだな、と勉強して感じました。
今回、私が使った教材はコチラ!
未経験文系の人でも結構分かりやすいので
AIプログラミングが気になっている人はぜひ勉強してみてください!
SEになるための勉強法が気になる人は以下の記事もオススメ!
基本情報技術者試験午後問題の対策はアルゴリズムが要!試験合格までにやったこと
SE(システムエンジニア)は大学時代何してた?【文系女子SE】
文系からSE(システムエンジニア)になるには?文系SEが思う就活のポイント
SE(システムエンジニア)の試験は意外にも小論文?試験対策について現役SEが解説
Udemy(ユーデミー)とは?自宅でプログラミングからアプリ開発まで実践的に学べる!