2019年1月14日 星期一

[筆記][Python] XML檔案讀寫(ElementTree and Minidom)

目前用Pascal VOC的格式來存取我的資料,所以python讀寫XML檔就變成是重要的一環,以下紀錄是XML檔的讀寫,也方便自己複習,不用每次都還要問google先生。
以下皆使用ElementTree與Minidom這兩個XML的Python API

  • Import ElementTree
    用cElementTree會比較快因為它是C語言寫的,可以直接使用硬體,下面的import方式就是主要import cElementTree,若沒有C語言base的,才改用python base的套件
    try:
        import xml.etree.cElementTree as ET
    except ImportError:
        import xml.etree.ElementTree as ET
  • 讀取檔案與解析node
    ElementTree讀取檔案的方式也很簡單,只要在建立ElementTree物件的時候給他XML檔案位置即可
    file_name = 'path_to_file'
    tree = ET.ElementTree(file=file_name)

    至於為什麼物件的命名是用tree呢?這是因為XML的格式就好像一棵樹一樣,由一個跟節點延伸出分支,然後各分支又可延伸出更多分支
    以PascalVOC為例
    root
            |--folder
            |--filename
            |--source
                   |--database
                   |--annotation
                   |--image
                   |--flickrid
            |--owner
                   |--flickrid
                   |--name
            |--size
                   |--width
                   |--height
                   |--depth
            |--segmented
            |--object
                   |--name
                   |--pose
                   |--truncated
                   |--difficult
                   |--bndbox
                           |--xmin
                           |--ymin
                           |--xmax
                           |--ymax
            |--object
            ...
    有了xml tree物件之後,便可以開始讀取裡面的node。我自己會用到的為以下3種
    1. 直接遍歷屬於root的節點(不過需要事先知道要找的node在哪一層,才能再更進去找)
    root = tree.getroot()
    for elem in root:
        print(elem.tag, elem.attrib, elem.text)
    
    2. 利用iter()進行節點遍歷
    for elem in tree.iter():
        print(elem.tag, elem.attrib, elem.text)
    
    3.利用iter(tag="node_name")針對特定節點遍歷
    for elem in tree.iter(tag='bndbox'):
        print(elem.tag, elem.attrib, elem.text)
  • 寫入XML檔案
    要製作自己的資料集,寫入xml檔其實是最快的方式,接下來的紀錄是我用xml.dom.minidom來寫檔(VOC格式)
    1. 建立root
    import xml.dom.minidom    
    #create empty root
    doc = xml.dom.minidom.Document() 
    #create root node
    root = doc.createElement('annotation')
    doc.appendChild(root)
    2. 建立子節點並幫子節點接上文字節點(text部分視為末端點)
    nodeFolder = doc.createElement('folder')
    nodeFolder.appendChild(doc.createTextNode(folder))
    3. 建立將子節點接到根結點或其他子節點上
    root.appendChild(nodeFolder)
    4. 開檔以及將建立好的xml tree寫入
    f_n = "file_name.xml"
    fp = open(f_n, 'w')
    doc.writexml(fp, indent='\t', addindent='\t', newl='\n',
                                            encoding="utf-8")

    到這邊就完成了
    不過要注意的一點是節點順序,建立的順序錯誤,檔案的節點順序就會錯誤
以上就是有關於xml讀寫方式的小小記錄,不過我覺得寫入的方式有點冗長,或許用ElemntTree可以更快也更統一,之後有空會來研究看看。



參考資料:
https://pycoders-weekly-chinese.readthedocs.io/en/latest/issue6/processing-xml-in-python-with-element-tree.html

https://docs.python.org/2/library/xml.etree.elementtree.html

http://note.qidong.name/2017/11/write-xml-with-minidom/

https://docs.python.org/2/library/xml.dom.minidom.html

2019年1月4日 星期五

[筆記][電腦] Anaconda 安裝 Intel RealSense Python package

沒想到重新開始寫部落格竟然寫這個XD

目前碩二,實作的東西是利用深度學習模型來完成電腦視覺相關的任務,要做電腦視覺當然要有眼(攝)睛(影機)。因為要做的是堆疊物體的偵測,需要深度影像,但是kinect停產了...所以我們改用Intel RealSense D435~

不過RealSense的python package要裝在Anaconda,或是windows OS上,有點複雜,花了一點時間才裝好...也害怕以後忘記怎麼裝,因此在這裡紀錄一下

[6/12更新]
已經測試在anaconda直接使用pip安裝pyrealsense2不會有問題
應該是該團隊已經修正為可以簡單安裝的方式
如果使用
pip install pyrealsense2
指令安裝後使用有問題的話
再考慮自己make source的方式

好了廢話完畢,開始安裝

