とある科学の備忘録

とある科学の備忘録

CやPythonのプログラミング、Arduino等を使った電子工作をメインに書いています。また、木製CNCやドローンの自作製作記も更新中です。たまに機械学習とかもやってます。

【登山/縦走】高尾山口⇔高尾山⇔城山⇔景信山

09:41 景信山山頂

 
 
2021/08/04に高尾山周辺を縦走してきました。その記録ですーー

ルートは、高尾山口→(稲荷山ルート 1:00)→高尾山山頂→もみじ台→一丁平→城山山頂→小仏峠→景信山→(同経路)→高尾山山頂→(表参道コース)→高尾山口

装備

  • https://www.camp-outdoor.com/tozan/soubi1.shtml あたりを参考に準備
  • 高尾山⇔景信山は稜線上をあるくので日影が少なめ。日焼け止め必須
  • 高尾山⇔城山で途中ぬかるんでいる。登山靴&軍手あったほうが良いかも
  • 飲料は高尾山頂上の自動販売機で500mL /¥210で購入可能

時間

午後インターンがあったので結構急ぎ足で進んでいます。(他サイトの4/3倍くらい)

時刻 内容
06:56 京王線高尾山口到着
07:00 登山開始@稲荷山コース入口
07:27 あずま屋
08:10 - 08:30 高尾山山頂(休憩&ごはん)
08:50 一丁平
09:04 - 09:09 城山山頂
09:27 小仏峠
09:48 - 09:57 景信山山頂(休憩&ごはん)
10:33 城山山頂
10:51 一丁平
11:15 高尾山山頂
11:54 下山!
12:00 高尾山口

感想

  • 高尾山山頂の景色きれいだけど、景信山の方が視界が開いていて好き
  • 高尾山までは森の中を歩くので日焼けすることはあまりなさそう
  • 反対に、高尾山⇔景信山は道が開けていて回りの山や市街地が見える。だが直射日光があたるのでクソ暑い
  • 虫が全くいない(ハチはいたけど、クモやハエはいなかった)
  • 昼頃になると高尾山周辺は人が多くなるので注意
  • 登山客が多い分、高尾山口⇔高尾山の道は整備されていてけがをしたり遭難することはなさそう
  • 高尾山⇔景信山も白テープ(枝に巻き付けてある)や道標に従っていれば迷いはしない。一部道がぬかるんでいたり滑りやすい所がある。
  • タイムスケジュールを無理するべきではない

記録(写真)

高尾山口→登山開始まで

0511_高尾山口
06:56 高尾山口駅

京王線高尾山口まで行きます。駅から出て右側に進むと登山口が現れます。

"05:11_高尾山周辺登山マップ"
登山口の途中にマップがいくつか書かれているので写真を撮っておきます

数百メートル進むとリフト乗り場の白い建物が現れるのでその左側の道を進むと、稲荷山コース登山口です!!

稲荷山コース登山口
07:03 稲荷山コース登山口

登山開始→あずま屋→高尾山山頂まで


登山開始から数分です。上りの階段と少し平坦な道が交互にきます
「なんか、『やまー』って感じがするね」「ボキャブラリーが貧困だね」()

06:20 東屋に行くか迂回するかの分かれ道
06:20 東屋に行くか迂回するかの分かれ道

そんな感じで、初心者でも難なく上れそうなコースを進んでいくと、あずま屋(展望台)を迂回するかどうかの三差路につきます。右側に行くと2分程度であずま屋につきます。
もちろん右を選択。

あずま屋につきました。平日の7:30なので人にはほとんど会いません。

07:27 あずま屋07:27 あずま屋
07:27 あずま屋

周囲が木に囲まれているので眺めは微妙です。木々の間からすこしだけ、八王子の市街地が見えます。天気がいい日は新宿や池袋の高層ビル、筑波山まで見えるようですが、僕の視力が0.3なので見えませんでした。

ということで、景色を少し眺めてあずま屋を通り過ぎます。
あずま屋を過ぎると傾斜が緩やかになり、道が広くなった印象です。楽に進めます。たまに階段もありますが。

