- 1. 多くのPythonコードに型アノテーションしてみたので色々所感を書いてみる
- 2. SitarHarmonicsさんが書いた「物体の動き」を可視化する処理に、一般物体認識器の解析結果を重ねて表示するコードをMP4動画で動かして成功した件
- 3. 【ソース公開】コロナが怖いので冷蔵庫で生存報告するシステム作った
- 4. OpenAI Gymで環境を自作しKeras-RLで強化学習させてみた
- 5. SESAME3をWEB API経由で操作する
- 6. フィボナッチ螺旋をPython3+matplotlibで描く
- 7. Tkinterでダイアログをカスタマイズする方法
- 8. Python で文字列の末尾の改行を削除する
- 9. pythonでネタ進捗バーを作ってみた。
- 10. Pythonのバージョンを簡単に切り替えられる!pyenvのチートシート
- 11. 【PyPI 】Pythonの自作ライブラリをpipに公開する方法
- 12. データサイエンスでコンサルティング
- 13. Chapter 1 – §03 文字列・数値
- 14. 【Python】print出力で文字列の差異を色で表現する
- 15. SitarHarmonicsさんが書いた物体の動きを可視化するコードを復元して、戦闘機と馬術競技のMP4動画で試した(成功)
- 16. Chapter 1 – §02 計算・コメント
- 17. 指定した距離よりも近づかないように、ランダムに点を平面に並べる
- 18. OpenCV2で物体追跡 〜 特徴点の移動軌跡をlineではなくarrowedLIneに変えてウインドウに動画出力
- 19. 【解決】【Python】自作クラス内のlistに値を代入するときappendだと__dict__に代入されない
- 20. CartPoleを強化学習ライブラリKeras-rlを使って学習させてみた
多くのPythonコードに型アノテーションしてみたので色々所感を書いてみる
「JavaScriptをTypeScriptへの移行してみた」的な記事を結構見かける一方で、Pythonの型アノテーション関係で近い移行記事などはあまり見ないので「Pythonで型アノテーションってどうなの?」という点などを雑多に記事にしてみました。
# 今まで型アノテーションを使ってきた状況と規模感・前提など
– お仕事では50万行程度の残存するPythonコードで8割強くらいのカバレッジです。ファーストコミットから7年目くらいなので、Python2系から3系へ移行 → 型アノテーションの利用を本格的に開始…としてきたので途中からの型アノテーションの導入です。
– プライベートでは「[apysc](https://github.com/simon-ritchie/apysc)」と「[numdoclint](https://github.com/simon-ritchie/numdoclint)」というPyPI(pip)登録してある2つのライブラリで型アノテーションしてあります。numdoclintは途中からの型アノテーションの利用の開始、apyscは最初から型アノテーションを使う
SitarHarmonicsさんが書いた「物体の動き」を可視化する処理に、一般物体認識器の解析結果を重ねて表示するコードをMP4動画で動かして成功した件
__前回の記事__の続きです。
__( 前回の記事 )__
https://qiita.com/electronics_diy721/items/114fd7ee50afb8e28d26
__前回__は、SitarHarmonicsさんがウェブサイトで公開しているコードの全体を復元して、動画の各コマに登場する__物体の移動の方向と速さを、線の向きと大きさで可視化して表示__するコードを動かしてみました。
__今回__は、そうした処理と__同時に一般物体認識器を並行処理で走らせる__ことで、動画を再生しながらリアルタイムに__次の3つの情報__を、もとのフレーム画像に書き込んで表示させることに成功しました。
1. __各物体の運動ベクトルの可視化__
1. __各物体の(フレーム画像内での現在)位置を四角枠(矩形)で囲んで表示__
1. __各物体のラベル名を表示__###実行結果
“`bash:Terminal
% python3 mp4_movie_file_motion_vector_with_object_detection.py –file_path
【ソース公開】コロナが怖いので冷蔵庫で生存報告するシステム作った
備忘録がてら
# 目次
1. [きっかけ](#きっかけ)
1. [構想](#構想)
1. [成果物](#成果物)
1. [買ったもの](#買ったもの)
1. [そのほか使ったもの](#そのほか使ったもの)
1. [ラズパイのセットアップ](#ラズパイのセットアップ)
1. [電子工作](#電子工作)
1. [LINE Notifyの登録](#line-notifyの登録)
1. [開発](#開発)
1. [システム構成](#システム構成)
1. [プログラム](#プログラム)
1. [システムの監視](#システムの監視)
1. [システムの自動起動](#システムの自動起動)
1. [さいごに](#さいごに)
1. [参考サイト様](#参考サイト様)# きっかけ
一人暮らしなので
コロナ
↓
人知れず死ぬ
が怖いので危篤状態の検知+生きていることを逐次報告できるシステムを作ろうと思った。
# 構想
やりたいことは
– 自宅にセンサーを取り付けて、24時間検知
– 日常生活の動作から検知できて、シ
OpenAI Gymで環境を自作しKeras-RLで強化学習させてみた
強化学習の勉強のためにゲーム環境を自作してみました。その際、苦労したことをメモとして残します。
#動作環境
今回使用した主なプログラムを下に記載します。
* Windows10Home
* Anaconda 4.10.3
* Tensorflow 2.5.0
* Keras-RL2
* OpenAI Gym
* Pygame 2.0.1#ゲームの内容
今回作成したゲームは「地球帰還ゲーム」です。宇宙船を操縦し地球に帰るだけの**しょぼい**ゲームです。
![ufo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593076/02b09e84-6f4d-9015-3ef8-36712eee954b.png)
左の小さい白い三角形が宇宙船で、右の水色の丸は地球です。宇宙船は上か下に進路を少しだけ変更できますが、速度は変えることができません。宇宙船が画面外に出るか、進路を上げすぎて真上を向くか、もしくは真下を向くと、ゲームオーバー(失敗)です。無事、宇宙船を地球に到達させることができれば、ゲームク
SESAME3をWEB API経由で操作する
いろいろあって会社オフィスの1FにSESAME3を導入しました。
SESAME3+スマホの組み合わせでも十分便利だけど、やっぱりWEB API使いたい!
というわけで始めました。
(1Fだけはスマホで開けてね、って言っても社内から反発ありそうだし…)さほど難解なところもないので、[公式ページ](https://doc.candyhouse.co/ja/SesameAPI)を見ながら進めれば大丈夫です。
(載せたコードもほぼ公式そのままです)## 導入環境
– Raspberry Pi 4
– Ubuntu Server 20.04 LTS
– Python 3.9.6
– [SESAME3](https://jp.candyhouse.co/collections/frontpage/products/sesame3)
– [SESAME3用 Wifiモジュール](https://jp.candyhouse.co/collections/frontpage/products/new-wifi?variant=33274961363007)## WEB
フィボナッチ螺旋をPython3+matplotlibで描く
# はじめに
美しいフィボナッチ螺旋を自分で描いてみたかったのです。
螺旋は、原点Oを始点としてまず右下に伸び、反時計回りに描くようにしました。
# 環境
– Python 3.9.6
– matplotlib 3.4.2
– MacOS 11.5.2# 手法
項ごとに、以下のように処理し、あたかも1本のグラフであるかのように見せています。
1. 90度の弧を描く
2. 各項の値を弧の半径とする
3. 弧を90度ずつ回転させる
4. 弧の中心をオフセットする1本のグラフとして、x・yの変域を細かく設定して描く方法もあるのでしょうが、今回はその方法は採っていません。
# コード
### モジュールのインポートとグラフ周りの設定詳細は割愛。
グラフの範囲は縦横-25から25にしています。draw_areaで定義しています。“`python
# 使用するモジュールのインポート
import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches#
Tkinterでダイアログをカスタマイズする方法
## 概要
GUIオブジェクトを作っていく中で、既に用意されているダイアログだけでなく、
ユーザー自身でカスタマイズしたダイアログを使用したくなる場面があります。カスタマイズ可能なダイアログとして、Tkinterには**simpledialog.Dialog**があります。
カスタマイズ方法について、本記事で解説いたします。
## 環境
Python3系
## デフォルト状態のダイアログ
何もカスタマイズしない状態では、**simpledialog.Dialog**に**OK**と**Cancel**のボタンしかありません。
![tkinter_demo_dialog.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/302006/c4e60046-7c34-3db5-6621-38952923223d.jpeg)
上記は**root**ウィンドウです。**ダイアログ表示**ボタンを押すと以下のダイアログが表示されます。![tkinter_demo_simple_dialog_no_c
Python で文字列の末尾の改行を削除する
#急ぐ人向け
`str_line.rstrip(‘\r\n’)` を使いましょう。
“`ptyhon
line_content = string_line.rstrip(‘\r\n’)
“`
(注: Perl の `chomp` と異なり、元の文字列を保持する非破壊操作です。)#以下、この記事を書いた理由(愚痴)
誰もが通ると思われる道だが、きっかけは「文字列を splitlines してから iterate するの、効率悪いんじゃね?」って思ったこと。
“`python
for line in string_content.splitlines():
print(line)
“`google って調べて、
[stack overflow] (https://stackoverflow.com/questions/3054604/iterate-over-the-lines-of-a-string) の質問と回答にたどり着いた。そこの回答を見て、「改行が `\r\n` の場合に対応するにはどうしたらいいか」
で Bing で「python chom
pythonでネタ進捗バーを作ってみた。
# 動機のお話
簡単にいうと、進捗バーを作成したくなりました。
tqdmというパッケージを使えば簡単にできるっぽいのですが、それでは面白みがありません。
せっかくアスキーアートというものがあるのだから、暇な時間はそれを映したいなと思い、いろいろ試すことにしました。## 必要な知識
まず、進捗バーを表示する際に知っておくべきことがあります。
それは、表示カーソルの動かし方です。
以下のコードを見てください。“`python:sample1.py
import time
for i in range(10):
time.sleep(1)
print(“\r{}”.format(i),end=””)
“`
これを実行すると、表示される数字が上書きされます。
注目すべきは二つ。
- 1. end=””
- これはprint関数のオプションにある、終端文字の指定で、デフォルトは”\n”(改行文字)です。
そのため、これを””(文字なし)に変更すると、行を下に動かさずに出力できるようになります。
Pythonのバージョンを簡単に切り替えられる!pyenvのチートシート
pyenvでトラブルがあったこともあり、[README.md](https://github.com/pyenv/pyenv/blob/master/README.md)と[Command Reference](https://github.com/pyenv/pyenv/blob/master/COMMANDS.md)を読んだので、備忘録として使い方をまとめてみました!
###### 参照元
– 2021年7月27日が最終更新の[README.md](https://github.com/pyenv/pyenv/blob/master/README.md)
– 4月9日が最終更新の[Command Reference](https://github.com/pyenv/pyenv/blob/master/COMMANDS.md)# そもそもpyenvとは
– いくつもあるPythonのバージョンをPCに複数入れて、その時々で切り替えて使いえたらいいな
– バージョンをいくつも入れ過ぎてカオスになってきた!整理したい!という時に活躍する、複数バージョンを整理して管理でき
【PyPI 】Pythonの自作ライブラリをpipに公開する方法
# 自作Pythonライブラリを全世界に公開
Pythonでライブラリをインストールする際は“`
pip install [ライブラリ名]
“`
というコマンドを使うことが多いですが、
多くの人は以下のようなイメージを持っているかと思います。**「pipで公開してるライブラリってシリコンバレーのランチ無料のオフィスで働いてる凄いエンジニアが作ったんでしょ?」**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/18f71b3b-0ccb-6ed9-b3df-954d451bdd29.png)
このように敷居が高そうに見えるpipですが、実は**一般人でもライブラリを公開することができます**
何を隠そう、一般人の味方!す○家で牛丼ランチ(500円)を食べている僕でもアップロードできました。
一般ピープルでも全世界にライブラリを公開できるのは感慨深いです。公開方法を紹介している記事はいくつかありますが、どこかしらの必要工程が抜けているものが多いように感じた
データサイエンスでコンサルティング
初めまして、Panamixkedaと申します。Qiitaもですし、技術系の投稿をアップするのは今回が初めてです。
数年間こそこそとデータサイエンス関連の勉強をしておりまして、アウトプットもしていこうかなと思った次第ですね。(ぶっちゃけ、きっかけは転職しようと思ったからです)
データサイエンスにビジネスサイドからも学問的サイドからも興味があります。kaggleは計算量をほとんどかけない範囲でしたことがありますが、実務経験はありません。その他のスキルや興味についての紹介を、とりあえずキーワードレベルで済ませるなら、
Python/sklearn/PyTroch/テーブルデータ/画像処理/自然言語処理/強化学習/マルチモーダル
といったところでしょうか。括りの粒度の問題なのか、なんか胡散臭いですが。これから色々と発信していきますのでおいおいわかって頂ければと思います。どうぞよろしくお願いいたします。
ちなみに、**本記事の対象者は、ある程度データ分析知識がある方で、できればデータ分析人材を採用したりしたい方です。**もっと学問的/各論な記事だったり、データ分析が専門外である人にも向
Chapter 1 – §03 文字列・数値
# 文字列
[§01](https://qiita.com/confrict/items/e1e5c53dd89b79485799#%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E6%9B%B8%E3%81%84%E3%81%A6%E5%8B%95%E3%81%8B%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B)でも紹介したように、 `print()`の中には変数以外に直接文字を入れることができます。
`print()`文でできることを上げていきます。## ・変数に代入した文字列を連結させて表示する
文字列を変数に代入して、それをつなげ合わせるとき、 `,` を使います。例えば、`a = 明日は`, `b = 晴れます`
この二つの単語を`明日は晴れます`にするために a と b の文字列を繋げるとします。
この時、“`python
print(a, b)
“`
とすれば、“`python
明日は晴れます
“`
と出ます。## ・print()文でできること (+α)
## 空白行を作る
文字通り、空白
【Python】print出力で文字列の差異を色で表現する
## この記事の目的
正解文字列と任意の文字列を1文字単位で比較し、消えた文字を赤文字で、増えた文字を黄色の背景色でprint出力する。![diff.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577794/2e99ca52-d44b-cb7b-7821-117710ec9720.png)
ページの最後に[コード一覧](#コード一覧)があります。
## 実行環境
+ python 3.9## 解説
使用するのは標準モジュール difflib の Differ オブジェクトの compare メソッドです。https://docs.python.org/ja/3/library/difflib.html
compare(a, b)
>文字列からなる2つのシーケンスを比較し、差分(を表す文字列からなるシーケンス)を生成します。
各シーケンスの要素は、改行で終わる独立した単一行からなる文字列でなければなりません。そのようなシーケンスは、ファイル風オブジェクトの readlines() メ
SitarHarmonicsさんが書いた物体の動きを可視化するコードを復元して、戦闘機と馬術競技のMP4動画で試した(成功)
###実行結果
>“`bash:Terminal
>% python3 trajectory_arrow_sample_2.py –file_path f_22_fighter.mp4 –start_frame 100
>“`![](https://user-images.githubusercontent.com/87643752/129235872-940e84c9-5208-45e1-8608-fa622bfbe7c9.png)
![](https://user-images.githubusercontent.com/87643752/129235934-d2f76079-4bef-4704-b4f5-1d7e45f3fe53.png)
![](https://user-images.githubusercontent.com/87643752/129236045-78254f55-b2cf-4a43-85b3-360d35372c21.png)
![](https://user-images.githubusercontent.com/87643752/
Chapter 1 – §02 計算・コメント
# Pythonで計算してみよう
今回から、開発環境を使って作っていきたいと思います。
自分は Pycharm を使いますが、VSCode などご自分が使われているものであればかまいません。
文字列以外は**すべて**半角小文字です。## 簡単な計算
`1 + 1 = 2` を計算してみましょう。“`python:1+1
print(1 + 1)
“`
を入れて実行すると、“`python:1+1
2
“`と出てきます。
↓ このようになれば成功です。
![6edfec388c1719b3a55ed472207399ca.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1581903/a68078c7-f34f-ff1e-136a-a613dc1c7e0b.png)掛け算・割り算・累乗(羃乗)などの複雑な計算もできます。
“`python
print(6 – 4)
print(2 * 5)
print(10 / 2)
pri
指定した距離よりも近づかないように、ランダムに点を平面に並べる
###はじめに
blenderのテクスチャマップで、模様の並びがランダムで、お互いに重ならないようにする必要があったので、指定した距離よりも近づかないように、ランダムに点を平面に並べるリストを作るスクリプトを書いてみた。ランダムに点を取って、それと、既存の点の距離を計算して、距離が十分なら新たな点として採用、という仕組みなので、効率は悪い。
並べる模様が、指定した面積からはみ出さないように、変数出力をする際に、yohaku = round(distance/2)、を設定してある。
“`python
import randomdot_list = [] #点を入れるリスト。入っているのは、2次元のタプル。
distance = 70 #これ以上離れていれば良い距離。並べるものを円形としたら、その直径より大きな値にする
point_num = 20 #模様の個数
size_x = 1024 #下地の横のサイズ
size_y = 1024 #下地の縦のサイズ#与えられた既存の点のリストと、新たに作った点に対して、新たな点が、既存の点の一覧と、離れているかの確認。
#近
OpenCV2で物体追跡 〜 特徴点の移動軌跡をlineではなくarrowedLIneに変えてウインドウに動画出力
__[前の記事](https://qiita.com/electronics_diy721/items/ad9bb5a095ba90e96e37)__で取り組んだオプティカル・フローの物体移動軌跡(__*trajectory*__)を線(__*cv2.line*__)から矢印(__*cv2.arrwedLine*__)に変えてみた。
__( 前の記事 )__
– [OpenCV2で物体追跡 〜 特徴点の移動軌跡をフレーム画像から切離してウインドウに動画出力](https://qiita.com/electronics_diy721/items/ad9bb5a095ba90e96e37)
Have changed *cv2.line* tp *cv2.arrowedLine* in optical flow drawing script.
###( 変更後の出力結果 )
– 左下の画面を見ると、ところどころ小さな__矢印の先(「>」)__が見える
![](https://user-images.githubusercontent.com/87643752/129138904
【解決】【Python】自作クラス内のlistに値を代入するときappendだと__dict__に代入されない
# 8/12追記
@shiracamusさんより丁寧に解説して頂き解決しました。
結論として変数をインスタンス化をしていなかったらとなります。“`python:
class Result:def __init__(self): # 初期化をしていなかった
self.result = []
“`
初期化することでappendでも代入されることを確認しました。
ありがとうございます。以下追記前の記事です。
# はじめに
PythonでクラスをJSONにシリアライズするときにハマったので書き落としておきます。
まだまだ初学者で根本的な間違いをしていそうなので、理由わかる方いましたらぜひ教えて頂きたいです。# 環境
python 3.9.6
pipenv version 2021.5.29# 本文
###0. 前準備
実行結果をまとめておくクラスに内包されたlistを用意しておきました。“`python:
class Result:
result: list[str] = []
“`
###1. append
さて、ここに実行結果の
CartPoleを強化学習ライブラリKeras-rlを使って学習させてみた
DeepLearningの勉強中なのですが、(全くわからないので)「とりあえず他人の模倣をする」という方針で、多くの皆様方がやっておられるOpenAIのCartPoleを強化学習ライブラリKeras-RLを使って学習させてみました。
#CartPoleとは
CartPoleは横に移動できるカートの上にポールが立っており、そのポールをいかに倒さず長く維持できるかを競うゲームになっています。言い換えるとCartPoleでは「4つの入力情報(カートの位置、カートの速度、ポールの角度、ポールの角速度)を与えて、2つの出力(左に押す、右に押す:押す強さは固定)のうちどちらか1つを選ぶ、DeepLearningのモデルを作りなさい」と言うことです。
![cartpole.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593076/62664196-5983-eb54-c5e6-6055c5fdc69e.png)
#動作環境
本投稿では下のライブラリを使っています。Keras-RL2が強化学習用ライブラリで