ゆるふわめも

ただのメモです。

discordで自分のいるチャンネルにyoutubeで見つけた音楽を流したい

タイトル通りのことがした買った。

Dynoボットを自分のサーバーに招待して解決。 以下のページの左上の「invite Dyno」で自分のいるサーバーに招待します。

@dyno play https://www.youtube.com/watch?v=e9yZkmgE-m8とテキストチャンネルに書き込むと、自分のいるボイスチャンネルで音楽を流してくれます。

他のコマンドは以下を参照、便利ですね。

pythonでランダムに日本語の単語列を取得

データ生成に用いたかったので。 日本語ワードネットのデータベースを利用しています。 ワードネットについては以下のリンクを確認してください。

日本語 Wordnet

コード

import sys, sqlite3
from collections import namedtuple
from pprint import pprint

conn = sqlite3.connect("./wnjpn.db")
cur = conn.execute("select * from word where lang = 'jpn' ORDER BY RANDOM() LIMIT 100;")
wordlist = [ record[2] for record in cur.fetchall()]

print(wordlist )

出力

['ハッセル', 'トラノオ', 'ジャクソンビル', 'アトリプレックス属', '邪径', '呼び出す', '卵焼', '後で', 'パスポート', 'とろとろ', 'ガンボージ', '裁く', 'セイント', '核抑止', 'クチュリエ', '惑乱', '節足動物', '旅', '風力', '強姦', '懇情', '論決', '正当付ける', 'ジョガー', '想察', '捩じ回す', '膏薬', '弄る', 'つるつる滑ること', '参', 'マーロウ', '乗越す', '腋窩', '運', 'スピーカ', '竜骨座', '強引', '妄想癖', 'フェンダー', '創造者', 'キー', '張付ける', '徹底的', 'オランダ領アンティル', '人家', 'チェンストホーバ', 'リカルド', '激励して', '模様替', 'コスト', 'アメリカ穴熊', '超常的', 'デーツ', '勇敢', 'ケント', '石', '呼ばう', '店賃', '根絶', 'ルリノジコ', 'アンモニア尿', '逐次', '創成', 'カール・マリア・フォン・ウェーバー', '喰余り', 'エキゾセ', '粉末', '輪郭', '伝導体', '農企業', '冷こい', 'ショーマンシップ', '散り散り', 'ユージーニア', '間仕切', '仕果てる', '国際組織', '差し障りのない', '公正', 'くっちゃべる', 'セルローズ', '免疫原性', '千代に八千代に', '呼びよせる', 'アラブ連盟', '撫でさする', '哀憫', '練歯磨き', '監視', '填まる', 'シンクロトロン', 'ショービズ', '狙い', '式例', '仕える', '上手さ', 'ローマカトリック', '突切る', '瑣末', 'セービンワクチン']

pythonで画像に日本語をプロットする

opencvputtext関数では(手間をかけないと)できないらしいのとフォントの選択肢が少ないので、付け焼き刃ですが一時的にmatplotlibのfontpropertyから日本語のフォントを指定してプロットしました。

コード

from matplotlib.font_manager import FontProperties
fp = FontProperties(fname=r'/Library/Fonts/Osaka.ttf', size=14)

def PutText(N=1600, rseed=42, moji1='ああ', moji2='ああ', labelnum=10):
    fig, ax = plt.subplots(figsize=(4, 4))
    ax.axis('off')
    ax.text(0.5, 0.7, moji1, va='center', ha='center', size=35, fontproperties=fp)
    ax.text(0.5, 0.2, moji2, va='center', ha='center', size=35, fontproperties=fp)
    fig.savefig('temp/temp.png')
    plt.close(fig)
    
    data = cv2.imread('temp/temp.png')
    return data

plt.imshow(PutText())
moji.shape

出力

f:id:misos:20180430105452p:plain

フォント一覧の取得

フォントを簡単に切り替えつつ文字をプロットしたいので

import matplotlib
matplotlib.font_manager.findSystemFonts()

としてフォント一覧をリストで取得。

['/usr/X11/lib/X11/fonts/OTF/SyrCOMMalankara.otf',
 '/Library/Fonts/DIN Condensed Bold.ttf',
 '/usr/X11/lib/X11/fonts/OTF/SyrCOMBatnan.otf',
 '/Library/Fonts/Tahoma Bold.ttf',
 '/Library/Fonts/Andale Mono.ttf',
 '/usr/X11/lib/X11/fonts/OTF/SyrCOMTalada.otf',
 '/Library/Fonts/Impact.ttf',
 '/Library/Fonts/Hoefler Text Ornaments.ttf',
 '/Library/Fonts/STIXGeneralBolIta.otf',
 '/Library/Fonts/STIXSizFourSymBol.otf',
 '/Library/Fonts/Osaka.ttf',
 '/Library/Fonts/Trebuchet MS.ttf',
 '/Library/Fonts/儷黑 Pro.ttf',
 '/Library/Fonts/Yu Gothic Bold.otf',
 '/System/Library/Fonts/Apple Braille Pinpoint 6 Dot.ttf',
 '/Library/Fonts/Arial Bold Italic.ttf',
 '/usr/X11/lib/X11/fonts/OTF/SyrCOMMardin.otf',
 '/Library/Fonts/Bradley Hand Bold.ttf',
 '/Library/Fonts/Microsoft Sans Serif.ttf',
 '/Library/Fonts/Luminari.ttf',
 '/Library/Fonts/Verdana Bold Italic.ttf',
 '/Library/Fonts/STIXNonUniBolIta.otf',
 '/Library/Fonts/Trebuchet MS Bold Italic.ttf',
 '/System/Library/Fonts/Apple Braille Outline 6 Dot.ttf',
 '/Library/Fonts/WawaTC-Regular.otf', ...]

opencvで単一色の画像をランダムに生成

コード

import cv2
import numpy as np
import matplotlib.pyplot as plt
import numpy as np


random_color = list(np.random.choice(range(200, 255), size=3))
random_size = list(np.random.choice(range(1600, 2200), size=2))
image = np.zeros((random_size[0], random_size[1], 3), np.uint8)
image[:] = random_color

plt.figure(figsize=(20, 20))
plt.imshow(image)
plt.title("size:"+str(image.shape), fontsize=20)

出力

f:id:misos:20180430103221p:plain

pythonでワードファイル(.docx, doc)をpdfに変換

python-docxライブラリ等でできるかと少し調べましたが、できなかったのでLibreOffice経由で無理やり変換。 Windowsの時はWordを、UbuntuならLibreofficeを呼び出せばいいと思います。

ソースコード

import subprocess
import sys

args = ['libreoffice', '--headless', '--convert-to', 'pdf', '--outdir', 'pdf_dir', 'docx_dir/demo.docx']
process = subprocess.call(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, timeout=None)

補足

MacOXの場合は libreofficeの部分が '/Applications/LibreOffice.app/Contents/MacOS/soffice' みたいな感じになると思います。フォルダ名などは適宜変更してください。