1. Git clone source code
首先去librealsense的github頁面下載或clone source code
(建議用git clone的方式,因為之後make的時候也會需要git,乾脆一次裝好)



2. Make source code
這裡要使用CMake,記得下載CMake Windows Source,解壓縮後打開<cmake path>/bin/cmake-gui.exe


source code的部分是剛剛clone下來的librealsense src code
build的destination則在librealsense src code的root directory下新建一個build
Group與Advanced兩個option要記得check
接下進行Configure


我之後會使用VS2015來build,也可以使用自己習慣的IDE來build
Finish之後進行第一次Configure
(這邊可能會發生CMake Error could not find git for clone of libusb,解決方式一是我一開始提到的安裝git,另一個方式是在error發生之後,在BUILD中,取消勾選BUILD_WITH_TM2,不過因為有看到有人說取消勾選並不會解決問題,所以我安裝git)

然後會出現一堆紅色底的configuration,


將BUILD>BUILD_PYTHON_BINDINGS勾選起來,再按一次Configure
然後又有error!!


在Ungrouped Entries>PYTHON_EXCUTABLE欄位中
填上你的conda environment中的python.exe路徑
以我電腦上的路徑就是C:\Users\(User name)\Anaconda3\envs\(Env name)\python.exe

然後就可以Generate VS專案
Generate好之後,點Open Project,VS就會被開啟,直接按Debug/Compile


等一段時間之後就make好了~

3. Install package to Anaconda virtual environment
make完成後,在librealsense/build/Debug中會有下列幾個檔案
"pybackend2.cp36-win_amd64.pyd"
"pyrealsense2.cp36-win_amd64.pyd" 
將這兩個檔案的檔名更改成
"pybackend2.pyd" 
"pyrealsense2.pyd"

接下來將這兩個檔案和"realsense2.dll"複製到C:\Users\(User name)\Anaconda3\envs\(Env name)\DLLs
還有"realsense2.lib"複製至C:\Users\(User name)\Anaconda3\envs\(Env name)\libs

4. Test installation
實際跑librealsense的python example看看有沒有裝成功
(env_name) D:\RealSense\librealsense\wrappers\python\examples>python python-tutorial-1-depth.py


出現以下畫面就是成功了!


感覺以後就會常常用到,因此做個紀錄,也希望幫助到大家

Reference: https://github.com/IntelRealSense/librealsense/issues/1657


2017年5月29日 星期一

[日本東北旅遊]青森小旅行part 2~弘前一日遊:餒菩噠村


搭乘100元循環巴士,我來到了餒濮噠村(ねぷた村),也就是我們常說的睡魔村。會被稱作睡魔村是因為裡面展示了青森名祭-睡魔季會用的燈籠還有鼓跟笛。睡魔祭是什麼呢?每年八月初在青森各地區會有睡魔祭遊行,而祭典中的主體是20多個超大的睡魔燈籠,燈籠上會畫上歌舞伎或神話故事相關的繪飾,並與短笛和太鼓樂隊以及跳人舞者的一起遊行。

在入口前面有很多小攤販兜售他們的商品,感覺很像宜蘭的””,當然很多都是跟蘋果相關的產品,蘋果派阿蘋果醋阿之類的。也有一個大型的紀念品店,不過因為紀念品店是直接跟睡魔村的出口連在一起地所以可以出來再逛

門票是550円,門票本身做得滿精緻的適合當書籤,一進去之後就能看到兩座主燈以及很多面太鼓,有趣的是大約半小時就有一次睡魔祭的太鼓表演及解說,所以錯過的話可以先去繞繞再走下來聽一遍,在震耳欲聾的太鼓聲中,看著緩緩旋轉的睡魔燈籠,彷彿真的置身於睡魔祭現場。


現場也有跳人舞者的服裝可以免費試穿拍照,不過因為我到的時候工作人員在忙我就沒有擅自拿來穿了。走上樓可以看到牆面上掛著各式各樣睡魔燈籠的圖案,也有小型的睡魔燈籠,例如給小朋友拿的金魚睡魔燈籠。

當然還有繪師們的介紹,其實一直很佩服繪師們有畫那麼大的圖案的能力,除了畫工很好以外,很難想像無法綜觀全圖的情況下為什麼有辦法不畫歪哈哈。

接下來是睡魔祭歷史的展示區,不過我最感興趣的是這個鬼女,根本是美與暴力的完美結合(?)

牆上有掛著各地區睡魔祭的舉辦日期,不管事大城市還是小村落都有屬於自己的睡魔祭。而最好的歐咪呀給就是這個金魚睡魔燈籠了,其實他也有出十二生肖版,而我去的時候是櫻花季,當然期間限定(日本人最愛期間限定)的櫻花版金魚睡魔燈籠也誕生了,如果比較想要特別版的話,記得到出口的紀念品店再下手喔。



