情報学部大学生のダラダラ日記

β日記

機械学習や日記っぽいものを書きます

【Python】Twitter apiを使って複数画像を投稿する

はじめに

 Twitter botを作成する際にapiを使って複数枚画像を投稿する方法があまりネットでは見つからなかったり、のっている情報が誤っていたりしたのでメモします。今回はいらすとやさんの画像を使いました。

プログラム

import requests

import twitter

import urllib.request

import requests

from requests_oauthlib import OAuth1Session

import json





CK=''

CS=''

AT=''

AS=''

twitter = OAuth1Session(CK,CS,AT,AS)



url_media = "https://upload.twitter.com/1.1/media/upload.json"

url_text = "https://api.twitter.com/1.1/statuses/update.json"



img_url = ['https://1.bp.blogspot.com/-SWOiphrHWnI/XWS5x7MYwHI/AAAAAAABUXA/i_PRL_Atr08ayl9sZy9-x0uoY4zV2d5xwCLcBGAs/s1600/pose_dance_ukareru_man.png',

            'https://1.bp.blogspot.com/-CSIokkL0VJc/XVKgHNKp2QI/AAAAAAABUHU/znkuxlOlQ5giZ3gDbks7KAK3TJnT2q1XwCLcBGAs/s1600/kotowaza_hato_mamedeppou.png',

            'https://1.bp.blogspot.com/-8sMAiPmvFuo/XVjgKN2BXoI/AAAAAAABUM0/IfTQp8hHWRsVk_u7s84OE6yvFJ5ekpnLwCLcBGAs/s1600/kid_seikaku_uchiki_girl.png',

            'https://1.bp.blogspot.com/-ahlT7Kd7-T0/XVjgJ3hrbFI/AAAAAAABUMw/MV4su85SnoAMYnSitR9DXVgNFuorpprwQCLcBGAs/s1600/kid_seikaku_uchiki_boy.png']  #①



def call():    

    media_id = []

    for i in range(4):

        headers = {"User-Agent": "Mozilla/5.0"}  #②

        request = urllib.request.Request(url=img_url[i],headers=headers)

        response = urllib.request.urlopen(request)

        data = response.read()

        files = {"media" : data}

        req_media = twitter.post(url_media,files = files)  #③

        media_id.append(json.loads(req_media.text)['media_id_string'])

    media_id= ','.join(media_id)  #④

    status = "投稿テスト"

    params = {"status": status, "media_ids": media_id}

    twitter.post(url_text,params=params)

    

        

if __name__ =='__main__':

    call()

解説と結果

  • ①ここで投稿したい画像のURLをリストにいれておいて準備します。僕はURLから画像を取得したかったのでやっていませんが、ローカルのファイルのパスを指定して投稿したい場合は他の方が多くやっていらっしゃるのでそちらを参照してください。
  • ②ユーザーエージェント(どのようなブラウザがサーバへアクセスしているかの情報)をこのようにFirefoxなどに指定しないと権限エラーが出てアクセスできないので注意してください。これについても多くの情報があるので調べてみてください。
  • ③②~③までの間でリスト内の画像URLをサーバから受け取りました。Twitterには直接画像のURLを画像として呟く事ができないので③ではこれをTwitter(url_media)へpostすることでURLを画像コード(数字の羅列)に変換しています。
  • ④今回の主たるところです。media_idが最終的にTwitterへ送る際にはじめはリストを渡せばいいと思っていましたが一枚しか投稿されませんでした。おそらく、['111','112',・・・]となっていることで途中のシングルクォーテーションが区切りと判断されたことが原因だと思います。なので④のようにリストの要素をカンマでjoin結合し、[111,112,・・・]とすることで複数枚投稿が可能となります。

 呟いた結果がこちら↓

f:id:Parco1021:20191123200647j:image

 

さいごに

 今回はTwitter apiの複数枚投稿についてまとめました。4で割り切れない場合などに臨機応変に対応させて複数枚投稿させたい場合はmodなどを使うといいです。僕が作ったbotはそのような設計になっているのでもしよければ観てみてください。

parco1021.hatenablog.com

