網頁

2020年9月29日 星期二

GStreamer 學習紀錄-除錯

列印除錯訊息
GST_ERROR()
GST_WARNING()
GST_INFO()
GST_DEBUG()
GST_LOG()

依據環境變數 GST_DEBUG
0: none, 所有訊息皆不印
1: ERROR
2: WARNING
4: INFO
5: DEBUG
6: LOG

產生 pipeline 圖
設定環境變數 GST_DEBUG_DUMP_DOT_DIR=file_path
程式碼在 gst_bus_timed_pop_filtered 之後加入
GST_DEBUG_BIN_TO_DOT_FILE(GST_BIN(pipeline), GST_DEBUG_GRAPH_SHOW_MEDIA_TYPE, "file_name");
執行程式後會產生 file_path/file_name.dot
執行下列命令產生 png 檔
$ dot -Tpng -o file_name.png file_name.dot

2020年9月28日 星期一

kafka 學習紀錄(架構名詞解說)

參考 Kaggle的解題挑戰 - Kafka簡介

Kafka: 分散式的訊息處理系統
Zookeeper: 底層的數據儲存
Broker: 接收來自 Producer 的訊息,交 Zookeeper 儲存,並回應 Consumer 的資料請求
Kafka Cluster: 由數個 Broker 組成
Producer: 訊息生產者,負責發布訊息到 kafka
Consumer: 訊息消費者,將訊息由 kafka 讀出
Topic: 訊息的種類,可視為 Producer 和 Consumer 的 Queue
Partition: Topic 分為數個 Partitions,同一個 Topic 的 Partition, 可以不在一個機器上
Retention: 設定存放在磁碟的時間
Multiple Clusters: Kafka 支援 Multiple Cluster,主要可以提高可用性和安全性
Consumer Group: 是由一個或多個消費者實例(Consumer Instance)組成的羣組,具有可擴展性和可容錯性的一種機制。消費者組內的消費者共享一個消費者組 ID,這個 ID 也叫做 Group ID,組內的消費者共同對一個主題進行訂閱和消費,同一個組中的消費者只能消費一個分區的消息

kafka 學習紀錄 (操作)

參考 Kaggle的解題挑戰 - Kafka實作

安裝
1. 到 kafka 網站 APACHE KAFKA
3. 下載 Binary download
nano@nano-desktop:~/Data/DeepStream$ tar -xzf kafka_2.13-2.6.0.tgz
nano@nano-desktop:~/Data/DeepStream$ cd kafka_2.13-2.6.0/

啟動 zookeeper
nano@nano-desktop:~/Data/DeepStream/kafka_2.13-2.6.0$ bin/zookeeper-server-start.sh config/zookeeper.properties

啟動 kafka
nano@nano-desktop:~/Data/DeepStream/kafka_2.13-2.6.0$ bin/kafka-server-start.sh config/server.properties

查詢目前 topic
nano@nano-desktop:~/Data/DeepStream/kafka_2.13-2.6.0$ bin/kafka-topics.sh --list --zookeeper localhost:2181

建立 topic test
nano@nano-desktop:~/Data/DeepStream/kafka_2.13-2.6.0$ bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

從 topic test 接收訊息
nano@nano-desktop:~/Data/DeepStream/kafka_2.13-2.6.0$ bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning

傳送訊息到 topic test
nano@nano-desktop:~/Data/DeepStream/kafka_2.13-2.6.0$ bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
>

2020年9月25日 星期五

accuracy, precision, recall 的理解

預設真假 和 事實的真假
TP(True Positive): 事實為真,預測為真
FN(False Negative): 事實為真,預測為假
FP(False Positive): 事實為假,預測為真
TN(True Negative): 事實為假,預測為假

Accuuuracy = (TP+TN) / (TP+TN+FP+FN)
正確率:在所有情況中,正確預測的比率

Precision = (TP) / (TP+FP)
精確率:預測為真的情況中,有多少是真

Recall = (TP) / (TP+FN)
召回率:為真的情況下,有多少預測為真

Precision 高, Recall 低:捉到的大部分是 真的,但會漏掉 真的
Precision 低, Recall 高:真的 大部分會被捉到,但會有不少 假的

2020年9月15日 星期二

Youtube 使用 GStreamer

參考 How to watch Youtube videos with Gstreamer

安裝
$ pip install youtube-dl

取得可用格式
$ youtube-dl --list-formats youtube_link

取得 url
$ youtube-dl --format mp4 --get-url youtube_link

利用 GStreamer 撥放
$ gst-launch-1.0 playbin uri="$(youtube-dl --format mp4 --get-url youtube_link)"

