生産技術者サラリーマンの日々

社畜サラリーマンが生産技術やお金の悩みを徒然と書くブログです。私の備忘録が共有できるとうれしいです

確定拠出年金 途中経過 株高?の影響?

確定拠出年金を続けて、6年くらいたちます。
毎年、2万円、年24万円を投資しています。

ちょうど1年前は、20万円くらいのプラス評価になっていますが
その後はどうなっているかをお話しします

RESULT
結果

劇的に増えるこてはないですが、コツコツ投資すると結構増えるものですね、元本に対して、1.5倍に迫る運用利回りです。

金額が増えるとそれだけ効果があるのでしょうか?
それとも昨今の株高により評価があがったのでしょうか?

下手に貯金や学資保険するより、こちらで長期運用することが
いいのかなーって思いました。
但し、ほしいときにすぐ受け取れないってこてはありますが・・・

【PYTHON+WATCH DOG】を使ったファイル更新通知GUI

設備が異常通知した時に、ユーザー側にするようなシステム作りたいなと思っていたところPYTHONWATCH DOGでファイル監視ができるようなので、勉強がてら作ってみました。

目次

1.仕様的なやつ

仕様はこんなかんじです。
①監視したいファイル先のURLを入力

URL入力
URL入力

②ファイル更新されるまでは待ちの状態

待ちの状態

③ファイル更新(Alarm.csvが更新されたらエラーとする)
※本当は、最上面にPOPUPしたかったのですが、実力不足で断念しました。

通知
2.プログラム

がっつりまねさせてもらいました。まとめが分かりやすくて
すぐに利用できます。
ファイル監視には、WATCH DOG、そして、それらを通知するGUIは、PySimpleを利用しました。

ファイル監視

ssrv.net

GUI(ユーザーインターフェースを作成)

www.simugrammer.com

from watchdog.events import PatternMatchingEventHandler
from watchdog.observers import Observer
import os
import time
import PySimpleGUI as sg
import datetime

alarm_on = 0

def on_modified(event):
	alarm_on=1

	filepath = event.src_path
	filename = os.path.basename(filepath)
	print('%s が更新されました!' % filename)
	dt = datetime.datetime.today() 
	
	if filename == 'Alarm.csv':
		window['-mytext-'].update('エラー発生 。゚(゚´Д`゚)゚。')
		window['-mytext2-'].update('%s' % dt)

if __name__ == "__main__":

	sg.theme('DarkAmber') 
	layout = [  [sg.Text('設備エラーファイル参照先を入力してください:')],
        	    [sg.Text(), sg.InputText('お好きなURLをデフォルトで入れてください')],
            	    [sg.Button('OK'), sg.Button('キャンセル')] ]
	window = sg.Window('エラーメッセンジャー', layout)


	while True:
		event, values = window.read()
		if event == sg.WIN_CLOSED or event == 'キャンセル':
			w_state  = 0
			break
		elif event == 'OK':
			w_state  = 1
			print('あなたが入力した値: ', values[0])
			break

	DIR_WATCH = values[0]
	PATTERNS = ['*.csv']
	window.close()


	sg.theme('DarkAmber') 
	layout = [  [sg.Text('エラー情報: '), sg.Text(size=(30,1), key='-mytext-')],
        	    [sg.Text('発生時刻: '), sg.Text(size=(30,1), key='-mytext2-')],
            	    [sg.Button('終了'), sg.Button('表示リセット'), sg.Button('非表示')] ]
	window = sg.Window('エラーメッセンジャー', layout)
	
	if w_state == 1:

		event_handler = PatternMatchingEventHandler(PATTERNS)
		event_handler.on_modified = on_modified
		observer = Observer()
		observer.schedule(event_handler, DIR_WATCH, recursive=True)
		observer.start()

		while True:
		
			event, values = window.read()

			if event == sg.WIN_CLOSED or event == '終了':
				observer.stop()
				break
			elif event == '表示リセット':
				window['-mytext-'].update('')
				window['-mytext2-'].update('')
				#window.normal()

			elif event == '非表示':
				window.minimize()
			
			elif alarm_on == 1:
				print('%s toota' % alarm_on)
				alarm_on = 0
				window.normal()

		observer.join()
	window.close()

確定拠出年金 経過報告 あんまり変わってない?

約1年前に確定拠出年金のブログを書いたのですが、
あれから運用としてどのくらいよくなったのか見比べてみた。

inusan0424.hatenablog.com

当時の預金額は、59万円、入金初回から約9%、直近1年で29%と
なかなかの利回りでした。