(あげたあとにあげる必要ないって気づいたけど一応gitにもあげたので…https://github.com/tnb1021/tweetimgs)

参考文献

こちらのプログラムを拡張し、複数枚投稿できるようにしました。

qiita.com

 

 おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村

 

PVアクセスランキング にほんブログ村

最近月曜日と金曜日の雨多くない??

はじめに

 僕は今、月曜日と金曜日に実験の講義があります。そしてその時、軒並み雨のような気がしています。果たしてそれは僕が他の曜日に外出しないが故の勘違いなのかあるいは正しいのか検証してみます。

 '最近'と曖昧にしましたが、実験が始まったのが10月からなので10月1日~昨日(11月21日)までの情報を気象庁さんが提供してくださっているものをcsv保存しました。

f:id:Parco1021:20191122170019p:plain

データは概ねこのような感じです(一応データは隠しました)。csv保存せず、スクレイピングしてもよかったのですが曜日計算がめんどくさかったのと必要な情報が少なかったのでやりませんでした。

※筆者は統計学の学がないです。また、決して曜日と天気に因果関係があることを示唆しているわけではありません。

プログラム

 「このぐらいなら手で数えろよ…」の声が聞こえてきますが嫌です。書きました。

import pandas as pd

f = pd.read_csv('data.csv',encoding='cp932')
f.columns = ['day','dow','precipitation']

count_rain = 0
count_rainexp = 0
count_exp = 0
count_day = 0

for row_index,row in f.iterrows():
    if row[2] != '--':
        if float(row[2]) > 1:
            count_rain += 1
            if row[1] == '月' or row[1] == '金':
                count_rainexp += 1
    if row[1] == '月' or row[1] == '金':
        count_exp += 1
    count_day += 1

'''
for row_index,row in f.iterrows():
    if row[2] != '--':
        if float(row[2]) > 1:
            count_rain += 1
            if row[1] == '金':
                count_rainexp += 1
    if row[1] == '金':
        count_exp += 1
    count_day += 1
'''    

print('雨日:',count_rain)
print('実験で雨日:',count_rainexp)
print('実験日:',count_exp)
print('総合日数:',count_day)

 おなじみのpandasライブラリでf.iterrows()で一行ずつ参照しています。降水量が無の時を表す"--"でないとき他は全て数値なのでfloat型で変換しています。あとはそれぞれ求めたい数値をインクリメントしています。一応月金verと金のみverを書きましたが結果はほぼ同じでした。

実行結果

 今回、総合降水量で判断しているので多少誤差がありますが1mmを超えた時に雨日としました。

雨日: 17
実験で雨日: 7
実験日: 14
総合日数: 52

 つまり実験がある日が14/52、雨の日が17/52、実験の日かつ雨の日が7/52日ということになります。実験がある日という条件の下で雨が降った条件付き確率は7/14=1/2ということになります。さらに、11/4(月)と11/8(金)は変則日課で実験がありませんし雨も降っていません。これを加味すると条件付き確率は7/12≒0.58となります。さらにさらに今日11/22は実験でありさらに雨が降っています。よって8/13≒0.62となります。

さいごに

 補足すると雨かつ火or水は5日、雨かつ土or日は2日でした(ってことは木は3日)。つまり偏りがありますが今回そんなことはどうでもいいんです。重要なのは

ただでさえ憂鬱な実験の日に雨が6割も降って空気ジメジメするしより憂鬱になるんだよ!!!!

ってことです。

 後期も折り返しです。頑張りましょう。

 

 

 おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村

 

PVアクセスランキング にほんブログ村

Windowsで毎日定時にプログラムを実行する方法

はじめに

 Twitterbotを作るために毎日定時にプログラムを実行したいのでタスクスケジューラを使います。

parco1021.hatenablog.com

手順

  1. プログラム実行用のバッチファイルを用意する
  2. 1のバッチファイルをタスクスケジューラで実行する

まず、バッチファイルを用意します。これについては下の記事を参照してください。

parco1021.hatenablog.com

要するに実行したいコマンドが打ち込まれているファイルが拡張子.batで作られていればいいです。

 次にタスクスケジューラの設定をします。窓からタスクスケジューラを開きます。適当なライブラリで右クリック→タスクの作成を選択してください。名前を設定してから「ユーザがログオンしているかに関わらず実行する」にチェックします。これをしないと貴方がPCを開いていないとプログラムが実行されません。そして「最上位の特権で実行する」にもチェックをします。そしてトリガーを実行したいように設定します。

f:id:Parco1021:20191120152028p:plain

僕は9時ちょい過ぎに毎日実行したいのでこのように設定します。

操作はまず「プログラムの開始」を選択します。そしてプログラム/スクリプトは参照から作成したバッチファイルを選択し、開始(オプション)にはバッチファイルのディレクトリを設定します。これをしないと実行されないので注意してください。僕はこれをしていなくて躓きました。

f:id:Parco1021:20191120153041p:plain

そして次に条件において「タスクを実行するためにスリープを解除する」のチェックをします。

f:id:Parco1021:20191120153345p:plain

しかし、ここで設定しただけではスリープを解除することがPC本体において有効ではないのでそこの設定もいじらなければなりません。そこは以下を参照してください。

qiita.com

あとはデフォルトで大丈夫っぽいです。

さいごに

 Windows内のプログラムを定期実行したい場合はまず一回だけタスクスケジューラから実行できているか確認することをお勧めします。ローカルのプログラムではなく、Herokuにデプロイした場合はHeroku側で定期的に実行してくれるものがあるようなのでそちらもご検討してみてはいかがでしょうか。何かあればコメントでお願いします。

 

 おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村

 

PVアクセスランキング にほんブログ村

【Python】Fortniteのショップ情報を呟くTwitterのbotを作った

はじめに

 今回の記事は技術的なことになります。どのようなbotかなどは別途以下の記事をみてください。

parco1021.hatenablog.com

 また、今回は全体的なことのみ書いて具体的なことを書いたものは別途書いてこのブログへリンクを追加していこうと思っています。

使用環境

conda 4.7.10

Python 3.7.3

Twitter api

Fortnite Tracker api

処理の流れ

今回作成したbotの処理のフローが以下です。

 

f:id:Parco1021:20191119125250p:plain


この図の①~⑧までの処理を後で別々に書いていこうと思います。

プログラム

import requests
import twitter
import urllib.request
import requests
from requests_oauthlib import OAuth1Session
import json
import time
from datetime import date

key=''
URL='https://api.fortnitetracker.com/v1/store'
CK=''
CS=''
AT=''
AS=''
twitter = OAuth1Session(CK,CS,AT,AS)

url_media = "https://upload.twitter.com/1.1/media/upload.json"
url_text = "https://api.twitter.com/1.1/statuses/update.json"
   


def tweet(media_id,j,result): #⑦、⑧
    now_date = date.today()
    y = now_date.year
    m = now_date.month
    d = now_date.day
    len_pic = len(media_id)
    if len_pic == 4:
        tweet="{}年{}月{}日のショップその{}\n{} {}vBucks\n{} {}vBucks\n{} {}vBucks\n{} {}vBucks\n#Fortnite #フォートナイトショップ"
        status = tweet.format(y,m,d,j+1,result[j*4]['name'],result[j*4]['vBucks'],result[j*4+1]['name'],result[j*4+1]['vBucks'],
        result[j*4+2]['name'],result[j*4+2]['vBucks'],result[j*4+3]['name'],result[j*4+3]['vBucks'])
    elif len_pic == 3:
        tweet="{}年{}月{}日のショップその{}\n{} {}vBucks\n{} {}vBucks\n{} {}vBucks\n#Fortnite #フォートナイトショップ"
        status = tweet.format(y,m,d,j+1,result[j*4]['name'],result[j*4]['vBucks'],result[j*4+1]['name'],result[j*4+1]['vBucks'],
        result[j*4+2]['name'],result[j*4+2]['vBucks'])
    elif len_pic == 2:
        tweet="{}年{}月{}日のショップその{}\n{} {}vBucks\n{} {}vBucks\n#Fortnite #フォートナイトショップ"
        status = tweet.format(y,m,d,j+1,result[j*4]['name'],result[j*4]['vBucks'],result[j*4+1]['name'],result[j*4+1]['vBucks'])
    else:
        tweet="{}年{}月{}日のショップその{}\n{} {}vBucks\n#Fortnite #フォートナイトショップ"
        status = tweet.format(y,m,d,j+1,result[j*4]['name'],result[j*4]['vBucks'])
    media_id= ','.join(media_id)
    params = {"status": status, "media_ids": media_id}
    print(params)
    twitter.post(url_text,params=params)
    time.sleep(5)

def pic(media_id,i,j,result): #⑤、⑥
    img_url = result[i+4*j]['imageUrl']
    print(img_url)
    headers = {"User-Agent": "Mozilla/5.0"}
    request = urllib.request.Request(url=img_url,headers=headers)
    response = urllib.request.urlopen(request)
    print(response)
    data = response.read()
    files = {"media" : data}
    req_media = twitter.post(url_media,files = files)
    media_id.append(json.loads(req_media.text)['media_id_string'])
    print(media_id)
    return media_id

def call():
    #②、③、④ここから
    headers = {'TRN-Api-Key' : key}
    r = requests.get(URL, headers = headers)
    result = eval(r.text)
    print(len(result))
    print(result)
    num = len(result) // 4
    mod = len(result) % 4
#ここまで for j in range(0,num): media_id = [] name = [] vbucks = [] for i in range(4): pic(media_id,i,j,result) #⑤、⑥ tweet(media_id,j,result) #⑦、⑧ media_id = [] name = [] vbucks = [] for k in range(0,mod): pic(media_id,k,j+1,result) #⑤、⑥ tweet(media_id,j+1,result) #⑦、⑧ if __name__ =='__main__': call()

 データ数は毎日異なるのでそれに対応させるように書きます。4つずつデータを呟きたいのでまずは4枚ずつできるだけ呟きます。例えば17個のデータだったらnum=17//4=4となります。なのでまずはfor文のところのjを4回まわすことで16個呟きます。そして残りの1を呟く方法としてmod=17%4=1となるのでfor文のところのkをmodの数だけまわします。

 それぞれ値を関数に渡して処理をします。本当は呟く文章の箇所でif-elifを多用したくなかったのですがよくわからなかったのでゴリ押しました。

 

各処理の説明

①毎日定時に実行

parco1021.hatenablog.com

 

②、③呟くデータをAPIを叩いて取得する

parco1021.hatenablog.com

 

④~⑧データを呟く

parco1021.hatenablog.com

 

全体のコードはgithub見てください。コードが汚いのは許してね。

https://github.com/tnb1021/fortnitebot

 

 おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村

 

PVアクセスランキング にほんブログ村

Fortniteショップbotのトリセツ

 今回、Fortniteのショップ情報を呟くbotを作成しました。その説明を書きます。あくまでトリセツなので技術的なことについて深く書きません。技術的な話は別で書きます。情報は元はFortnite Trackerさんです。

  • 呟く内容は「商品名 値段vBucks」となっています。詳細は書きませんが、海外から情報を受け取っているので英語表記となっています。手作業で翻訳することも可能ですが、現在実施する方針はありません。
  • 商品の画像を4枚(Twitterで投稿できる最大枚数)区切りで呟いているので一日の投稿数が(商品数)÷4+1となります。画像付きなので多少ライムラインを圧迫します。
  • 情報の特性上、ある商品の別バージョンがショップに並んでいる場合、値段が0表記になる可能性があります。0vBuckとなっていた場合はそのような解釈をしていただけると幸いです。
  • Fortniteのショップは日本時間の午前9時に更新されますが、本botは9時5分の更新となります。
  • ご意見・ご要望ありましたら本記事へのコメントまたはbotへリプライしてください。しかし全て対応できるわけではないことをご容赦ください。
  • botは予告なく終了する可能性があります。

↓↓もしよろしければフォロー・いいね・RTお願いします!!

 

 おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村

 

PVアクセスランキング にほんブログ村

(個人的)ワンピースEDランキング

はじめに

 あまり目立っていない(と思う)のですがワンピースのEDもOPに引けを取らないぐらいいい歌が多くあります。今回もワンピースEDランキング(TOP5)を作ってみました。例のごとく個人的ランキングです。

OPランキング↓↓

parco1021.hatenablog.com

 

歌リスト

今回もanimateさんからの引用です。また、使用期間はWikiを参照しています。

大槻真希「memories」
大槻真希「RUN! RUN! RUN!
トマトキューブ「私がいるよ」
推定少女「しょうちのすけ」
AI-SACHI「BEFORE DAWN」
The Kaleidoscope「fish」
上原多香子「GLORY-君がいるから-」
Janne Da Arc「Shining ray」
Ruppina「Free Will」
Ruppina「FAITH」
ZZ「A to Z~ONE PIECE Edition~」
shela月と太陽
イクタ☆アイコ「DREAMSHIP」
タッキー&翼未来航海
エイジアエンジニア「エターナルポーズ」
TRIPLANE「Dear friends」
東方神起「明日は来るから」
デリカテッセン「ADVENTURE WORLD」 

第5位

 AI-SACHI「BEFORE DAWN」

BEFORE DAWN

BEFORE DAWN

  • provided courtesy of iTunes

 使用期間は第82話から第94話までです。ドラム王国の最後の方からボンちゃん初登場あたりまでですね。思い出はないです!

第4位

デリカテッセン「ADVENTURE WORLD」 

ADVENTURE WORLD

ADVENTURE WORLD

  • provided courtesy of iTunes

 使用期間は第264話から第278話までです。俗にいうエニエスロビー編の始めから生ぎたいっ!!までですね。ワンピースは途中でEDがなくなるのですが、この歌が最後のEDとなります。視聴者が描いた絵が流れてた記憶があります。

第3位

Janne Da Arc「Shining ray」

Shining ray

Shining ray

  • provided courtesy of iTunes

 使用期間は第119話から第132話までです。アラバスタ編の終盤なので聞いたことがある人も多いのではないでしょうか。普通に好きです。

第2位

大槻真希「memories」

memories

memories

  • 大槻 真希
  • J-Pop
  • ¥255
  • provided courtesy of iTunes

  使用期間は第1話から第30話までです。サンジが仲間になるところまでですね。ワンピースのEDで最も有名で人気な歌だと思います。

第1位

大槻真希「RUN! RUN! RUN!

RUN! RUN! RUN!

RUN! RUN! RUN!

  • 大槻 真希
  • J-Pop
  • ¥255
  • provided courtesy of iTunes

  使用期間は第31話から第63話までです。アーロン編からレッドライン超えるまでです。何も言いません。神歌です。以上!

さいごに

 いかがでしたでしょうか。OPの陰に隠れてはいますがとてもいい歌が多いので他の歌も是非聴いてみてください。OPランキングもよろしければ観てみてください。

parco1021.hatenablog.com

 

 おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村

 

PVアクセスランキング にほんブログ村

【Python】batファイルにおいてAnaconda環境を呼び出す方法

はじめに

 ファイルを開くだけでコマンドを実行してくれるbatファイルですが、Windowsコマンドプロンプトで行うためライブラリなどの環境が揃っていません。僕のようにPythonは元からライブラリが揃っているAnaconda環境で実行している人は多いのではないでしょうか。逐一必要なライブラリやPython環境を別途用意しても良いのですがせっかくなのでbatファイルでAnacondaの環境を呼び出す方法を調べたので紹介します。

呼び出す方法

 では早速方法です。例えば同一ディレクトリ内のtest.pyを実行したい時、

call C:\Users\{ユーザ名}\Anaconda3\Scripts\activate.bat
python test.py

 call (activate.batまでの絶対パス)とします。つまりAnacondaのactivate.batというバッチファイルを呼び出してます。callってなんやって思って調べてみたところバッチファイル内でバッチファイルを呼び出す時のコマンドです。

 そしてAnacondaの環境が整ったのでそのまま実行します。同一ディレクトリ内なのでpython test.pyを実行してもらうだけです。

参考文献

stackoverflow.com

 

おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村

 

PVアクセスランキング にほんブログ村

【Django】Djangoでbootstrapのテンプレートを使う方法

はじめに

 好きなテンプレートをダウンロードしてコピペはいおっけー!とはいかないのです。

今回使ったテンプレートはhttps://templatemag.com/minimal-bootstrap-template/です。

やり方

 まず、お好きなテンプレートをダウンロードして解凍します。静的ファイルなのでまずプロジェクト内にstaticというフォルダを作り、そこに中身のフォルダ(css,js,lib)などをコピペしてください。

 また、この時点でsetting.pyに

STATIC_URL = '/static/'

とない場合は足してください。

templateフォルダにテンプレートをダウンロードした時のindex.htmlなどを入れ、URLおよびビューを設定してからアクセスしてもまだcssが反映されておらず、以下のようになると思います。

f:id:Parco1021:20191111171207p:plain

 はじめに1行目に

{% load static %}

を記述し、staticフォルダを読み込むように宣言?します。そして

<link href="css/style.css" rel="stylesheet">

<link href="{% static 'css/style.css' %}" rel="stylesheet">

とすることでstaticフォルダからの相対パスを指定し、cssなどを読み込みます。すると

f:id:Parco1021:20191111171036p:plain

さいごに

 今までbootstrapのテンプレートを使ったことがなく、使い方もlaravelやrailsでの使い方ばかり見受けられたので(使い方はほぼ一緒)、メモで残します。テンプレート初めて使ったんですけどいいですね、バエます。

 

おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村

 

PVアクセスランキング にほんブログ村

自動運転に潜む怖さ(論文紹介①Adversarial examples in the physical world)

はじめに

 先日、UberのAI車が死亡事故を起こすという痛ましいニュースが流れました。

news.yahoo.co.jp

 この事故は「歩行者は歩道にいる」というシステム設計から起こった事故ですが、例えばAI車が読み込む標識などに誰かが細工をして「とまれ」を別の標識に認識させるようにしてしまったらどうなるでしょうか?結果は目に見えていると思います。今回はそこに関連する論文を紹介します。 

今回読んだ論文について簡単に

  • タイトル:Adversarial examples in the physical world
  • 発行年:2017(ICLR)
  • 著者:Alexey Kurakin,Ian Goodfellow,Samy Bengio
  • URL:https://arxiv.org/abs/1607.02533

Adversarial Examplesについての先行研究

 まず、Adversarial Examplesについて一言で説明すると、「画像にノイズを加えてモデルに誤った出力をさせてしまう」ことです。

f:id:Parco1021:20191109212451p:plain引用元:Goodfellow et al. (2014)

  元々のモデルの出力は57.7%でパンダとなっています。そこに真ん中の図のようなノイズを加えることでモデルの出力が99.3%でgibbon(テナガザル)となります。このように人間にとって見た目に差がなくても機械学習システムの出力を誤らせてしまうようなモデルに対する脆弱性攻撃のことをAdversarial Examplesといいます。

 機械学習、特にニューラルネットワークにおけるモデルは、モデルへの入力時の微弱な変化に対してとても弱いことがわかっています。また、モデルを複数用意しAdversarial Examplesの実験を行った場合、あるモデルが誤った出力をする時はそのほかのモデルも誤った出力をする可能性が高いことが示されています。

新規性

 上で挙げた先行研究は攻撃が全てコンピュータ内で為されていることを前提にしています。しかし実際に私達が機械学習システムを用いる時は声をSiriなどに入力したり、顔認証でスマートフォンをアンロックしたりなど実世界であることが多いです。今回の論文は特にカメラを通じた画像の認証におけるAdversarial Examplesの生成および実験を行っています。

実験で用いられたAdversarial Examplesの生成方法

 まずは変数の定義を説明します。

  • {\displaystyle X }…入力画像。3次元ベクトルであり、ピクセルの値は[0,255]の整数値
  • {\displaystyle y_{true} }…入力{\displaystyle X }の正しいクラス
  • {\displaystyle J(X,y) }…損失関数
  • {\displaystyle Clip_{\{X,ε\}}X'(x,y,z)=min⁡\{255,X(x,y,z)+ε,max⁡\{0,X(x,y,z)-ε,X'(x,y,z)\}\}} ピクセルが[0,255]の範囲外にならないようにクリッピングする処理