07:40 あずま屋を通り過ぎて07:40 あずま屋を通り過ぎて
07:40 あずま屋を通り過ぎて

  

途中で6号路と繋がっていました。今回は稲荷山コースなので六号路はまた今度。

07:46 六号路との分かれ道
07:46 六号路との分かれ道

そのまま登っていきます。木道や木で作られた階段があり良く整備されているので歩きやすいです。

08:00頃、頂上の巻き道との交差点に差し掛かりました。

08:03 高尾山山頂の巻き道の交差点前
08:03 高尾山山頂の巻き道の交差点前

地図だとこんな感じです。

めっちゃ道がありますが、高尾山山頂を目指すので↓画像右端に見える石造りの階段を昇ります

  
高尾山山頂まであとはほぼ階段なので、10分ほど↓画像のような階段をただただ上ります。ジブリの森っぽい。

08:05 高尾山山頂への階段をひたすら上る

 

高尾山山頂(行き)

08:10ごろ、高尾山山頂につきました!!

08:10 高尾山山頂!
08:09 高尾山山頂からの景色

  

五輪マークが飾られていました

このオリンピックのマークって使用するのにたしか許可がいるはずなのですが、、、取ったんでしょうね。登山というか半分観光地だしね。


さすがに8時は店は閉まっていました。人も家族ずれが3ペアと登山客が2人くらいでした。

オライリーのDocker本とごはん。

高尾山→城山

8:30, ごはんを食べ終えて高尾山山頂を一旦去ります。ここから一丁平を経て城山を目指しますー
高尾山山頂付近に、周囲の山に行くための所要時間が書かれていたので写真を撮っておいたもの:

高尾山→城山→景信山は稜線沿いを歩いていきます。なので日当たりも景色も最高にいい登山道です。

08:34 城山までの道

 


2021/08/04時点、 もみじ台に行くために道が3個あるのですが、そのうち一つが通行止めになっていました。(↓画像でバツを付けたもの)

 
と思ったらもみじ台そのものが立ち入り禁止になってた。

08:34 もみじ台

  

まあもみじ台に用はないのでそのまま直進します。途中でトイレがありました。こんな時間から清掃して頂いてるんですね、ありがてぇぇぇ

08:36 トイレ

  
高尾山山頂から数分間は下りですが、その後は楽な道を進んでいきます~~

08;46 鉄塔がたってた
08;46 鉄塔がたってた

  

0848 小仏峠につきました。人は全くいません。
ここまできたら城山まであと0.9km

08:48 小仏峠

  
そういえば、小仏峠のトイレ?か何かの建物の近くの排水溝がもろ溝になっていたので穴に落ちないように気を付けて、、、↓

    

小仏峠をでてすぐ、展望台を通るか迂回するかの分かれ道がありますが、この展望台、結構長め良かったので行ってみるべきー

08:50 展望台迂回路の分かれ道

  

08:51 展望台
08:51 展望台

  
で、そうこうしているうちに稜線からすこし外れ山道に入り、傾斜がきつい上りが何本かありました。でもそれを過ぎるとまた開けた道にでてきて、気分爽快になります。

09:02 城山山頂まであと少し

  
↑の画像の地点あたりから電柱が見え始めます。どうやら道にそって建てられているようです。城山山頂の建物用かな?そしたら城山山頂はすぐそこです。

少し歩けば山頂につきます!!

09:06 城山山頂の茶屋

茶屋用の椅子と机が大量にあるので、そこですこし休憩します。今も営業してるんだろうか、、、?

カエデの木が広葉していました

城山→景信山

城山から景信山への道は、➀急な下り→②平坦な道→➂ちょっと上り→④最後200mが急な登り という感じでした。全体で片道1.9kmの道のりです。

最初の下りは楽です。道もきちんと整備されています。

09:15 城山山頂からの急な階段の下り
09:15 城山山頂からの急な階段の下り

  
途中、黒のドラム缶が3個置いてある場所に遭遇します(下写真)。見た感じ右側も道に見えますが(木の幹にしろのラインが入ってるし)、左側が正解です。画像右下に木の枝が3本並んでるのは立入禁止の道標かな?

