YOLO 自動框出相片裡的人/動物/生活用品

1 天 18 小時 ago
今天介紹的這個神奇好物, 看圖就知道了。 我偷懶把三張圖擠在一起。 底層是繁忙的街道圖; 左上是森林裡幾隻吃素的 (絕對不包含韓國瑜); 右上是巴黎鐵塔餐廳的一張餐桌。 神奇的 YOLO 技術 把圖裡的人/動物/物件都標示出來了, 而且, 在 cpu-only 的電腦上, 每張圖只花幾秒鐘! 關於 R-CNN、 Fast R-CNN、 Faster R-CNN、 YOLO、 SSD, 請見 這篇; 小格不太談理論 (因為我沒研究 ^_^), 只介紹好玩的玩具。 我從 這裡 把程式碼 clone 過來 這裡 並小改了一下。 下載我包的 docker: docker pull ckhung/keras-yolo3:18B 這裡面包含上面的 github repo。 如果程式碼有更新, 可能只會更新 github 而不會更新 docker image。 這個 docker 其實
ckhung

快速畫風移轉: 你的圖片/相片/影片, 以名畫家的動漫風格重現!

1 週 3 天 ago
兩年前的此時, 畫風轉移魔法引發熱烈討論。 我有自己架起來玩過, 很好玩, 但光是轉一張圖就要好幾個小時。 這兩年來, 不斷有人提出改良版的演算法。 目前最佳的版本稱為 fast style transfer, 如果不計算預先訓練畫風的時間, 只計算轉移的時間, 速度超快。 即使是在我的 2014 年老電腦上只用 CPU (Intel Pentium G2030 @ 3.00GHz) 也能處理影片。 下圖每塊 212x120 的 13 秒影片各約耗時 3.5 到 4 分鐘。 我們將以 ~/fst 為工作目錄。 把圖片跟影片放在 ~/fst/media/ 到 這個 gist 抓回我寫的 transform_iv.py (改寫自原作者的 transform_video.py)。 抓回 我製作的 (cpu 版的) FST docker: docker pull
ckhung

影片裁剪合併/放大縮小/快轉慢播的萬用工具 ffmpeg

1 週 3 天 ago
處理影片檔的工具很多; 但如果需要大量批次處理的話, 當然要學 ffmpeg , 因為你可以把它寫到 shell script 裡面去。 先前在玩 畫風轉移魔法 時, 繞了一些遠路, 不小心學了一些 ffmpeg 指令, 在這裡筆記一下。 首先安裝 mediainfo 套件, 以便從命令列查看影片檔的屬性。 例如可以這樣查影片寬度/高度/時間長度: mediainfo dog-water.mp4 | grep -Pi '^(width|height|duration)' 例如下面這個範例影片的大小是 426x240 長度 13 秒多。 截取畫面的右邊 2/3: ffmpeg -i dog-water.mp4 -vf 'crop=284:240:142:0' out.mp4 或是 ffmpeg -i dog-water.mp4 -vf 'crop=iw*2/3:
ckhung

幫 proxmox 的 lxc 擴充硬碟

3 週 5 天 ago
在 proxmox 上面, 原則上每個 lxc 容器配置一個檔案系統。 例如我的 proxmox 採用 zfs 作為檔案系統。 有一部 lxc 容器, id 是 371, 那麼在 /etc/pve/lxc/371.conf 裡面就會有一句: rootfs: local-zfs:subvol-371-disk-1,size=4G 之類的。 這個檔案系統對應到 proxmox host 的 rpool/data/subvol-371-disk-1 。 (假設你的 zfs pool 名為 rpool) 但如果這個容器要當作 ftp 伺服器或 docker 伺服器, 最好把資料放在第二顆硬碟上, 這樣資料備份跟伺服器狀態備份才比較方便分開處理。 以下指令都是在 proxmox 4.4 的環境底下測試。 先關掉容器: pct shutdown 371 建立一個檔案系統: zfs
ckhung

精簡扼要、 不拖泥帶水的終端機 sakura

