John(筋肉)の備忘録的な何か

備忘録的な何かであり、進捗そのものでもあるよ!!怖い人は見ないで!

Python、Pillowで画像の最頻値を取る!

どうも、Johnです。 テスト期間なんですが、進捗出したい欲がすごかった上、インターンエントリーシートに「自分ブログやってまっせ!」と言ってしまったので書きたいと思います。

何やったのか

今回画像の最頻値を取るのですが、実はブログ始めたての頃に一度やっています。

john-bardera.hatenablog.com

このときはPython始めたてで何もわかんなかったので、入力画像3枚でしかできませんでしたが、今回は何枚でも出来るようにしました。

ソース(適当)

numpy使いてぇ、ってなって書き始めたのにそうでもなくなって悲しい。 あと英語できないのでネーミング勘弁して。

# coding:utf-8
import statistics as st
from PIL import Image, ImageDraw
import numpy as np

def stmode(matrix):
    #最頻値が存在しない時、1番はじめの画像に準ずる
    try:
        mode=st.mode(matrix)
    except Exception:#statistics.StatisticsError
        mode=matrix[0]
    finally:
        res=(int(mode[:3]), int(mode[3:6]), int(mode[6:]))
        return res

images=[]
almost_images=13
num=0
while num < almost_images:
    image=Image.open("./tikuma/"+str(num)+".JPG", "r")
    #imagesに各画像のRGB値が入れられる
    images.append(np.array(image))
    if not num:
        x_range=image.convert("RGB").size[0]
        y_range=image.convert("RGB").size[1]
    num+=1

#白いキャンバス作成
target=Image.new("RGB", ((x_range, y_range)), (255, 255, 255))
white_canvas=ImageDraw.Draw(target)

y=0
while y < y_range:
    x=0
    while x < x_range:
        before_mode=[]
        num=0
        while num < almost_images:
            #各画像の[x][y]の要素(例,[1,14,514])を9桁の文字列(例,"001014514")に変換する
            before_mode.append(str(images[num][y][x][0]).zfill(3)+str(images[num][y][x][1]).zfill(3)+str(images[num][y][x][2]).zfill(3))
            num+=1
        #その最頻値を出し、白いキャンバスに色を置いて行く
        white_canvas.point((x, y), stmode(before_mode))
        x+=1
    y+=1

target.save("./tikuma/ans/ans"+str(almost_images)+".jpg", "JPEG", quality=100, optimize=True)

入力に使った画像

可愛いでしょ?

☆とGET、帰ボタンが違うので、これの除去を目標としました。

こんな感じに0~13.JPGとして使ってます。 f:id:julia-bardera-jb:20170730001714j:plain

結果

入力3枚 f:id:julia-bardera-jb:20170730000505j:plain 入力5枚 f:id:julia-bardera-jb:20170730000554j:plain 入力7枚 f:id:julia-bardera-jb:20170730000604j:plain 入力9枚 f:id:julia-bardera-jb:20170730000617j:plain 入力11枚 f:id:julia-bardera-jb:20170730000626j:plain 入力13枚 f:id:julia-bardera-jb:20170730000636j:plain

ちなみに処理にかかった時間は入力3枚~7枚までは2空3分。 11枚や13枚になると4分30秒と言ったところでした。

まとめ

艦これ楽しい!!!!!

まとめ改

GETと帰ボタンが枚数多くするごとにずれていっていたが、おそらく入力誤差であろう。もしかしたらこのぐらいの小さい変化であったら、平均を取った方がきれいになるかもね。

次からはちゃんとnumpy使うもん!

舞鶴高専カンファに行ってきました。(今更)

どうもJohnです。(114514年ぶりぐらいのブログ更新)

今回、7月1日に行われた舞鶴高専カンファに登壇者として参加しました。

