mapleboard on the table

我是楓葉板社群部落格板主Jonas~歡迎大家多發文、多回應,有任何問題歡迎寫信給我Jonas。                                               目前部落格網站有2個更動:1.草稿位置更改為博主首頁之內2.增加Emoji按鈕(按鈕的最左上角)。請大家留意並多加利用~    

剪片就算了,還要一直模糊路人的臉,這樣根本弄不完,我看還是明天引咎辭職好了

同學別急寫辭職信,看完這篇文章再寫還不急

這邊要跟大家介紹一個簡單好用的人臉偵測函式庫,而他有的功能似乎可以解決我們這位同學的問題︰

辨識出要保留的人臉+處理其他人臉

那就來安裝 ageitgey / face recognition

 

0.介紹ageitgey / face recognition

這是一個使用dlib 進行影像辨識與深度學習的函式庫,且在Labeled Faces in the Wild (Unrestricted, Labeled Outside Data Results)測試資料中有著99.38%正確率, 作者Adam Geitgey提供了包裝好且易於開發的python 函式庫給大家使用,所以就跟著以下步驟來把我們的楓葉板升級吧。

作者網站: https://adamgeitgey.com/

作者git : https://github.com/ageitgey

dlib 簡介: http://vis-www.cs.umass.edu/lfw/results.html#dlib

dlib 官網: http://dlib.net/

lfw 官網:http://vis-www.cs.umass.edu/lfw/

lfw dlib 結果 :http://vis-www.cs.umass.edu/lfw/results.html#UnrestrictedLb

 

1. 環境安裝dlib

Adam 在git 有說明如何安裝

所以就照著安裝吧

安裝前環境︰ debian stretch / python 3.5

接著我們就點到 installing on linux

這邊需要注意的是 dlib 19.6以後,會有些程式碼需要更高版本的gcc (>6.3)

但目前的gcc for Debian Stretch 只到 6.3,所以要安裝最新版本dlib的同學們請記得將gcc 手動升級

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential \
    cmake \
    gfortran \
    git \
    wget \
    curl \
    graphicsmagick \
    libgraphicsmagick1-dev \
    libatlas-dev \
    libavcodec-dev \
    libavformat-dev \
    libboost-all-dev \
    libjpeg-dev \
    liblapack-dev \
    libswscale-dev \
    pkg-config \
    python3-dev \
    python3-numpy \
    python3-pip \
    zip
sudo apt-get clean

這邊因為我們列出的是最基本的需要,如果有需要opencv功能記得安裝  libgtk2.0-dev 

 

2.安裝 face_recognition

在安裝face_recognition之前,可以先檢查以下library是否已安裝(Pillow是face_recognition 需要的library,而以下這些是Pillow 需要的額外library),因為小編第一次安裝就是因為缺少其中的zlib1g-dev 而compile失敗😭(compile時間約15~25分)

https://pillow.readthedocs.io/en/5.2.x/installation.html

sudo apt-get install libtiff5-dev\
    libjpeg-dev \
    zlib1g-dev \
    libfreetype6-dev \ 
    liblcms2-dev \ 
    libwebp-dev \
    libharfbuzz-dev \ 
    libfribidi-dev \
    tcl8.6-dev \ 
    tk8.6-dev \
    python-tk

在安裝face_recognition之前,記得將swap設定好,因為在這個過程會有程式庫compile,會用掉不少記憶體,如果沒有設定swap 記得暫時先將 swap 設成1G

sudo nano /etc/dphys-swapfile

< change CONF_SWAPSIZE=100 to CONF_SWAPSIZE=1024 and save / exit nano >

sudo /etc/init.d/dphys-swapfile restart

設定完就可以安裝

pip3 install face_recognition

設定完成記得還原swap設定

sudo nano /etc/dphys-swapfile

< change CONF_SWAPSIZE=1024 to CONF_SWAPSIZE=100 and save / exit nano >

sudo /etc/init.d/dphys-swapfile restart

安裝完成應該會看到以下訊息

Successfully installed Click-6.7 Pillow-5.2.0 dlib-19.13.1 face-recognition-1.2.2 face-recognition-models-0.3.0 numpy-1.14.5

 

3. 測試

首先先試試看 python 是否可以正常動作,進入python console 並輸入以下內容

import dlib
import face_recognition

如果安裝沒問題應該都可以正常動作,就可以先離開python console

來跑跑看範例吧

git clone https://github.com/ageitgey/face_recognition.git

下載完後,移動到examples 資料夾下,並試跑一個範例

cd /PATH/TO/GIT/CLONE/face_recognition/examples
python3 digital_makeup.py

沒有東西 沒關係 我們改寫範例 輸出結果成圖檔

打開digital_makeup.py 並將最後一行改寫成以下形式

pil_image.show()
pil_image.save( "digital_makeup.jpeg", "JPEG" )

原始圖

original picture

digital makeup 處理後結果

digital makeup

太好了 看起來沒有其他問題

 

4. 實際範例 - 路人馬賽克裝置 (opencv 需要安裝)

簡單來說就是把明星旁的路人們馬賽克掉

但這部份涉及肖像權,所以就無法將測試結果放上來

以下分段說明實做,可以參考以下三個檔案

 

1. blur_faces_on_webcam.py  

在找到臉的地方模糊化

如果不想裝opencv 也可以使用pillow 的imageFilter

http://pillow.readthedocs.io/en/5.1.x/reference/ImageFilter.html

 

2. identify_and_draw_boxes_on_faces.py

將想保留的人臉輸入known_face_encodings

 

3. facerec_from_vide_file.py

對每一個frame進行臉偵測並處理

 

程式核心部份︰

對每一個frame :

    如果有認得出來的人臉=> 保留

    否則=>馬賽克

(馬賽克實做方式不限,可以選擇多種filter搭配使用)

以下是人臉判斷部份程式碼;

for (top, right, bottom, left), face_encoding in zip(face_locations, face_encodings):
    # See if the face is a match for the known face(s)
    matches = face_recognition.compare_faces(known_face_encodings, face_encoding)
    # If a match was found in known_face_encodings, just use the first one.
    if True in matches:
        first_match_index = matches.index(True)
        draw.rectangle(((left, top), (right, bottom)), outline=(0, 0, 255))

        # Draw a label with a name below the face
        text_width, text_height = draw.textsize(name)
        draw.rectangle(((left, bottom - text_height - 10), (right, bottom)), fill=(0, 0, 255), outline=(0, 0, 255))
        draw.text((left + 6, bottom - text_height - 5), name, fill=(255, 255, 255, 255))
    else:
        box = (left,top,right,bottom)
        the_face=pil_image.crop(box)
        the_face = the_face.filter(ImageFilter.UnsharpMask(5, 400, 3))
        for i in range(10):  # with the BLUR filter, you can blur a few times to get the effect you're seeking
            the_face = the_face.filter(ImageFilter.MedianFilter(5))
        pil_image.paste(the_face, box)

但需要注意的是︰只有完全正面沒有被遮蔽的人臉才會被偵測,或許有機會調整其他偵測設定參數來讓人臉偵測也可以偵測側臉部份,但這部份小編輯還不清楚,有嘗試出結果的同學們在下面留言分享你是如何完成的吧。☺️

 

5. 實際範例 - 假文青產生器

