Django Girls and Boys 備忘録

Python、Selenium、Django、java、iPhoneアプリ、Excelマクロなどで気付いたこと、覚えておきたいことなどを載せていきます。

【Unity】文字列データなどをテキストファイルとして書き込む方法

 

 

 

Unity側で扱っていた変数などの文字列データをテキストファイルに出力する場合の方法についての説明になります。

 

目次

 

 

1.書き込み用コード概要説明

 

コードの先頭でusing System.IOを宣言しておく必要があります。

 

using System.IO;

 

また、あらかじめAssetsフォルダ内に「textData.txt」を用意しておきます。

その上で、たとえば以下のように書き込み用の文字列を用意します。

 

//変数string を書き込み
private string string = "1234567";

 

その後は、StreamWriterを使用し以下のようにすることで文字列をバッファに取り込んでから用意したテキストファイルへ書き出します。

その後Flushにて書き残しチェックを行いCloseでファイルをクローズします。

StreamWriterの第二引数をTrueにすると上書き保存されます。

 

StreamWriter sw = new StreamWriter( "textData.txt", false);
sw.WriteLine(stepCntString);
sw.Flush();
sw.Close();

 

 

2.テキストファイル書き込み例

 

 

それらを通したおよそのコード例としては以下のようになります。

以下の例では、Start内でファイルがない時の作成処理を追加しています。

 

using System.Collections.Generic;
using UnityEngine;
using System.IO;

// RaycastAgent
public class Output : MonoBehaviour
{
:
:
private string  fileName;
private string  filepath;
private string  stepCntString;

// Start is called before the first frame update
void Start()
{

// パス名取得
fileName = "stepCount.txt";
filepath = Application.dataPath + "/" + fileName;
stepCntString = "";

// ファイルがないとき、ファイル作成
if (!File.Exists(filepath)) {
  StreamWriter sw = new StreamWriter(filepath, true);    // ファイル書き込み指定
  sw.WriteLine(stepCntString);                           // 情報を書き込み
  sw.Close();
}
:
:
:
//変数stepCntString を書き込み
stepCntString = "1234567";

StreamWriter sw = new StreamWriter( filepath, false);
sw.WriteLine(stepCntString);
sw.Flush();
sw.Close();
:
:
}

 

以上がUnityで文字列データなどをテキストファイルとして書き込む方法の例と簡単な説明になります。

 

 

【Unity】ML-Agentsで、「Sensor shapes must match. [90] != [105] UnityEngine.Debug:AssertFormat (bool,string,object[])」というエラーが発生した時の解決方法

 

 

 


UnityでML-Agentsを習得しようとして「Unity ML-Agents実践ゲームプログラミング」に沿ってやっていく中で発生したエラーとしては他に以下のようなものもありました。

これも備忘録として残しておきます。

 

 

 

 

目次

 

 

1.エラー内容

 

エラー表示内容ですが、

 

Sensor shapes must match. [90] != [105]
UnityEngine.Debug:AssertFormat (bool,string,object[])

 

のようなものでした。

 

具体的には、「Ray Perception Sensor 3D」で観察するTAGを増やして実行しようとした時に出たものです。

元々、高速化のためにこの本のP68あたりにあるようなやり方として、1つの環境内に複数のエージェントを配置して学習というようなやり方でやっていました。

 

エージェントごとプレハブ化しておいてそれを環境内に複数配置することで高速化しており、変更する場合はすべてプレハブ側で変更をかけていました。

 

 

 

2.解決方法

 

 

今回の観察するTAGを増やす場合もプレハブ側で変更したのですが、上記エラー発生後に確認したところ、プレハブ側で変更したにもかかわらず複数のエージェントの中でTAGが増やされてないものがありました。

 

どこかでプレハブではなく直接いじってしまった時があったのかもしれません。

 

そのため、そのエージェントを一旦削除することとし、再度プレハブから配置し直したところプレハブ側で変更した観察するTAGも他のエージェントと同様に増えるようになり上記エラーも消えました。 

 

 

 

以上が、ML-Agentsで、「Sensor shapes must match. [90] != [105] UnityEngine.Debug:AssertFormat (bool,string,object[])」というエラーが発生した時の解決方法になります。

 

 

 

 

 

 

 

 

 

【Unity】ML-Agentsの学習実行コマンド「C」について

 



UnityでML-Agentsを習得しようとして「Unity ML-Agents実践ゲームプログラミング」に沿ってやっていった中での学習の実行についての内容です。

 

 

目次

 

 

1.学習の実行についての基本的な内容

 

ML-Agentsで学習を実行するためにはコマンド「mlagents-learn」を使用します。

たとえば、

 

mlagents-learn <学習設定ファイルのパス> --run-id=<実行ID>

 

のような形で実行します。

上の本に沿ってやっていったときの「RollerBall」の例では、

「ml-agents-release_19フォルダ」直下に移動した状態で、

 

mlagents-learn ./config/sample/RollerBall.yaml --run-id=RollerBall-1

 

などにて実行します。

 

この中では、「./config/sample/RollerBall.yaml」が学習設定ファイルのパスで、「RollerBall.yaml」がRollerBall用学習設定ファイル、「RollerBall-1」が実行IDになります。

 

実行IDは出力するモデルのファイル名などに使われ、通常は新規学習するたびに別の実行IDを指定します。同じ実行IDを使用するとエラーが出ます。

 

以上が基本的な学習実行コマンドの説明になります。

 

 

2.学習再開や再学習時のmlagents-learnのコマンドライン引数

 

基本は以上のようになりますが、このコマンドにはコマンドライン引数を追加することができます。

 

この中でかなり重宝したものとしては、学習再開時や再学習時のための引数だったのですが、「--resume」や「--force」というようなものがありました。

 

「--resume」は一度中断などしてできた既存モデルに対して学習再開することができるものです。

一旦学習を実行させてモデルを作成し、設定、環境を変えてから再度先程のモデルに追加学習させるなどいろいろと使えそうかなと思いました。

 

「--force」は既存モデルの実行IDに対して最初から再学習するためのものです。

 

それぞれ、

 

 

mlagents-learn ./config/sample/RollerBall.yaml --run-id=RollerBall-1 --resume

 

mlagents-learn ./config/sample/RollerBall.yaml --run-id=RollerBall-1 --force

 

などとなります。

 

 

以上が、ML-Agentsの学習実行コマンド「mlagents-learn」についての説明になります。

 

 

 

 

 

 

 

【Python Selenium】Seleniumバージョン4の場合のwebdriver自動バージョンアップ方法について

Seleniumのバージョン4の場合のwebdriverの自動バージョンアップの方法の説明になります。

 

Seleniumのバージョン4の場合、途中のバージョンで仕様変更があったためSeleniumのバージョンによってやり方がかわることになります。

 

今回の例ではChromeの場合のコードを載せています。

 

 

目次

 

1.SeleniumのバージョンがVer.4.6より前の場合

 

1)path指定する方法

 
Serviceオブジェクトからexecutable_pathを渡します。
 
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
 