ちょうど1年後の今の結果はこちらです。

1年たったけど、変わってない。増えてない。

単純に預金分資産が増えただけで利回りは初回入金からあまり変わってないですが、直近1年は約5%にとどまっています。
もちろん、1年前の直近1年が29%とおかしなことになっているとは思いますが、5%なら良い方だと思いますが、今後の伸びしろが気になります。

第7波コロナ被弾 家族感染

 7月の初旬から第7波が来ている。もちろん、自分とは関係ないとは思えないが、それなりに対策も取っているし飲み会や蜜になるような場所へはいけない。

8月から特に過去最大を記録し、帰省を考えて飛行機まで予約していたが、実家の両親の仕事の関係上、帰宅して万が一感染すると迷惑がかかるだけでなく、最悪、感染すると帰れないことを危惧して帰省をあきらめた。

飛行機は、2週間前であったんで、半額くらいはかえってきたので
よかった。


夏休みの連休の予定がまったくなくなったので何を使用か・・・と
考えた朝8月15日、息子の食欲がない。
私は息子の学童のお弁当作りで気づいていなかったが、嫁さんがびっくりしていた。なんと、38.5度の体温。。。。おいおい、風邪か!?

学校は休みだし、学童かこの前いったイオンしか心当たりがない。
普通は病院が休みであるが昨今の事情により、なんと病院が結構対応してくださっている状況であり、大変感謝

急いでいくが、発熱患者はかなりまたされる。嫌がる息子を押させて
抗原検査。15分後、「陽性」との連絡。。。。
これから、隔離(自宅療養)& 家庭内感染を想像したらぞっとした。

食料、生活雑貨はたまたま前日にたっぷり買っていた。
しかし、18日嫁&娘、そして私も19日陽性と診断を受けました。


症状としては、インフルエンザと同じ感じです
発熱、のど、せきで、38度から数日で37度まですぐ下がりますが、
21日の時点で37度前半をウロウロしている状態で、なかなか回復しないです。子供たちはなぜか1日で全回復している。若さでしょうか・・・

19日を1日とすると28日まで自宅待機で連休明けの1週間は
会社を「病欠」でお休みとなります。。。。


ちなみに、症状が軽症の患者は、厚生労働省からSNS
メッセージが来て、COCOAに登録してくださいとかしか来ないです。

【PYTHON+OPENCV】防犯カメラプログラム

防犯カメラ

1.防犯カメラプログラムの概要

■物体検出
以前作成したプログラムです。背景画像と現在の入力画像を差分から閾値以上差異があれば何かしらの物体が来たとして、録画を開始する

inusan0424.hatenablog.com

■時間計測
なにかしらの物体が来たと判断したら、録画を開始するが一定時間録画したら録画を終了する。dt_now = datetime.datetime.now()関数で時間情報を取得し、dif = dt_now - stack_todayにて差分を計算し、閾値以上の時間がたったら録画を終了する。

今回ラズベリーパイを使用するが、電源を切ると内部で時刻を記憶できず、時間が止まってしまうため、注意が必要です。

arakoki70.com

2.使用したカメラ

画像処理を行うカメラには、個人的にはオートフォーカスは使用せず、画像処理を実施する環境化で露光、ズーム(範囲)、焦点距離をマニュアルで調整し、固定します。

3.プログラム

import cv2
import numpy as np
import time
import datetime

# 画像取得の定義
cap = cv2.VideoCapture(0)
fps = int(cap.get(cv2.CAP_PROP_FPS))
w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

# 変数の定義
global video_star
video_start = 0
before = None # 前回の画像を保存する変数
red = (0, 0, 255) # 枠線の色
kernel = np.ones((7, 7), np.uint8)#カーネルの指示
th = 60#背景差分の閾値
dif_sec = 0
dif_sec_th = 30#rec video time