09:22 三差路っぽい所(左の道が正解)
09:22 三差路っぽい所(左の道が正解)

  
途中ベンチがあったので休憩して、そのあと7分ほどあるくと子仏峠につきました。

10:16 子仏峠


小仏峠あたりで数箇所道がぬかるんでいました。前日雨だったせいもあると思いますが、対策は必要そうです。
そしてここから石/岩の地面が多くなってきます

09:28 子仏峠をでてすぐ

を出て少したつと、また道が開けたところに出ます。

そして、残り200mの道標の後のこのコースでおそらく一番急な登りをへて、景信山到着です!

景信山への最後の上り坂

景信山

高尾山の10倍景色がきれいです!
高尾山はまだ周囲に木があって視界が遮られていますが、景信山は標高が高い分木々が無く、あたりを見回すことができます

09:41 景信山着

  
記事冒頭のパノラマ画像も景信山で撮ったものです。


城山同様に茶屋の建物がありましたが、コロナの影響なのか平日だからなのか営業はしていませんでした。

09:41 景信山着

景信山→高尾山

もと来た道を引き返すだけなので特に書くことはないです。
道中かべちょろ?とかげ?を見かけました。
そういえば、このコースではハチは数匹みましたが、それ以外の虫は全くいませんでした。蜘蛛(クモの巣もなかった)やブヨなど山にいそうな奴らが夏なのに現れなかった

高尾山→高尾山口

で、11:20ごろ、高尾山山頂に戻ってきました。昼前という事もあって、登山客ではなさそうな観光客でごった返していました。学校が夏休み期間中の平日という事もあって、子供連れの家族できているひとが多かったです。

11:15 高尾山山頂。観光客が多い

 

本来ならば景色を楽しみながらゆっくり休憩したかったのですが、この日は16時からバイトがありました。12時までに下山する計画を立てていたので、地面がコンクリ―トで整備されている表参道コースをランニングで駆け下ります、、、

途中、数個の神社に出会いました。風鈴の音が心地よいです

11:29 神社?

↓のような急なカーブもあったりしますが、頑張って走ります。

 
そして、11:55に登山口に到着。

11:55 表参道コース登山口
11:55 表参道コース登山口

登山口から駅までは美味しそうな店が沢山あったのですが、全てスルーして高尾山口ダッシュ

11:56 表参道コース登山口の周辺の店
11:56 表参道コース登山口の周辺の店


予定の12時ジャストに高尾山口に戻ってきました。12:09発新宿行きの電車になんとか間に合ったぜ!

12:00 高尾山口駅
12:00 高尾山口駅










  

Windows10のキャッシュを徹底的に削除する

f:id:pythonjacascript:20210705034013j:plain

Windows10のストレージが一杯になって空き容量が15GBとかになったので、キャッシュや一時ファイルなどを徹底的に削除してやりました。
これはその備忘録です。

Windows10全般の話

Windows Explorerで以下のフォルダを削除

  • C:\WINDOWS\Temp
  • C:\Users\ユーザ名\AppData\Local\Temp
  • ごみ箱
  • C:/Windows.old
    • これを消すとWindowsを前のバージョンに戻すことができなくなる
  • C:\Windows\Prefetch
    • Ctrl + Rを押して、prefetchと入力すると表示される。

C:\Users\ユーザ名\AppData\AppData/Localの中の見た感じ不要な削除する(自己責任で!!)
今回削除したフォルダは以下:

  • LINE/Cache (20MB)
  • LINE/bin/sharedフォルダの中に数字が並んでいるので、その中で数字が一番大きいもの以外 (1GB)
    • Qtのdllファイルが大量にあった
    • フォルダ名はバージョン番号?
  • LINE/bin/old
  • Google/Chrome/User Data/Crashpad
  • pip/cache (1GB)
  • slack/フォルダの「app-[バージョン番号]」でバージョン番号が最新のやつ以外のもの(200MB)
  • CrashDumps (ちょっと)

Windowsの「設定」から削除

Windowsの設定アプリを開く

  1. 「システム」→「記憶域(ストレージ)」→「一時ファイル」を選択
  2. 適切なチェックボックスにチェックを入れて「ファイルの削除」を実行

