アラフィフの普通のサラリーマンが、将来フリーランスになれるかを目指してプログラミングをいちから勉強をはじめました。 夫がブログに残した勉強の過程を公開できるようにブログ編集しながら一緒に学んでいきます。
Python GIFファイルをTwitterに張り付ける(GIFアニメーションに変換する)
はじめに 以前作成したGIFファイルがTwitterに張り付けると動きませんでした。原因を調べてみると色が最大256色しか使えないことがわかりました。 今回はすでに保存したGIFファイルをGIFアニメーションに変換するプログラムを作っていきます。 解説 色情報は、(0,0,0) ~ (255,255,255) の約1677万色(256×256×256)あります。 GIFアニメーションの場合は、最大256色(8×8×4)です。 =====ここから勘違い===== なるほど。RGBなら赤が8段階、緑が8段階、青が4段階の256色か、と思ってしまいました。256を8で割って「32」。おそらく、0, …
Python GIFファイルの読み込み・編集・表示・書き込み
はじめに GIFファイルを編集するための準備を行います。GIFの読み込み、表示、書き込みの基本を勉強していきます。GIFの読み込み方は「OpenCV」と「Pillow(PIL)」がありますが、「OpenCV」が編集しやすそうなのでこちらを利用します。 モジュールのインポート import cv2 import numpy as np from moviepy.editor import ImageSequenceClip 今回はOpenCVを使います。numpyは編集用です。ImageSequenceClipは保存時に使います。 GIFファイルの読み込み gif = cv2.VideoCapt…
Kivy ラベルとボタンの境界線を手動で移動させる(Python Kivyの取説・使い方 第15回)
ラベルとボタンの境界線を手動で移動させる方法 Splitter(スプリッター)ウィジェットを使います。境界をドラッグすることでサイズが変更できます。 プログラムのコード # フル画面を解除して画面の幅と高さを設定 from kivy.config import Config Config.set('graphics', 'fullscreen', 0) Config.set('graphics', 'width', 320) Config.set('graphics', 'height', 568) Config.set('graphics', 'resizable', 0) from kiv…
Kivy ファイル選択ダイアログからテキストファイルを読み込む(Python Kivyの取説・使い方 第14回)
はじめに 今回は納得できるまでの結果は出ませんでした。まだまだ課題が残ってますが、Kivyでのポップアップ(Popup)とファイル選択(FileChooser)をやってみました。 プログラムのコード # フル画面を解除して画面の幅と高さを設定 from kivy.config import Config Config.set('graphics', 'fullscreen', 0) Config.set('graphics', 'width', 320) Config.set('graphics', 'height', 568) Config.set('graphics', 'resizabl…
Kivy テキストファイルの読み込みと保存(Python Kivyの取説・使い方 第13回)
はじめに Kivyのテキストボックスの内容をtxtファイルへ保存する方法を調べるのに苦労しました。それもそのはずで保存はKivyモジュールは使わずPythonのwrite関数を使うみたいです。最近KivyばかりやっていたのでなんでもKivyでしようとしてました。 Pythonでファイルの読み込みと保存する方法 open関数とread関数、write関数を使います。 open関数 変数 = open(引数1, 引数2) 引数1:ファイル名(同じフォルダにないときはパス名にも注意) 引数2:モード。「r」と指定しない場合は読み込み、「w」で書き込みです。 read関数 変数 = 引数1.read(…
Kivy 日本語の表示と日本語を入力する(Python Kivyの取説・使い方 第12回)
日本語表示と日本語入力をする方法 1)kvファイルに日本語を対応させる 2)日本語を表示させる 3)日本語を入力する の順番で解説していきます。 1)kvファイルに日本語を対応させる まずラベル、テキストボックス、ボタンを作ります。 # フル画面を解除して画面の幅と高さを設定 from kivy.config import Config Config.set('graphics', 'fullscreen', 0) Config.set('graphics', 'width', 320) Config.set('graphics', 'height', 568) Config.set('gra…
Kivy グラフを表示する(Python Kivyの取説・使い方 第11回)
グラフを表示する方法 今回はMatplotlibモジュールを使ってグラフを表示していきます。BoxLayoutの上にラベル、真ん中にグラフ、下にボタンを表示させたいと思います。 プログラムのコード # フル画面を解除 from kivy.config import Config Config.set('graphics', 'fullscreen', 0) from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.uix.label import Label from kivy.garden.matp…
Kivy 写真の向きを正しく表示する(Python Kivyの取説・使い方 第10回)
写真の向きを正しく表示する方法 今回はPILモジュールを使って「画像を回転」してKivyで表示していきます。 画面のスライドのときに使った「Imageウィジェット」では、ファイル名を指定して画像を表示するため画像ファイルを編集する場合は一度保存する必要があります。 出来れば画像ファイルはそのまま残したいので今回は「Textureウィジェット」を使ってcanvas内に表示させたいと思います。 まずはそのまま画像を表示してみます。ここで少し苦労しました。 プログラムのコード # フル画面を解除 from kivy.config import Config Config.set('graphics'…
スマホで撮った写真が横を向いてしまう(Python Kivyの取説・使い方 番外編)
はじめに 前回の画面のスライドで、なぜか縦向きの写真が横を向いてしまう問題を調べていきます。 スマホで撮った写真などは、画像ファイルの中に撮影した日付、位置情報、写真の向きなどのデータが格納されています。そのデータのことを「Exif」というらしいです。 今回はPILモジュールを使用して「Exif情報の取得」と「画像の回転」を行います。 Exif情報のOrientationが「6」のとき、写真は左に90度向いてしまいます。 (Orientationが「8」のときは右に90度、Orientationが「3」のときは180度回転してしまうようです) プログラムのコード from PIL import…
Kivy 画面をスライドさせる(Python Kivyの取説・使い方 第9回)
画面をスライドさせる方法 今回は画面のスライドを作ってみます。Carousel(ウェジットの1つ)を使います。Carouselとは、直訳でメリーゴーラウンドや回転式コンベヤーという意味です。スライド間でスワイプして水平または垂直に移動できます。 まずは基本的なCarouselを作ってみます。 プログラムのコード from kivy.app import App from kivy.uix.button import Button from kivy.uix.carousel import Carousel class MainApp(App): def build(self): layout …
Kivy 画面をスクロールさせる(Python Kivyの取説・使い方 第8回)
画面をスクロールさせる方法 今回は画面スクロールを作ってみます。ScrollView(ウェジットの1つ)を使います。 プログラムのコード # フル画面を解除して画面の幅と高さを設定 from kivy.config import Config Config.set('graphics', 'fullscreen', 0) Config.set('graphics', 'width', 320) Config.set('graphics', 'height', 568) Config.set('graphics', 'resizable', 0) from kivy.app import App…
Kivy ボタンでボールの速度を変える(Python Kivyの取説・使い方 第7回)
ボールの速度を変える方法 今回はボタンを使ってみます。スピードアップとスピードダウン、そして逆再生の3つのボタンを作ります。(本当は一時停止を作りたかったのですがグローバル変数とか面倒だったので逆再生にしたのは内緒です) 第6回で使ったプログラムを少し修正します。 プログラムのコード # フル画面を解除して画面の幅と高さを設定 from kivy.config import Config Config.set('graphics', 'fullscreen', 0) Config.set('graphics', 'width', 320) Config.set('graphics', 'hei…
Kivy サブ画面でボールを動かす(Python Kivyの取説・使い方 第6回)
サブ画面でボールを動かす方法 第5回の続きです。ボールが動くようになりました。 KivyのチュートリアルにあるPong Gameを参考にしていきます。チュートリアルの「ボールのアニメーションを追加する」からです。 プログラムのコード # フル画面を解除して画面の幅と高さを設定 from kivy.config import Config Config.set('graphics', 'fullscreen', 0) Config.set('graphics', 'width', 320) Config.set('graphics', 'height', 568) Config.set('gra…
Kivy ボールが動かない(Python Kivyの取説・使い方 番外編)
はじめに 本日は最後までボールは動きません。 特に進展もないので飛ばしてもらった方がいいです。ハマった様子を見たい方のみ先にお進みください。 Kivyのチュートリアルの「ボールのアニメーションを追加する」でボールが動きません。 プログラムのコード # フル画面を解除して画面の幅と高さを設定 from kivy.config import Config Config.set('graphics', 'fullscreen', 0) Config.set('graphics', 'width', 320) Config.set('graphics', 'height', 568) Config.s…
Kivy レイアウトの中に別のレイアウトを作る(Python Kivyの取説・使い方 第5回)
レイアウトの中に別のレイアウトを作る方法 KivyのチュートリアルにあるPong Gameを参考にしていきます。 レイアウトの中に別のレイアウトで「Pong Game」ぽいのを作っていきます。 前回のプログラムを少し変更します。 # フル画面を解除して画面の幅と高さを設定 from kivy.config import Config Config.set('graphics', 'fullscreen', 0) Config.set('graphics', 'width', 320) Config.set('graphics', 'height', 568) Config.set('graph…
Kivy 背景に色を付ける(Python Kivyの取説・使い方 第4回)
背景のレイアウトを追加する方法 背景に色を付けてみます。 前回のプログラムをそのまま使います。 # フル画面を解除して画面の幅と高さを設定 from kivy.config import Config Config.set('graphics', 'fullscreen', 0) Config.set('graphics', 'width', 320) Config.set('graphics', 'height', 568) Config.set('graphics', 'resizable', 0) from kivy.app import App from kivy.uix.boxlay…
Kivy kvファイルを使ってレイアウトを変更する(Python Kivyの取説・使い方 第3回)
kvファイルとは? Appで終わるクラス名からAppを引いた小文字で同じ名前を持つkvファイルを呼び出します。例えば、class TestApp(App):の場合は kvファイルの名前は「test.kv」です。ラベルやボタンなどのレイアウト情報を別ファイルで管理して簡単に調整できます。 前回、ラベルとボタンを縦に並べたプログラムでkvファイルを作ってみます。 # フル画面を解除して画面の幅と高さを設定 from kivy.config import Config Config.set('graphics', 'fullscreen', 0) Config.set('graphics', 'wi…
Kivy ラベルとボタンを配置する(Python Kivyの取説・使い方 第2回)
ラベルとボタンを配置する方法 # フル画面を解除して画面の幅と高さを設定 from kivy.config import Config Config.set('graphics', 'fullscreen', 0) Config.set('graphics', 'width', 320) Config.set('graphics', 'height', 568) Config.set('graphics', 'resizable', 0) from kivy.app import App from kivy.uix.boxlayout import BoxLayout # 追加部分 from …
Kivy 全画面表示を解除する(Python Kivyの取説・使い方 第1回)
フル画面を解除してウィンドウの大きさを設定する方法 # フル画面を解除して画面の幅と高さを設定 from kivy.config import Config Config.set('graphics', 'fullscreen', 0) Config.set('graphics', 'width', 320) Config.set('graphics', 'height', 568) Config.set('graphics', 'resizable', 0) fullscreenフルスクリーンのオンオフを設定します。「0」でフル画面を解除できます。 width、height幅と高さを設定しま…
はじめに ボタンを押すとテキストボックスの文字がラベルに表示されるプログラムを日本語入力に対応しました。 解説 こちらのサイトを参考にさせていただきました。 qiita.com cppファイルとdllファイルも同じフォルダに保存してpython multi_language_textinput.pyを編集していきます。 まずkivy languageの部分をkvファイルにしました。 次に変換候補は今回は必要ないと思い、その部分は削除しました。(細かい部分は消しきれてないかもしれません) そしてkvファイルのテキストボックスのsizeとposを指定しました。 ここで問題が発生します。sizeが認…
Kivyでの日本語入力に再挑戦(Python テキストボックス作成)
本日の課題と目標 テキストボックスに日本語を入力する はじめに start-python.hateblo.jp 以前一度挑戦して諦めていたKivyでテキストボックスに日本語入力。dllを作っている方がいるということを教えていただき再び挑戦することになりました。 結論から言うと出来ました! 変換候補を出せてないのでちょっと残念ですが大満足です!これで諦めていたKivyを使ってスマホアプリが作れそうです。教えていただいた方に感謝です。 解説 こちらのサイトから勉強させていただきました。 Kivyで日本語入力 - Qiita プログラムコードをお借りして今回は使わない部分を削ってkvファイルを作りま…
Deep Q-Network(DQN)(最終回)なんとか棒を倒さず安定させられました
Deep Q-Network(DQN)による倒立振子 第7回 はじめに 前回は学習させる方法を見ていきました。今回は残りの部分をさっと流して棒を安定させるためにどこがおかしいか探っていきます。 最後のプログラムのコードです。 if DQN_MODE: targetQN = mainQN # 行動決定と価値計算のQネットワークをおなじにする # 1施行終了時の処理 if done: total_reward_vec = np.hstack((total_reward_vec[1:], episode_reward)) # 報酬を記録 print('%d Episode finished afte…
Kerasで重みの学習をする(Python Deep Q-Network(DQN))
Deep Q-Network(DQN)による倒立振子 第6回 はじめに 前回は学習したモデルで予測した結果を出しました。今回は学習させる方法を見ていきます。 # Qネットワークの重みを学習・更新する replay if (memory.len() > batch_size) and not islearned: mainQN.replay(memory, batch_size, gamma, targetQN) ざっと流れを追ってみましたがなかなか理解するのは難しそうでした。少しずつやっていきます。 プログラムの流れ if (memory.len() > batch_size) and not…
Kerasで予測した結果を出す(Python predictメソッドの使い方)
Deep Q-Network(DQN)による倒立振子 第5回 はじめに モジュールのバージョン問題やクラスの理解不足でなかなか先に進みません。 今回からメイン部分を見ていきます。 # [5.3]メインルーチン-------------------------------------------------------- for episode in range(num_episodes): # 試行数分繰り返す env.reset() # cartPoleの環境初期化 state, reward, done, _ = env.step(env.action_space.sample()) # …
Python クラスって難しい(クラスの使い方を勉強しなおしました)
Deep Q-Network(DQN)による倒立振子 第4回 はじめに 今回はこちらの二行を見ていきます。 memory = Memory(max_size=memory_size) actor = Actor() クラス:Memoryを呼び出しています。 # [3]Experience ReplayとFixed Target Q-Networkを実現するメモリクラス class Memory: def __init__(self, max_size=1000): self.buffer = deque(maxlen=max_size) self.buffer = deque(maxlen=m…
Deep Q-Network(DQN)による倒立振子 第3回 はじめに 今回は「mainQN = QNetwork(hidden_size=hidden_size, learning_rate=learning_rate) # メインのQネットワーク」この一行を見ていきます。 クラス:QNetworkを呼び出しています。 # [2]Q関数をディープラーニングのネットワークをクラスとして定義 class QNetwork: def __init__(self, learning_rate=0.01, state_size=4, action_size=2, hidden_size=10): se…
Tensorflowのバージョンは何を使ったらいいかわからない
Deep Q-Network(DQN)による倒立振子 第2回 はじめに 前回からDeep Q-Network(DQN)を勉強しています。前回のエラーの原因を詳しく調べていきます。 「WARNING:tensorflow:The name tf.get_default_session is deprecated. Please use tf.compat.v1.get_default_session instead.」 この部分を翻訳かけて検索すると、 Python - Pytonで沢山エラーメッセージが出てしまいました...。|teratail こちらに解決策が載ってました。どうやらモジュール…
Deep Q-Network(DQN)エラーが大量に起こって安定しない
Deep Q-Network(DQN)による倒立振子 第1回 はじめに 今回からDeep Q-Network(DQN)を勉強します。ざっとコードを見た感じでは絶望的にまったくわかりません。 一日二日では終わりそうにないのでその日に進んだ分だけ載せていきます。十分に理解できるのには数か月もしくは理解できることはないのかもしれませんがいけるとこまでいってみます。 プログラムのコードは CartPoleでDQN(deep Q-learning)、DDQNを実装・解説【Phythonで強化学習:第2回】 こちらからそのまま使わせていただきました。 まずはコピペで動作確認 200試行を過ぎても安定しませ…
はじめに Deep Q-Network(DQN)の勉強を始める前に気になったことがあったのでちょっと寄り道します。 それは、CartPoleのカートを自分で操作してみたくなりました。(右移動と左移動をキーボードで入力) とりあえず動けばオッケー、ということで完成形がこちら。 プログラムのコード import gym import pygame pygame.init() screen = pygame.display.set_mode((600, 120)) pygame.display.set_caption("test") myclock = pygame.time.Clock() env…
gymの倒立振子を使って強化学習モンテカルロ法 モンテカルロ法とQ-learning、SARSA法の違い モンテカルロ法は、アクションごとにQ値を更新するQ-learningやSARSA法と違い、CartPoleが倒れるまで行動しその行動履歴から一気にQ値を更新します。 モンテカルロ法は一度未来を見てから一気にQ値の更新をかけるため、遠い未来の報酬も比較的早く学習できるというメリットがあります。 20試行回数くらいですでに安定しています。1試行が終わったときに一気にQ値が更新されます。 プログラムのコード # coding:utf-8 # [0]ライブラリのインポート import gym #…
強化学習の歴史 強化学習の始まりは1763年「ベイズの定理」のベースが発表された年だと言われています。1989年「Q学習」が開発され強化学習の実用性がかなり上がりました。その後「冬の時代」が続きますが、2006年「ディープラーニング」の概念が提案されました。そして2009年、ニューラルネットワークをわずか3週間ほどで十分に学習させられることを立証し、最先端の音声認識技術を確立させました。それから10年、飛躍的に進化を続けています。 11月の振り返って 強化学習、楽しいです。やっとQ学習がわかってきて(計算式は相変わらず理解できませんが)1989年に追いついた感じです。勉強するにしたがって「ディ…
「ブログリーダー」を活用して、ReyLukeさんをフォローしませんか?
指定した記事をブログ村の中で非表示にしたり、削除したりできます。非表示の場合は、再度表示に戻せます。
画像が取得されていないときは、ブログ側にOGP(メタタグ)の設置が必要になる場合があります。