1 個月 ago
今天要介紹的不是櫻花牌熱水器, 而是 sakura 終端機。 自從 roxterm 開發者被 GTK 3.2 打敗 之後, 較新版本的 debian 跟 ubuntu 再也沒有 roxterm 可用。 還好找到 sakura, 恰好符合我對終端機最基本的需求 (有分頁、 16 色) 而且跟 其他終端機 比起來, 它需要的相依套件最少, 不會牽拖一大堆親戚住進你的系統。。 直接 sudo apt install sakura 就安裝好了。 初次執行, 沒有設定檔可參考? 沒關係, 按 ^d 離開 sakura, 下次再進入 sakura, 就會在 ~/.config/sakura/ 底下看到一個已填妥所有預設值的 sakura.conf 設定檔。 也就是說, 如果你沒有設定檔, 或是如果你在使用過程當中按了某些鍵 (下詳) 改變了 sakura 的設定, 那麼當你關閉最後一個分
ckhung

gtk3 軟體的外觀設定: 請給我明顯的 「目前分頁」 頁籤!

1 個月 ago
有一個小問題一直困擾著我。 這幾年我用的 OS 是 lubuntu, 所以自從 roxterm 作者不再更新之後, 預設的 lxterminal 就一直是我的日常終端機。 但不論是 lxterminal 或是新發現的 sakura 終端機, 它們的每個分頁上方的頁籤都長得一模一樣, 全都是灰色。 今天終於成功修改設定檔, 讓 「目前分頁」 (active tab) 變得比較醒目 -- 雖然還是沒有很懂 gtk 的運作。 首先下 ldd /usr/bin/sakura | grep -i gtk (或 lxterminal 也一樣) 會發現 sakura 跟 lxterminal 連結的函式庫都是 gtk3, 所以要朝這個方向搜尋外觀的設定 -- gtk3 的設定方式跟 gtk2 很不一樣。 爬了好多問答文, 照做都失敗。 後來發現 lxappearance 指令叫出的設定對話框
ckhung

程式設計老手的股市初學淺見

1 個月 ago
多年以前就買過股票, 但根本就是矇著眼睛亂買, 也曾聽信名嘴買到下市股票。 最近為了籌退休金, 才開始認真爬文讀書學習股市常識。 還沒開始賺錢, 但現在買得很有方向感、 很心安。 真的, 沒有做功課就不要隨便進股市; 但做功課其實並沒有一開始想像的那麼困難。 對程式設計師來說, 買正確的股票, 比銀行定存或儲蓄險都要好太多倍了。 買儲蓄險之前, 請先搜尋 「儲蓄險 提前解約」。 當初我也覺得自己不會理財, 也鐵齒地認為自己不會需要用到那麼多現金, 所以每存了一些現金, 就買儲蓄險。 現在學會買股票, 才 (太晚) 體認到: 現金放在儲蓄險裡面因而失去流動性, 也是一種很大的風險。 對散戶而言, 現在的買股環境比二十年前的環境好太多了, 因為證交所及許多網站提供了豐富的公開資訊。 需要收盤價、 EPS、 ... 任何資訊, 只要搜尋一下, 就可以找到個股資訊, 進而知道如何用
ckhung

三種方式產生 scatter plot / bubble chart

1 個月 1 週 ago
資料視覺化的 常用圖形類別 當中, 我最喜歡用 scatter plot (散點圖) 以及它的變形 bubble chart (氣泡圖), 因為 scatter plot 能用位置 (X-Y 座標) 及顏色把一張試算表的兩個數值欄位及一個類別欄位同時呈現在一張圖上; 而 bubble chart 則再補上 「圓圈大小」, 較 scatter plot 更多展現出一個數值欄位。 為了畫 bubble chart, 暑假我繞了好多遠路。 最後找到最簡單的方法, 把一些重點提示摘要在這篇裡。 從這篇快速起步之後, 每一種方法當然都還有更多本文未提及的參數可以調整, 請自行搜尋/查手冊。 程式碼及資料檔 (satellites.csv) 放在 github 的 ckhung/scatplot; 範例圖的物理意義請見 重新發現克卜勒第三定律。 一、 gnuplot 這是最簡單的
ckhung

連鑰匙孔都藏起來的 ssh 完全防禦: SPA

