アラフィフの普通のサラリーマンが、将来フリーランスになれるかを目指してプログラミングをいちから勉強をはじめました。 夫がブログに残した勉強の過程を公開できるようにブログ編集しながら一緒に学んでいきます。
gymの倒立振子を使って強化学習SARSA法 Q-learningとSARSA法の違い 次のアクション(next_action)を学習の前に求める(SARSA法)か、学習の後で決定する(Q-learning)かが違います。先に求めるSARSA法だとε-greedy法によりランダムになる場合が出てきます。 むずかしいことはわかりませんが、Q-learningのメリットははランダム要素が少なく結果が早く収束することだと思います。SARSA法のメリットはランダム要素により収束まで時間はかかりますが最適な方向へより安定した結果を出せることだと思います。(間違ってたらごめんなさい) まとめるとSARSA…
gymの倒立振子を使って強化学習Q-learning(Q学習)第2回 はじめに 前回は、状態を「4つの要素を6分割」して1296通りの中から今ある状態のときの「右と左」に「報酬と罰則」を与えながら得点の高い方を選ぶやり方でした。 今回は、状態を「2つの要素を8分割と6分割」にして48通りでやってみます。 これで8✖️6✖️2の三次元配列のq_tableにできるのて、得点の変化を見ながら学習させていけそうです。 表の横が棒の角度(-0.5,~0.5)、縦が棒の角速度(-2.0~2.0)です。上が大きいときは右に移動、下が大きいときは左に移動となります。 30試行回数くらいの様子です。50試行回数…
Q-learning(Q学習)による倒立振子 (棒を立て続ける)
gymの倒立振子を使って強化学習Q-learning(Q学習)第1回 500試行ほどの学習によりかなり安定して棒を支えられるようになりました。 プログラムのコードは CartPoleでQ学習(Q-learning)を実装・解説【Phythonで強化学習:第1回】 こちらからそのまま使わせていただきました。 解説 変数 q_table 【重要】 「6の4乗」個と「2」個からなる二次元配列 (初期値は全て -1~1の乱数) 変数 state 4つの要素を6分割した値を6進数で表して、さらに十進数にしたもの (6個ずつの四次元配列を一次元配列に変換したときの何番目か) np.argmax関数 act…
機械学習とはどういうものか? 機械学習の分類にはさまざまな分類方法がありますが、このアルゴリズムを次の3種類に分ける考え方があります。 ・教師あり学習(Supervised Learning) 過去のデータから将来起こりそうな事象を予測する用途に使われます。 ・教師なし学習(Unsupervised Learning) アルゴリズム自身がデータを探索してその内部に何らかの構造を見つけ出します。 ・強化学習(Reinforcement Learning) どの行動が最大の報酬を生み出すかを、試行錯誤を通して突き止めます。 今回は強化学習について勉強していきたいと思います。 本日の課題と目標 gy…
【完成版】特定のウィンドウだけの動画とGIFを保存したい (Python デスクトップキャプチャ2)
本日の課題と目標 録画時間と待機時間を自由に変更できるようにする 保存するウィンドウの名前を指定できるようにする はじめに 前回作成したデスクトップ画面を録画するプログラムを改良します。録画が始まるタイミングと終わったタイミングがわかるようにしました。 プログラムのコード import cv2 import numpy as np from PIL import ImageGrab import ctypes import win32gui import tkinter import time # ウィンドウのタイトル名 root = tkinter.Tk() root.title('test…
特定のウィンドウだけの動画とGIFを保存したい (Python デスクトップキャプチャ)
本日の課題と目標 Pythonでデスクトップの動画キャプチャを作る 特定のウィンドウだけをキャプチャする 動画と一緒にGIFでも保存する 今後の目標 録画時間と待機時間を自由に変更できるようにする 保存するウィンドウの名前を指定できるようにする はじめに 完成したプログラムの動きのあるところを貼り付けたかったのでフリーソフトを探そうとしましたが自分で作れればいいなと思い挑戦してみました。 苦労した点は、保存した動画の色が変になってしまい原因がわからなかったところです。 プログラムのコード # 画像書き込み import cv2 # 型変換 import numpy as np # スクリーンシ…
Tkinterでスライダーを使ってカウントダウンを作る(Python タイマー作成)
本日の課題と目標 Tkinterでタイマーを作る Tkinterでスライダーを利用する はじめに 以前Kivyで作ったのと同じものをTkinterで作成します。最初に設定した秒数だけカウントダウンするプログラムです。 スライダー(slider)のことをTkinterではスケール(scale)というみたいです。 プログラムのコード import tkinter import time # ウィンドウのタイトル名 root = tkinter.Tk() root.title("test") root.geometry("300x150") # キャンバスエリアの設定 canvas = tkinte…
Tkinterでボタンとラベルを利用する (Python ボタンとラベルの配置)
本日の課題と目標 Tkinterでボタンとラベルを利用する はじめに 以前Kivyで作ったのと同じものをTkinterで作成します。テキストボックスに続きボタンとラベルを作っていきます。 プログラムのコード import sys import tkinter # ウィンドウのタイトル名、幅と高さを設定 root = tkinter.Tk() root.title(u"test") root.geometry("300x150") # ボタンが押されるとここが呼び出される def EntryValue(event): # ここで,valueにEntryの中身が入る value = EditBox…
Tkinterでテキストボックスを利用する (Python テキストボックスの配置)
本日の課題と目標 Tkinterでテキストボックスを利用する 日本語入力が出来るかテストする はじめに 今回から新たにTkinterを勉強していきます。ラベルとボタンは後回しにして、テキストボックスを作っていきます。 プログラムのコード(エラー) import sys import Tkinter # ウィンドウのタイトル名、幅と高さを設定 root = Tkinter.Tk() root.title(u"test") root.geometry("300x150") # エントリー(テキストボックス) EditBox = Tkinter.Entry(width=200) EditBox.in…
本日の課題と目標 テキストボックスに日本語を入力する はじめに 前回テキストボックスに日本語が入力できなかったので、いろいろ調べました。 結論として Kivyでの日本語入力は諦めます。 おそらく多くの人がここで挫折していったのでしょう。ほかにも方法があるなら Kivyにこだわる必要もないかなと思いました。 プログラムのコード 解説 Kivyのテキストボックスで複数行なら日本語は入力できます。ただし問題はエンターキーを押すまで表示されない、つまり漢字に変換することも難しいです。 対策はいろいろありそうですがどうもスッキリせず納得いく形にならなそうです。 Kivyだとやりたい事が出来そうにないので…
Kivyでテキストボックスを利用する (Python テキストボックスの配置と取得)
本日の課題と目標 テキストボックスを配置する テキストボックスから取得する はじめに 今回はテキストボックスを使用します。これでラベル、ボタン、スライダー、テキストボックスが使えるようになりました。 プログラムのコード # フル画面を解除して画面の幅と高さを設定 from kivy.config import Config Config.set('graphics', 'fullscreen', '0') Config.set('graphics', 'width', '300') Config.set('graphics', 'height', '150') from kivy.app im…
Kivyでスライダー(slider)を使ってみる(Python タイマー作成2)
スライダーとは? ITの分野では、コンピュータの操作画面で、棒状の領域の上に現在位置を指し示す小さな印を表示し、これを利用者が上下あるいは左右に移動させることで値や範囲を指示する入力要素のことをスライダーという。厳密には、現在位置を表す印をスライダー、スライダーが移動できる棒状の領域をスライダーバー(slider bar)という。 スライダーバーは、ウィンドウの表示領域を指し示すものはスクロールバー(scroll bar)とも呼ばれ、音声や動画の再生ソフトで現在の再生位置を指し示すものはシークバー(seek bar)とも呼ばれる。 本日の課題と目標 カウントダウンの初期値を変更する スライダー…
Kivyでkvファイルを利用してカウントダウンを作る(Python タイマー作成)
本日の課題と目標 kvファイルを利用する カウントダウンを作る はじめに 今回は pvファイルを使っていきます。最初に設定した秒数だけカウントダウンするプログラムです。 kvファイルに日本語が含まれてエラーになりました。ほかに方法はあると思いますが今回はコメントで日本語を使用していたので全て削除しました。 プログラムのコード # フル画面を解除して画面の幅と高さを設定 from kivy.config import Config Config.set('graphics', 'fullscreen', '0') Config.set('graphics', 'width', '300') Co…
Kivyでボタンの位置と大きさを決める (Python ボタン作成)
本日の課題と目標 ボタンを作成 ボタンを押したら実行 今後の目標 カウントダウンを作る はじめに 今回は pvファイル(後日詳しくやります)を使わずにコードを書いていきます。ボタンを押すと「Hello World」と表示されるだけのプログラムです。 調べるのに苦労したところは、ボタンの位置と大きさの設定とkvファイルなしでのやり方です。 プログラムのコード① # フル画面を解除して画面の幅と高さを設定 from kivy.config import Config Config.set('graphics', 'fullscreen', '0') Config.set('graphics', '…
Pythonでボタン作成にはモジュール(ライブラリ)を何にするか
本日の課題と目標 ボタン作成の準備 ラベル(文字)を表示する 今後の目標 ボタンを作成 ボタンを押したら実行 カウントダウンを作る はじめに 今まで作ってきたプログラムをボタンで実行してみたくなりました。また初期の変数もコードを変更せずに入力できるようにしたいです。 今までなら「python ボタン作成」でググって・・・なるほど。ボタンを作れるモジュールはTkinterか、となってました。 これからは、ほかにもボタンを作れるモジュールを探します。 ありました、しかも4つ。「Tkinter」「Kivy」「PyQt」「wxPython」の4つがおすすめのようです。 「Tkinter」ばかり出てきて…
第ニ章 keras−yolo3で学習させる 第3回 YOLO 学習開始! こちらのサイトを参考にさせていただきました https://sleepless-se.net/2019/06/21/how-to-train-keras%e2%88%92yolo3/ YOLO 学習開始! 本当に時間がかかります。朝9時にスタートして終わったのは15時頃でした。 (計60枚の画像なのでこの程度で済んでいるのだと思います) 学習済みのモデルを実行 python yolo_video.py --image を実行して画像のファイル名を入力。 結果は・・・ うーん、散々でした。20枚の学習データで少なすぎたのと…
第ニ章 keras−yolo3で学習させる 第2回 VOTTを使ってアノテーションファイルを作成 アノテーションとは? 「画像のここに対象物がありますよ。と伝えることをアノテーションといいます。」 「人の目的に沿ったルールをAI(人工知能)に学習させたいとき、正しく学習させるための大量のデータが必要です。そのため、AI開発にはデータへの正しいタグ付けが非常に重要です。そのプロセスをアノテーション、タグ付けされたデータを教師データと呼びます。」 などの説明がされています。 こちらのサイトを参考にさせていただきました。 https://sleepless-se.net/2019/06/21/how…
第ニ章 keras−yolo3で学習させる 第1回 教師画像を用意する 一晩考えた結果、今ある最新のバージョンで勉強したほうが良いと思いこのまま進めてみることにしました。 https://sleepless-se.net/2019/06/21/how-to-train-keras%E2%88%92yolo3/ 今回はこちらを参考にさせていただきました iCrawlerを使ってみます。 icrawlerモジュールをインストールして pip install icrawler このコードでオッケー from icrawler.builtin import GoogleImageCrawler cra…
第一章 迷走編 第4回 YOLOで物体認識 こちらを参考にさせていただきました。 https://tech-diary.net/keras-yolov3/ 必要になるモジュール Tensorflow 2.0 Keras 2.2.4 Matplotlib 3.1.1 Pillow 6.2 上記の4つをインストールしています。 順調にYOLOをダウンロードして実行してみるとエラー出まくります。 原因はTensorflowのバージョンにあるみたいでした。バージョン2.0から大幅に仕様が変わったらしいです。 Tensorflowのバージョンを2.0から1.4にダウングレードしました。 上手く動きました…
第一章 迷走編 第3回 ふりだしに戻る 大人の事情で物体認識に変更します。 今回は物体認識するために適したモジュールとアルゴリズムを調べます。 まずアルゴリズムを決めてからそれが使えるモジュールを探したいと思います。 アルゴリズムとは? 問題を解決するための方法や手順のこと。 ひとことで物質認識といっても様々な手法や歴史があります。難易度、精度、対象物によって適した手法は違います。 例えると山登り。何をするかは山選び、山が決まればどの道で山頂まで行くかのルートを探します。 今までは計画性なしで突っ込んでましたが、これからは先に勉強した方が近道だとわかりました。 話が長くなりましたがこちらを参考…
第一章 迷走編 第2回 事前準備がたいへんすぎる 次は顔認識用のデータ(学習用データ)が必要みたいで調べていると、 またまた事前準備 libopenblas-dev (パッケージ) liblapack-dev (パッケージ) をインストールする https://qiita.com/t--k/items/69c43a667a1283578012 http://auewe.hatenablog.com/entry/2013/05/04/075717 CMake 3.12.0 をインストールする https://qiita.com/East_san/items/b8ebc34dad226865899…
第一章 迷走編 第1回 dlibモジュールのインストール はい、詰まりました。インストール出来ません。 色々調べてなんとかインストール出来ましたが何が原因だったかはっきりわかりません。ここからは妄想・想像になります。 dlibモジュールのインストールする前に 必要なモジュールがたくさんある。 python-opencv (パッケージ) git (パッケージ) cython scikit-image libboost-dev (パッケージ) libboost-python-dev (パッケージ) libboost-system-dev (パッケージ) ここで一度PCを再起動させる build-e…
ドラゴンボールのスカウターっぽいのを作りたい http://neuro-educator.com/dbscouter/ だいたいの流れは下記のようになると予想 顔認識でマンガから顔の部分だけを検出 顔データからどのキャラを確定させる そのキャラの強さを顔の近くに表示する いきなり高度なディープラーニング(機械学習)が出てきそうだが、はたして最後まで辿り着けるのか?それとも途中で挫折するのか? 今回は長くなりそうなので細かく分けて解説していきます。 ここに目次でリンク貼る予定です。 文責:Luke
本日の課題と目標 gifの保存方法を学ぶ はじめに ブログにgif画像を貼りたくなりgifを作りたくなりました。サンプルコードを参照に「虹色の四角形が大きくなるプログラム」を作っていきます。 プログラム from PIL import Image, ImageDraw images = [] width = 200 center = width // 2 color_1 = (255, 0, 0) color_2 = (255, 165, 0) color_3 = (255, 255, 0) color_4 = (0, 128, 0) color_5 = (0, 255, 255) color…
ラベルに対応した色も表を作る (クロスステッチデータを作る 第5回 (最終回) )
本日の課題と目標 ラベルごとの色データを抽出する Excelに色データを書き込む Excelのセルに色を付ける はじめに 以前のcv2.kmeans関数の戻り値3はラベルに対応した色情報でした。それを利用して今回はExcelでラベルに対応した色の表を作成しようと思います。 ラベル、色見本、R、G、Bを表にします。 プログラム # -*- coding: utf-8 -*- import cv2 import numpy as np import openpyxl from openpyxl.styles.borders import Border, Side from openpyxl.sty…
配列データをExcelに書き込む (クロスステッチデータを作る 第4回)
本日の課題と目標 cv2.kmeans関数の戻り値2であるラベル番号を調べる Excelにラベルデータを書き込む はじめに 前回の続きで、作成したExcelファイルにラベルデータを書き込んでいきます。これが出来れば、ほぼクロスステッチ用データの完成です。 プログラム # -*- coding: utf-8 -*- import cv2 import numpy as np import openpyxl from openpyxl.styles.borders import Border, Side from openpyxl.styles import Font # 減色処理 def sub…
pythonでExcelデータを作成 (クロスステッチデータを作る 第3回)
本日の課題と目標 印刷したい (何使おうか?) Excelを使おう 新しいExcelファイルを作る 罫線を引く フォントの設定 (文字の大きさを変更) セルの大きさを変更 データの保存 はじめに 前回のcv2.kmeans関数の戻り値2であるラベル番号をExcelに表示させると、クロスステッチの図案が出来そうです。ラベルに対応した色も表みたいにして出したいです。今回はExcelファイルを作成してセルの大きさを調整し罫線を引くところまでです。 Excelファイル作成のプログラム import openpyxl from openpyxl.styles.borders import Border,…
k平均法 (k-means) で画像の減色処理 (クロスステッチデータを作る 第2回)
本日の課題と目標 k平均法 (k-means) を勉強する 前回リサイズした画像データの色数をいい感じに減らす はじめに 【勘違い】今まで画像ファイルを読み込んで三次元配列に変換してると思ってしましたが実は画像ファイルのデータは元々三次元配列のデータでした。色データが縦横にぎっしり詰まっているイメージです。 例えば1024×768を画素数で示せば、単純にかけ算すればいいのですから、786432画素。約78万画素になります。つまり約78万画素の色データを持っているということです。 ここでもリスト 多次元配列がかなり重要になります。三次元配列をしっかり理解しないと今後苦労すると思ったので復習しまし…
画像サイズを変更する (python クロスステッチデータを作る 第1回)
本日の課題と目標 resizeを使って画像サイズを変更する サイズの指定方法を考える はじめに 数字認識で、画像を8×8のサイズに変更する方法がわかりました。その方法を使えば写真をクロスステッチ用のデータに出来ると考えました。 画像サイズを変更するプログラム from PIL import Image import numpy as np import sys img = Image.open('test.jpg') # 白黒にするには .convert('L') width, height = img.size print(width, height) while True: ans = i…
引数と戻り値 引数(ひきすう)とは、関数に渡される「値」や「変数」のことです。戻り値(もどりち)とは、関数が出力する「値」のことです。例えば、引数である”白米”を”炊飯器”という関数に渡し、出力された”ご飯”が戻り値となります。関数を「自動販売機」に例えるとしたら、引数は「お金」戻り値は自動販売機から出てくる「ジュース」みたいなものです。 例1: 戻り値 = 引数1 + 引数2print(引数1 + 引数2) で、「戻り値」が表示されます >>print(1 + 1) 2 注意: print("1 + 1") の場合は、 「2」ではなく「1 + 1」が表示されます 理由は、文字「1 + 1」が…
「ブログリーダー」を活用して、ReyLukeさんをフォローしませんか?
指定した記事をブログ村の中で非表示にしたり、削除したりできます。非表示の場合は、再度表示に戻せます。
画像が取得されていないときは、ブログ側にOGP(メタタグ)の設置が必要になる場合があります。