Windows Update関連のファイル約4GBを削除できたので優秀)


ディスクのクリーンアップ

上記のWindowsの「設定」アプリからの同様のことができますが、それだけだと数十MBファイルがまだ残っていたので、↓のやり方も効果はありそう

  1. Windows + R」(ファイル名を指定して実行)から「cleanmgr.exe」を実行する(ディスクのクリーンアップ)
  2. 「システムファイルのクリーンアップ」ボタンを押す
  3. 必要ないファイルを選択して削除。

FileSumを使う

FileSumを使うと、フォルダの容量を一覧表示させることができる。
www.vector.co.jp
 

f:id:pythonjacascript:20210705034323p:plain
Linuxでいうncdu コマンドみたいなもの
容量の大きいファイルから削除していくことができるので効率的。

各アプリのキャッシュを削除

FireFox
  • C:\Users\ユーザー名\AppData\Local\Mozilla\Firefox\Profiles\ を探して削除
    • FireFoxでURLを入力するところに、「about:cache」と打つと、キャッシュファイルの場所を表示してくれる。
  • FireFox上でCtrl + Bをして履歴を表示→削除

とか色々やっていたが geekでアプリ容量を見ると3GBくらいだったので、アンインストール&再インストールした
再インストールするとアプリ容量が430MBくらいになった。アンインストールしてもクッキーデータやブックマークは残っているらしく、再インストール後も復元されたので、定期的にやると良さそう

AviUtl
  • (hogehoge).lwiファイルをExplorerのファイル検索削除
Reaper
  • (hoge).reapeaksファイルを削除
  • REAPER設定→一般→パスの「Alternative waveform peak cache path」(一番下)が設定されている場合は、そのディレクトリ内にreapeaksがまとまっているので、そこを削除
Davinch Resolve
  • メニューバーの「再生」→「レンダーキャッシュの削除」→「全て」
  • メニューバーの「ファイル」→「プロジェクトの設定」→「マスター設定」→「作業フォルダ」の中の「ギャラリースチルの場所」にキャッシュファイルがある
  • が、そこまで容量が大きくなかったので、あまり意味はないかも。
Solidworks
  • Solidworks Downloadフォルダを削除した(自己責任で!)
  • 僕の環境の場合はC/Users/ユーザー名/Documents/SolidWorks Download
  • 削除後もアセンブリを開いたり編集したりはできた。それ以外のことは知らん。
Adobe製品
  • C:\Users\ユーザー名\AppData\Roaming\Adobe\Common

にキャッシュがあるので削除

Slack

左上の横棒三本→「ヘルプ」→「トラブルシューティング」→「キャッシュを削除して再起動」
f:id:pythonjacascript:20210705033851p:plain


30GBくらい空き容量増えたぜ!!やったぁ!

Python+OpenCVで画像処理 勉強会第一回(物体認識、背景削除)

にゃんぱすー!
大学の某サークルの画像処理関連の勉強会の内容です。


この記事では、以下の内容について語っていきます

  • Python + OpenCVの環境構築
  • OpenCVの基本的な使い方
    • 画像の読み込み・表示
    • カメラ画像の読み込み・表示
    • 各種エフェクト
      • 二値化
      • グレースケール変換
      • エッジ抽出
      • ブラー(ぼかし)
      • 色空間変換(RGB↔HSV等)
  • カメラの背景画像を削除する
  • 物体検知(機械学習を使わずに)

プログラム全体はGitHubの↓レポジトリに上がっているよ
github.com
  

ではいこう!



環境構築

基本的にWindowsの前提で話します。Macの人は頑張って下さい(ネット上に記事が大量にあるはず)

Pythonのインストール

自分のPCでPythonプログラムが実行できるような環境を整えます

www.python.org

上記リンクから、最新のPythonをダウンロードします。2021/6/5時点では、Python3.9.5が最新なので、それをクリックします。
そして、Files節の自分のOSに合ったインストーラーをダウンロードします。

かなぁ。(間違ってたらごめんなさい)

インストール中に、「Add Python 3.x to PATH(Python環境変数に追加する)」のような表示が出たらチェックすることを忘れずに!!