変数の定義がされたので今回の論文で用いられた手法を3つ説明します。

Fast Method

 上でも示したGoodfellow et al. (2014)による手法です。

{\displaystyle X^{adv}=X+εsign(∇_X J(X,y_{true} )) }

ざっくり式の説明をすると{\displaystyle ∇_X J(X,y_{true} ) }によって勾配ベクトルを求め、符号を求めるsign関数に引数として渡します。それが正ならば正の方向、負ならば負の方向(=正解クラスの遠ざける方向)へノイズを加え、より正解から遠ざける方法です。εは変数です。

Basic Iterative Method

 Fast Method を繰り返し行う方法です。

{\displaystyle X^{adv}_{N+1}=Clip_{X,ε}\{X^{adv}_N+αsign(∇_X J(X^{adv}_N,y_{true} ))\}}

 繰り返し行うのでピクセルの値が範囲外とならないようにクリッピングを行っています。

Iterative Least-Likely Class Method

{\displaystyle y_{LL}=argmin\{p(y|X)\} }

{\displaystyle X^{adv}_{N+1}=Clip_{X,ε}\{X^{adv}_N-αsign(∇_X J(X^{adv}_N,y_{LL} ))\}}

 Basic Iterative Methodと符号と損失関数の引数が違いますね。yLLはモデルが出力するクラスのうち、最も確率の低いものを示します。なのでこの方法は最も"あり得ない"クラスに寄せています。

