ATOM CAM2でRTSPで動画を取得したい(雑記)

2022/9/23現在、最新のファームウェアは4.58.0.97。
4.58.0.91ではRTSPでストリーミング再生できたらしい。
古い方のファームをダウンロードしてSDに保存、Atom Cam 2に挿入してみたけど、更新の仕方がわからん。
(SetupボタンはAtomCam2にはない?)
とりあえずSDを入れたままで再起動したら、アプリのその他メニューから「PCで再生」が出てきた。よくわからん。
出てきたリンクをVLCに読ませたらストリーミング再生はできた。
でもAtomCamのファームウェアのバージョンは4.58.0.97のまま。

うーむ・・・・・・・。

Ubuntu18.04にWindows10からリモートデスクトップ接続する

まずは下記リンクの通りXRDPをインストール、設定する。
ただし、
sudo apt-get -y install xserver-xorg-core xorgxrdp xrdp
sudo apt-get -y install xserver-xorg-input-all
とすること。

www.hiroom2.com

そうしたら、本体の方はログアウトしてリモートデスクトップ接続すればOK。

(追記)
$ sudo gsettings set org.gnome.Vino require-encryption false
が必要かも。

$ sudo apt install gnome-tweak-tool
も必要かも(Dockが非表示の時)
corgi-lab.com

(C#)入力言語を切り替える

IMEの制御ではなく(?)、異なる言語のキーボードに切り替える方法をメモ。

//日本語
CultureInfo culture = new CultureInfo("ja-JP");
InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(culture);

//ロシア語
CultureInfo cultureRU = new CultureInfo("ru-RU");
InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(cultureRU);

CultureInfoのコンストラクタに渡す文字列の一覧は以下。
[MS-LCID]: Appendix A: Product Behavior

追記
香港の繁体字をインストールしていても、Win10の内部的には
"zh-HK"ではInputLanguageを変更できない。
"zh-TW"ならOKだった。

(Android)ボタンなどの背景色を変える

簡単なことだけど、苦しんだのでメモ。
Android4.4と8.0で動作確認。

    private void changeButtonColor(int id ,int color){
        Button button = findViewById(id);
        Drawable drawable = button.getBackground();
        drawable.setColorFilter(color,PorterDuff.Mode.SRC_IN);
        button.setBackground(drawable);
    }

【Python】スクレイピングしてみた

日経トップページから、トップニュース15件?を抜き出してみた。
http://www.nikkei.com/

日本経済新聞様、マズければご指摘ください)

以下ソース。

import urllib.request
from bs4 import BeautifulSoup
import pprint

url = "http://www.nikkei.com/"
response = urllib.request.urlopen(url)
data = response.read()

soup = BeautifulSoup(data,"html.parser")

article = []

#トップニュース取得
top = soup.find(class_ = "nx-top_news_first cmn-clearfix")
top = top.find(class_="cmnc-large")
article.append(top.string)

#セカンドニュース?取得
seconds_all = soup.find(class_="nx-top_news_second cmn-clearfix")
seconds = seconds_all.find_all(class_="cmnc-middle")
#print(seconds)
for i in range(len(seconds)):
    art = seconds[i].string
    article.append(art)
    #print(art)

#forth news取得
fourth_all = soup.find_all(class_="nx-top_news_fourth cmn-clearfix")
for i in range(len(fourth_all)):
    art = fourth_all[i].find(class_="cmnc-xsmall")
    article.append(art.string)
    #print(art.string)

#print(article)
#print(len(article))

#\u3000を置換、表示
result = []
for i in range(len(article)):
    s = str(article[i])
    s = s.replace('\u3000',' ')
    print(s)
    result.append(s)

#print(result)
print(len(result))

実行結果は以下の通り。
f:id:ossannt:20170728161916p:plain

(python) 位相アンラップしてみた

ちょっと便利すぎやしないかい?python
10年くらい前にC++で書いたオレオレ信号処理ライブラリが完全に陳腐化したわ。

sin関数の位相にガウス関数を加えたもの。
{\displaystyle sin(2\pi ft + 10\exp(- \frac{ (x-5)^{ 2 }}{2} ) ) }

これから
{\displaystyle 10\exp(- \frac{ (x-5)^{ 2 }}{2})}
を抽出するのが目標。

f:id:ossannt:20170724143801p:plain

FFTして負の周波数成分をカット=ヒルベルト変換
f:id:ossannt:20170724150440p:plain

IFFTして、元の関数の虚数部を復元(解析信号の取得)
f:id:ossannt:20170724150516p:plain

解析信号の位相。±πにラップされている。
f:id:ossannt:20170724150557p:plain

アンラップした位相。ほぼ傾き{\displaystyle 2\pi ft}の直線だが、
少しもっこりしている。
f:id:ossannt:20170724150630p:plain

傾き{\displaystyle 2\pi ft}を引く。
ピークがx=5のガウス関数が得られている。
f:id:ossannt:20170724150815p:plain

以下ソース。

import numpy as np
from scipy.fftpack import fft
from scipy.fftpack import ifft
from scipy.fftpack import fftfreq
from scipy.fftpack import fftshift
import matplotlib.pyplot as plt
import pandas as pd
import math

#データ数
N = 1000

#サンプリング周期(sec)
dt = 0.01

#周波数  
f = 1.0

#時間軸       
t = np.linspace(1,N,N) * dt - dt

#時系列データ
#y = np.sin(2 * np.pi * f * t)

#f(x)を自分で定義
#ガウス関数
fx = lambda x: (math.exp(-(x-5)**2/2)) /  math.sqrt(2*math.pi) * 10

y = []
for i in range(len(t)):
    y.append(np.sin(2 * np.pi * f * t[i] + fx(t[i])))
    #y.append(fx(t[i]))

#周波数軸(MATLAB等で言うfftshiftがかかっている)
freq = fftfreq(N,dt)

#FFT
yf = fft(y)

#解析信号を得る
yf[int(N/2):N] = 0.0 + 0.0j
af = ifft(yf)

#unwrap
unwrap = np.unwrap(np.angle(af))

phase = []
for i in range(len(t)):
    phase.append(unwrap[i] - 2*np.pi * f * t[i]) #オフセットを引く

plt.figure(1)
plt.xlabel("time(sec)")
plt.ylabel("value(a.u.)")
plt.plot(t,y)

plt.figure(2)
plt.xlabel("freq(Hz)")
plt.ylabel("amplitude(a.u.)")
plt.plot(freq,np.abs(yf))

plt.figure(3)
plt.xlabel("time(sec)")
plt.ylabel("value(a.u.)")
plt.plot(t,np.real(af))
plt.plot(t,np.imag(af))

plt.figure(4)
plt.xlabel("time(sec)")
plt.ylabel("phase(rad)")
plt.plot(t,np.angle(af))

plt.figure(5)
plt.xlabel("time(sec)")
plt.ylabel("phase(rad)")
plt.plot(t,unwrap)

plt.figure(6)
plt.xlabel("time(sec)")
plt.ylabel("phase(rad)")
plt.plot(t,phase)

plt.show()

python(scipy?)にunwrap関数なんてあるのね。
今回はFFTして負の周波数成分をカットして・・・という方法で実装しているけど、
hilbert関数というのがあるので、そちらを使った方が早いかも知れない。
やってることは同じはずだけども。