如果你有時()()的話,也可以報名他們的體驗活動。像是可以自己畫金魚睡魔燈籠,還有做筷子、津輕鈴、津輕燒、蘋果鈴等。不過不要忘了事先預約。當然如果沒那麼多時間親自體驗,也可以看師傅們現場製作,看著他們聚精會神地盯著手中的半成品,一生懸命的想將眼前的作品雕成最好的傑作,就是一種超棒的享受!


我去的時候剛好遇到特殊活動期間,可以免費看三味弦表演,一天有三場表演而我剛好趕上第二場,一場會有兩個三味弦達人表演,有合奏也有solo,演奏者靈活的手指不停的換著壓弦的位置,右手用壓版拍打著弦,不僅奏出旋律也產生節奏,讓整場表演的層次非常豐富。


雖然睡魔村不大,但是內容物卻很豐富,而且交通方便不管是做一百元循環公車或一般市公車,甚至是日租腳踏車都可以,而且就位於弘前城的旁邊,很適合在行程中跟弘前城排在一起喔~

2017年4月22日 星期六

[日本東北旅遊]青森小旅行part1~弘前一日遊:蘋果公園

這次在沒有金援的狀況下
展開了一個人的青森之旅
至於為什麼要花大錢卻還是執意要去呢?
答案下一篇會揭曉
就讓我先來介紹一下我今天在弘前做了什麼吧

一大早七點半從仙台搭巴士前往弘前
到達弘前市的時候已經11:40了....
如果不用省錢的話強烈建議搭新幹線
弘前真的是一個好地方
從下午開始玩根本不夠

第一站:弘前蘋果公園
[交通方式:公車or租腳踏車]
這次規劃從弘前蘋果公園往回玩到餒菩噠村跟弘前城
一到弘前我就前往jr弘前站
車站門口除了可以看到很可愛的蘋果郵筒之外
最重要的就是旅遊情報中心啦

有了旅遊情報中心就可以獲得需要的資訊
比如說公車的使用方式還有蘋果派地圖

會抵達蘋果公園的公車有兩種
4~11月有TAMENOBU號
到蘋果公園只要200日圓
但一天只有四班


所以像我這種12點才抵達的人就只能搭原本的市區公車到常盤坂入口(jr站前面搭的話是六號月臺,往居森平|田代|相馬廳舍|大秋方向的都會到,車次滿多的不用擔心)
一趟是290日圓
下車後就會看到很大的蘋果公園指示牌
跟著走個5分鐘就到了
一路上不管什麼都蘋果化
人孔蓋啦鏡子啦全部變身

然後當你看到一大片蘋果園的時候就代表你到了!
蘋果是夏天的水果
我來的時間非常不對所以迎接我的就只有一棵棵光禿禿的蘋果樹
才剛長葉子呢....

上網查八月開始會開放採蘋果
一公斤200日圓非常便宜
如果還有機會能再來一次就好了

一片葉子都沒有的情況下只好去園區內的販賣部逛逛


裡面除了蘋果相關的歐咪壓給外
也有餐廳可以吃午餐以及"蘋果派"
一份360日圓