最後附上的是參考blur_faces_on_webcam.py + identify_and_draw_boxes_on_faces.py

基本上跟上面做的事情差不多,只是這邊模糊化不會像上面誇張,然後把擷取出的臉

在下面寫下假文青標語,

塔搭! 文青感的自拍就完成了

這邊附上部份程式碼供大家參考

for top, right, bottom, left in face_locations:
    box = (left,top,right,bottom)
    the_face=pil_image.crop(box)
    the_face = the_face.filter(ImageFilter.UnsharpMask(5, 400, 3))

    for i in range(10):  # with the Median filter, you can blur a few times to get the effect you're seeking
        the_face = the_face.filter(ImageFilter.MedianFilter(5))

    pil_image.paste(the_face, box)
    draw.rectangle(((left, top), (right, bottom)), outline=(0, 0, 0))
    # Draw a label with a slogan below the face
    text_width, text_height = draw.textsize(slogan)
    draw.rectangle(((left, bottom - text_height*len(lines) - 10), (right, bottom)), fill=(0, 0, 0), outline=(0, 0, 0))
    y_text = bottom - text_height*len(lines)

    for line in lines:
        draw.text((left + 6, y_text - 5), line, fill=(255, 255, 255, 255))
        y_text += text_height

    output_box = (left,top,right,y_text)
    fake_hipster_selfie=pil_image.crop(output_box)

 

來看看結果如何吧!

原始圖

original picture

假文青產生器處理結果

fake hipster selfie generator

 

下次有機會在分享其他有趣的人臉辨識小程式




 

General-Purpose input/output(gpio)

(他是什麼)簡介:楓葉板是一個強大的單板電腦採用ARM Cortex-A7 高效能處理器更有著許多得擴充槽,支援相機頭,感測,

音效,通訊,控制等多樣化的擴充,提供使用者不論是學生,研究者或者是有志投入相關領域的人開發與測試嵌入式系統的世界。

本次教學涵蓋的內容在利用楓葉板控制Led燈開關與閃爍組合的行為。

1.你會需要:1)楓葉板一片 2)萬用板一片 3)不同顏色發光二極體(Led燈)*4 4)電阻*4 5)小電線*4 6)焊槍與錫條