service = ChromeService(executable_path="./drivers/chromedriver.exe")
driver = webdriver.Chrome(service=service)
 

2)webdriver-managerを使う方法

 

webdriver-managerは各ブラウザのバージョンを確認して自動でバージョンアップを実行してくれるライブラリです。

 
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
 
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
 
結果として、たとえばGoogle検索を行うためのコードは以下のようなコードになります。

 

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By

driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))

#指定したURLに遷移する
driver.get("https://www.google.co.jp")

#Google検索窓を要素取得
element = driver.find_element(By.NAME, "q")

#検索窓に"abc"と入力
element.send_keys("abc")
#Enterキークリック
element.submit()

# タブを閉じる
driver.close()
driver.quit()
 

 

2.SeleniumのバージョンがVer.4.6以降の場合

 

 

Ver.4.6以降では以下のようになります。

 
from selenium import webdriver
 
driver = webdriver.Chrome()
 
 
結果として、こちらでのGoogle検索を行うためのコードは以下のようなコードになります。

 

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

#指定したURLに遷移する
driver.get("https://www.google.co.jp")

#Google検索窓を要素取得
element = driver.find_element(By.NAME, "q")

#検索窓に"abc"と入力
element.send_keys("abc")
#Enterキークリック
element.submit()

# タブを閉じる
driver.close()
driver.quit()
 

 

以上が、PythonとSeleniumを使ってWebスクレイピングする場合のseleniumの仕様変更によるdriver設定の変更内容についてになります。

 

 

 

 

 

 

 

【Python Selenium】Seleniumの仕様変更によるwebdriver設定の変更内容について


PythonSeleniumを使ってWebスクレイピングする場合についてですが、Seleniumのwebdriver設定についての仕様が変更になっていたことについてです。 

 

webdriver設定に関してはいろいろとやり方はあると思いますが、これまではたとえば以下のようにしてやってきました(以下はGoogle検索を行う場合の例)。

 

from selenium import webdriver
from selenium.webdriver.chrome import service as fs
import os
from selenium.webdriver.common.by import By

path_driver = os.getcwd()+'\chromedriver.exe'
# ドライバー指定でChromeブラウザを開く
chrome_service = fs.Service(executable_path=path_driver)
driver = webdriver.Chrome(service=chrome_service)

#指定したURLに遷移する
driver.get("https://www.google.co.jp")

#Google検索窓を要素取得
element = driver.find_element(By.NAME, "q")

#検索窓に"abc"と入力
element.send_keys("abc")
#Enterキークリック
element.submit()

# タブを閉じる
driver.close()
driver.quit()
 

この中で最初の4行はimport文で、その次の4行でChromedriver設定を行っていました。

 