何をやらかしたか

  • ガチプロに「#john_is_pro」って煽られた
  • ひやかしさん(@nnsnodnb)に新しい黄色の魔剤もらった
  • クソ弱い行動しかしなかった
  • みすたーさん(@FineSight_Mr)にコーヒー豆をプレゼントした
  • 900MBもあるスライドを発表した
  • 舞鶴高専の隣のキャンプ場に泊まった
  • そんでもってBBQをした
  • しかも徹夜で麻雀した
  • 麻雀の実況を「#kosenconf」でした
  • 遠足に参加した
  • ひやかしさんのブログの構成をパクった

どんなLTしたか

入力画像を1ピクセルづつ明度を測って、その明度の文字を出力していって画像を文字で表そう、、というプログラムの紹介LTをしました。筋肉っ!

スライドも全て文字で表したのでスライドが900MBを超えました。

1ピクセルに対し、15*15ピクセルの文字に置き換えるので色にもよりますが1スライド50MBぐらいになりました。すごーい!!

サンプル画像、2*2ピクセルに1文字となってます。大体6~15MBです。興味のある方はダウンロードしてアップで見ていって下さい。(ちなみにはてなだと20MB以上の画像は無理っぽいですね。。)

f:id:julia-bardera-jb:20170714220950j:plain

f:id:julia-bardera-jb:20170714221218j:plain

f:id:julia-bardera-jb:20170714222500j:plain

まぁ前述の通り、スライド資料が900MBほどあったので共有はしないでおこうかなと考えています。見たい人は僕に会いに来て。

最後に

自分も高専カンファ開きたい!!ってなったので1月上旬あたりを目標に開催予定です!大阪のど真ん中でおっきく行う予定ですので1月上旬は開けておくようお願いします。

あと舞鶴高専カンファ、運営お疲れ様でした!!

ところで、画像アップロードしながら書いてるんですが、10分くらいステータスバーが動いてないような。。っていうかダメだ。解像度下げたのをまた別にアップロードしよう。

深夜テンションでどうでもいいプログラム書いた。

皆さん、こんにちは。John(🍅)です。

少しブログを読み直してみると驚愕の真実が明らかになりました。

 

これです

f:id:julia-bardera-jb:20170501031007j:plain

 

インデントの消失したPythonのコードです。というかもはやPythonじゃない。

はてなの設定なのかどうなのか、空白が引用では認識されないのかなんなのか。

 

そこで

半角空白4つを全角空白2つに変換するプログラムを書きました。

 f = open("target.py", "r")
lines = f.readlines()
for line in lines:
  x = 0
  while True:
    max_x = len(line.split("半角空白4つ"))
    if max_x == x:
      break
    elif not line.split("半角空白4つ")[x]:
      print("全角空白2つ", end="")
    else:
      print(line.split("半角空白4つ")[x], end="")
    x += 1

半角空白4つを見つけると全角空白2つに入れ替えてくれます。

 

最後に

置換使えよってなった。

いまブログを書いてて思いました。なぜわざわざプログラムを書いたのか。

深夜テンションで書いたけど何だこれ。

PythonでやるTAK関数の高速化

ほげ!John(())です。

Lispの怖い人、@fu7mu4さんからご飯を頂いたのでその消化を行っていきたいと思います。(めっちゃほったらかしてた)

 

ご飯内容

gist.github.com

 

そういうことです。ありがてぇ。。

 

とりあえずPythonで実装してみた

def tak(x, y, z):
  if x <= y:
    return y
  else:
    return tak(tak(x - 1, y, z), tak(y - 1, z, x), tak(z - 1, x, y))

 そのままですが。

 

そして最後に

 print(tak(12, 6, 0))

 を付け加えたこのプログラムの実行時間。

$ time python3 tak.py
12

real 0m4.960s
user 0m4.776s
sys 0m0.032s

 となりました。

 

高速化

 結果を先に

$ time python3 fast_tak.py
fast_tak.py:5: SyntaxWarning: name 'tak_dict' is used prior to global declaration
global tak_dict
12