1 個月 2 週 ago
如果說 ssh 服務是進入伺服器的鎖頭, 那麼帳號密碼就是開鎖的鑰匙。 你可以用 密不透水的設定 來保護鎖頭, 或是用 fail2ban 把企圖開鎖但履試履敗的可疑份子擋在庭院之外一陣子, 讓他連試鑰匙的機會都沒有。 但其實另外還有一個中文世界鮮少人知道的終極絕招: 把鎖頭/鑰匙孔整個藏起來, 只當懂門路的人 (你自己) 用特定暗號敲門時, 才讓鎖頭/鑰匙孔短暫出現一兩分鐘。 今天要介紹的伺服器完全防禦機制叫做 Single Packet Authorization (SPA)。 一、 概念解說 這要先從 port knocking 說起。 這個機制的運作方式是: 先用防火牆預設把所有的 ports (或至少重要的 ports, 例如 22) 通通封掉, 這就像是在門鎖之外再蓋上一層 沒有鎖頭、 沒有鑰匙孔的門 一樣。 然後跟客戶端約好按照某個特定順序敲幾個 ports (
ckhung

資料視覺化幫我重新發現克卜勒第三定律

1 個月 2 週 ago
如果你沒空看 18 分鐘的 TED 演講 Hans Rosling 用前所未有的方法詮釋數字統計, 那麼至少要欣賞一下這個 4 分鐘的短片 「200 年, 200 個國家」: 資料視覺化可以幫我們從枯燥的數字當中, 一眼看出奇特、 令人驚訝的現象。 而且即使我們手邊沒有任何特殊的資源, 還是可以玩出一些有趣的東西。 今天我們要重新發現 (天文學上的) 克普勒第三定律。 我們省略上一篇 用 perl 的 csv 句型處理維基百科頁面 的繁瑣過程, 直接下載成果檔 satellites.csv。 這是太陽系所有天然衛星的列表, 包含 name (名稱)、 radius (星體半徑)、 orbit_major (軌道半長軸)、 rev_cycle (公轉週期)、 planet (所屬行星) 等等欄位。 我們用 gnuplot 來畫圖: set datafile
ckhung

用 lynx 加 perl 的 csv 句型從網頁裡的表格產生試算表

1 個月 2 週 ago
如果說 三大 regexp 句型 是 「懶得學 perl 程式語言的系統管理員必學的三句 perl」, 那麼今天要介紹的就是第四重要的 perl 句型: perl -F, -nale 'print join(", ", @F[2,5,6])' 姑且就稱它為 perl 的 csv 句型吧。 它跟文字瀏覽器 lynx 合作, 可以把網頁的表格抓下來變成試算表。 當你不想為了一點小事開啟 calc 時, 就用它們來馴服 .csv 檔吧。 我們拿台積電歷年每季財務報表摘要來練習。 先把網頁原始碼抓回自己的硬碟, 才不會一直製造無謂的網路流量: lynx -source 'https://goodinfo.tw/StockInfo/StockBzPerformance.asp?YEAR_PERIOD=9999&RPT_CAT=M_QUAR_ACC&STOCK_ID=2330' >
ckhung

科普貴教你天天自助 calc 便宜股撈明牌

1 個月 3 週 ago
這篇其實是 LibreOffice Calc 的 「連結外部 csv 檔」 教學, 只是拿台股來作例子比較有實用感、 可以提高大家的學習動機 :-) 不需要唸資訊科系、 不需要寫程式, 只需要一部 linux 電腦, 並且略熟試算表函數, 例如 vlookup 及 iferror 等等即可操作。 一、 一日明牌 請先下載 stock.ods, 但是 先不要打開它!。 這個試算表包含四張工作表: price: 某日所有個股股價 div: 所有個股歷年現金股利 divty: 所有個股今年現金股利 main: 主表。 div 原本僅含 2017 年或更早的資料; 2018 年的資料是從 divty 工作表裡面查表得出的。 而 main 則參考其他三個表的資訊, 統整出可以幫你撈明牌的排序清單。 查表的 vlookup 指令我都幫大家寫好了。 最麻煩的是 price , 這張工作表
ckhung

用 GRASS 繪製燦坤各分店的勢力範圍地圖 Voronoi Diagram