在程式中利用 youtube-dl
    GError *error = NULL;
    GSubprocess *youtube_dl = g_subprocess_new (G_SUBPROCESS_FLAGS_STDOUT_PIPE, &error, 
        "/home/nano/.local/bin/youtube-dl", 
        //"--format", "mp4",
        "-f", "18",
        //"--get-url", "https://www.youtube.com/watch?v=gMd8bLJLsiw", 
        "--get-url", "https://www.youtube.com/watch?v=2P_74GLABBY", 
        NULL);
    if (error) {
      g_error ("Could Not Launch Sub-Proess youtube-dl");
      return -1;
    }
    GInputStream *istream = g_subprocess_get_stdout_pipe (youtube_dl);
    gchar buffer[1024];
    gssize urlSize = g_input_stream_read(istream, buffer, sizeof(buffer), NULL, &error);
    if (error || urlSize == sizeof(buffer)) {
      g_print("error g_input_stream_read\n");
      return -1;
    }
    buffer[urlSize] = 0;
    g_print("youtube_dl:uri %s\n", buffer);
    /* Set the URI to play */
    g_object_set (data.playbin, "uri", buffer, NULL);


2020年9月8日 星期二

GStreamer 安裝

依據說明文件安裝
sudo apt-get install libgstreamer1.0-0
sudo apt-get install gstreamer1.0-plugins-base
sudo apt-get install gstreamer1.0-plugins-good
sudo apt-get install gstreamer1.0-plugins-bad
sudo apt-get install gstreamer1.0-plugins-ugly
sudo apt-get install gstreamer1.0-libav
sudo apt-get install gstreamer1.0-doc
sudo apt-get install gstreamer1.0-tools
sudo apt-get install gstreamer1.0-x
sudo apt-get install gstreamer1.0-alsa
sudo apt-get install gstreamer1.0-gl
sudo apt-get install gstreamer1.0-gtk3
sudo apt-get install gstreamer1.0-qt5
sudo apt-get install gstreamer1.0-pulseaudio

還需另外安裝
sudo apt-get install libgstreamer1.0-dev
sudo apt-get install libgstreamer-plugins-base1.0-dev
sudo apt-get install libgtk2.0-dev
sudo apt-get install clutter-gst-3.0
sudo apt-get install libclutter-gst-3.0-0
sudo apt-get install libclutter-gst-3.0-dev

下載教學範例
git clone https://gitlab.freedesktop.org/gstreamer/gst-docs

Makefile 中
PKGS := gstreamer-1.0 gtk+-2.0 clutter-gst-3.0
CFLAGS += `pkg-config --cflags $(PKGS)`
LIBS += `pkg-config --libs $(PKGS)`

$(MAKECMDGOALS).o: $(MAKECMDGOALS).c Makefile
$(CC) -c -o $@ $(CFLAGS) $<

$(MAKECMDGOALS): $(MAKECMDGOALS).o Makefile
$(CC) -o $@ $@.o $(LIBS)

2020年9月2日 星期三

為在 jetson nano 的 conky 加速

conky 若是利用 exec, execp 等命令,會大量耗費資源
之前使用 execi 執行 tegrastats 取得一些系統資訊
直接改用 C, 編寫出 jetson_fan, 
jetson_temp_ao, jetson_temp_cpu, jetson_temp_gpu,
jetson_power_cpu, jetson_power_gpu, jetson_power_all
等變數
$ vi .conkyrc
RAM:${jetson_ram_usage}${alignr}${jetson_ram}
RAM lfb:${alignr}${jetson_ram_lfb}
SWAP:${jetson_swap_usage}${alignr}${jetson_swap}
SWAP Cached:${alignr}${jetson_swap_cached}
EMC Bandwidth:${jetson_emc} ${jetson_emc_bar}
CPU0:${jetson_cpu_frq 0} ${jetson_cpu_bar 0}
CPU1:${jetson_cpu_frq 1} ${jetson_cpu_bar 1}
CPU2:${jetson_cpu_frq 2} ${jetson_cpu_bar 2}
CPU3:${jetson_cpu_frq 3} ${jetson_cpu_bar 3}
GPU  ${jetson_gpu} ${jetson_gpu_bar}
${font :blod:size=12}Temperature ${hr}
${font :normal:size=10}Thermal:${alignr} ${jetson_temp_thermal}
PLL:${alignr} ${jetson_temp_pll}
CPU:${alignr} ${jetson_temp_cpu}
Wifi:${alignr} ${jetson_temp_wifi}
PMIC:${alignr} ${jetson_temp_pmic}
GPU:${alignr} ${jetson_temp_gpu}
AO:${alignr} ${jetson_temp_ao}
Fan Speed:${jetson_fan} ${jetson_fan_bar}




以下是 conky source 的 patch

2020年9月1日 星期二

conky in jetson nano


安裝相依套件
$ sudo apt-get install cmake
$ sudo apt-get install libimlib2-dev
$ sudo apt-get install libncurses5-dev
$ sudo apt-get install libx11-dev
$ sudo apt-get install libxdamage-dev
$ sudo apt-get install libxft-dev
$ sudo apt-get install libxinerama-dev
$ sudo apt-get install libxml2-dev
$ sudo apt-get install libxext-dev
$ sudo apt-get install libcurl4-openssl-dev
$ sudo apt-get install liblua5.3-dev

確認 cmake 版本要 >=3.8
$ cmake --version