real 0m0.499s
user 0m0.112s
sys 0m0.028s

 怒られてるけど、解決策わかんないです。

コードはこんな感じ。

def tak(x, y, z):
  try:
    tak_dict
  except NameError:
    global tak_dict
    tak_dict = {}

  if str(x) + "," + str(y) + "," + str(z) in tak_dict:
    return tak_dict[str(x) + "," + str(y) + "," + str(z)]
  elif x <= y:
    return y
  else:
    first = tak(x - 1, y, z)
    tak_dict[str(x - 1) + "," + str(y) + "," + str(z)] = first
    second = tak(y - 1, z, x)
    tak_dict[str(y - 1) + "," + str(z) + "," + str(x)] = second
    third= tak(z - 1, x, y)
    tak_dict[str(z - 1) + "," + str(x) + "," + str(y)] =third
    tak_dict[str(first) + "," + str(second) + "," + str(third)] = tak(first, second, third)
    return tak_dict[str(first) + "," + str(second) + "," + str(third)]

print(tak(12, 6, 0))

辞書使ってすでに計算してるのを省略した。 

汚いのは知ってるけど、Pythonわかんない僕にはこれしか思いつかなかったんだ。。

 

でもこれで4.5秒位早くなった!わっしょい!

 

最後に

かまってくれる方、ありがとうございます。

ゆっくりながらも頑張っていくので構い続けて下さいな!

Raspberry Pi3のWifi、固定IP設定からのssh接続!

こんにちは。John(None)です。

前回の続き、Raspberry Pi3の設定について行っていきたいと思います。

 

Wi-fiの設定

こんなコマンドを実行してくださいな。

sudo sh -c 'wpa_passphrase SSID PASSWORD >> /etc/wpa_supplicant/wpa_supplicant.conf' 

 SSID、PASSWORDのところには使いたいWi-fiのを各自当てはめて下さい。

このコマンドは管理者権限でwpa_passphrase(passwordを暗号化してくれていい感じにしてくれるコマンド)を実行し、その出力結果を最後の名前長いファイルに書き込んでる感じです。

 

すると名前長いファイルの中身はこんな感じになります。

 country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="SSIDやで"
#psk="暗号化してないパスワードやで" ←消しましょう
psk="暗号化したパスワードやで"
}

 そんで上にも書いてますが生のパスワードは消しときましょう。

 

Wi-fiの設定はこれで終わりですね。僕はこれだけじゃ使えなかったですが、他の人の情報によるとこんな感じらしいですね。

その僕の経験はどれが正解かわからないくらい試したんで、別記事にします。ややこしくなりそうなので。

 

固定IP設定

まず、/etc/network/interfaces に書き込みましょう!というのをよく見ますが、違うようです。(コメントアウトで注意書きがある)

/etc/dhcpcd.confを変更します。

 

interface wlan0ってとこの後ろに(なければinterface wlan0ごと記載)

static ip_address=x.x.x.x/24 #sshの時使いたいポートで

static routers=x.x.x.x #Wi-fiのやつ

static domain_name_servers=x.x.x.x #上に同じ

と、書いて終わりでっせ。

 

適用するには再起動するという方法もありますが、

sudo ifdown wlan0

sudo ifup wlan0

とする方法もあります。

 

そしてpingとか、apt-get updateとかやって試して下さい。

 

終わりに

なんか間違ってるかもしれませんがだいたいこんな感じで設定しました。

 

手間取った話はまたつぎの記事にしたいと思います。

次の記事、不毛というか情報の整理がしたいって感じだけどめんどくさいのしません。

 

Raspberry Piの活用法を考え中です。どしどし@John_barderaまでご応募下さい。楽しいことがしたいです。

ちなみに今はフォローしている人の画像ツイートの画像を自動ダウンロードするプログラムを稼働させる計画を立てています。

 