この場合、os.getcwd()はカレントディレクトリを指しているので同じディレクトリの中にChromeのドライバーchromedriver.exeは入れておきます。

 

これがSeleniumのVer.4.10以降ではエラーとなってしまいます(Ver.4.6以降でWarningが出る模様)。

 

Ver.4.10以降での代わりの記載方法としては以下のようになります。

(Ver.4.6以降であれば以下に変更したほうがいい模様です)
 
driver = webdriver.Chrome()
 
 
結果として、先程のGoogle検索を行うためのコードは以下のようになります。

 

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

#指定したURLに遷移する
driver.get("https://www.google.co.jp")

#Google検索窓を要素取得
element = driver.find_element(By.NAME, "q")

#検索窓に"abc"と入力
element.send_keys("abc")
#Enterキークリック
element.submit()

# タブを閉じる
driver.close()
driver.quit()
 

 

以上が、PythonとSeleniumを使ってWebスクレイピングする場合のseleniumの仕様変更によるdriver設定の変更内容についてになります。
 
 
 
 
 

【Scratch】Scratch初心者がことわざにちなんだ動画をがんばって作成しました

 

前回の記事でインストールしたScratchを使ってScratch初心者ががんばって作成しました。

 

基本フロー上に並べていけばできあがるんですがはじめのうちやりかたのコツをつかむまではいろいろとひっかかります。

 

そんな中でなんとかことわざにからめた動画を1つ作成したものが以下になります。

 

緑の旗をクリックするとスタートです。

 

 

 

作ったフローのプログラムは以下です。

 

コード1

コード1

 

 

コード2

コード2

 

これと背景画像と文字です。

 

初心者はこれからもがんばって続けていくと言っています。

 

【スクラッチ】スクラッチとは?初めてのプログラミング言語のダウンロードインストール手順

 

プログラミング言語に挑戦してみたいけれど、難しそうで不安…そんな方にオススメなのが、スクラッチです。スクラッチは、ビジュアルプログラミング言語で、コードを書くことなく直感的にプログラムを作成できるのが特徴です。

クラッチの魅力

クラッチを使うと、ブロックを組み合わせてプログラムを組むことができます。これにより、プログラミング初心者でも理解しやすく、楽しみながら学ぶことができます。さまざまなプログラムを手軽に作成できるため、アイディアを形にするのが楽しくなります。

クラッチのダウンロードとインストール方法

1. 公式サイトのダウンロードページにアクセス

まず最初に、スクラッチの公式サイトにアクセスしましょう。以下がそのリンクです:https://scratch.mit.edu/download

 

スクラッチ公式サイトダウンロード画面

クラッチ公式サイトダウンロード画面

2. オペレーティングシステムを選択

そこから、使用しているオペレーティングシステムWindowsMacLinux)を選択します。

紫色になっていればすでに選択されています。

続けて直接ダウンロードをクリックしましょう。

 

オペレーティングシステム選択、直接ダウンロードクリック

オペレーティングシステム選択、直接ダウンロードクリック

 

3. インストール

ダウンロードが完了したら、ダウンロードしたセットアップファイルをダブルクリックで実行します。

指示に従ってインストールを進めます。デフォルトの設定で進めるだけで、簡単にスクラッチを利用する準備が整います。

 

セットアップファイル実行

セットアップファイル実行

セットアップ実行後インストールをクリックします。

 

インストール実行

インストール実行

インストール完了で完了ボタンをクリックします。

 

インストール完了

インストール完了

初回のみ使用状況共有の選択確認画面が表示されます。

どちらかを選択しますが使用状況を送信したくない場合は共有しないを選択します。

 

使用状況共有の選択確認

使用状況共有の選択確認

完了後スクラッチが起動します。

 

クラッチを使ってみよう

さて、インストールが完了したら、早速スクラッチを起動してみましょう。プログラムを作成するためのエディタが表示され、ブロックを組み合わせることで、自分だけのプログラムを作成できます。

1. ステージとキャラクターの追加

最初に、左下のカテゴリから「背景」や「キャラクター」を選択して、ステージに追加しましょう。

2. ブロックを組み合わせてプログラムを作成

次に、中央のエリアでブロックを組み合わせてプログラムを構築します。例えば、「キャラクターがクリックされたとき」や「スペースキーが押されたとき」などのイベントブロックから始めてみましょう。

3. 実行して動作確認

プログラムを組んだら、画面右上の緑の旗をクリックして実行してみましょう。作成したプログラムがどのように動作するかを確認できます。

これで、あなたもスクラッチの世界に足を踏み入れる準備が整いました!楽しみながらプログラミングの基礎を学んで、自分だけのクリエイティブなプロジェクトを作り上げましょう。

初めてのプログラミング言語としてのスクラッチは、手軽で楽しい学習体験を提供してくれます。ぜひ、挑戦してみてください!