インストールが正常に終わっていると、ターミナル(Windowsの人はデフォルトではコマンドプロンプト。でもWindows Terminalを入れておくことをおすすめします)で以下のコマンドを実行してみて下さい。

$ python --version
Python 3.8.5

$ pip --version
pip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.8)

※「$」マークは「これはコマンドだよ」というのを表す記号なので、入力しないで下さい。
※上のようにしてエラーが出る場合はpython→python3, pip→pip3に置き換えて見て下さい

上のように、バージョンが表示されればOKです

ちなみに、pipPythonの標準パッケージインストーラーです。

pipで必要モジュールのインストール

では、そのpipを使って画像処理用ライブラリ「OpenCV」と行列計算ライブラリ「numpy」をインストールします。

$ pip install numpy
$ pip install opencv-python
$ pip install opencv-contrib-python

 

VSCodeの設定

Python拡張機能を入れておくと便利です。補完機能や、デバッグの効率化、インデント色付け、ボタン一つでPythonプログラムを実行など色々あります。
VSCodeの左枠の拡張機能アイコン(f:id:pythonjacascript:20210605071017p:plain)をクリックすると拡張機能一覧が表示されるので、「Python」とかで検索していい感じのものを入れましょう



ここからが本題です。プログラミングを始めます。この記事の通りにプログラムを書いて実行していっても良いですが、このレポジトリをzipダウンロード→解凍して使ったほうが楽かも。

1. 画像を表示してみる

以下のプログラムを実行して下さい。

# https://github.com/20niship/python_opencv_lecture/blob/master/1_1_show_img%20copy.py

# OpenCVライブラリを読み込む
import cv2

# 画像を読み込んでimg変数に格納
# print(img)をするとわかるが、imgはw * h * 3の大きさのnumpy行列
img = cv2.imread("cat.jpg")

while True:
    # testウィンドウにimgを表示
    cv2.imshow("test", img)

    # 10ms待つ。その間になにかキーボードが押されたらその数値を返してkeyに代入
    key = cv2.waitKey(10)
    # print(key)

    # ESCキーやQキーが押された場合は終了する
    if key == 27 or key == 113: break

プログラムの実行の仕方は、

  1. 「hogehoge.py」みたいに「.py」拡張子で名前を付けて保存して下さい。
  2. pyファイルと同じ位置にcat.jpgという名前で適当な画像をおいて下さい。(この記事ではこれを使います)
  3. コマンドプロンプトで「python hogehoge.py」のように「python [スクリプトファイル名]」と打って、プログラムを実行


以下のように「test」Windowに猫の画像が表示されたでしょうか?

f:id:pythonjacascript:20210605083336j:plain

説明はスクリプトに書いてあるので読んでね。それでもわからない部分はググってね

2. 各種エフェクト

imread関数で読み込んだ画像オブジェクトに、ぼかしエフェクトを加えてみます。
以下の一文をimread関数とimshow関数の間に追加して下さい。

img = cv2.blur(img,(51,51))

「(51, 51)のサイズでimgにブラー(ぼかし)を加えて、結果をimgに代入する」、という動作

以下の画像のようになったでしょうか?
f:id:pythonjacascript:20210605090544p:plain

blur関数の第二引数を色々変えてみると、ブラーの強さが変化します
blur関数が何をやっているのかは公式ドキュメントを見てね(行列をかけてる)


今度は、キーボードの入力で適応されるエフェクトが変化するスクリプトを作ってみます。
こーんな感じ。

python_opencv_lecture/1_2_effects.py at master · 20niship/python_opencv_lecture · GitHub
  

import cv2
import numpy as np # 行列計算ライブラリ、Numpyをインポート
key = 0