今最後と思ってこの記事を読み直したんですが、堅苦しい上内容無いというあれがあって悲しい次第です。頑張ります。

Raspberry Pi3をシリアルコンソールで初期設定!

皆さん、ごきげんよう。John(われわれはかしこいので)です。

けものフレンズ良かったですね。僕はコウテイペンギンハシビロコウあたりが好きです。好き。

 

今回、Pythonで常時稼働させたいプログラムを考えついたので、怖い怖いと避けてきたRaspberry Piを触ろうと思った次第です。

 

普段使いはリモートデスクトップでやればいいとして、初期設定はどうしよう。。とぼやいてたら、シリアルコンソールというものがあるよ!と天からお導きがあったので、理解はしてないですが記事にして叩かれないか心配。

備忘録だから!!

 

シリアルコンソールって何?

僕も知らないけどすっごい素敵な何か。結婚してほしいほどではない。

ディスプレイ無しでRaspberry Piの初期設定が出来るよ!!

 

必要なもの(というか僕が用意したもの)

・Raspberry Pi3

microSDカード

・AC電源アダプター(5V 3.0A)&ケーブル

・USB-TTL~え~、、これです。

Amazon | Raspberry Pi ラズベリーパイ用の USB-TTLシリアルコンソールのUSB変換COMケーブルモジュールのケーブル | GAOHOU | USBケーブル通販

・ノートパソコン(Tera Term入り)

以上です。

 

手順

microSDにOSを入れます

まずOSをダウンロードします。

Download Raspbian for Raspberry Pi

そんで解凍してディスクイメージをmicroSDに書き込みます。

僕はWin32DiskImagerで書き込みました。

 

設定を弄る

書き込みが終わったらその中にあるであろう、config.txtに

 dtoverlay=pi3-miniuart-bt

cmdline.txtに

dwc_otg.lpm_enable=0 console=tty1 console=serial0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

と付け足します。これは呪文です。Raspberry Pi3にのみ、必要です。

(Bluetoothやらを無効化するだかなんだか)

 

いざ接続

microSDをぶっ刺して、USB-シリアル変換ケーブルを接続します。

f:id:julia-bardera-jb:20170406010319j:plain

 

6pinには多分どのケーブルでも黒のGND。

8pinにはUART_RXD。

10pinにはUART_TXD。

UART_RXD、UART_TXDはケーブルの色が多分違うので各自調べて。

 

ドライバの設定とか

バイスマネージャーからシリアル変換ケーブルの探し出して、

f:id:julia-bardera-jb:20170406011329j:plain

な感じに設定!!

 

これでドライバをいい感じに設定してTeraTermでシリアル接続するんですが、、

なんかケーブルの方で問題が発生してるらしく接続できませんでした。

そこでドライバを古いやつにしたら動いた。よかった。

同じ症状の人ためして。

 

これでRaspberry Piの電源入れたら、TeraTermがほげ~って色々出して、「Loginしろよオラッ!」ってなるので成功です。

 

終わりに

実は英語できないマンなので、Rasberry piだと思ってました!!

なので、、

User: pi

Password: rasberry

として延々と入れませんでした。

 

これからもWifiにつながらないなどの問題が起こったので記事にしたいと思っていますが今日はこのへんで。

 

Tak関数の高速化の宿題を頂いてるので、その記事もぼんやり書こうと思っています。ほげ。

京都まで自転車で行った話

どうもこんにちは。John(任意)です。

今回自転車で京都まで行ってみました!(スタートは明石高専)

その話をまとめ上げたいと思います。

 

経緯

自転車で旅って面白くね??

それが始まりでした。というか経緯なんてこれだけです。

たまたま京都に行く用事があったので、どうせなら自転車で!!って感じです。

 

僕の愛車(ママチャリ)

f:id:julia-bardera-jb:20170331171540j:plain

 

どれ位かかったのか

合計走行距離(往復) 約270km