還不錯吃大概可以拿3.5顆星(自以為是什麼有名美食評論家
但是算單價貴的所以CP值不算高

蘋果公園佔地滿大的
除了蘋果樹以外也有露營場和兒童遊戲場
可以發現雖然季節還沒到
還是有許多家庭來這裡消磨時間
想要看整片蘋果公園的話
可以爬上這個小展望台吹吹風
景色也很漂亮((前提是你來對季節

有興趣的話更可以去小山內家看看
看看以前的農夫住在什麼樣的房子
逛完後我就搭TAMENOBU號前往餒菩噠村
公車站牌就在蘋果公園的門口

我覺得來的是時候的話可以多花點時間在這裡
哪怕只是吃個蘋果派配咖啡
只可惜我太晚到弘前了QQ

(青森小旅行...待續)

2017年2月20日 星期一

[日本生活]省錢大作戰!便宜食材哪裡買

來到日本最不能接受的就是物價很高這件事
身為一名窮學生
每餐如果都是500日圓(台幣150元)起跳
很快就吃土了QQ
所以
有點廚藝
再搭配日本宿舍必備的電磁爐及微波爐
自己煮
絕對是明智的選擇

不過!
身為小主婦小資女
食材的價格一定也要超級比一比
貨比三家不吃虧
不同的性質的商場價格絕對不同
而商品的多樣性及新鮮度也有差
所以接下來我要介紹的是
我在仙台如何採買食材
省下摳摳作為旅遊(美食)基金


1.朝市
便宜的東西:青菜、水果、蛋
營業時間:周一至周六9:00~18:00(日本國定假日休息)
特色商店:可樂餅


雖然說是朝市
但是其實並不像台灣的早市一樣早開
而且開到傍晚

在這裡你可以買到很便宜的水果與青菜
像我曾經買過300円的草莓
超甜超好吃!!
還有蜜柑也是200元就能get!
高麗菜或其他青菜也很便宜
而且很多家可易讓你好好的比價一番


另外在入口處的超市則是可以買到非常便宜的雞蛋
曾經只花150円買過LLsize的雞蛋
還有其他食材也是大份量然後非常好買

可惜的是朝市的肉舖只有一家
肉品看起來都很新鮮
也可以用秤的
但是單價有點高
所以我不太會去那邊買

仙台的朝市第二多的攤商就是海鮮店了
魚阿蝦阿章魚阿都很多
不過因為我不太會買海鮮也不太會處理所以就很少去光顧><

另外要介紹這一家總是大排長龍的可樂餅店
招牌可樂餅(廢話?)只要65円
很好吃
不過口味偏甜XDD
打算下次去試試看別的口味~

一個星期找一天來逛一下朝市
包你能用最少的錢買好一周份的營養
不過要注意的是日本國定假日
只會有少少的攤商開門
會很想哭喔QQ
所以要出門前請先確認一下是不是國定假日吧XDD

2.西友(Seiyu)
便宜的東西:豬肉、自有品牌的牛奶餅乾小食品
營業時間:24小時

三条宿舍區附近就有兩家西友超市(木町&八幡)
24小時營業的西友滿多東西都算便宜
通常會有兩罐大瓶飲料280円
或是餅乾任選兩包250元的優惠
還有日本的超市會將即期品降價出售
所以可以買到滿多便宜的即期土司、麵包等
算是一個省早餐錢的好方式
西友自有品牌的牛奶也很便宜

另外
最重要的是
"晚上七點多會有即期降價肉"
大部分都是七折左右
所以就可以花少少的錢買到便宜的肉!!!!
是食肉族的一大福音
不過是即期品所以要快點吃完就是了
而且便宜的肉人人都想要
所以在工作人員開始貼標前就會有很多叔叔阿姨在那裏虎視眈眈喔
要搶一定要快狠準阿
有小紅標就是降價後的價錢唷

不過沒有遇到即期肉品也沒有關係
西友本身的豬肉就滿便宜的
雖然是美豬不是日本國產豬肉
但還是很好吃

3.Aeon超市
便宜的東西:星期二火曜市
營業時間: 周一至周日9:00~22:00
aeon超市在aeon百貨的地下二樓
 超喜歡星期二晚上離開實驗室後去Aeon逛火曜市
真的可以撿到很多便宜!
尤其是肉、小雞腿等
特別便宜
可以看到很多媽媽們在搶購

Aeon另一個特色是東西很多
還有幫你調味好的豬肉片跟魚肉或其他食物
買好回家用平底鍋煎一間就是美味的一餐了
對家庭主婦來說真的很方便


其他哩哩叩叩的東西都可以在這裡找到
火曜市一樣有特價
不能錯過啊!


最後我發現一些生活用品如洗髮精也在火曜市的範疇裡
所以要補貨的話
星期二是個好日子 :D

4.業務超市
便宜的東西:牛肉、大包裝食材
營業時間:周一至周日10:00~22:00


辦火鍋趴踢的時候
牛肉一定要來業務買!!
非常便宜XD
當然還有很多俗又大碗的東西必須要在這裡買
比如說生烏龍麵

另外運氣好的話
可以找到台灣的蔥抓餅!!
蔥抓餅!!蔥抓餅!!

但買的時候最好看清楚
有時候會不小心眼殘買到貴貴的有機品@@

5.三条區附近野菜店
便宜的東西:偶爾可以撿到便宜蔬果
營業時間: 10:00~19:00(宇佐見商店)
10:00~21:00(太田商店)
宇佐見商店
騎車經過的話可以注意一下價錢
有時候擺在外面的蔬果會有很佛心的價格
比如說草莓298 :D
不過因為這種商店是時價
所以還是多多比較比較好

因為我平常都從片平回來所以比較常經過宇佐見商店
太田則是去從川內校區回來比較順路
所以只去過一兩次
另外上午去比較能買到低價的蔬菜
因為到晚上很多便宜的都被搶光了
樸實的宇佐見商店
以上就是我處處比較之後的心得
來日後的消費真的是太高啦
所以整理整理給大家參考
以後來東北大的朋友們就不怕餓肚子啦(?)