εの決定

 先ほどの数式におけるεを決定するための実験です。

f:id:Parco1021:20191109235316p:plain引用元:Alexey Kurakin et al.

εが8を超えたあたりから滑らかになりますね。また、誤認率はl.l方法が最も高いです。

f:id:Parco1021:20191110000319p:plain引用元:Alexey Kurakin et al.

 上の画像を観てもわかる通り、εが8でも人間の目からはノイズが加わっていることはわからないと思います。 

実験の方法

 実験の方法はまず、画像を印刷します(a)。そして印刷した画像を携帯電話のカメラで写真を撮り(b)、自動でトリミングしたもの(c)をモデルへ入力します。

f:id:Parco1021:20191110001702p:plain引用元:Alexey Kurakin et al.

 以上のように入力は完了しました。また、本実験では

①Average case

②Prefiltered case…あらかじめ画像をフィルタリングし、元のモデルの出力を0か1かになるようにする

の2ケースが用意されていますが、②は考えずに①のみ結果を示します。

f:id:Parco1021:20191110003217p:plain引用元:Alexey Kurakin et al.

 Photosがカメラで撮った画像であり、Source imagesが元の画像です。Adv. imagesがノイズ込みの画像。

 表を見ると、例えばfast method のε=16の時、カメラを介すると誤認率がtop-1だとおよそ2/3、top-5だと1/3となっておりかなり低くなっています。元の画像においてはl.l.方法がAdversarial Examplesの誤認率が高く、fast methodが最も低いです。しかし、カメラを通じると、fast methodが最も誤認率が高くなっています。つまりカメラを介する場合とそうでない場合とでAdversarial Examplesの作成方法の優劣が変わっています。

