Python関連のことを調べてみた2022年07月04日

Python関連のことを調べてみた2022年07月04日

Yolov5を独自のデータでトレーニングする

# 独自の物体検出モデルがほしい

![スクリーンショット 2022-07-03 13.56.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/9259ee0a-303d-ed25-f115-dff16e94aa5e.png)

# 物体検出モデルYolov5をかんたんにトレーニングできる
自分で用意したデータを学習させることで、好きな物体を検出できます。

# 手順

### データを用意する

データは

**・画像
・画像に対応するアノテーション・テキスト・ファイル**

を画像フォルダとテキスト・フォルダに分けて、同じ名前で用意します。
例えば、image1.jpgに対応するimage1.txtというアノテーション・テキスト・ファイルを作ります。

アノテーション・テキスト・ファイルには、オブジェクトごとに1行ずつ、以下を記述します。

“`
class x_center y_center width height
“`

ボックス座標は、正規化されたxywh形式(0〜1)で

元記事を表示

SQLAlchemy modelにsetterとgetterを設定する方法

## まとめ(結論だけ知りたい人用)
下記リンク先のコードを参考にしてください。
[modelにsetterとgetterを設定したコード](#modelクラスのコード)

**ただしprotectedなattributeにはアクセスしないという
共通認識が必要なコードとなっています。**
***
コード内容を理解したい方は記事本文をどうぞ

## 概要
SQLAlchemyではmodelオブジェクトのattributeに直接値を代入することが可能です。
しかしmodelオブジェクトの内容変更がDBのレコード更新という動作に繋がりやすく、
単純なattributeの変更だと思っていた処理が、実はDB上のレコードの更新処理だった
というような動作内容への誤認識を招きやすくしています。

今回はattributeのsetterとgetterを実装することで、
attributeの読み出しは可能だが、代入はできないという性質を持つ
modelクラスの実装例を見ていきます。

## 定義するモデル
今回定義するモデルの内容は以下の通り
| Field | Type | Null | Key |

元記事を表示

torch.Tensorの配列の操作

a = 1
b = 2
x = [1, 2]
y = [4, 5]

# x, yから[1, 2, 4, 5]を作る
torch.cat((x, y), dim=0)

# x, yから[[1,2], [3, 4]]を作る
torch.stack((x, y))

# x, yから[[1,3], [2, 3]]を作る
torch.stack((x, y), dim=1)

# xにaをappendして、[1,2,1]を作る
torch.cat([x, torch.Tensor(a)])

元記事を表示

Djangoで作成したWebアプリケーションを無料で公開する(PythonAnywhere)

# 1. はじめに
前回の「[DjangoでHello Worldを表示する](https://qiita.com/t-shirayama/items/bc18d924dc672c7215cd)」で作成したWebアプリケーションをPythonAnywhereというサービスを使用して無料で公開します。

# 2. PythonAnywhereとは
PythonAnywhereはDjangoやFlaskなどのPythonのWebフレームワークに特化したホスティングサービスです。無料プランがあるため勉強用やお試しで利用することができます。無料プランだと制限は多いですが、有料プランに切り替えることで実運用も可能になります。

# 3. デプロイ
GitHubとPythonAnywhereを連携してデプロイします。

# 3.1 GitHubにソースコードをプッシュ
まず、GitHubにリポジトリを作成し、下記のコマンドでソースコードをプッシュします。
コマンドは前回作業していた一番上のmysiteフォルダに移動して実行します。

“`
$ git init
$ git config –gl

元記事を表示

【Selenium】急にAttributeError: ‘WebDriver’ object has no attributeが起きた

# 結論
seleniumのバージョン4.3.0から、find_element_by_*系のメソッドが廃止されて使えなくなった。

# 経緯
今まで通りスクレイピングしている時に、環境を新しく作って動かしたらエラーが出た

# 該当のソースコード
“`python:scraping.py
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

options = webdriver.ChromeOptions()
options.add_argument(“–headless”)
browser = webdriver.Chrome(ChromeDriverManager().install(),options=options)
url = “https://www.google.co.jp/imghp?hl=ja”
browser.get(url)

kw_search = browser.find_element_by_css_selector(“#sb

元記事を表示

python テキストエディタ作成 -tkinter-

テキストエディタ作成 -tkinter-


step.1:スクロールバー

“`python
import tkinter

root = tkinter.Tk()
root.title(“スクロールバー”)
fr = tkinter.Frame()
fr.pack()
te = tkinter.Text(fr, width=80, height=30)
sc = tkinter.Scrollbar(fr, orient = tkinter.VERTICAL, command=te.yview)
sc.pack(side=tkinter.RIGHT, fill=tkinter.Y)
te.pack()
te[ “yscrollcommand” ] = sc.set

root.mainloop()
“`
![スクリーンショット 2022-07-03 7.55.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1614609/65b87586-e9c4-00dd-f

元記事を表示

Codility Lesson4 MaxCounters

Lesson4のMaxCountersは具体例から見た方が理解しやすいと思うので具体例を見ていきましょう。

今回登場するのは次のような要素からなるリストA
A[0] = 3
A[1] = 4
A[2] = 4
A[3] = 6
A[4] = 1
A[5] = 4
A[6] = 4
変数N (今回はN=5とする)
そして長さNのカウンターリストです。
(0,0,0,0,0,0)

まず、配列Aに関して0番目から6番目まで順に要素を確認していきます。
A[0] = 3はN(=5)以下なので3個目のカウンターを+1する。
(0,0,1,0,0)
A[1] = 4はN(=5)以下なので4個目のカウンターを+1する。
(0,0,1,1,0)
A[2] = 4はN(=5)以下なので4個目のカウンターを+1する。
(0,0,1,2,0)
A[3] = 6はN(=5)より大きいので全カウンターを最大カウンターである2にする。
(2,2,2,2,2)
A[4] = 1はN(=5)以下なので1個目のカウンターを+1する。
(3,2,2,2,2)
A[5] = 4はN(=5)以下なので4個目のカウンター

元記事を表示

VSCodeにて仮想環境上(venv)でgitコマンドが認識されない

# VSCodeにて仮想環境上(venv)でgitコマンドが認識されない

windows
VSCode
venv

gitはWindows版をダウンロードし、インストール済み

venv仮想環境上でgitコマンドが認識されない。
“`
> git
git : 用語 ‘git’ は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前が正しく記 述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行
してください。
“`

## 原因
gitインストール時に、VSCodeを選択しなかったからっぽい。

## 対策
VSCodeを選択してgitの再度インストール実行。VSCode再起動で、gitコマンド通りました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245425/f05d0455-a668-0605-6cb9-a91a85e21466.png)

“`
> git
usage: gi

元記事を表示

Codility Lesson4 PermCheck

Lesson4のPermCheckは配列Aに対して1~N(Nは任意)の範囲の値が欠落せず登場しているかを判定するというものです。
例えば長さ3の配列A,Bに対して
A = [2,1,3]は1~3の数字が欠落せず並んでいるが
B = [2,1,4]は1~4の数字のうち3が欠落していることがわかる。
このような数字が欠落しているかを判定するプログラムを今回は書いていきます。

アルゴリズムは以下の通りです。
1 配列を小さい順にソーティングしていく。
2 ソートし終わった配列に対して、配列の0番目から順番に1,2,3…と並んでいるかどうか確認していき、並んでいる場合は1を、途中で数字が飛んでいる場合は欠けているということなので0を返せばよい。

コードは以下の通りです。

def solution(A):
A = sorted(A)
len_A = len(A)
i = 0
while i < len_A: if i+1 == A[i]: i += 1

元記事を表示

WinMergeでフォルダ差分を出してExcelにまとめるまでをPythonで自動化

# 背景
普段、WinMergeのお世話になっています。

最近、業務の中でソースコードが含まれたフォルダ同士のWinMergeの比較結果を、**Excelにまとめたい**という状況になりました。

Pythonを使って一発で解決できないか?と思い、試しに作ってみることにしました。

自分への覚書を兼ねて、今回作った内容を記事に残しておきます。

# やったこと
Pythonを使って大きく、次の手順を自動化しました。
1. WinMergeをコマンドライン実行してHTML形式の差分のレポートを出力する
2. 1.のレポートを読み込み、Excelファイル(*.xlsx)に変換する

HTMLをExcelに変換する部分には、pywin32というPythonパッケージを利用しています。

# できたもの
コマンドライン上で、以下のように今回作ったスクリプト(*winmerge_xlsx_report.py*)を実行すると結果(xlsxファイル)が得られるようにしました。

“`
python winmerge_xlsx_report.py <比較元フォルダパス> <比較先フォルダパス>

元記事を表示

[kaggle / python] 回帰問題(house prices)に取り組む(7)~k分割交差検証でvalidationしておく~

前回の続きです。
今回は、k分割交差検証によるvalidationを行いました。

前回の記事はこちら。

https://qiita.com/siruku6/items/6dd4903f2ae68533fee6

# the previous and today’s result(前回と今回の結果)

| |やったこと |score |
|———–|——————————–|——-|
|前回 |ハイパーパラメータのチューニング|0.13948|
|今回 |k分割交差検証によるvalidation |-|

今回は、精度改善は行っていません。

今回の変更点は以下の通り

||validation方法|
|:-|:-|
|これまで|ホールドアウト法で分割したtrainingデータとvalidationデータを用いてvalidation結果を算出|
|今回(今回以降)|**`validation結果を交差検証で算出できるようにした

元記事を表示

SQLAlchemyにおけるcommitの誤用によるACID特性の破綻例

## 概要
誤ったcommitの使用はトランザクションのACID特性を破綻させます。
ここでは実際に誤ったcommitの使い方によるACID特性の破綻を見ていきます。

## トランザクションのACID特性が破綻する例
“`commit -> rollback -> commit“`
という動作を行いDBの内容がどうなるのか見ていきましょう。

“`python:commit -> rollback -> commit
engine = create_engine(“mysql://user:password@db/test_db”)
SessionClass = sessionmaker(engine, autoflush=False, autocommit=False)
session = SessionClass()

# commitで更新内容を確定
user = User(user_id=”1″, name=”Johndoe”, email=”johndoe@example.com”)
session.add(user)
session.commit()

# roll

元記事を表示

JAX+Flaxでつくるシンプルなニューラルネットワーク

## はじめに

JAXはGoogleが開発した自動微分、GPU(TPU)、Numpyのような機能を持った超便利なライブラリです。詳しいところは、良い記事がいくつかあるので参照してください。

ちなみに前回は、JAXだけを使ってシンプルなNNをつくってみました。

https://qiita.com/Kai238/items/28e6fe62ac0e8f65b825

そして今回は、より複雑なモデルを想定して、Flaxを使用した例をご紹介します。
とはいっても説明が難しくなるので、今回もシンプルなNNを題材にしています。

おことわり)理論の説明、モデルの妥当性の考慮は完全に無視しています。実装の参考になれば幸いです。

## ノートブックを見ながら詳細を追う

ノートブック(Python)に書いてみました。
とりあえずプログラムを見たいという方は次を参照してください。

https://github.com/KaiSugahara/nn/blob/main/SimpleNNWithFlax.ipynb

### 使用ライブラリ

“`python
import jax
import

元記事を表示

SQLAlchemy flushとcommitの使い方

## まとめ(結論だけ知りたい人用)
以下の使い方をすると便利です。

– commit
– 一連のデータ操作の最後に**一回だけ**実行するというルールを守る
– flush
– `sessionmaker()`に`autoflush=True`をセットし、ライブラリ側にflush処理を委譲する

***
便利な理由を理解したい方は記事本文をどうぞ

## 概要
SQLAlchemyは暫定的データ更新内容をDBに確定させるメソッドとして

– commit
– flush

を提供しています。

この記事では、この二つのメソッドの使い方を見ていきます。

## 性質の違い
commitとflushは以下の異なる性質を持っています。
– commit
– データの更新内容の**恒久的**な確定
– ROLLBACK不可

– flush
– データの更新内容の**一時的**な確定
– ROLLBACK可能

この性質の違いにより、データを確定させるという同じようなメソッドであっても、
副次的な意味が全く異なるものとなっています。

## commitの使い方

元記事を表示

松山市の石手川ダム貯水率の変化(年間)のCSVから個々の貯水率と比較グラフ作成

https://www.matsuyama-waterworks.jp/water/graph1.html

“`python
import pandas as pd

url = “https://www.matsuyama-waterworks.jp/water/data/data.csv”

df0 = pd.read_csv(
url,
encoding=”cp932″,
header=None,
index_col=[0, 1],
)

df0

df0.iloc[1] = df0.iloc[1].replace({“平成6年度”: 1994, “令和3年度”: 2021, “令和4年度”: 2022})
col = df0.iloc[:2].fillna(method=”ffill”, axis=1).values
df0.columns = pd.MultiIndex.from_arrays(col)
df0.index.names = [“month”, “day”]

df1 = df0.iloc[2:].copy()
df1

#

元記事を表示

FlaskとAjaxで複数データをリアルタイムに更新する ~湯婆婆もあるよ~

# はじめに
今回の記事は私がこれまで知らなかった技術に出会って感動しつつ実装したものです。
ググればそれなりにヒットするので新規性を主張するつもりはありませんが、ニーズは確実にある一方で今回のやり方が定番であるとはとても思えません。
「そんな面倒くさいことしなくても○○を使えば一発じゃん」といった知見をお持ちの方はご教示願います。

# Ajaxで非同期通信
## Flaskの限界(下から目線で)
Flaskで動的にウェブページを作るには`render_template()`を使うのが普通だ(というか、それしか知らない)。だが、画面遷移するときはいいとしても、同一画面内である部分のみ変更させたいときにページをゼロから作り直すのはイマイチだと感じていた。
JavaScriptのようにhtml要素の一部のみ変更することはできないだろうか。そう考えて見つけた技術が**Ajax**だった。
これだよ、私がやりたかったことは。

https://qiita.com/hisamura333/items/e3ea6ae549eb09b7efb9

## 湯婆婆ふたたび

かつて私は書いた。解読でき

元記事を表示

python 初めてのGUI サイコロアプリ -tkinter- [初心者向け]

サイコロアプリをGUIで作成 -tkinter-

“`python
import tkinter
import random

def sai():
la[“text”] = random.randint(1,6)
root = tkinter.Tk()
root.geometry(“200×200”)
root[“bg”] = “black”
FNT = (“Times New Roman”,100)
la = tkinter.Label(text=”1″, font=FNT, bg=”black”, fg=”lime”)
la.pack()
bu = tkinter.Button(text=”サイコロ”, command=sai)
bu.pack()

root.mainloop()
“`
![スクリーンショット 2022-07-03 2.49.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1614609/79433815-8bbc-ac88-bd04-260f

元記事を表示

ABC258 A~D問題 ものすごく丁寧でわかりやすい解説 python 灰色~茶色コーダー向け #AtCoder

ABC258(AtCoder Beginner Contest 258) A~D問題の解説記事です。
灰色~茶色コーダーの方向けに解説しています。

その他のABC解説、動画などは以下です。

更新時はツイッターにて通知します。

https://qiita.com/sano192/items/54accd04df62242b70f0

# A – When? Dif:10

https://atcoder.jp/contests/abc258/tasks/abc258_a

Nが60未満なら21時台、60以上なら22時台になります。
22時台ならNから60を引くことで分がわかります。例えばN=86なら86-60=26分です。

出力のときに分が一桁なら、すなわち0~9分なら前に「0」を一つつけなければなりません。
時間を出力するときはNを文字列にして”21:”か”22:”にくっつけます。

数字を文字列にするには
str(数字)
と書きます。

文字列同士をくっつけるときは「+」を使います。”21:”とNをくっつけるなら
“2

元記事を表示

【車載動画予測×深層学習(GAN)】PyTorchで実装する動画予測モデルPart3

# 概要
自動運転が実用化に近づく中、ドライブレコーダ等の車載カメラから取得できる動画像の活用は、今日ますます重要なタスクになっていると思います。当記事では、**GANを用いた予測モデル**を構築し、実際どこまでできるのか検証します。
今回は[Part2](https://qiita.com/satolab/items/bac43905f3427910d057)の結果を踏まえてモデルの改善をし、その性能を評価したいと思います。Part1ではCNNとGRUを用いたシンプルなモデル、Part2ではConv-LSTMを用いたモデルで予測を実施してみましたが、その予測結果はこんあものか、、という感じでした。そこで今回は、GAN(敵対的学習)の枠組みを導入することでモデルの予測品質向上を狙いたいと思います。

以下に動画予測のシステム全体像を示します。

![図形 (4).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/583727/9082b993-2257-1311-7e2f-79d415d84dad.jpeg

元記事を表示

ArcGISで地図を作成し保存する

# はじめに
ArcGIS API for Pythonで地図を作成し、保存する方法をまとめた

# 前提
“`python
from arcgis.gis import GIS
# GISクラスの使用
gis = GIS()
“`

# 地図の作成
“`python
# 品川区の地図作成
map = gis.map(‘品川区’)
“`

# 地図の保存
“`python
# 地図を保存
map.save()
“`

※保存する際にタグなどのプロパティを設定することが可能です
“`python
# 画像の情報を設定(タイトルなど)
sinagawaMapProperty = {‘title’:’品川区マップ’,
‘snippet’:’品川区の地図を作成’,
‘tags’:’sinagawa’,
‘extent’:map.extent
}
# 地図を保存
map.save(item_properties=sinagawaMapProperty)
“`

元記事を表示

OTHERカテゴリの最新記事