合計走行時間(往復) 約30時間

マジパネェ。。

 

大阪で行き帰り1泊ずつして、京都でも1泊。3泊4日の旅になりました。

 

道のり(適当)

f:id:julia-bardera-jb:20170331173238j:plain

 

1日目

生活リズムが荒ぶってたので、出発は遅めで8時。

明石海峡大橋

f:id:julia-bardera-jb:20170331173847j:plain

すごく、、おっきいです。。

須磨海浜公園

f:id:julia-bardera-jb:20170331173927j:plain

日曜なのでリア充が多くて自転車を押してた思い出。。

甲子園

f:id:julia-bardera-jb:20170331174117j:plain

野球知らないからあれだけど、高校野球か何か?

淀川

f:id:julia-bardera-jb:20170331174215j:plain

あれなんですね。

軽巡洋艦大淀の聖地じゃないんですね。

ちなみにこのあたりで雨が降ってきてます。

 

そんで大阪市に到着、知り合いがいたので止めてもらって~って感じでした。

この日で83km、9時間ぐらいでしたね。

 

2日目

京都へ向かうべく、朝5時に出発。

道中は特に載せる写真もないです。

通天閣は忘れてました。

京都駅

f:id:julia-bardera-jb:20170331174727j:plain

10時40分くらいについてましたね。友人たちとご飯の約束してたので良かった。

魔剤で祝杯

f:id:julia-bardera-jb:20170331174857j:plain

普段飲まない青色をチョイス。

僕はやはり白が好きだった。。

ちなみに下に見える緑のもふもふは寝袋です。

 

大阪-京都間は山が多くて死にそうになりました。

53kmぐらいでしたね。

 

京都でわいわい

言うなれば合宿。近畿地区の高専生が集まる交流会です。

高専生が集まって騒ぐとなればこれ。

魔(剤)TEN(GA)

f:id:julia-bardera-jb:20170331180240j:plain

部屋が魔剤臭くなりました。

魔TEN楼はこの後も成長を続けました。というか皆徹夜してたし。

 

3、4日目(帰り)

帰りは天気が良かったのもあり色々適当に撮ってきました。

(スマホの低画質で尚且つボケてたりはする)

 

改めて淀川

f:id:julia-bardera-jb:20170331180834j:plain

軽巡洋艦淀っているのかな。

f:id:julia-bardera-jb:20170331180851j:plain

早いなぁ、きれいだなぁ、と思って。(健全アッピル)

例のアレ

f:id:julia-bardera-jb:20170331180900j:plain

生では初めて見ました。

老祥記の豚饅

f:id:julia-bardera-jb:20170331180903j:plain

f:id:julia-bardera-jb:20170331180909j:plain

お昼休憩にね。おいしいよね。

ポートタワー

f:id:julia-bardera-jb:20170331180917j:plain

ありえん、ボケみがやばい。

そんでもって改めて明石海峡大橋

f:id:julia-bardera-jb:20170331180933j:plain

やっぱり、、すごく、、おっきいです。。

お昼ごはん(2回目)

f:id:julia-bardera-jb:20170331180942j:plain

どんぶり勘定なんだけど、あのコストパフォーマンスはどうなってるんだろうね。

結構おすすめ。瑞鳳のだし巻きって感じのだし巻き。好き。たべりゅ~!!

 

最後に

ママチャリだったこともあり、山道はすごい辛かったね。

でもそれ以上に僕一人だけで行ったので、娯楽がなかったのが辛かった。

風景をみるか、足の痙攣を感じるか、幼女に手を振るか、「ようこそジャパリパークへ!」を歌うか。。

だから誰か連れていきたい感じはある。

 

それと筋肉痛がやばい。1.5日ぐらいが経過したけど、まだ足が痛い。というか足が太くなった気がする。

なのであまりおすすめはしないですが、僕はまたやるつもりです。

よろしくお願いします。(?)