以上材料皆可於購買楓葉板的網站統一採購。若要自行採購,請注意一下購買電阻的規格(220 Ohm)

    (小知識: 一般 I/O pin 輸出5v的電壓, 而一般Led的順向電壓為1.8v-3.3v左右,順向電流20為mA左右,因此要串連一顆(5-1.8)/0.02=160以上的電阻)

     

    2.GPIO 針腳介紹:

    我們一共有四十隻針腳。為了最有效率的運用每個針腳我們設計每一隻針腳會有不同的功能。而下圖針腳編號(Pin#)旁有有顏色的框框就是我們預設這隻針腳的功能。因此既然我們的主題為GPIO因此我們會用到的部份只有預 設功能是GPIO的針腳。這邊就是編號為11,13,24,26,28,30,32,34的針腳。

    萬用板

     

     

    (如何用)硬體配置:

    這次的示範我選擇使用編號為24,26,28,30的針腳

    依照圖示將LED,電阻與電線焊好後,將背面右上40pin的排針與楓葉板右上方40pin孔的排母結合就完成硬體的配置

     

     

    正面
    正面
    反面
    反面

     

     

    楓葉板
    楓葉板
    完成
    結合圖

     

     

    led

    (範例簡介)script範例:

    以下例子為讓所有LED一起亮一起暗(如果要停止程序請按鍵盤上的任意鍵)

    1.首先我要讓程式知道這是一個bash script,在開頭要加上

    # !/bin/bash

     

    2.我們要取得那四支pin腳的控制,並設定它們輸出訊號,因此先來了解一下要從哪裡控制,而它們的編號又是什麼。

     首先我們看到 24號pin腳它GPIO那欄的編號有一個數字6(詳細算法請看頁尾*****)那就是我們到時候要選擇這支pin腳時它的編號,然後我們

    教照下面的方式輸入:

    echo 6 > /sys/class/gpio/export
    echo "out" > /sys/class/gpio/gpio6/direction

    (告訴系統我們要控制24號pin腳並將它設為訊號輸出)

     

    3.至於如何LED暗與亮,我們亦以 24號pin腳的LED為例

    echo 1 > /sys/class/gpio/gpio6/value

    echo 0 > /sys/class/gpio/gpio6/value

    我們可以透過編輯不同的LED燈開與關的組合達到自己想要的閃爍模式

     

    4.最後最重要的一點是我們在結束這個程序後要,要告訴系統我們已經使用完這支pin腳,要將使用權還回去

    echo 6> /sys/class/gpio/unexport

    完整程式碼:

    #!/bin/bash
    ########################################################################################
    #
    # GPIO LED Demo program 
    # Copyright (C) Tony Chen <tony@ces.com.tw>
    # MapleBoard.org
    # 
    # This program is free software; you can redistribute it and/or modify
    # it under the terms of the GNU General Public License version 2 as
    # published by the Free Software Foundation.
    #
    ########################################################################################
    
    #export the GPIO ports PA6,PA7,PA8,PA9 that we want to drive the four LEDs.
    #the index of GPIO pin that we want to export is calculated as follow: 
    #GPIO-PAn ,(the English letter in front of the number(A is 1,B is 2 and so on )-1)*32+n 
    #And in this case it is (A-1)*32+n=n. 
    echo 6 > /sys/class/gpio/export
    echo 7 > /sys/class/gpio/export
    echo 8 > /sys/class/gpio/export
    echo 9 > /sys/class/gpio/export
    
    #Set direction for the GPIO pin
    echo "out" > /sys/class/gpio/gpio6/direction
    echo "out" > /sys/class/gpio/gpio7/direction
    echo "out" > /sys/class/gpio/gpio8/direction
    echo "out" > /sys/class/gpio/gpio9/direction
    iterate=4 
    echo "press 'ctrl+c' to terminate the program"
    while [ 1 ]; do
    	count=0
    	#this section of the program makes LEDs turn on and off altogether
    	while [ $count -lt $iterate ];do	
    		echo 1 > /sys/class/gpio/gpio6/value
    		echo 1 > /sys/class/gpio/gpio7/value
    		echo 1 > /sys/class/gpio/gpio8/value
    		echo 1 > /sys/class/gpio/gpio9/value
    		sleep 1
            	echo 0 > /sys/class/gpio/gpio7/value	
    		echo 0 > /sys/class/gpio/gpio8/value
    		echo 0 > /sys/class/gpio/gpio6/value
    		echo 0 > /sys/class/gpio/gpio9/value
    		sleep 1
    		let "count++"
    	done
    	k=$iterate*2
    	#make LEDs turn on and off two by two
    	while [ $count -lt $k ];do
    		echo 1 > /sys/class/gpio/gpio6/value
    		echo 1 > /sys/class/gpio/gpio7/value
    		sleep 0.5
    		echo 0 > /sys/class/gpio/gpio6/value
    		echo 0 > /sys/class/gpio/gpio7/value
    		sleep 0.1
    		echo 1 > /sys/class/gpio/gpio8/value
    		echo 1 > /sys/class/gpio/gpio9/value
    		sleep 0.5
    		echo 0 > /sys/class/gpio/gpio8/value
    		echo 0 > /sys/class/gpio/gpio9/value
    		sleep 0.1
    		let "count++"
            done
    	#make LEDs turn on and off sequentially
    	k=$iterate*3
    	while [ $count -lt $k ]; do
    		echo 1 > /sys/class/gpio/gpio6/value
    		sleep 0.5
    		echo 0 > /sys/class/gpio/gpio6/value
    		sleep 0.1
    		echo 1 > /sys/class/gpio/gpio7/value
    		sleep 0.5
    		echo 0 > /sys/class/gpio/gpio7/value
    		sleep 0.1
    		echo 1 > /sys/class/gpio/gpio8/value
    		sleep 0.5
    		echo 0 > /sys/class/gpio/gpio8/value
    		sleep 0.1
    		echo 1 > /sys/class/gpio/gpio9/value
    		sleep 0.5
    		echo 0 > /sys/class/gpio/gpio9/value
    		sleep 0.1
    		let "count++"
    	done
    	k=$iterate*4
    	#make LEDs glow randomly
    	while [ $count -lt $k  ]; do
    		rdmN=$(( ( RANDOM % 4 )  + 1 ))
    		case "$rdmN" in
    		1)echo 1 > /sys/class/gpio/gpio6/value
    			sleep 0.5
    			echo 0 > /sys/class/gpio/gpio6/value
    			sleep 0.1
    		;;
    		2)echo 1 > /sys/class/gpio/gpio7/value
    			sleep 0.5
    			echo 0 > /sys/class/gpio/gpio7/value
    			sleep 0.1
    		;;
    		3)echo 1 > /sys/class/gpio/gpio8/value
    			sleep 0.5
    			echo 0 > /sys/class/gpio/gpio8/value
    			sleep 0.1
    		;;
    		4)echo 1 > /sys/class/gpio/gpio9/value
    			sleep 0.5
    			echo 0 > /sys/class/gpio/gpio9/value
    			sleep 0.1
    		esac
    		let "count++"
    	done
    	k=$iterate*6
    	#make LEDs glow randomly
    	while [ $count -lt $k  ]; do
    		rdmN=$(( ( RANDOM % 8 )  + 1 ))
    		case "$rdmN" in
    		1)echo 1 > /sys/class/gpio/gpio6/value
    			sleep 0.1
    		;;
    		2)echo 1 > /sys/class/gpio/gpio7/value
    			sleep 0.1
    		;;
    		3)echo 1 > /sys/class/gpio/gpio8/value
    			sleep 0.1
    		;;
    		4)echo 1 > /sys/class/gpio/gpio9/value
    			sleep 0.1	
    		;;
    		5)echo 0 > /sys/class/gpio/gpio6/value
    			sleep 0.1
    		;;
    		6)echo 0 > /sys/class/gpio/gpio7/value
    			sleep 0.1
    		;;
    		7)echo 0 > /sys/class/gpio/gpio8/value
    			sleep 0.1
    		;;
    		8)echo 0 > /sys/class/gpio/gpio9/value
    			sleep 0.1
    		esac
    		let "count++"	
    	done
    	
    done
    
    
    echo "Thanks for using this script."
    #release the ports that we used
    echo 6 > /sys/class/gpio/unexport
    echo 7 > /sys/class/gpio/unexport
    echo 8 > /sys/class/gpio/unexport
    echo 9 > /sys/class/gpio/unexport
    
    exit 0

    請直接將程式碼複製下來存在製作一個demo.sh檔案存在Documents

    將all.sh丟到 楓葉板的目錄中:

    開啟terminal 連到楓葉板

    $ssh mpl1@your_mapleboards_ID

     

    執行all.sh

    $sudo bash /home/mpl1/demo.sh

     

    個別範例

    請按任一鍵結束程序(請看頁尾####)

    隨機1

    #!/bin/bash
    #random1
    #export the ports that we what to use
    echo 6 > /sys/class/gpio/export
    echo "out" > /sys/class/gpio/gpio6/direction
    echo 7 > /sys/class/gpio/export
    echo "out" > /sys/class/gpio/gpio7/direction
    echo 8 > /sys/class/gpio/export
    echo "out" > /sys/class/gpio/gpio8/direction
    echo 9 > /sys/class/gpio/export
    echo "out" > /sys/class/gpio/gpio9/direction
    
    if [ -t 0 ]; then stty -echo -icanon -icrnl time 0 min 0; fi
    while [ -z "$keypress" ]; do
    	rdmN=$(( ( RANDOM % 4 )  + 1 ))
    	case "$rdmN" in
    	1) echo 1 > /sys/class/gpio/gpio6/value
    		sleep 0.5
    		echo 0 > /sys/class/gpio/gpio6/value
    		sleep 0.1
    	;;
    	2)echo 1 > /sys/class/gpio/gpio7/value
    		sleep 0.5
    		echo 0 > /sys/class/gpio/gpio7/value
    		sleep 0.1
    	;;
    	3)echo 1 > /sys/class/gpio/gpio8/value
    		sleep 0.5
    		echo 0 > /sys/class/gpio/gpio8/value
    		sleep 0.1
    	;;
    	4)echo 1 > /sys/class/gpio/gpio9/value
    		sleep 0.5
    		echo 0 > /sys/class/gpio/gpio9/value
    		sleep 0.1
    	esac
    	read keypress
    done
    if [ -t 0 ]; then stty sane; fi
    
    #release the ports that we used
    echo "Thanks for using this script."
    echo 6 > /sys/class/gpio/unexport
    echo 7 > /sys/class/gpio/unexport
    echo 8 > /sys/class/gpio/unexport
    echo 9 > /sys/class/gpio/unexport
    
    exit 0

    隨機2

    #!/bin/bash
    #random2
    #export the ports that we what to use
    echo 6 > /sys/class/gpio/export
    echo "out" > /sys/class/gpio/gpio6/direction
    echo 7 > /sys/class/gpio/export
    echo "out" > /sys/class/gpio/gpio7/direction
    echo 8 > /sys/class/gpio/export
    echo "out" > /sys/class/gpio/gpio8/direction
    echo 9 > /sys/class/gpio/export
    echo "out" > /sys/class/gpio/gpio9/direction
    
    if [ -t 0 ]; then stty -echo -icanon -icrnl time 0 min 0; fi
    while [ -z "$keypress" ]; do
    	rdmN=$(( ( RANDOM % 8 )  + 1 ))
    	case "$rdmN" in
    	1) echo 1 > /sys/class/gpio/gpio6/value
    		sleep 0.1
    	;;
    	2)echo 1 > /sys/class/gpio/gpio7/value
    		sleep 0.1
    	;;
    	3)echo 1 > /sys/class/gpio/gpio8/value
    		sleep 0.1
    	;;
    	4)echo 1 > /sys/class/gpio/gpio9/value
    		sleep 0.1	
    	;;
    	5)echo 0 > /sys/class/gpio/gpio6/value
    		sleep 0.1
    	;;
    	6)echo 0 > /sys/class/gpio/gpio7/value
    		sleep 0.1
    	;;
    	7)echo 0 > /sys/class/gpio/gpio8/value
    		sleep 0.1
    	;;
    	8)echo 0 > /sys/class/gpio/gpio9/value
    		sleep 0.1
    	esac
    	read keypress		
    done
    if [ -t 0 ]; then stty sane; fi
    
    #echo "You pressed '$keypress' after $count loop iterations"
    echo "Thanks for using this script."
    echo 6 > /sys/class/gpio/unexport
    echo 7 > /sys/class/gpio/unexport
    echo 8 > /sys/class/gpio/unexport
    echo 9 > /sys/class/gpio/unexport
    
    exit 0

    依序

    #!/bin/bash
    #sequential
    #export the ports that we what to use
    echo 6 > /sys/class/gpio/export
    echo "out" > /sys/class/gpio/gpio6/direction
    echo 7 > /sys/class/gpio/export
    echo "out" > /sys/class/gpio/gpio7/direction
    echo 8 > /sys/class/gpio/export
    echo "out" > /sys/class/gpio/gpio8/direction
    echo 9 > /sys/class/gpio/export
    echo "out" > /sys/class/gpio/gpio9/direction
    
    if [ -t 0 ]; then stty -echo -icanon -icrnl time 0 min 0; fi
    while [ -z "$keypress" ]; do
    	echo 1 > /sys/class/gpio/gpio6/value
    	echo 1 > /sys/class/gpio/gpio7/value
    	sleep 0.5
    	echo 0 > /sys/class/gpio/gpio6/value
    	echo 0 > /sys/class/gpio/gpio7/value
    	sleep 0.1
    	echo 1 > /sys/class/gpio/gpio8/value
    	echo 1 > /sys/class/gpio/gpio9/value
    	sleep 0.5
    	echo 0 > /sys/class/gpio/gpio8/value
    	echo 0 > /sys/class/gpio/gpio9/value
    	sleep 0.1
    	read keypress
    done
    if [ -t 0 ]; then stty sane; fi
    
    #release the ports that we used
    echo "Thanks for using this script."
    echo 6 > /sys/class/gpio/unexport
    echo 7 > /sys/class/gpio/unexport
    echo 8 > /sys/class/gpio/unexport
    echo 9 > /sys/class/gpio/unexport
    
    exit 0

    兩個兩個

    #!/bin/bash
    #two_by_two
    #export the ports that we what to use
    echo 6 > /sys/class/gpio/export
    echo "out" > /sys/class/gpio/gpio6/direction
    echo 7 > /sys/class/gpio/export
    echo "out" > /sys/class/gpio/gpio7/direction
    echo 8 > /sys/class/gpio/export
    echo "out" > /sys/class/gpio/gpio8/direction
    echo 9 > /sys/class/gpio/export
    echo "out" > /sys/class/gpio/gpio9/direction
    
    if [ -t 0 ]; then stty -echo -icanon -icrnl time 0 min 0; fi
    while [ -z "$keypress" ]; do
    	echo 1 > /sys/class/gpio/gpio6/value
    	echo 1 > /sys/class/gpio/gpio7/value
    	sleep 0.5
    	echo 0 > /sys/class/gpio/gpio6/value
    	echo 0 > /sys/class/gpio/gpio7/value
    	sleep 0.1
    	echo 1 > /sys/class/gpio/gpio8/value
    	echo 1 > /sys/class/gpio/gpio9/value
    	sleep 0.5
    	echo 0 > /sys/class/gpio/gpio8/value
    	echo 0 > /sys/class/gpio/gpio9/value
    	sleep 0.1
    	read keypress
    done
    if [ -t 0 ]; then stty sane; fi
    
    #release the ports that we used
    echo "Thanks for using this script."
    echo 6 > /sys/class/gpio/unexport
    echo 7 > /sys/class/gpio/unexport
    echo 8 > /sys/class/gpio/unexport
    echo 9 > /sys/class/gpio/unexport
    
    exit 0

    max-width: 100%; height: auto;

    全部

    #!/bin/bash
    #all
    #export the ports that we what to use
    echo 6 > /sys/class/gpio/export
    echo "out" > /sys/class/gpio/gpio6/direction
    echo 7 > /sys/class/gpio/export
    echo "out" > /sys/class/gpio/gpio7/direction
    echo 8 > /sys/class/gpio/export
    echo "out" > /sys/class/gpio/gpio8/direction
    echo 9 > /sys/class/gpio/export
    echo "out" > /sys/class/gpio/gpio9/direction
    
    if [ -t 0 ]; then stty -echo -icanon -icrnl time 0 min 0; fi
    while [ -z "$keypress" ]; do
    	echo 1 > /sys/class/gpio/gpio6/value
    	echo 1 > /sys/class/gpio/gpio7/value
    	echo 1 > /sys/class/gpio/gpio8/value
    	echo 1 > /sys/class/gpio/gpio9/value
    	sleep 1
            echo 0 > /sys/class/gpio/gpio7/value	
    	echo 0 > /sys/class/gpio/gpio8/value
    	echo 0 > /sys/class/gpio/gpio6/value
    	echo 0 > /sys/class/gpio/gpio9/value
    	sleep 1
    	read keypress
    done
    if [ -t 0 ]; then stty sane; fi
    
    echo "Thanks for using this script."
    #release the ports that we used
    echo 6 > /sys/class/gpio/unexport
    echo 7 > /sys/class/gpio/unexport
    echo 8 > /sys/class/gpio/unexport
    echo 9 > /sys/class/gpio/unexport
    
    exit 0

     

     

    ——————————————————————————————————————————————————————————————————————

     

    *****實際上它們編號的算法是數字前面的英文字(A代表1 B代表2  以此類推)-1,乘與32,最後再加上那個數字

            以24號pin腳為例(GPIO-PA6) :                                (A-1)*32+6=6;

            以34號pin腳為例(GPIO-PE15):                              (E-1)*32+15=133

    ####這一部份的程式在感應到按鍵以前會繼續執行迴圈的,而迴圈裡面的內容就是我們要這四顆LED燈閃爍的模式

    if [ -t 0 ]; then stty -echo -icanon -icrnl time 0 min 0; fi
    while [ -z "$keypress" ]; do
    	
            #your pattern
        
    	read keypress
    done
    if [ -t 0 ]; then stty sane; fi



    楓葉板維基條目

    jonas  2018-06-29   留言:0

    楓葉板(英語:MapleBoard),是一種採用ARM Cortex-A系列[0]應用處理器及開源Linux作業系統[1]的多面向全方位單板電腦[2],可作為學習板、應用板、開發板[3]、測試板、發想板、DIY板等之用。楓葉板採用Web桌面環境[4][5],可在遠端瀏覽器上,操作楓葉板,讓使用者方便操作。並且擁有規劃完整的社群,能讓使用者一起討論、分享與交換心得。楓葉板開發的初衷,是希望從小學生到退休人員,甚至想開創第二事業生涯的人,不分男女老幼、教育程度、工作經驗及成長背景等,都可學習使用開源楓葉板,培養編寫程式,應用電腦的專長,並在過程中提升資訊科技應用與創新能力。

     

    楓葉板 

                                              MP130楓葉板單板電腦

    楓葉板Web DE

                                                 楓葉板Web桌面環境

     

    MP130楓葉板爲開源楓葉板計劃的第一個產品,其研發設計和軟、硬體整合,均由楓葉板社群成員完成。楓葉板採用ARM Cortex-A7[6]四核心應用處理器,具有高速運算處理能力。豐富完整的IO介面,可以充分支援各種場合所需的輸入、輸出及網路通訊需求。擴充卡插槽,可支援各種顯示、相機、多功能輸出入、控制、感測、遙控、音效、加密解密、通訊等多樣化擴充卡,運用領域廣泛。 

     

    楓葉板正面照

     

    MP130 開放源碼楓葉板硬體規格

    應用處理器 CPU Quad ARM Cortex-A7 (H3)
    Frequency 1.3GHz
    L2 Cache 512KB
    記憶體 Technology DDR3 1600 MHz
    On-board memory 1GB
    顯示器 Display Engine Up to 4096x4096
    Video Engine Up to 1080p@60fps
    GPU ARM Mali400 MP2
    HDMI V1.4 output with HDCP1.2
    影像系統 CSI 5M CMOS sensor support
    Capture Resolution Up to 1080p@30fps
    網路 Speed 10/100Mbps
    Transceiver Internal Phy
    Connector RJ45 with 2 LED
    聲音編解碼器 ADC 2-ch 92dB
    DAC 2-ch 100dB
    I2S/PCM Interface 32-bit 8KHz ~ 192KHz
    聲音輸出入 Input Stereo line-in phone jack
    Ouput Stereo line-out phone jack
    儲存空間 eMMC 8GB, 8-bit I/F, V4.41
    microSD SD2.0 microSD Slot
    串列通訊埠 UART 3-pin Header + 5V-pin
    指示燈 Power ON / OV 1 LED
    Status 2 LEDs
    按鍵與跨接器 Power, Reset, User 3 Buttons
    Uboot 1 Jumper
    擴充插槽 UART 3 ports
    I2C 2 ports
    SPI 1 port
    I2S/PCM 2 ports
    SDIO 1 port V2.0
    CSI 8 bits
    USB2.0 2 ports Host
    GPIO 24 ports
    IR-RX 1 port
    電源 Source DC-IN Jack
    DC-IN 5V 3A
    外觀 Dimensions (W x L) 85 mm x 100 mm
    Height 18 mm
    Weight 58 g

     

    楓葉板體積小、重量輕。長寬高分別爲85mm、100mm、18mm,是小尺寸全功能的單板電腦,可輕鬆靈活的嵌入至各種設備或裝置中。重量58公克,小巧輕便、方便攜帶。輕薄短小的外形與體積,適合行動、飛行等相關裝置設備,例如遙控空拍機[10]之應用。楓葉板之軟、硬體均採開放源碼模式[12],公開軟體的原始碼和硬體的電路設計,鼓勵使用者學習、研究、改良和創新。任何個人、任何團體、任何機構和組織都可加以運用,具有很大的彈性與發揮空間。MP130四核心開放源碼楓葉板也因此能夠持續地改良、更新,在裝置功能與應用上不斷的進步與成長。

    前方連接器

    前方連接器

     

    後方連接器

    後方連接器

    MP130楓葉板40Pin擴充插槽接腳圖

    3rd FUNC 2nd FUNC GPIO Pin# Pin# GPIO 2nd FUNC 3rd FUNC
    GND 1 2 GND
    JTAG-MS UART2-TX GPIO-PA0 3 4 NC
    JTAG-CK UART2-RX GPIO-PA1 5 6 AP-RESET#
    JTAG-DO UART2-RTS GPIO-PA2 7 8 GPIO-PA13 SPI1-CS UART3-TX
    JTAG-DI UART2-CTS GPIO-PA3 9 10 GPIO-PA14 SPI1-CLK UART3-RX
    GPIO-PC4 11 12 GPIO-PA15 SPI1-MOSI UART3-RTS
    GPIO-PC7 13 14 GPIO-PA16 SPI1-MISO UART3-CTS
    DI-TX TWI0-SCK GPIO-PA11 15 16 GPIO-PA18 PCM0-SYNC TWI1-SCK
    DI-RX TWI0-SDA GPIO-PA12 17 18 GPIO-PA19 PCM0-CLK TWI1-SDA
    S-TWI-SCK GPIO-PL0 19 20 GPIO-PA20 PCM0-DOUT
    S-TWI-SDA GPIO-PL1 21 22 GPIO-PA21 PCM0-DIN
    SPDIF-OUT GPIO-PA17 23 24 GPIO-PA6
    SPI0-MOSI GPIO-PC0 25 26 GPIO-PA7
    SPI0-MISO GPIO-PC1 27 28 GPIO-PA8
    SPI0-CLK GPIO-PC2 29 30 GPIO-PA9
    SPI0-CS GPIO-PC3 31 32 GPIO-PE14
    NC 33 34 GPIO-PE15
    VCC-3V3 35 36 VCC-5V
    VCC-5V 37 38 VCC-5V
    GND 39 40 GND

     

    Maple GNU/Linux 作業系統

    Maple GNU作業系統

     

    Maple GNU/Linux作業系統,為一功能完整且針對楓葉板應用需求所設計的作業系統,能連結、整合和管理楓葉板單板電腦的軟、硬體資源。 Maple GNU/Linux作業系統衍生自Debian[13] GNU/Linux 作業系統,故其操作及使用方法和 Debian GNU/Linux 相同。

    Maple 作業系統提供 MapleWebDE網頁桌面環境,可由此進行系統管理設定,啓動應用程式執行,及開發相關應用程式等等。Maple GNU/Linux作業系統也提供標準的文字模式 Unix Shell[14] ,可藉由輸入 Shell 命令,進行系統管理、使用者設定、安全設定、啓動應用程式執行等等。

    Maple 作業系統提供完整的網路連線能力,從實體層的相關驅動程式,到資料鏈接層[15]網路層[15-1]傳輸層[15-2],以及更高層等。 Maple 作業系統支援各種常用的通訊協定[16]網路管理[17]公用程式[19],可隨着不同的應用場合,選擇使用。

    Maple 作業系統提供完整的 GNU 程式開發工具鏈[20]GNU Build 系統[20-1]GNU 除錯系統[21],可用來開發 C/C++ 以及其他程式語言應用程式。 Maple作業系統也支援 Python 、 Java 、 Perl 、 PHP 、 Javascript 等直譯式程式語言[22]開發應用程式。

    Maple 作業系統還提供豐富的公用程式庫[24]中介軟體[25],可供應用程式呼叫使用。

    Maple 作業系統採用Debian套件管理[26]系統,提供三萬多個套件軟體,隨需要可從Maple 套件管理和發行管理[27]伺服器下載安裝。

     

    楓葉板在人工智慧上的應用機會

    楓葉板可以做爲人工智慧深度神經網路[28]推論引擎[31][32](Inference Engine)或是邊緣裝置(Edge Device)。先在大型的深度神經網路訓練系統,經過訓練學習後,得到成功的深度神經網路,然後將此深度神經網路放入楓葉板,即可讓楓葉板執行人工智慧深度神經網路任務,例如圖像辨識分類、智慧感測控制等等。因爲楓葉板體積小功耗少成本低,可將多數個楓葉板組成符合經濟效益之運算叢集[34](Cluster),然後利用深度學習框架的分散平行處理架構,例如Tensorflow[40],成爲高效能之推論引擎或邊緣裝置。人工智慧的應用往往需要龐大的資料,楓葉板很適合設計成各種資料擷取[41]裝備,大量快速採集各種數據,提供給深度學習訓練用。

     

    楓葉板、BeagleBoard樹莓派

    單板電腦的起源,是因為各系統晶片[42]製造廠爲了讓系統設計工程師了解其系統晶片的效能,而推出各種評估板[44]。評估板把系統晶片的絕大部份功能都設計利用出來,因此相當複雜,電路板面積龐大,成本高昻,約在五、六千美元到一萬美元上下。通常很少由個人購買,大部分是公司、機構等購買。系統晶片製造廠之一德州儀器[45]公司相關之BeagleBoard[46]計劃,於2008[46]年推出一精簡版的開源評估板,面積不到10cm x 10cm,價格不到一百美元。BeagleBoard的推出,立刻引起工程師們個人的購買風潮,銷量打破以前評估板想像不到的大量,產生很多工程師個人的開發計劃,形成開源BeagleBoard社群。社群成員間相互技術支援,不再需要依靠原廠,徹底改變了評估板的遊戲規則。英國的樹莓派基金會[48]基於全面推廣數位應用的目標,於2011[48]年推出售價三十元上下的單板電腦樹莓派,打破過去評估板限於工程師使用的領域,讓一般社會大衆廣泛學習利用單板電腦。樹莓派開創了電腦應用的新局面,帶來劃時代的影響。

    楓葉板社群鑑於BeagleBoard和樹莓派的成功及影響,深入瞭解到其中最精彩的部分包括利用開源力量,集衆志開發單板電腦及相關之作業系統,以及開源系統晶片[50]之開發設計,和在地社群的建立與經營,而不止是應用單板電腦而已。楓葉板社群因此展開設計製作一系列楓葉板單板電腦,開發Maple GNU/Linux作業系統和楓葉板Web桌面環境,建立楓葉板軟體套件伺服器,並計劃將來加入開源系統晶片開發專案。

     

    楓葉板社群

    楓葉板社群是由一群對開源嵌入式系統之技術、應用、行銷、企劃等有興趣的人士所組成,包括工程師、教師、學生、發明家、藝術家、創業家及各類專業人士等。目的在於推廣、提昇、支援開源嵌入式系統的發展。楓葉板社群注重開源的推廣與應用,透過開源的大力推廣,對於個人、社群和整體社會的未來發展產生積極影響。楓葉板社群以科技、開源、創客[51]和教育爲四大主題。藉着網路論壇、部落格、郵件列表[53][54]、即時通訊、各種定期、不定期研討會、訓練課程、工作坊、年會等活動連結一起。藉着不斷提升自我和群組能力,創造價值,服務人群和社會。

     

    Tag:

    1.楓葉板

    2.樹莓派

    3.開源

    4.Linux作業系統

    5.創客

    6.人工智慧

    7.人工智能

     

    參考資料

    0. "ARM Cortex-A", Wikipedia

    1. "Linux", Wikipedia

    2. "Single-board computer", Wikipedia

    3. "Microprocessor development board", Wikipedia

    4. "Web desktop", Wikipedia

    5. Debian Wiki team, "DesktopEnvironment". Debian 2017年3月5日.

    6. "ARM Cortex-A7", Wikipedia

    10. Lock Sir周亦樂. "一定要知的無人機結構與飛行原理". 航拍機新手必讀!.DronesPlayer2016年5月1日.

    12. "Open-source model", Wikipedia

    13. "Debian", Wikipedia

    14. "Unix shell", Wikipedia

    15.  "Data link layer", Wikipedia

    15-1.  "Network layer", Wikipedia

    15-2.  "Transport layer", Wikipedia

    16. "Communication protocol", Wikipedia

    17. "Network management", Wikipedia

    19. "Utility software", Wikipedia

    20. "Toolchain", Wikipedia

    20-1. "GNU Build System", Wikipedia

    21. "GNU Debugger", Wikipedia

    22. "Interpreter (computing)", Wikipedia

    24. "Library (computing)", Wikipedia

    25. "Middleware", Wikipedia

    26. "APT (Debian)", Wikipedia

    27. "CD180 CeMOS/Cedar 軟體套件管理和發行管理雲端服務". 中鼎嵌入式系統股份有限公司.

    28. "Deep learning", Wikipedia

    31. "Inference engine", Wikipedia

    34. "Computer cluster", Wikipedia

    40. "Tensorflow", Wikipedia

    41. "Data acquisition", Wikipedia

    42. "System on a chip", Wikipedia

    44. "Microprocessor development board", Wikipedia

    45. "Texas Instruments", Wikipedia

    46. "BeagleBoard ", Wikipedia

    48. "Raspberry Pi Foundation ", Wikipedia

    50. "OpenRISC", Wikipedia

    51. "Maker Faire", Wikipedia

    53. "Mailing list", Wikipedia




    三城記之我愛台北

    Michelle  2018-06-25   留言:0

    終於要寫到台北了,這是最想寫也最難寫的一個,所以我把她放在最後。如果說北京代表著我的過去,漳州代表著我的現在,那麼台北對我來說,則意味著遙不可及的未來,或者說是我心目中的“夢想之城”吧!

    關於台北我已經寫了很多,但總覺得不夠,因為我對她的感情實在是太複雜了,絕非三言兩語就能說清楚。

    1

    台北是令我一見鐘情的城市,也是令我日久生情的地方,這兩者結合起來,使得她對於我產生了一種非常奇妙的吸引力與粘合力,讓我忍不住想一再靠近。每一次的歸來都帶給我強烈的幸福感,就好像回家了一樣,可是她終究不是我的家,於是接踵而至的是每一次離開時的不捨。這樣的過程重複了一次又一次,仿佛永無休止的循環似的,而我也心甘情願地被單純的熱愛驅策著,歸去來兮,周而復始,如同真實的人生一般。

    2

    對我這個如假包換的文藝青年來說,台北首先是一座名副其實的文藝之城。我愛她常年不斷的各種形式的藝文活動。藝術院線總有我喜歡的文藝片輪番上映,比如我上次來時剛好趕上奧斯卡頒獎前,台北讓我有機會把入圍影片先睹為快。

    她還有遍及城市各處的博物館、美術館,讓我這個看展狂魔如入寶地。更別提一年四季的電影展,藝術節和音樂季了。就算常年待在台北,也絕不會有一刻感到厭倦。

    3

    台北留給我太多獨一無二的美好回憶,我把它們記錄下來,生怕時間久了會淡忘,可是我發現,那些生活裡值得回味的美好瞬間仿佛自帶光環,就算再久也不會褪色,反而會在記憶深處變得更加清晰。

    在台北的無數個美好瞬間通通歷歷在目,就連某個夜晚走在孔廟附近的馬路上,腳底下熠熠閃光的地面,和拂面而過的涼爽的夜風,這貌似平淡的瞬間都帶著一種神秘的幸福感。我猜這就是人們口中常說的“小確幸”吧!而我在台北時時刻刻都能感受到。

    4

    最喜歡在節假日流連在人們聚集的場所,比如西門紅樓,花博園,紀州庵,華山,松山。。。喜歡感受在人群裡雖熱鬧卻不喧嘩的感覺,就像在跨年夜看完101的煙火,走過熙熙攘攘的信義區街頭,隨著擁擠的人流去坐捷運,卻發現秩序井然。這樣的台北,能給人強烈的安全感。

    從去年年初開始,我環島遊的腳步停留在了台北,後來的很多次,我每次都要在台北一地呆滿16天,即便這樣還常覺不夠。台北對我有種神奇魔力,使我不由自主地迷戀上她,把心和魂都留在了這裡。

    5

    公館周圍是我在台北最熟悉的地方,有一段時間我寫稿和翻譯的任務很重,常常每天跑去台大的圖書館,對著電腦奮筆疾書。有一次趕上大雨,被困在辜圖的門外,發短信求助,雖然最終也沒人來救我,可是也並不覺得太過慌張,因為台大是個讓人安心的地方,辜圖也是,雖然它曾經吞掉過我一把落在那裡的雨傘。

    辜圖外那棵我們的樹,我看過它四季的模樣,走過它生命的不止一個輪迴,連我自己也改變了模樣。

    6

    是的,台北在默默地改變著我,這是我從一開始就察覺到的。當我一次次在華山,松山流連,在真善美戲院看早場新上映的文藝片,去北車、雙連打卡(那是我第一次來台北時去過的地方),去市立美術館、當代藝術館看展,早上醒得太早無處可去,就跑去植物園看花,去大安森林公園看鳥,或是在羅斯福路,溫州街,青田街附近的巷子裡閒逛,在最安靜的清晨和最熱鬧的黃昏。。。我知道有什麼東西正在悄無聲息地一點點滲入到我的身體和靈魂裡去,讓我由一個徹頭徹尾的異鄉過客變成了因愛而與她結緣的人。

    7

    我們的氣場如此相似,就像毫無血緣關係卻莫名相愛的情侶。我知道這種愛並非一廂情願,因為她給予我太多回報,甚至超過了我的預期。所以我深信她是愛我的,如同我愛她一樣。

    有人曾經問過我這樣一個問題:你是因為一個人而愛上一座城,還是因為一座城而愛上一個人?對於台北來說,其實並不存在雞生蛋或蛋生雞的問題,它們是同時存在,相輔相成的,因為有了這樣的關係,使這愛變得更加堅固,更加持久,至少在我看來,它是可以天長地久,此生不渝的。

    8

    寫台北卻不知不覺寫了太多愛,沒辦法,動了真情的雙魚座就是這樣,無法保持客觀冷靜,也忘了理性是什麼。就算她不那麼完美,還有很多瑕疵,偶爾難免令我感到失望,但無傷大雅,也不會改變我對她的愛。

    我希望她永遠如我初見她時那般美好,充滿溫馨暖人的小確幸,快樂著,文藝著,像一個雖飽經滄桑卻純真依舊的美麗女子,默默地綻放著獨特的芳華。

    我愛你,台北。❤️

    9

     




    三城記 之漳州

    Michelle  2018-06-23   留言:0

    原本定在昨天下午坐火車回漳州,在火車上寫下關於漳州的部分,沒想到臨時又有事耽擱,把回去的日子拖到了下週。此刻我正在北京郊區一家叫做“原鄉裡”的民宿裡,窗外是耀眼的陽光和此起彼伏的鳥叫聲,陽光灑在屋外正在晾曬的杏乾上,明晃晃的,呈現出動人的橙黃色澤。

    1

    我是一個熱愛鄉村生活的人,一來到這裡就感到自在,仿佛回家了一樣。剛剛一直在微信上和人探討何去何從的問題。有的人生來就在一個地方,到老都不曾離開過,安穩的生活限制住了ta的視野和腳步,世界就是ta所看到的那麼大,有的人生來慣於漂泊,習慣了四海為家,不論去到哪裡,都能迅速適應環境,一生可以去很多地方,看很多風景,心胸和視野也會變得越來越開闊。

    2

    對於充滿好奇,不願為自己設限的我來說,未來也許不止於“三城”而已,我願意隨時隨地在陌生之地開始全新的生活。

    好了,回過頭來寫漳州。其實以前從沒想過,有一天會移居到這樣一座古老而落後的南方城市,但是因為機緣巧合,再加上我不是一個對於未來思考太多的人,於是去年夏天就帶著對於北京的厭倦和對南國生活的嚮往,跑去了那座不怎麼了解的福建小城,租了間單身公寓住下來了。

    3

    沒想到整整一年的時間這麼快就過去了,我對漳州從陌生到熟悉,甚至產生了感情。

    不知道是與生俱來,還是因為年紀大了,我熱愛一切古老的東西,老城,老房子,老玩意兒,古老的生活方式,而這些漳州通通都有。

    4

    我曾無數次步行穿過古城,看兩旁陳舊的店鋪,清晨店主人卸下門板,開始不慌不忙地做生意,也不過是經營一些傳統吃食或手工日用品,比如六塊錢一碗的鹵麵,敲敲打打的鐵器,竹編的器皿,清明前後出售的花花綠綠的紙花,不止是端午前後才有的香噴噴的肉粽。

    5

    而位於老城中心地帶的中山公園,也是我最常去的地方。尤其是初春木棉花開的時節,如火鳥般棲滿枝頭的巨大花朵,會猝不及防地怦然落地,驚醒了發呆的夢中人。

    我常常在鋪滿落花的草地上流連,真希望四月永遠不要過去,每天都能看到我最愛的紅色木棉。

    6

    天還沒熱起來之前,有一段時間我每天清晨都會去江濱散步,看水看花看鳥看雲,那時人也少,經常是一個人在公園裡走很久,都遇不到一個同路人。

    後來木棉花謝了,鳳凰花又開,還有黃燦燦的阿勃勒,紫色的大花紫薇,香氣撲鼻的雞蛋花。。。四時鮮花不斷,樹木長青。這是漳州最好的地方,也是最像台北的地方。在我不能去台北的日子,這些相似的美好之處便能暫時平復我的思念之情。

    7

    漳州的人也是可愛的,質樸,友善,熱情,見面兩三句話就能把你當做朋友,邀請你下次來喝茶。對了,喝茶是漳州人的日常,路邊的店鋪裡總少不了擺一張茶桌,三兩個朋友坐在一起,邊喝茶邊談生意。

    他們也愛喝酒,一到傍晚就開始呼朋喚友,到了天氣炎熱的夏天,夜裡一兩點鐘街上的大排檔還坐滿了人,推杯換盞喝到痛快,仿佛全世界就數這裡的人最懂得生活。

    8

    關於漳州,其實想寫的還有很多。除了好的,當然也有不好的,比如夏天熱過台北,最熱的時候根本沒法出門,比如城市中心太小,走來走去不過那幾個地方,比如觀念陳舊,連生意人都不思進取安於現狀,比如嚴重匱乏文藝生活,人們太過沉迷於吃吃喝喝。。。

    9

    在我看來,這是一座適合養老卻不適合奮鬥的城市,人們來到這裡,不知不覺就被傳染了,染上了惰性。

    也許將來我對漳州了解得更多更深入之後,會寫一本關於她的書吧!我也寄望於古城改造能為她帶來新東西,新觀念,新視野,新機遇。希望漳州能成為一座不止安逸,也能煥發出生機的理想之城。也許到了那一天,我才會真正留下來,把她當做自己的家。

     




    三城記 之北京

    Michelle  2018-06-20   留言:0

    先為前段時間的抽風刪帖和突然消失而道歉,了解我的人都知道,我不但是情緒多變,反復無常的雙魚女,而且還是身有頑疾的北京病人,成天有的沒的瞎折騰,不能用常理來判斷。本來放在別人身上,這麼丟人地瞎胡鬧之後,應該是從此銷聲匿跡沒臉再出來嚯嚯了,但是我不是奇葩嘛,奇葩的字典裡沒有不可能這兩個字,so,我就舔著臉又來了。🐮

    當然了,還有一個重要原因是,我發現沒有一個地方比這裡更適合安放我如同囈語般的文字了。是啊,我愛楓葉板社區,不管它是否長草,甚至成為荒原,至少我還可以自己種些花花草草在這裡,就當貢獻一點微薄之力吧!👩


    1

    回來有十多天了,本來原定在今天返回漳州,因為還有該見的人沒見,就推遲了兩天走,結果今明兩天成為我回來後最熱的兩天,高溫飆升到了35度。若不是未雨綢繆地帶了把遮陽傘出門,怕是要中暑了。

    寫寫我對離開半年的北京的印象吧。上次回來還是一月份,天氣尚冷,北京轟轟烈烈的胡同改造計劃正在如火如荼地進行中,我對她有了一些改觀。可是沒想到這次回來,不但沒能給我更多驚喜,反而令我感到失望。

    2

    我最熟悉的幾條胡同——五道營,國子監,方家胡同,楊梅竹斜街,統統變了味道,一些以前常去的咖啡館和喜歡的小店也不見了。每條胡同口都增設了崗哨和保安,不但顯得不倫不類,而且一副拒人於千里之外的架勢,使胡同失去了原有的親和力。

    在已經改造過的基礎上,墻面一律被粉刷成灰色,但大部分地方還是顯得百廢待興,地面被挖得亂七八糟,很多地方都被圍上了難看的藍色擋板,讓人只想匆匆而過,完全沒有了悠然閒逛的興致。

    3

    這趟回來,除了陪父母之外,惡補漳州缺少的文藝生活也是我的重要日程。十幾天來,我去了798,草場地,lens空間,今日美術館,無用空間,中央美院美術館,民生現代美術館等許多地方,看了N個展覽,其中不乏讓我驚喜和收穫良多的。我還和朋友一起,在週末午後的胡同裡看了一場頗為精彩的爵士演出,只是還沒來得及看一場電影。

    回來的日子裡,我見了兩撥過去的同事(其中一撥是二十年前的老同事),和老媽,二姨,老妹及可愛的小外甥女們團聚,略微彌補了一下身在異鄉無法體會到的親情的缺憾。

    4

    此刻我正坐在五道口的雕刻時光咖啡館,在等待另外一位以前的同事。窗外陽光燦爛,玻璃窗上殘留著斑駁的污漬,不知是哪天下的雨留下的,面前的桌椅沙發呈現出經年累月的陳舊感。剛剛發現,我最愛的三樓及露台已經不對外開放了。它看上去不再像從前那樣,充滿了文藝感,而是更像一個衰老而頹廢的人,在世上苟延殘喘了太久,渾身上下都寫滿了“疲倦”。

    5

    該怎麼描述我對於北京這座城市的感覺呢?愛麼?我覺得談不上。我並非一個容易日久生情的人,常常因為一面之緣而愛上一座城市,之後慢慢因了解而加深愛的程度,但初見時的印象仍很重要,若是第一眼不喜歡,就算相處得再久也很難改變。而北京,不是中途邂逅的某一座城市,她是我生于斯長于斯的地方,該算是“故鄉”了吧?

    可是糟糕了,她對於我來說卻完全沒有故鄉的感覺。有一次一位素未謀面的網友對我訴說她回鄉的感覺,我回她說,我是沒有故土的人。可是奇怪,我沒有故土,卻有鄉愁,我的鄉愁寄託在另一座城市——台北。

    6

    北京于我,就像寄居蟹的殼,她甚至不是我主動的選擇,而是命運安排我出生在這裡,所以哪怕與之共處了40幾年,我內心深處仍然沒有“家”的感覺。更何況她日復一日年復一年漸漸變得面目全非。

    有人對我說回去吧,她畢竟是你最熟悉的地方。可是別忘了,這個世界上就是有最熟悉的陌生人這種存在,對於一座城市來說也是一樣。我想說,假如你身在曹營心在漢地始終惦記著離開,那麼有朝一日真的離開了,你就再也不想回去了。

    7

    我是一個寄居在北京40幾載的異鄉人,她不是能給與我“家”的感覺的地方,就算逗留得再久,終究還是陌生之地啊!




    Blender 2.79 - Principled BSDF

    gava  2018-04-27   留言:0

    Blender 2.79已經推出半年了。

    最近才發現他的好blush   還好沒有相見太晚!!

     

    這次總共加了哪些新功能呢~?有興趣可見>> New in Blender 2.79b

    今天就跟大家介紹 Cycle render 裡的新 Node: Principled BSDF

    Blender_from_Disney

    Photo from YouTube

    說起 Principled BSDF 的發明~來自於Dinsey團隊!

    為了讓設計師可以更自由去調整材質,他們想到了一個把這些特性整合的Node!

    render_cycles_nodes_types_shaders_principled_example

    同時...也提出了這樣的思考:任何材質都會有些微的微光(或者說微反光)~即使材質是布料或紙等。更多詳見>>Everything has Fresnel

    或許在3D環境的純環境裡久了,會忽略真實環境裡其他的變數。

    這些些微的差異Principled BSDF Node也把他們做在一起了喔!讓我們開始來認識Principled BSDF Node吧!

     

     Principled BSDF 包含了我們常用的幾個shader node效果 ex:金屬,透明,烤漆,半透光材質...等。

    Principled BSDF Node

    可以不用疊很多個 Shader Node 來達到複合的效果。而且還可以搭配圖像材質做變化喔!實在是太方便了阿~~heart

    nodes

    更詳細的操作教學和範例看這邊>> How to Use Blender's new ULTIMATE Shader: Principled 

    小試一下~~看看我的"風中奇猴"  cheeky

    風中奇猴ejan's work

     




    為了跟上網路時代的腳步,現在最流行的video blog,簡稱vlog或是Youtuber !
    想成為網紅博主分享自己大小事的影像日誌,先撇開個人特色與創意不說, 最基本要下的功夫就是拍攝與剪接影片,再放上平台與網友分享就這麼簡單! Blender 3D動畫開源軟體,除了基本的建模、繪圖、內建引擎功能之外,原來還有影像剪輯功能! 可以匯入影片、聲音與圖片,就像專業的剪輯軟體一樣,有多個軌道可以匯入內容編輯與內建轉場特效。

    ve01

     

    影像匯入後的界面,多軌道的方式,可以自由拖拉影像長度與銜接影像!

    ve02

     

    當兩個影像銜接時,淡出淡入的轉場特效也是用堆疊軌道添加效果的方式,很簡單的操作概念!

    ve04-1

     

    影像色彩的部份也可以直接地用調色盤點選調整!若整體的色調換個特殊效果,例如:黃昏、日光,或是彌補拍攝上光線的問題,都是很容易修改操作的!

    ve05

    ve07-1

    當然還有許多進階的功能要繼續研究,因為Blender高規格的外觀,會讓沒有接觸過的人嚇到,先由簡單入門教學,只要你會用手機拍攝影片,丟進Blender試著剪輯看看,好像就離網紅的大門又近了些呢…哈哈哈(太天真)