さいごに

 今回は、僕達の身近なケースであるカメラを通じたAdversarial Examplesの論文を読みました。機械学習もセキュリティも初心者なのですが先輩や先生に教えていただきながらなんとか読み切ることができました。内容としてはとても興味深いものであり読んでいて楽しかったです。

 カメラを介するケースとそうでないケースで攻撃側の優劣が異なるということは防御側もテストをコンピュータ上で行うのではなく、カメラを介さなければいけないということであり、これもいたちごっこになっているそうです。

参考文献

 

 おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村

 

PVアクセスランキング にほんブログ村

"コレ"に登録するだけでブログの収益が増える…かも?

はじめに

 タイトルであんなふうに書きましたが実際の収益に影響するかどうかはブロガーさん次第です。貴方は商品のリンクを貼る時、Amazonのリンクを貼っていますか?それとも楽天のリンクを貼っていますか?あるいは両方貼っていますか?自分はAmazonを使っているけどユーザーさんは楽天しか使っていないかもしれない。そんなことを考えなくても良いのがもしもアフィリエイトです。既に使っている人も多いと思いますが…。

もしもアフィリエイトについて

 では、もしもアフィリエイトを使うと何が嬉しいのか早速結論に移ります。

 例えば上のように1つの商品辺りにAmazon楽天及びYahooショッピングの3つのリンクを貼ることができます。

