無料で学べるスキルアップAIキャンプ
https://www.skillupai.com/skillupai-camp/
2021年3月24日開催の
「RaspberryPiで始めよう AIとIoT」
で、久しぶりに RaspPi いじってみよう。
カメラ使って、AI使って、それっぽいことできそうだ。
子供のころ、映画「STARWARS」 を観てワクワクし、ガンプラにドキドキしていた。時間が経つのも忘れてしまう、そんな時間をもう一度、取り戻すために、Raspberry pi を使って、オヤジがロボット作りに挑戦する!
# pull out "price" from 価格.com
from bs4 import BeautifulSoup
import urllib as req
url="http://kakaku.com/item/J0000024058"
res=req.urlopen(url)
soup=BeautifulSoup(res, "html.parser")
price=soup.select_one(".colorprice")
price=price.encode('utf_8')
price=price.split('<span>')
price=price[1].split('</span>')
取り敢えず、これでやりたかったことはできた。今は簡単にできてしまう。# Notification to LINE
import requests
token="XXXXXXXXXXXXXXXXXXXXXXXXX"
url="https://notify-api.line.me/api/notify"
msg="HP Specre x360: "
payload={"message": msg + price[0]}
headers={"Authorization": "Bearer " + token}
line_notify=requests.post(url, headers=headers, params=payload)
$ python -m googlesamples.assistant.auth_helpers --client-secrets /home/pi/client_secret_XXXX.json
#
#import pdb; pdb.set_trace()
import sysimport numpy as npimport pandas as pd
length_of_sequences = 5
def convert_data(values): returns = pd.Series(values).pct_change() #returns = pd.DataFrame(values).pct_change() ret_index = (1 + returns).cumprod() ret_index[0] = 1.0 return ret_index
def create_train_data(values,samples): train_x = [] train_y = []
for i in np.arange(0, (len(values) - samples - 1)): s = i + samples feature = values.iloc[i:s] if feature[s - 1] < values[s]: #if feature.loc[s - 1] < values.loc[s]: train_y.append([1]) # up else: train_y.append([0]) # down train_x.append([[x] for x in feature.values])
return np.array(train_x),np.array(train_y)
file_name = 'stock_yasukawa.csv'#adj_end = pd.read_csv(file_name,usecols=[6])adj_end = pd.read_csv(file_name)adj_end = adj_end['5']adj_end = convert_data(adj_end)#print adj_end
X,Y = create_train_data(adj_end,length_of_sequences)
split_pos = int(len(X) * 0.8)train_x = X[:split_pos]train_y = Y[:split_pos]test_x = X[:split_pos]test_y = Y[:split_pos]
# keras/tensorflow で、LSTM
from keras.models import Sequentialfrom keras.layers import Dense, Activation, Dropoutfrom keras.layers.recurrent import LSTM
hidden_neurons = 128in_out_neurons = 1
def create_model():
model = Sequential() model.add(LSTM(hidden_neurons,batch_input_shape=(None,length_of_sequences,in_out_neurons))) model.add(Dropout(0.5)) model.add(Dense(in_out_neurons)) model.add(Activation("sigmoid"))
return model
model = create_model()model.compile(loss="binary_crossentropy",optimizer="adam",metrics=['accuracy'])history = model.fit(train_x,train_y,batch_size=10,verbose=1)
# evaluation
score = model.evaluate(test_x,test_y,batch_size=10,verbose=1)print("score: ",score)
preds = model.predict(test_x)correct = 0for i in range(len(preds)): p = 0 if preds[i][0] < 0.5 else 1 t = test_y[i][0] if p == t: correct += 1
print("correct rate: ",correct/len(preds))
# -*- coding: utf-8 -*-import sslssl._create_default_https_context = ssl._create_unverified_context
from bs4 import BeautifulSoupimport urllib2import timeimport numpy as npimport pandas as pd
page_num = 90 #適当に多めのページ数stock_temp = []
# Code# 6506.T : yasukawa
for i in range(page_num): url = "https://info.finance.yahoo.co.jp/history/?code=6506.T&sy=2016&sm=4&sd=1&ey=2017&em=5&ed=1&tm=d&p=" + str(i+1)
html = urllib2.urlopen(url) soup = BeautifulSoup(html,"lxml")
table = soup.find_all("table",{"class":"boardFin yjSt marB6"})[0] stock_extract = [value.get_text() for value in table.find_all("td")] stock_temp.extend(stock_extract)
time.sleep(0.4)
stock_temp = np.array(stock_temp)
stock = stock_temp.reshape(int(len(stock_temp)/7), 7) #取得データは7項目stock = pd.DataFrame(stock[:,1:8],index=stock[:,0])#stock = pd.DataFrame(stock[:,1:8],columns=["date","start","high","low","end","volumns","adjusted"], index=stock[:,0])
# 取得した株価データのカンマ , を外す作業。ほんとに必要?
for i in range(6): stock.ix[:,i] = stock.ix[:,i].astype(str) stock.ix[:,i] = stock.ix[:,i].str.replace(",","").astype(float)
# Save to csv file.stock.to_csv('stock_yasukawa.csv',encoding='UTF-8')
# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.finance as mpf
from matplotlib.dates import date2num
fig = plt.figure()ax = plt.subplot()
# indexとして使う日付を、matplotlib.finance.candlestick_ohlc関数で使えるようにtype変換する
# 日本語がなければ、pandas.read_csv の parse_dates で変換できたそうだ。
# Japanese date (string) -> Timestamp datefmt='%Y年%m月%d日'my_parser=lambda date: pd.datetime.strptime(date,fmt)df=pd.read_csv('stock_yasukawa.csv',index_col=0,parse_dates=0,date_parser=my_parser)df=df.sort_index(ascending=True)
# mpf.candlestick_ohlc use "datetime"xdate = [x.date() for x in df.index] # Timestamp -> datetimeohlc = np.vstack((date2num(xdate),df.values.T)).Tmpf.candlestick_ohlc(ax,ohlc,width=0.7,colorup='g',colordown='r')
ax.grid()ax.set_xlim(df.index[0].date(),df.index[-1].date()) # range of X-axisfig.autofmt_xdate()
$sudo apt-get install python-empy
$sudo apt-get install libconsole-bridge0.2 libconsole-bridge-dev
$sudo apt-get install libtinyxml-dev
$sudo apt-get install liblz4-1 liblz4-dev
$sudo apt-get install libgtest-dev
$sudo apt-get install libbz2-dev
make[1]: *** [CMakeFiles/roscpp.dir/all] Error 2
Makefile: 138: recipe for target 'all' failed
make: *** [all] Error 2
<== Failed to process package 'roscpp':
sudo vi /etc/dphys-swapfile
CONF_SWAPSIZE=1024
$ sudo systemctl stop dphys-swapfile
$ sudo systemctl start dphys-swapfile
$ free -h 増えたのを確かめる。 $ rosinstall_generator turtlesim --rosdistro indigo --deps --wet-only --exclude roslisp --tar > indigo-custom_ros.rosinstall
$ wstool merge -t src indigo-custom_ros.rosinstall
$ wstool update -t src
$ rosdep install --from-paths src --ignore-src --rosdistro indigo -y -r --os=debian:jessie
import cv2
cv2.namedWindow("monitor")
vc=cv2.VideoCapture(0)
if vc.isOpened():
rval, frame = vc.read()
else:
rval = False
while rval:
cv2.imshow("monitor", frame)
rval, frame = vc.read()
key = cv2.waitKey(10)
if key == 27:
break
cv2.destroyWindow("monitor")
最後の touch は、/var/log/samba/log.smbd にエラー吐いたので。$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install samba
$ cd /etc/samba
$ sudo cp smb.conf smb.conf_org
$ sudo vi smb.conf
[global]
printing = bsd
[homes]
browseable = yes
path = /home/pi/REC
read only = no
create mask = 0664
directory mask = 0775
$ sudo touch /etc/printcap
$ sudo smbpasswd -a pi
New SMB password: ←RaspPi3の pi アカウントのパスワードを。
Retype new SMB password:
Added user pi.
$ crontab -e
:
10 09 * * 1,2,3,4,5 ~/bin/rec_nhk.sh NHK2 5 ~/REC enjoy_english
30 16 * * 7 ~/bin/rec_nhk.sh NHK2 75 ~/REC conversation