while True:
    img = cv2.imread("cat.jpg") # image read

    # 画像にエフェクトをかけていく
    if key is ord('a'): # Aが押された時
        img = cv2.blur(img,(15,31)) # 画像をぼかす(15, 35)はX,Y方向のぼかす大きさ
    elif key is ord('g'):
        img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # グレースケールにする
    elif key is ord('e'):
        img = cv2.Canny(img,60,200) # 輪郭抽出
    elif key is ord('x'):
        # 油絵エフェクト
        # 第二引数はsize, 第三引数はdynRatio
        img = cv2.xphoto.oilPainting(img, 7, 2, cv2.COLOR_BGR2Lab)    
    elif key is ord('h'):
        # 色空間の変換(RGB -> HSV)
        img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    elif key is ord('b'):
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # グレースケールにする
        ret3,img = cv2.threshold(gray,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU) # 大津の二値化
    
    # 上のようなエフェクト組み合わせて色々作っていくよ

    # 例1:グリーンバック
    elif key is ord('w'):
        hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # 色空間の変換(RGB -> HSV)
        height, width, channel = img.shape
        print(hsv[10, 10])
        for x in range(width):
            for y in range(height):
                h, s, v= img[y, x]
                if 30 < h < 70 and s > 50: # 緑色の部分は
                    img[y, x]=[255, 0, 0] # 赤色にする
    # 例2:自力で輪郭抽出
    elif key is ord('v'):
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # グレースケール化
        ret3,img_binary = cv2.threshold(gray,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU) # 二値化
        img_binary = cv2.bitwise_not(img_binary) # ネガポジ反転(findContours関数は白い部分を検出するため)
        contours, hierarchy = cv2.findContours(img_binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) # 輪郭検出
        img = cv2.drawContours(img, contours, -1, (0, 255, 0), 5) # 輪郭描画

    cv2.imshow("test", img)
    key_tmp = cv2.waitKey(10)
    if key_tmp > 0: key = key_tmp

    if key == 27 or key == 113: break

 

プログラムを実行して、

押したキー 内容 出力画像
A ブラー(平滑化) f:id:pythonjacascript:20210605084216j:plain
G グレースケール(白黒化) f:id:pythonjacascript:20210605084750j:plain
E エッジ抽出 f:id:pythonjacascript:20210605084707j:plain
X 油絵エフェクト(こんなのもある。面白いなぁ) f:id:pythonjacascript:20210605084240j:plain
H 色空間をRGBからHSVにする f:id:pythonjacascript:20210605084619j:plain
B 大津の二値化(白黒二色にする) f:id:pythonjacascript:20210605084229j:plain
W 緑っぽい部分を青色(RGB(0, 0, 255)) にする f:id:pythonjacascript:20210605084508j:plain
V 輪郭を描画(自作スクリプト) f:id:pythonjacascript:20210605084408j:plain

という処理を実行します。


3. カメラ画像を取得

PCにカメラがあれば(もしくはUSBカメラ等が繋がっていれば)、そのカメラ映像を表示することもできます。

import cv2
import numpy as np # 行列計算ライブラリ、Numpyをインポート

# VideoCapture オブジェクトを取得
cap = cv2.VideoCapture(0)
 
if cap.isOpened(): 
    # get vcap property 
    width  = cap.get(cv2.CAP_PROP_FRAME_WIDTH)   # float `width`
    height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)  # float `height`
    # 以下の方法でも可
    # width  = cap.get(3)  # float `width`
    # height = cap.get(4)  # float `height`

    fps = cap.get(cv2.CAP_PROP_FPS)

    print("camera found!")
    print(f"width={width}, height={height}, fps={fps}")
else:
    print("カメラが取得できない!")

while(True):
    ret, img = cap.read() # 現在のカメラ画像を取得

    # ここにエフェクトを追加していく

    cv2.imshow('camera',img)

    key = cv2.waitKey(10)
    if key == 27 or key == 113: break

 


4. 背景削除

ここからは問題形式。

f:id:pythonjacascript:20210605090013j:plain

  • カメラ画像から背景を削除する
  • Zoomのバーチャル背景みたいな機能を実装する
  • 人がいないときのカメラ映像は持っているものとする

  

  


5. 物体認識(画像編)

問題設定

flower.jpgがある
ここから赤のチューリップを認識して四角の枠で囲もう

例:
f:id:pythonjacascript:20210605085053j:plain
 
  

6. 物体認識(カメラ編)

4.と5.を組み合わせて、以下のようなものを作る

カメラ画像を取得して、その中にある物体を検出して四角で囲む

例:
f:id:pythonjacascript:20210605091942g:plain