使い方

 まず、以下のリンクにアクセスして会員登録を済ませてください。 

https://af.moshimo.com/

サイトの登録などを済ませてから「サイトの運営」→「かんたんリンク」を選択します。

f:id:Parco1021:20191108162713p:plain

おそらく、デフォルトだとAmazonとの連携ができていないので申請をしてから数日待ってください。僕は4、5日かかりました。

 連携がとれているのを確認してから商品を選択するとjavascriptのコードが生成されるのでそれをコピペするだけです。とても簡単なのでまだやっていない方は早めの登録をお勧めします。

 

 

 

 おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村 PVアクセスランキング にほんブログ村

(個人的)ONE PIECEのOPランキング

はじめに

 2つ足で歩く前からワンピースが好きな自分が個人的に好きなアニメのOPのTOP5を発表したいと思います。もう一度言います。

個人的

ランキングであり、僕個人の歌の好みや好きな話のイメージなどが顕著に表れているので〇〇がないなんてファンじゃない!などの断定はやめてください。ファンです。ランキング外でも当然好きな歌はたくさんあります。

OPリスト(2019年11月現在)

animateさんがリストを挙げてくださっているので引用します。(歌手名)「(歌名)」となっています。

きただにひろしウィーアー!
Folder5「Believe」
ザ・ベイビースターズ「ヒカリヘ」
Bon-Bon BlancoBON VOYAGE!
BOYSTYLE「ココロのちず」
D-51「BRAND NEW WORLD」
7人の麦わら海賊団「ウィーアー! ~7人の麦わら海賊団篇~」
タッキー&翼Crazy Rainbow
5050「Jungle P」
東方神起ウィーアー! ~10周年Ver.~」
東方神起「Share The World」
矢口真里とストローハット「風をさがして」
The ROOTLESS「One day」
安室奈美恵「Fight Together」
きただにひろしウィーゴー!
新里宏太「HANDS UP !」
AAA「Wake up!」
GENERATIONS from EXILE TRIBE「Hard Knock Days」
氣志團きただにひろし「ウィーキャン!」
安室奈美恵「Hope」
V6「Super Powers」
きただにひろしOVER THE TOP

 では早速第5位から

第5位

The ROOTLESS「One day」

One day

One day

  • provided courtesy of iTunes

  頂上戦争あたりの歌ですね。あまりワンピのことを知らないような人でもこの歌は知っているので知名度としてはウィーアー並だと思います。僕個人としてもとてもいい歌だと思います。頂上戦争編があまり好きではないので5位です。

 

第4位

 ザ・ベイビースターズ「ヒカリヘ」

ヒカリへ

ヒカリへ

  • provided courtesy of iTunes

  アラバスタ編の終盤から空島編の中盤までのOPだったイメージです。アラバスタ終盤でバチバチにロビンが敵描写されているにも関わらず、このヒカリヘにてメリー号に自然に乗っているという伝説のネタバレ曲でもあります。ゆったりとした声がいいですね。

 

第3位

5050「Jungle P」

Jungle P

Jungle P

  • 50/50
  • J-Pop
  • ¥250
  • provided courtesy of iTunes

 エニエスロビー編終盤からスリラーバーク編序盤までの歌です。特にイメージに残っているのはアニオリであるドンアッチーノ編で流れていたことですね。ドンアッチーノ編は正直嫌いなのですが、そのマイナスのイメージよりも歌の好みが勝っているので3位です。

 

第2位

Folder5「Believe」

Believe (第48-115話OP)

Believe (第48-115話OP)

  • Recitativo
  • アニメ
  • ¥153
  • provided courtesy of iTunes

  アーロンさんあたりの話です。ファンの間でもとても人気のある歌であり、僕の幼馴染の友達はこの歌が一番好きだと言っていました。テンポがよく好きな歌です。

 

第1位

 安室奈美恵「Hope」

Hope

Hope

  • provided courtesy of iTunes

  WCI編です。あまり"ワンピースっぽく"ない歌なのですが、王道JPOPが大好きです。あと、WCI編が僕的に一番好きです。なぜこの歌が好きなのか言語化できませんがまあヨシ!

番外編

 (本当はBON VOYAGEが一番好きなんだけどitunesにようわからんカバーしかなく、良さが伝わらないと判断したので今回は外しました。本家は御自身で探してください。なので個人的順位はそれぞれ+1したものです。)

