Linux(Ubuntu16.04)でのプリンタの設定方法&コマンドラインでの印刷の仕方
実験用のために小型フォトプリンタCP710を1000円で購入。安かった。
このシリーズは外付けバッテリで動くのが個人的には魅力的。
外付けバッテリ: Amazon CAPTCHA
やりたいこと
Linux PCでプリンタを使いたい。
コマンドラインで任意のタイミングで印刷したい!
参考HP
ドライバの入手先
公式HPをチェック。なければ↓
Gutenprint Printer Driversをチェック。なければ↓
openprintingでドライバインストール
上記から 5.2.7 (DEB for LSB 3.2) を選択し、ダンロード
openprinting:database:driverpackages [Linux Foundation Wiki]
に従って
sudo apt-get install lsb
$ dpkg -i "name of the .deb package"
でインストール完了
設定前のインストール
sudo apt-get install cups
sudo apt-get install smbclient
プリンタの追加・設定
CUPSでの設定
が参考になりました。ありがとうございます!
CUPSで印刷トライ
CUPSを使ったUbuntu16.04LTSでのプリンタの設定
上記に従って登録後、下記写真のMaintenance -> Test Print Pageを選択
で印刷完了 ↓
設定の確認
Test Printできたプリンタ設定がデフォルトのプリンタ設定になっているか(左上のチェックがついてるか)を確認。
なっていない場合は右クリック->デフォルトに設定で変更。
コマンドラインで印刷
【Linux入門】しっかりわかる!プリンタ管理と印刷コマンドがわかりやすい。感謝です。
ここまでできていると、印刷したい写真ファイル名がtest.pngだとすると、以下lpコマンドで
$ sudo lp test.png
印刷ができる〜!
参考:
所感
はじめてLinuxでプリンタの設定や印刷をしてみた。コマンドラインで印刷できたし、いろいろな用途に使えそう♪
おまけ
以下のシステム設定で素直に設定した場合だと、プリンタがすぐ「一時停止」状態になり、印刷出来なかった。
システム設定
システム設定 -> プリンタ で以下のような画面になっていたらCP710が正しく認識されている。
エラー時の対処
もし、追加時に"client-error-not-possible"がでたら...
- sudo cp gutenprint52+usb gutenprint52usb
参考: 14.04 - Installing CP400 printer gives 'client-error-not-possible' error - Ask Ubuntu
Raspberry Pi Zero W で遊んでみる(3)~アクセスポイント化~
やりたいこと
WIFI環境がない場所でもひとつのraspi zero wをアクセスポイントとして通信がしたい
なので、raspi zero w をアクセスポイント化にトライ
教科書
MACアドレスを調べる
pi@raspberrypi:~$ iw dev
udev ruleを追加
ファイルを作成
$ sudo nano /etc/udev/rules.d/70-persistent-net.rules
以下の"b8:27:eb:ff:ff:ff"の部分を先に調べたMACアドレスに書き換えて上のファイルに記述
SUBSYSTEM=="ieee80211", ACTION=="add|change", ATTR{macaddress}=="b8:27:eb:ff:ff:ff", KERNEL=="phy0", \ RUN+="/sbin/iw phy phy0 interface add ap0 type __ap", \ RUN+="/bin/ip link set ap0 address b8:27:eb:ff:ff:ff"
Dnsmasq and Hostapdのインストール
$ sudo apt-get install dnsmasq hostapd
Dnsmasq and Hostapdのためのファイル設定
3つのファイルを書き換える
1. /etc/dnsmasq.conf
interface=lo,ap0 no-dhcp-interface=lo,wlan0 bind-interfaces server=8.8.8.8 domain-needed bogus-priv dhcp-range=192.168.10.50,192.168.10.150,12h
2. /etc/hostapd/hostapd.conf
以下のssidとpassphraseを自分の好きな名前に設定する。" "で囲む必要はない。
ctrl_interface=/var/run/hostapd ctrl_interface_group=0 interface=ap0 driver=nl80211 ssid=YourApNameHere hw_mode=g channel=11 wmm_enabled=0 macaddr_acl=0 auth_algs=1 wpa=2 wpa_passphrase=YourPassPhraseHere wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP CCMP rsn_pairwise=CCMP
3. /etc/default/hostapd
DAEMON_CONF="/etc/hostapd/hostapd.conf"
Interfaces Fileの修正
1. /etc/wpa_supplicant/wpa_supplicant.conf
使用できるWIFIがあればそのWIFIのSSIDとパスワードを設定
country=JP ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid="YourSSID1" psk="YourPassphrase1" id_str="AP1" }
2. /etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8) # Please note that this file is written to be used with dhcpcd # For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf' # Include files from /etc/network/interfaces.d: source-directory /etc/network/interfaces.d auto lo auto ap0 auto wlan0 iface lo inet loopback allow-hotplug ap0 iface ap0 inet static address 192.168.10.1 netmask 255.255.255.0 hostapd /etc/hostapd/hostapd.conf allow-hotplug wlan0 iface wlan0 inet manual wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf iface AP1 inet dhcp
起動時の設定
/home/piに以下シェルスクリプトを作成
pi@raspberrypi:~$ cat ./start-ap-managed-wifi.sh #!/bin/bash sleep 30 sudo ifdown --force wlan0 && sudo ifdown --force ap0 && sudo ifup ap0 && sudo ifup wlan0 sudo sysctl -w net.ipv4.ip_forward=1 sudo iptables -t nat -A POSTROUTING -s 192.168.10.0/24 ! -d 192.168.10.0/24 -j MASQUERADE sudo systemctl restart dnsmasq
実行権限を付加
pi@raspberrypi:~$ chmod +x ./start-ap-managed-wifi.sh
起動時に実行するために、cronに設定
$ sudo crontab -e
以下を最終行に追加
@reboot /home/pi/start-ap-managed-wifi.sh
最後に...
リブート!
これで母艦PCのwifiを見ると設定したSSIDが見えるはず!!
コメント
おまけ
sshのホスト名を変更する方法
$ sudo -e /etc/hostname 変更する $ reboot
再起動するとssh -X pi@変更後のホスト名.localで接続可能
udevについて
有線LANを接続する方法
USB OTG
名前解決
参考
Raspberry Pi Zero W で遊んでみる(0)~インストール・設定~
やりたいこと
raspberry pi zero w のインストールや設定方法をまとめる
使っているバッテリーはこれ👇でとても小さい
ポータブル充電器02 通販 | au オンラインショップ | スマホ・携帯電話向けオプション品
もっと小さいバッテリーを知ってる方いたら教えてください> <
pin配置
OSダウンロード
OSの書き込み
Etcher <- 簡単おすすめ
- うまく行かない時はカードリーダを交換してみよう
Ubuntuで、RaspberryPiのOSをSDカードに書き込む | Hornet|静岡拠点のWeb、ホームページ制作
設定教科書
wifi設定
SDカード内のbootディレクトリを探し、以下のファイルをboot直下に作成
- emacs -nw /Volumes/boot/wpa_supplicant.conf
country=JP ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid="your-SSID" psk="your-passphrase" }
このSDを挿すとWIFIに接続される
USB経由でインターネット接続したいとき
参考: Raspberry Pi Zero(W)のセットアップ
bootドライブ内のcmdline.txtに "modules-load=dwc2,g_ether" を追加します。
rootwaitとquietの間です。エディタはvimを使っていますが、適宜変えてください。
次に、config.txtの末尾に"dtoverlay=dwc2"を追加します。
$ echo "dtoverlay=dwc2" >> /Volumes/boot/config.txt
例
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait modules-load=dwc2,g_ether quiet init=/usr/lib/raspi-config/init_resize.sh quiet splash plymouth.ignore-serial-consoles
SSH対応
設定
touch /Volumes/boot/ssh
ログイン
ssh -X pi@raspberrypi.local
初期ユーザーはpi、初期パスワードはraspberryになります。
wifi安定化
参考:
rfkillフラグのリセット問題が発動すると面倒なので、念のため。
$ sudo apt install rfkill
$ sudo vi /etc/rc.local
下記を追加。
#By default this script does nothing.
/usr/sbin/rfkill unblock wifi
初期設定
$ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get install tmux emacs $ sudo raspi-config
スペースキーで選択
"4. Localization Options"から"11. Change Locale"を選択して、"ja_JP.UTF-8"を有効に。
同様に"4. Localization Options"から"12 Change Timezone"。"Asia"、"Tokyo"と順にたどっていく。
参考
Raspberry Pi Zero W で遊んでみる(2)~ROS KINETIC INSTALL~
やりたいこと
ラズパイゼロにROSを入れる
教科書
ROSではじめるホビーロボット#06がほしい。手に入る方法ないのかな。。。
インストール
$ sudo apt-get update $ sudo apt-get install -y build-essential gdebi python-defusedxml libboost-all-dev liblog4cxx-dev libconsole-bridge-dev $ sudo pip install netifaces $ mkdir -p ~/tmp $ cd ~/tmp $ wget https://github.com/nomumu/Kinetic4RPiZero/releases/download/v_2017-10-15/rpi-zerow-kinetic_1.0.0-1_armhf.zip $ unzip rpi-zerow-kinetic_1.0.0-1_armhf.zip $ sudo gdebi rpi-zerow-kinetic_1.0.0-1_armhf.deb $ sudo /opt/ros/kinetic/initialize.sh
設定
$ sudo rosdep init $ rosdep update $ echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc $ source ~/.bashrc
roscore
動いた〜!
コメント
のむむさんありがとうございますm( )m
数学のお勉強(1)~クオータニオン~
参考:クォータニオンの回転補間:掲示板:シムダンス「四次元能」|Beach - ビーチ
やりたいこと
クオータニオンを理解する
教科書
↓ 素晴らしくわかりやすい。
回転行列の問題
クオータニオンの利点
ジンバルロックがない
計算負荷が低い
2つの回転同士のスムーズな補間が表現できる
x,y,z軸に限らない任意の回転軸での回転が簡単にできる
複素数について
虚数単位
i ** 2 = -1
複素数
a + b * i
複素平面
参考: 複素平面 - Wikipedia
複素数の行列表現
I = numpy.array([[0, -1], [1, 0]]) E = numpy.array([[1, 0], [0, 1]]) I ** 2 = - E Z = a*E + b*I = numpy.array([[a, -b], [b, a]]) Z = numpy.array([[numpy.cos(theta), -numpy.sin(theta)], [numpy.siN(theta), numpy.cos(theta)]]) * numpy.array([[r, 0], [0, r]])
共役
z' = a - b * i z * z' = || z || ** 2
複素数のすごさ
「複素数平面における点の回転」は「複素数のかけ算」に対応している。
「回転を足す」と「複素数を掛ける」は同じ意味!
たとえば、単位円でiを掛けていくと90度ずつ回転する。めちゃ便利。
参考:
二重数について
冪零元
epsilon**n = 0
二重数
z = a + b*epsilon epsilon = numpy.array([[0, 1], [0, 0]]) Z = a + b*epsilon = numpy.array([[a, b], [0, a]])
bを二重部という
クオータニオン
複素数の拡張として考えることができる
q = w + x*i + y*j + z*k # i,j,kは虚軸
基底i,j,kの関係
i**2 = j**2 = k**2 = -i*j*k = -1 i*j = k j*i = -k j * k = i k * j = -i k * i = j i * k = -j
交換法則はなりたたない
クオータニオンはw,x,y,zの組として、
q = [w, x, y, z]
と表記されることがおおい
クオータニオンの演算
共役
q' = [w, -x, -y, -z]
大きさ
v = (x, y, z) |q| = sqrt(w**2 + |v|**2)
乗算
q0q1 = [w0 * w1 - v0 * v1 , w0 * v1 + w1 * v0 + v0 ✕ v1]
内積
q0 * q1 = w0 * w1 + v0 * v1
逆数
q**-1 = q' / |q|**2
単位クオータニオンでは、共役を求めれば逆数が求まることがわかる
行列表現
i = numpy.array([[0, 0, 0, 1], [0, 0, -1, 0],[0, 1, 0, 0],[-1, 0, 0, 0]]) j = numpy.array([[0, 0, 1, 0], [0, 0, 0, 1],[-1, 0, 0, 0],[0, -1, 0, 0]]) k = numpy.array([[0, -1, 0, 0], [1, 0, 0, 0],[0, 0, 0, 1],[0, 0, -1, 0]])
3D回転
回転
あるベクトルpを単位クオータニオンを用いて3次元空間で回転を表現する方法
p' = q * p * q**-1 p' = [0, v] q = [qw, qv] # qv:回転軸 p = [0, pv] qw = +- numpy.cos(theta/2.0) qv = +- numpy.sin(theta/2)*u # u:qvと同じ方向の単位ベクトル
上記をまとめると、3次元の回転はクオータニオンを使って以下の式で表される
p' = q * p * q**-1 q = [numpy.cos(theta/2.0) numpy.sin(theta/2.0)*u]
pを単位クオータニオンqで回転したあと、rをつかって回転させる場合、
r*(q*p*q**-1)*r**-1=(rq)*p*(q`r`)=(rq)*p*(rq)`
となり、あらかじめクオータニオンrqを計算してクオータニオンsとして合成しておけば、回転の合成を行うことができる
クオータニオンを使えばどんな回転も一発で表現可能
デュアルクオータニオン
定義
回転のみならず、剛体変換(回転と平行移動)を表現できる。
クオータニオンの二重数である
q^ = r + d * epsilon # r,d: クオータニオン、epsilon:零冪元
所感
わかったようなわからないような。。。とりあえずハミルトン大先生すごい笑
まだ正直、理解しきれてない気がする。追記していこう : )
ホームオートメーション(1)~カーテン自動化~
やりたいこと
朝、めざまし無しで起きたい !
これまでは、目覚ましとiftttでの電気オン。。。
電動カーテン自動化による太陽光で起きる作戦
ハマりポイント
まさかの購入した電動カーテンのリモコンが赤外でなく、Nature Remo使えず...
スイッチボットで物理的にリモコンボタンを押すことに(泣)
構成
IFTTTのタイマー機能で、毎朝7:00にswitch link に信号を送り、switch botでニトリの電動カーテンの無線リモコンの開きボタンを物理的に押すという無理やり構成( ̄ー ̄)
そして、コンセント周りの配線…
今後
毎朝、目覚ましをかけずに太陽光で起きれるか実験⚗
いちお寝坊防止のために、
7:00にカーテンオープン by IFTTT & switch link !
7:15に電気オン by IFTTT & Nature Remo !!
7:30に目覚まし by iphone !!!
それではおやすみなさい💤
画像処理についてまとめメモ
やりたいこと
画像処理の大事な内容について箇条書きでまとめ
教科書
まとめメモ
カメラ応答関数:カメラへの入射光強度を入力として、画素値を出力とする関数
光ショットノイズ:受光素子に到達した光子数に比例して出力電圧に含まれるゆらぎの標準偏差
暗時ノイズ:受光素子に到達した光子数に依存せずに生じるノイズの総称で暗電流ノイズや読み出しノイズなどを含む
モスキートノイズ:元画像の高周波の成分が失われるようなノイズ
フリッカ:動画において各フレームで明るさが一定でない現象
ガウシアンフィルタ:正規分布型の重み係数をもつ。
バイラテラルフィルタ: ガウシアンフィルタを改良して、「中心画素からの距離のみで決めていた重み」を「中心画素の画素値と他の画素値の離れ方も含めた重み」に変更したもの
ノンローカルミーンフィルタ:テンプレートマッチングのように周辺画素を含めた領域が、注目画素の周辺領域とどれくらい似通っているかによって重みを決定するもの
-
- ガウシアンフィルタからのラプラシアンフィルタでノイズを減らしつつもエッジを強調できる
鮮鋭化フィルタ:元画像をそのまま出力するフィルタからラプラシアンフィルタを引いたもの
ガボールフィルタ:ある特定の方向の周波数成分を検出するフィルタ
LoGフィルタ: ガウシアン分布のラプラシアン
ゼロ交差:値が生から負へ、負から正へ変化する間の0になる位置。ゼロ交差の点をつなげると閉曲線になる
点拡がり関数:劣化過程を表す空間フィルタ
歪曲収差:ピントがしっかり合致していて色のにじみもないのに、映像が歪んで見えてしまうこと
被写界深度:レンズのピント調整をした時に十分にピントがあっていると判断できる距離
平面パノラマ: 複数の画像を平面に投影しながらつなぎあわせたもの。直線性は維持。
円筒面パノラマ:円筒面に投影したもの。直線性は維持されない。
球面パノラマ:球面に投影したもの。直線性は維持されない。
フレーム間差分:二枚の差分画像を用いて、論理積を求めることで移動領域だけを抽出する
Horn-Shunkckの方法:オプティカルフローのx,y方向の微分値の二乗値が小さくなるような平滑化項。オプティカルフローの拘束条件だけでは一意に決定することはできない。
光学:
放射量 | 測光量 | 備考 |
---|---|---|
放射束[W] | 光束[lm] | 単位時間に人感の明るさ単位 |
放射照度[W/m**2] | 照度[lx] | 単位面積あたりの光束 |
放射強度[W/sr] | 光度[cd] | 単位立体角あたりの放射束 |
あるアナログ的な信号をデジタルデータにサンプリングする場合、原信号に含まれる周波数成分をすべて正確にサンプリングするためには、原周波数の2倍以上のサンプリング周波数が必要となる。
これを標本化定理という。たとえば、100Hzのアナログ信号を正確にサンプリングするためには、最低でも200Hz以上の周期でサンプリングしなければならない。
もしサンプリング周波数の1/2よりも高い周波数成分が含まれていると、その成分がサンプリング結果にはエイリアス(alias、虚像)信号として現われる。
dpi: dots per inch
青色波長のピーク:450nm
緑色波長のピーク:550nm
赤色波長のピーク: 600nm
色の順番:青、シアン、赤、黄色、緑、青緑、青
- ラプラシアンフィルタは以下のように表すことができ、負の値にもなるし、同じ色が多い場合、0付近に値が集中する
0 | 1 | 0
1 | -4| 1
0 | 1 | 0
バイリニア補間:隣接4画素を頂点とする正方形の下底と上底それぞれについてx方向で補間を行い、得られた2つの値を用いて、y方向に線形補間を行う
オイラー数 = 連結結合の個数 - 穴の個数は
市街地距離:
ユークリッド距離:
チェス盤距離:横方向と縦方向の移動距離の大きい方の長さ
以下、赤:市街地距離、緑:ユークリッド距離、青:チェス盤距離
- マハラノビス距離:データの各方向への散らばり具合まで考慮した「データ群からの距離」 -> sqrt( (a-b)2 / delta2 )
参考:マハラノビス距離の意味を2次元の場合で理解する - 具体例で学ぶ数学
バンドル調整:たくさんの画像の対応点を利用して、各画像のカメラモーションと各対応点の3次元位置を更新する
テンレートマッチングの演算回数: 減算、絶対値、加算の三回
SIFT: http://www.vision.cs.chubu.ac.jp/cvtutorial/PDF/02SIFTandMore.pdf
FAST: 注目画素の周囲16画素の画素値が注目画像より明るい、もしくは暗い画素が一定の画素以上連続する場合はコーナーとする。
Cannyエッジ検出:
2次元DCT: 離散コサイン変換
mod M ; Mで割った余り
チェイン符号化: 線画像を、画素の連なりに注目して記述する可逆符号方式
ハフマン符号化: 画像の種類によらない符号化方式。符号割り当ては、濃度やランレングスといった情報源シンボルに符号を割り当てる作業であるが、生起確率の高い情報源シンボルほど短い符号を与えると、符号化に必要な平均の符号長を最小とすることができる。
JPEG2000方式:二次元離散ウェーブレット変換と算術符号化が用いられる
立体角:
ステラジアン:立体角の大きさを表わすSI補助単位。記号 sr 。1 sr は球の半径の2乗に等しい面積をもつ球面上の面分が球の中心に対してつくる立体角。
双方向反射率分布関数(BRDF):入射光の方向と出射光の方向に依存する四次元の関数。反射率を一般化したもので、出射光の放射輝度と入射光の放射照度の比として定義される。
ディザ法:黒と白つまり輝度が0と255の色だけを用いてハーフトーン(中間色)を表現しようという技術で,2値しか出力できない表示装置でなんとかグレースケールを表現しようとしたもの。グレースケールの画像を小さいブロックに分割し,それにマスクを掛けて閾値を越えたピクセルを白,下回ったものを黒というように処理。
デジタルカメラのゲイン:ゲインを下げるとノイズが減り、全体的に暗く撮影される
1画素のモーションブラーの計算: 対象物との距離 / 焦点距離 * 1画素あたりの大きさ 1
ライトフィールドカメラ: 被写体からの光線を、三次元的な情報も含めて記録するカメラ。イメージセンサーの前面にマイクロレンズアレイを配し、光線の明暗だけでなく、光線の入射方向に関する情報を記録する。
ダイナミックレンジ: 観測可能な最大、最小明るさの比によって定義
ノイズのない画像の推定:事後確率の最大化がある。事後確率は尤度と事前確率の積に比例する。
残差逐次検定(SSDA)法: 相違度の加算の途中で残差がしきい値を超えたら加算を打ち切ることで、全体の計算量を減らしている。
ワールド座標系X = Z / f(焦点距離) * u
基本行列E = D(歪対称行列)* R(回転行列)。Dからはカメラの相対的な平行移動ベクトルがわかる。
ネガポジ変換でエントロピーは変化しない
著作隣接権: 著作物の創作者ではないが、著作物の伝達に重要な役割を果たしている実演家、レコード製作者、放送事業者、有線放送事業者に認められた権利
ガンマ補正:ガンマ分の1乗のガンマが1より小さい時は暗くなり、大きい時は明るくなる
リギング:周波数領域において、不連続にフィルタリングを行うとエッジに対して波打つような濃淡の繰り返しが発生する
ウィーナフィルタ:復元画像と原画像の誤差が最小になるように定義されたフィルタ
オープニング:背景のノイズを除去
クロージング:画像内のノイズを除去
細線化では以下の条件を満たしているときに白画素にする
注目画素が境界上にある黒画素
白画素に変更しても連結性が保持
線分の端点でない
ミーンシフト:近傍の点群の平均位置に移動を繰り返して、極大点を求める方法
スネーク:閉曲線が縮んでエッジの境界に張り付くことにより対象物の領域を抽出する方法
JPEGの圧縮率を高くした時:隣り合うブロックの境界が目立つブロック歪みが生じる。また、はっきりとした輪郭の周りにモスキートノイズも現れる。
モスキートノイズ:デジタル画像圧縮画像(特にJPEG静止画およびMPEG動画)において輪郭部分や色の変化の激しい部分で起こる画像の乱れ
オーレンネイヤーモデル:拡散反射モデル。
フォンモデル:鏡面反射モデル。物理的に正確なモデルでない。
トランススパロウモデル:鏡面反射モデル。物理的に正確性を求めたモデル。
所感
画像処理、幅が広いので大変だぁ。。。光や色の特性や座標変換、フィルターや著作権などなど、、、
一歩ずつ!!!