if __name__ == '__main__':
    rec = 0
    while True:
        today =datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S") 
        dt_now = datetime.datetime.now()
        yer = dt_now.year
        mon = dt_now.month
        day = dt_now.day
        hor = dt_now.hour
        min = dt_now.minute
        sec = dt_now.second

        #not detect camera
        if ret == False: break
        if video_start == 1:
            time.sleep(1/fps)
            video.write(frame)

        #gray scle
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        if before is None:
            before = gray.astype("float")
            continue

        #現在のフレームと移動平均との差を計算
        cv2.accumulateWeighted(gray, before, 0.5)
        mask = cv2.absdiff(gray, cv2.convertScaleAbs(before))

        mask[mask < th] = 0#二値化処理
        mask[mask >= th] = 255#二値化処理
        d_mask = cv2.dilate(mask, kernel)#膨張処理
        e_mask = cv2.erode(d_mask, kernel)#収縮処理

        #輪郭のデータを得る
        contours = cv2.findContours(e_mask,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)[0]
        
        # 差分があった点を画面に描く
       for target in contours:

            if w < 30: continue # 小さな変更点は無視
            if rec == 0:
                print("video start" + today)
                video_start = 1
                file = "/home/pi/Videos/" + str(yer) +"_"+ str(mon) +"_"+ str(day) +"_"+ str(hor) +"_"+ str(min) +"_"+ str(sec) + ".mp4"

                stack_today = dt_now
                fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
                video = cv2.VideoWriter(file, fourcc, fps, (w, h))
                rec = 1
                
    # 録画開始
        if rec == 1:
            dif = dt_now - stack_today # 時間の差分
            dif_sec = dif.seconds # 秒を計算
            
            if dif_sec > dif_sec_th: # もし、閾値以上の時間がたったら
                vide_start = 0# 録画終了
                rec = 0
                video.release()
                print("video end")
                               
        cv2.imshow("Frame", frame)
        key = cv2.waitKey(1)
        if key == 27:
            break
        elif key == 0x73:#s key
            if rec == 0:
                print("video start" + today)
                video_start = 1
                file = "/home/pi/Videos/" + str(yer) + str(mon) + str(day) + str(hor) + str(min) + str(sec) + ".mp4"
                fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
                video = cv2.VideoWriter(file, fourcc, fps, (w, h))
                rec = 1
        elif key == ord("e"):
            if rec == 1:
                rec = 0
                video_start = 0
                print("video end")
                video.release()

    cap.release()
    cv2.destroyAllWindows()

【Python】PDFの情報をエクセルで抽出する

1.やりたいこと

 PDFのデータをエクセルに移して、データ化したい。PDFの文章を選択してコピー、そのあとエクセルに張り付けするとこんな風に一列になってしまいます。
pdf
excel

1か所ならまだしも、複数ある場合はさすがに手動で修正するのはつらい。ってなことで、なんかよい方法がないかと探していたらPythonにそのような機能があるということで実際にトライ。

参考

bunkyudo.co.jp

2.実装

import tabula

file = "MIL-STD-1560C.pdf"
tabula.convert_into(file, "tabula.csv", stream=True ,output_format="csv", pages='77-78')

pages = 'all'
とするとすべてのページを一括で全てCSVに変換できました。
出力

【ラズベリーパイ4】モニターやネット環境なしで表示/操作する方法

1.防犯カメラシステム製作

年末年始、初詣をする方も多いと思いますが、以前よりさい銭泥棒の被害があり、鍵をかけても壊されるなど被害が発生しています。
小さな神社なので、鍵代の方が高くついてしまうので鍵をかけていないの方がよいのです。

今回作った防犯カメラシステムはこんな感じです

防犯カメラ
防犯カメラ

2.キャプチャーデバイスを利用する

しかし、このご時世、デジタル化を使って被害の実際をとらえるべく、ラズパイを導入したのですが、ネット環境がないことにぶち当たりました。ネット環境があれば、VNCを利用して、家の中からモニタリングしたり、プログラムを書き換えができるのですがそんなことは出来ない。
(お金をかけてネット環境をそろえたくない。ただのケチ)かといってモニターも持っていないので、買いたくない・・・・

手持ちのPCでなんとか表示できないかといろいろ探していたところ、ラズパイの画面(HDMI)をUSBに変換して、画像としてキャプチャーするものを知ったので、今回ブログにしました。
(そもそもモニターあれば、不要なのですが・・・・)

3.使用方法

ラズベリーパイのHDMIケーブルをCapture DeviceのIN側(HDMI)に接続する。そして、Capture DeviceのOUT側をPCのUSBに差せば設定は完了です。ドライバ等のインストールは不要です。
但し、このDeviceはカメラからの映像のように画面をキャプチャーしているので、キャプチャーソフトはインストールが必要です。

使用するのが「O」というキャプチャーソフトです。
dc.wondershare.jp

インストール後、起動するとこのような画面となります。

OBS Studio

「映像キャプチャー」選択し、開くと「FY HD VIDEO」と表示されているものがラズベリーパイの画面をキャプチャしていています。
(実際には画面が表示されるのですが、ラズパイは神社に取り付けているので実際に表示はできませんが、参考画像として表示しました)

OSB Studio2
https://blog.hatena.ne.jp/inusan0424/inusan0424.hatenablog.com/config/design/detail