2 個月 1 週 ago
想像你有一張 「中華電信基地臺分佈地圖」, 並且假設每個基地臺的功率都一樣大。 地圖上的每一個點都可以問: 「哪一個基地臺離我最近?」 以便決定哪個基地臺的訊號比較強、 我的手機要跟誰連線。 以 (不會移動的) 「偶像 - 粉絲」 之間的關係來比喻, 每個偶像有自己的勢力範圍, 範圍內的所有點就是它的粉絲。 各勢力範圍之間的分界線由相鄰兩偶像的垂直平分線所組成。 這樣畫出來的圖稱為 Voronoi Diagram。 因為我拿不到基地臺座標, 所以只好改畫燦坤各分店的勢力範圍地圖。 目前可能沒什麼用, 因為分店跟粉絲的直線距離沒有太大意義; 但以後出現無人機送/取貨業務時, 這張地圖可能就有用了。 位於最外圍的偶像, 它的勢力範圍會延伸到無窮遠, 也就是說地圖上會有一些無窮大的區塊。 把相鄰的兩座偶像用一條 edge 連起來, 這樣畫出來的圖 (也就是 Voronoi
ckhung

matplotlib 畫圖時採用 ttc 中文字型

2 個月 1 週 ago
想要在 Ubuntu 18.04 底下用 python 的 matplotlib 畫圖, 第一個遇到的問題就是中文顯示。 這篇簡體中文教學文 onepiece_dn的专栏 寫得很清楚, 照做就成功了。 不過我想要改預設值, 不想每一句話都指定中文字型。 另一篇 ButteredCat 寫的簡中文章 解釋詳盡。 因為我用的字型是文鼎的 uaki.ttc 所以還需要再多加一步: 從 ttc 裡面把 ttf 挖出來。 以下是修改過的簡要步驟及程式碼; 詳細說明請參考上述連結。 除了安裝 python-matplotlib 套件之外, 如果你的程式是 python 2.7 而非 python3, 還需要手動安裝 python-pyqt5 套件。 查看系統裡已安裝哪些中文字型: fc-list :lang=zh 例如我自己看到其中有興趣的這一列: /usr/share/fonts
ckhung

在 ubuntu 18.04 底下為 kvm 打造的虛擬區域網路

2 個月 1 週 ago
Ubuntu 18.04 Bionic Beaver 的網路設定改用 netplan 取代舊的 /etc/network/interfaces 設定方式。 如果只是單純的固定 IP 或 DHCP, 據說設定很簡單。 可是我想採用類似 手工精簡版 的方式來幫未來的 qemu-kvm guests 設定獨立式或可橋接外界的虛擬區域網路。 暫時沒有力氣學 netplan, 所以就照著 這個問答 強制改成舊的設定方式比較簡單。 但若不小心, 有可能會在開機時無限等待 dhcp 服務。 以下是我的 lubuntu 18.04 最終網路設定, 及一些有助除錯的筆記。 一、 懷舊網路設定 首先安裝幾個套件: apt install ifupdown2 bridge-utils qemu-kvm。 再來把 /etc/network/interfaces 改成類似這樣: #
ckhung

自架臉部表情判讀服務

2 個月 2 週 ago
請看一下 原始網站: 我把這個判讀臉部表情 (及性別) 的程式 複製回來並小改一下, 然後打包成 face_classification docker 讓大家玩。 情緒判斷還蠻有一點像的; 可是鬍子先生為什麼竟然被判斷成女性呢? 一、 試玩 以下假設你已略懂 docker。 抓回我打包的 docker: docker pull ckhung/face_classification:18C 後面的 :18C 請依 最新狀況 調整。 啟動, 命名為 fc, 把服務放在 port 15984 : docker run -d --name fc -p 15984:8084 ckhung/face_classification:18C 找一張表情豐富的相片, 例如叫做 some_faces.jpg 。 可以包含不只一張臉。 把判讀結果直接畫在原圖上面。 傳回來的新的固定是
ckhung

在 docker 裡面跑 GUI 程式

2 個月 2 週 ago
一開始玩 docker 主要都是為了伺服器的應用 (例如 ethercalc 或 ldap), 所以只需要文字介面。 最近玩 ML/DL/AI 程式, 經常需要顯示圖片。 每次都要在 docker 裡面用 AI 程式在分享的目錄裡產生圖片, 再從外面 (host) 用看圖軟體看, 有點囉嗦。 如果是影片, 就更麻煩了。 搜尋到這篇 Running GUI apps with Docker, 略微修改他的做法, 得到以下簡單步驟讓你可以在 docker 裡面執行圖形介面程式並直接顯示在 host 實體機的 X Window 環境。 我們拿 ubuntu 18.04 的官方 docker 及輕巧的 feh 看圖程式來做實驗。 查看你自己的 user name 跟 UID: echo $UID $USER 例如我看到 1000 ckhung。 啟動 docker: docker
ckhung

躲在 apache2 後面的 flask 範例, 含上傳檔案

2 個月 3 週 ago
github 上面很多 ML/DL/AI 程式都以 python 撰寫, 可以從命令列執行。 但如果想要佈署, 例如想讓樹莓派可以把野外蒐集到的畫面或聲音傳回伺服器用 AI 程式判讀/分類, 那該怎麼辦呢? 常見的方法是用 flask 架一個簡單的 web server。 Flask 是 python 的一個模組, 所以從那裡要接上 python 所寫的 ML/DL/AI 引擎很方便。 Flask 單獨作為 web server 的方法很簡單, 請見 中文教學 或 官網。 但若你的伺服器已有 apache2, 要怎樣才能把 flask 接上去呢? 我們即將在 apache 的 /var/www 目錄底下建立兩個子目錄, 一個叫做 hello, 另一個叫做 upload。 希望等一下用 browser 連到 http://localhost/hello/ 跟 http://
ckhung

到 floydhub 租用雲端 GPU 玩人工智慧

2 個月 4 週 ago
想玩一點 AI, 又不想自己直接面對 封閉的 nVidia 顯卡驅動程式 嗎? 如果你的訓練資料沒有隱私或機密的問題, 那就上雲端租用 GPU 吧。 我採用的是 floydhub。 根據 這一篇比較文, floydhub 的效能比 AWS 跟 paperspace 略遜一籌; 不過他們以軟體環境取勝: 有許多現成的深度學習 docker 環境 可選。 而且當初我起步機器學習, 就是靠他們做的一些 docker images, 所以就寫介紹文來回饋囉。 你需要先註冊一個帳號, 每個月可免費使用 CPU 20 小時。 然後根據 官網文件, 以普通人的身份下 pip install -U floyd-cli 在你的電腦上安裝 floyd 指令。 ( 會安裝在 ~/.local/bin 裡面) 再來下 floyd login 這會在瀏覽器開啟一個登入分頁。 登入後, 瀏覽器上會
ckhung

Android-x86 Nougat 版

2 個月 4 週 ago
三年前曾經介紹過 android-x86 4.* 版。 前陣子為了上課需要, 再次試玩。 現在的 Nougat 版 (7.*) 已可安裝 google play; 不過目前對我來說, 有 f-droid 就夠了。 64 bit 好像沒什麼特別用處, 從官網下載 32bit 版本好了: android-x86-7.1-r2.iso。 另外, 我試過 CM 版 (CyanogenMod), 但是安裝完成後第一次開機要半小時、 adb 不能用、 有時安裝會卡在選語言的畫面。 總之還是用原始的 android-x86 比較穩。 一、 準備硬碟 用虛擬機來安裝作業系統比較方便, 可以一邊繼續做其他事。 網路上用 Virtualbox 的教學文比較多; 但我偏好用 kvm。 此外, zfs 的 snapshot 快照功能很好用, 所以我們要在 zfs 上面建一個 volume。 如果你
ckhung
已檢查
1 小時 13 分鐘 ago
大人問小孩: 「全世界的玩具隨便你挑? 這怎麼可能? 如果我要的玩具只有一個, 正好又被別人借走了呢?」
「玩具閘門後面, 每種玩具永遠只有一個。 任何人想玩, 隨時都可以生一個複製品給你。
這裡沒有人搶玩具。 這裡是 玩具烏托邦。」
* * * *
貴哥在這裡分享自由軟體跟免費雲端工具的知識與技術, 目的是希望打破 「品牌忠誠肥羊」 們的迷思、 要「讓數位高牆倒下」 (請搜尋)。

(還有其他雜七雜八不想放到 「資訊人權貴ㄓ疑」 的筆記跟感言)
Subscribe to 玩具烏托邦 feed