BON VOYAGE! (From

BON VOYAGE! (From "ワンピース")

  • 小川美加
  • アニメ
  • ¥150
  • provided courtesy of iTunes

さいごに

 itunesアフィリエイトを使いたかったので今回は個人の好みでしかないワンピースOPランキングを作ってみました。先にも述べている通り、他にもいい歌ばかりなので是非良ければ聞いてみてください。EDにも映画にも大好きな歌が多くあるので後日別途EDと映画の主題歌ランキングを作ります。

 

 おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村 PVアクセスランキング にほんブログ村

好きな漫画「金色のガッシュ(ベル)!!」

はじめに

 今週のお題「好きな漫画」ということで、ワンピースと並ぶほど好きな漫画である金色のガッシュを紹介します。

(動画を貼っていたらアフィリエイトさんに怒られてしまったので再掲です。)

金色のガッシュについて

 この漫画は2001年頃から2008年頃まで週刊少年サンデーにて連載されていました。僕がちょうど小学生中学年あたりまでです。僕自身初めて親にお願いして買ってもらった単行本なのでかなり思い入れがあります。少年野球があったのでリアルタイムである日曜9時からのアニメは観ることができませんでしたがビデオをレンタルしたりして全て観ました。ガッシュ系統の名前をSwitchの名前にすると同世代の人達から「あーーー懐かしい!」などと言われるのでうれしいです。

 内容は自分でまとめるのは難しいのでWikiを引用します。王道なバトル漫画だと思います。

俗に言うバトルロイヤルであり、魔物たちは魔界の王を目指して最後の1人になるまで戦い合う。脱落の判断は基本的に魔物の本で判断され、魔物の本が燃えたり燃やされた場合、王になる権利が剥奪され、魔界に強制送還される。また、魔物は自分の本と波長のあった人間(「パートナー」や「本の持ち主」とも呼ぶ)が、本に心の力を込めて呪文を読むことでしか「」を使用できない。そのため、魔物の本は最重要アイテムであり、王になる上で魔物は本を守り、本を読めるパートナーを探し出して戦いに協力を求めることが最重要作業となる。

魔物やパートナーが自分の本を自分で燃やして棄権することはできず、逆に言えば自身の術で直接本を燃やして自滅することはない。本を燃やす以外にも、魔物が死ぬと脱落したと判断されるようだが、最終的に明確に死を描かれた魔物がいないため、魔物が死ぬとどうなるかは不明。

引用元:Wilipedia

 

 魔物だの呪文だのの単語を聞くと物騒な漫画のように思われますが、実際は下のような少年漫画っぽいイラストです。

  小さい子がガッシュでアニメ版での声優はチョッパーやコナンの光彦で有名な大谷育江さんです。

この漫画の魅力

 まずはギャグシーンと戦闘シーン、感動シーンが次々とやってくることです。戦闘シーンだと思ったら急にギャグシーンになったり、戦闘後に魔物が消えてしまう時には感動シーンになったりします。そのようなギャップばかりの漫画でもすんなり違和感なく読むことができるのは作者さんのセンスだと思います。人間ギャップ大好きだからね。


@金色のガッシュ!!27巻,雷句誠

f:id:Parco1021:20191103174114p:plain

上の2人が同じ漫画のキャラなの…ってなりますよね。ビッグ・ボインとかどのような発想で生まれたのかすごい気になります。 このようにキャラやシーンのギャップが多いのが第一の魅力です。

 次の魅力は音楽の良さです。カサブタガッシュを知らない人でも知っているのではないでしょうか。あと個人的なおすすめは「僕はここにいる」や僕のカラオケの十八番である「チチをもげ」、「ベリーメロン~私の心をつかんだ良いメロン~」です。また、僕が一番好きな曲は優しい風です。曲なので歌詞はないのですが、とてもいい曲です。是非聴いてみてください。どの曲もiTunesにはないのでCDのリンクを貼ります。

 他にも呪文が少年心をくすぐるようなものだったり呪文の語呂の良さだったり多くの魅力がありますが、キリがないのでここでやめます。

さいごに

 不慣れなもので上手くまとまらずすみません。今回は僕の好きな漫画であり、かなり思い入れのある「金色のガッシュ!!」を紹介しました。全33巻(完全版だと16巻)とそこまで長くないのでもしよろしければご覧になってください。原作と少しストーリーが異なり、日常シーンが多めなアニメもおすすめです。

おわり。 

 

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村 PVアクセスランキング にほんブログ村

【Django】DjangoでBootstrap4を導入する

はじめに

 これは自分用のメモです(定期)。なんか色々なサイト回っていたらよくわからなくなってしまったので自分用に残します。

導入

django-bootstrapというパッケージがあるのでそれを今回僕は使います。

pip install django-bootstrap4

 パッケージをインストールしたらsettings.pyを以下のように変更します。



    

    #~~中略

    

    INSTALLED_APPS = [

    'django.contrib.admin',

    'django.contrib.auth',

    'django.contrib.contenttypes',

    'django.contrib.sessions',

    'django.contrib.messages',

    'django.contrib.staticfiles',

    'manager',

    'bootstrap4',   #追加

]



     #~~中略

TEMPLATES = [

    {

        'BACKEND': 'django.template.backends.django.DjangoTemplates',

        'DIRS': [

            os.path.join(BASE_DIR,'templates'),

        ],

        'APP_DIRS': True,

        'OPTIONS': {

            'context_processors': [

                'django.template.context_processors.debug',

                'django.template.context_processors.request',

                'django.contrib.auth.context_processors.auth',

                'django.contrib.messages.context_processors.messages',

            ],

            'builtins': [

                'bootstrap4.templatetags.bootstrap4',   #追加

            ],

        },

    },

]

次に、templateでのbootstrapの呼び方は

{% bootstrap_css %}

とするだけです。僕はなぜか{{%  %}}としてしまっていて

Could not parse the remainder: '% bootstrap_css %' from '% bootstrap_css %'

というエラーが出ました。理解が浅いがゆえのミスです。

あとは通常通りにclass指定すればbootstrapを使うことができます。

さいごに

 パッケージを使う人や直接ダウンロードしてstaticフォルダに入れる人がいらっしゃったりしていてどれを参考にしたら良いかわかりませんでした。中には混合させたQiitaも存在したので気を付けたいと思いました。

 

参考

www.techpit.jp

 

おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村 PVアクセスランキング にほんブログ村

【Django】migrationしてもNo such columns ~

はじめに

 自分用のメモとして残しておきます。論理的な解決とはなっていないのでご容赦ください。

エラーと解決方法

 Djangoにおいてmodels.pyを書いて

python manage.py makemigration

↓↓

python manage.py migration

してからDBにinsertしようとしたら…

No such columns ~

??????カラムがない?????

migrationsディレクトリを確認したところきちんとmigtationファイルも作成されており、migrateも為されていることが確認できる。こんな時は一旦やり直すべしなのでmigrationファイルを消去して再度makemigrations→migrateしてみます。

No such columns ~

????????????カラムがないとのことなのでadminでテーブルの中身を確認してみる。admin.pyを以下のようにします。

from django.contrib import admin
from .models import DBname

admin.site.register(DBname)

そして/adminにアクセスし、ログインします。ユーザ名、パスワードなどを設定していない場合は

python manage.py createsuperuser

としてからユーザを作成してください。そして作成したテーブルを確認したところ、テーブルは存在していたのですが、カラムが存在していませんでした。原因はわからないのでもう少し大元からやり直してみます。db.sqlite3というファイルを削除し、またmigrationファイルおよびmigrateした後のファイルも削除する。そして再度makemagrationからのmigrateし、プログラムを動かすと想定通り動きました。

さいごに

 わけのわからないエラーでも英語の文献が多かったので自分用のメモとして残しておきます。まだ全然扱いなれていないけどLaravelに比べてDjangoは少しクセが強いな~って印象です。

 

おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村 PVアクセスランキング にほんブログ村

釣りに行ったら超危険な殺人魚が釣れたので食べる

はじめに

 前回ボウズだったのでリベンジということで朝5時に出発して釣りに行ってきました。今回も赤イソメで餌釣りです。

 

f:id:Parco1021:20191028154200j:image

前回↓↓

parco1021.hatenablog.com

釣果

 今回はボウズにならずに済みました!!!!釣果です!

f:id:Parco1021:20191028154323j:image

  • ダツ1匹
  • カワハギ1匹
  • ベラ3匹
  • キス10匹
  • フグたくさん

 

 

…嘘です。実際は↓↓です。

f:id:Parco1021:20191028154310j:image

  • ダツ1匹
  • カワハギ1匹
  • ベラ3匹
  • キス10匹
  • フグたくさん

流れが速かったり釣り場所が他の方に取られていたりなど思っていたよりも釣れませんでした。サビキでやっていた方はサバを釣りまくっていたので作戦負けです。キスは近くの魚屋さんで10匹400円弱で買いました。また、ベラは小さくてリリースサイズですが、釣れた時に針を飲んでいてどうしようもなかったのでいただきます。

やはりこの中で目立つ魚は「ダツ」でしょう。これは実際に餌釣りで釣ったわけではなく友達のジグと僕の仕掛けが絡まってごちゃごちゃしている時に僕の仕掛けに引っかかっていました。その時の画像です。イソメが写っているので虫等苦手な方は注意してください。

f:id:Parco1021:20191028184633j:image

 

御覧の通り尖った顎が特徴です。この魚による事故で命を落としている方が多くいるほどの危険魚です。

ダツについて

https://www.zukan-bouz.com/public_image/Fish/359/Thumb630/datu.jpg

引用元:https://www.zukan-bouz.com/syu/%E3%83%80%E3%83%84

捕食の際は小魚の鱗で反射した光に敏感に反応し、突進する性質がある。暗夜にダツが生息する海域にライトを照らすとダツが激しく突進してきてヒトの体に突き刺さることがあるので夜間の潜水は特に注意が必要である。実際にダツが人体に刺さって死傷する事故も発生しており、沖縄県の漁師には鮫と同じくらいに危険視されている。

参照元:Wikipedia

 いや、怖すぎ…。例えば夜釣りをしている時にヘッドライトをつけたまま海面を覗くとダツが餌と勘違いして猛スピードで突っ込んでくるような事例もあったらしいです。僕の仕掛けに引っかかったのは友達のジグに反応し突っ込んできたからだと思われます。実際釣りの時もジグなどで釣れることが多いそうです。気をつけよ。

クッキング

 せっかくダツも釣れたので食べてみようと思います。味はそこまで美味ではないらしいですが、刺身や唐揚げ、塩焼きで食べられているそうです。今回はキスも釣った(?)ので友達と話し合い、例のごとく唐揚げと天ぷらと塩焼きにして食べようと思います。

塩焼き

  • キス3匹
  • ダツ1匹

唐揚げ

  • キス2匹
  • ベラ3匹
  • カワハギ1匹

天ぷら

  • キス7匹

 

f:id:Parco1021:20191028154340j:image

キスは安定に美味しく、カワハギ、ベラの唐揚げもとても美味しかったです。肝心のダツですが調べたままって感じでした。特別美味しいわけでもなく決して味が悪いわけでもなく…って感じです。魚をつまみに飲むビールは美味しさの極みでこれのために釣りに行ってると言っても過言ではありません。

缶の蓋を取るとウド〇木さんに見えるそうです。

f:id:Parco1021:20191028154349j:image

さいごに

 今回も釣りに行った記事を書きました。日頃PCでカタカタしているのでこういった自然に触れることは息抜きにいいですね。

 

おわり。

もしよければ↓ぽちっと↓お願いします。

ブログランキング・にほんブログ村へにほんブログ村 PVアクセスランキング にほんブログ村

スポンサーリンク