2018年12月24日 星期一

智慧照顧


Design for Aging 高齡智慧照護創新計畫



智慧醫療創新趨勢:AI and robotics in the New Health era



專屬老人的最佳照護配備!!智慧照護手錶 - 守護天使800H之情境應用篇




智慧機器人網》雲端智慧照護系統

2018年12月23日 星期日

用Python開發XAXB小遊戲

小時候敏哥很常跟朋友玩XAXB小遊戲,首先雙方先選四個0-9不同的數字,然後猜對方的數字,對方必須回應XAXB,例如:1A2B表示有3個數字出現在答案中,其中一個位置對,另兩個位置不對,以此類推,直到有人猜出來為止。

Python程式碼如下:
import random
x=random.sample('1234567890',4)
print (x)
play=True
while play:
    y=input("輸入4個不同數字:")
    print (y)
    z = list(y)
    print (z)
    a=0
    for i in range(4):
        if(x[i]==z[i]):
            a=a+1
    b=0
    j=0
    while j < 4:
        k=0
        while k < 4:
            if j==k :
                k=k+1
                continue
            if(x[j]==z[k]):
                b=b+1
            k=k+1
        j=j+1
     
    print(a,"A", b, "B")
    if a == 4:
        play = False

2018年12月16日 星期日

用Python設計一個猜數字小遊戲

有關亂數用法請參考https://dotblogs.com.tw/chris0920/2010/10/25/18560

隨機產生整數
import random
import time
random.seed(time.time())
x = random.randint(0, 100)
print(x)

簡單猜數字小遊戲
import random
import time
random.seed(time.time())
x = random.randint(0, 100)
play = True
while play:
    y = input("請輸入一個數字:")
    if x == int(y) :
        print("恭喜您!答對了!")
        play = False
    elif x > int(y) :
        print("太小")
    elif x < int(y) :
        print("太大")

2018年11月25日 星期日

用Python實作UDP通訊程式


接收端程式
import socket

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)

PORT = 1060

s.bind(('192.168.1.8', PORT))
print('Listening for broadcast at ', s.getsockname())

while True:
    data, address = s.recvfrom(65535)
    print('Server received from {}:{}'.format(address, data.decode('utf-8')))

傳送端程式:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
PORT = 1060
network = '192.168.1.8'
s.sendto('Client broadcast message!456'.encode('utf-8'), (network, PORT))

為了方便進行單機測式,我們使用cmd應用程式,開啟後先執行命令 

1. cd C:\Users\user\AppData\Local\Programs\Python\Python37
2. 輸入Python
3.再把接收端程式輸入在cmd應用程式端
4.然後再Python工具中執行傳送端的應用程式



在Unity時間到即切換到下一個場景

我們延續一篇文章,多加上一個場景(Sense),命名為"2",在新的場景中隨便放一個物件。記得在Scenes In Build中加入"2"的場景。
其程式如下:
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class NewBehaviourScript : MonoBehaviour {
    private float startTime;
    private float alpha = 1.0f;
    [SerializeField]
    private int m_time = 8;
    [SerializeField]
    private CanvasGroup m_canvasGroup;
// Use this for initialization
void Start () {
startTime = Time.time;
      }

// Update is called once per frame
    void FixedUpdate()
    {
        if (Time.time - startTime > m_time)
        {
            if (alpha > 0)
            {
                alpha -= 0.01f;
                m_canvasGroup.alpha = alpha;
            }
            else
            {
                SceneManager.LoadScene("2", LoadSceneMode.Single);
            }
           
        }
}
}

在 Unity UI中加入具有漸層效果的圖片介面

1. 先在Assets目錄,按右鍵選擇New Import Asset,匯入新的影像。
2. 影像不能直接用在人機介面(UI)上,必須先轉成Sprite (2D and UI)才能使用,如下圖。
3.接下來我們新增一個Canvas物件,並在Canvas物件下分別產生 5個Image物件,在Image物件中,放入在步驟2做的一個Sprite。
4.撰寫程式
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class NewBehaviourScript : MonoBehaviour {
    private float startTime;
    private float alpha = 1.0f;
    [SerializeField]
    private int m_time = 8;
    [SerializeField]
    private CanvasGroup m_canvasGroup;
// Use this for initialization
void Start () {
startTime = Time.time;
      }

// Update is called once per frame
    void FixedUpdate()
    {
        if (Time.time - startTime > m_time)
        {
            if (alpha > 0)
            {
                alpha -= 0.01f;
                m_canvasGroup.alpha = alpha;
            }
        }
    }
}

2018年11月23日 星期五

用Python來查看南開科技大學校級研究中心-福祉科技與服務管理研究暨發展中心粉絲頁的資訊

臉書是現代人溝通的重要工具之一,透過臉書來分享自己當天參與活動或心情,大家不用碰面也能透過臉書瞭解好友的動態,粉絲頁則用來協助企業、品牌、或公眾人物分享動態資訊,方便和用戶溝通。

網址:https://www.facebook.com/gtsmrc.nkut是南開科技大學校級研究中心-福祉科技與服務管理研究暨發展中心的粉絲頁。




為了便於撰寫程式來存取臉書上的資訊以及兼顧到資訊安全,臉書開發Facebook Graph API,來協助開發者取得權仗。



按下上圖的"取得權仗",再按下粉絲頁存取權仗


把粉絲頁上網址:https://www.facebook.com/gtsmrc.nkut
後面的gtsmrc.nkut貼到Facebook Graph API上,如下圖



按下"提交"鈕,就可以發現南開科技大學校級研究中心-福祉科技與服務管理研究暨發展中心的粉絲頁的資訊。

import facebook
token = '請從Facebook Graph API取得權
fanpage_info = graph.get_object('gtsmrc.nkut', field = 'id') 
print(fanpage_info)  
print("Fanpage id = ", fanpage_info['id'])
# Get the message from a post.
post = graph.get_object(id='907568272765693_974099289445924', fields='message')
print(post['message'])

post_ids = ["907568272765693_955249167997603","907568272765693_948992145289972"]


for post_id in post_ids:
    post = graph.get_object(id=post_id, fields='message')
    print(post['message'])


執行結果:

2018年11月15日 星期四

用Python來爬圖,找出南開校園美景圖

經由前面幾篇文章,我們可以看到Python的在網路上爬文以及製作WORD文件的技術,今天我們就來看看爬圖的技術。在南開官網中有許多學校校園美景圖。


接下來我們就來討論如何下載這個網址上的圖片。



首先我們先測試下列程式


import requests
url='http://www.nkut.edu.tw/page2/photo.php?CID=1&Album_ID=2&ano='
r=requests.get(url)
print(r)

執行結果是:



表示網站存取成功
import requests
url='http://www.nkut.edu.tw/page2/photo.php?CID=1&Album_ID=2&ano='
r=requests.get(url)
print(r.text)

我在r物件中加上.text,就可以讀取HTML文章,其結果如下:



結果發現有一些亂碼,我們只要在程式中加入一行指令

import requests
url='http://www.nkut.edu.tw/page2/photo.php?CID=1&Album_ID=2&ano='
r=requests.get(url)
r.encoding=r.apparent_encoding
print(r.text)

執行結果如下:



利用BeautifulSoup中的find_all指令找出網頁中的含圖片的標籤,其程式如下:
import requests
from bs4 import BeautifulSoup

url='http://www.nkut.edu.tw/page2/photo.php?CID=1&Album_ID=2&ano='
r=requests.get(url)
r.encoding=r.apparent_encoding
soup =BeautifulSoup(r.text,'html.parser')
all_img=soup.find_all('img')
print(all_img)

執行結果




利用os來進行開檔、存檔等動作,其完整的程式如下:

import requests
from bs4 import BeautifulSoup
import os

url='http://www.nkut.edu.tw/page2/photo.php?CID=1&Album_ID=2&ano='
r=requests.get(url)
r.encoding=r.apparent_encoding
soup =BeautifulSoup(r.text,'html.parser')
all_img=soup.find_all('img')
for img in all_img:
   src=img['src']
   img_url='http://www.nkut.edu.tw/'+src
   print (img_url)
   root='C:/nkut_pic/'
   path = root + img_url.split('/')[-1]
   try:                             
      if not os.path.exists(root):
          os.mkdir(root)
      if not os.path.exists(path):
          r = requests.get(img_url)
          with open(path, 'wb') as f:
              f.write(r.content)
              f.close()
              print("文件保存成功")
      else:
               print("文件已存在")
   except:
           print("爬取失敗")

執行結果

http://www.nkut.edu.tw//files/adbannerplay/4_5643b90c.jpg
文件保存成功
http://www.nkut.edu.tw//files/adbannerplay/5_29d7fb68.jpg
文件保存成功
http://www.nkut.edu.tw//files/adbannerplay/6_28f3edec.jpg
文件保存成功
http://www.nkut.edu.tw//files/adbannerplay/7_8655f891.jpg

文件保存成功



2018年10月6日 星期六

Python從網路爬文到Word存檔

從網路可以取得許多資料,接下來若能把這些資料轉成Word檔,那就更完美了,記得要先安裝pip3 install python-docx。

import requests
from bs4 import BeautifulSoup
from docx import Document
from docx.shared import Inches

url = "http://www.nkut.edu.tw" 
re = requests.get(url) 
re.encoding='utf8'

soup = BeautifulSoup(re.text, 'html.parser')
html_inforamtion = soup.find('p')
print(html_inforamtion)

document = Document()
document.add_heading('南開科技大學', 0)
p = document.add_paragraph(html_inforamtion)
document.save('nkut.docx')

以下是print(html_inforamtion)的結果

Word的存檔路徑

查看輸出的Word檔

Python網路爬文

在這數位時代中,網路、網站、網頁已成為日常生活中不可以缺的元素,我們生活起居經常要上網查資料,假如我們能寫一支程式來過濾網路上的資訊,這一定是很棒的一件事。本篇文章就是要用Python網路爬蟲來收集資料。

想要從網頁中取得資料就要安裝requests套件

想要解構並擷取網頁資訊就要安裝beautifulsoup4套件

import requests
r = requests.get('http://www.google.com')
print (r.text)

執行結果:

如何讀取南開科技大學的網頁內容
import requests

url = "http://www.nkut.edu.tw" 
re = requests.get(url) 
re.encoding='utf8'
print(re.text)


判斷回傳的代碼
import requests
r = requests.get('http://www.nkut.edu.tw')
print(r.status_code)
if r.status_code == requests.codes.ok:
  print("OK")

執行結果


我們來嘗試網路爬文找出南開科技大學首頁上重要資訊內容
import requests
from bs4 import BeautifulSoup

url = "http://www.nkut.edu.tw" 

re = requests.get(url) 

re.encoding='utf8'

soup = BeautifulSoup(re.text, 'html.parser')
print(soup)

print("列印出第一頁的文字")
print(soup.find('p'))   

print("\n\n列印出id是counter的文字")
print(soup.find(id='counter')) 

print("\n\n列印出全部的文字")
print(soup.find_all('p')) 

print("\n\n列印出的文字")
print(soup.find('h1')) 


2018年10月4日 星期四

Python迴圈的美

本篇我們要學習Python迴圈的概念,我們就先以畫圓來說明,以下三行程式,分別表示匯入畫圖套件,第二行是指建立畫圖物件c,最後再畫圓。

import turtle

c = turtle.Turtle()

c.circle(100)



import turtle

c = turtle.Turtle()

c.circle(100)

c.left(10)

c.circle(100)

c.left(10)


上圖迴圈的寫法

import turtle
c = turtle.Turtle()
i = 0
while i < 2:
    c.circle(100)
    c.left(10)
    i += 1

因為圓有360度,每次都向左10度,只要連續轉36次,就會變得很好看

import turtle
c = turtle.Turtle()
i = 0
while i < 36:
    c.circle(100)
    c.left(10)

import turtle
c=turtle.Turtle()
for i in range(36):
    c.circle(100)
    c.left(10)
    i += 1

用遞迴的想法來設計
import turtle
c=turtle.Turtle()
def circle_recursion(i):

    if(i>0):
        c.circle(100)
        c.left(10)
        circle_recursion(i-1)
    return

circle_recursion(36)

接下來來看看IF
import turtle
c = turtle.Turtle()
i = 0
while i < 36:
    i += 1
    if i% 2 == 0:
        c.circle(100)
    c.left(10)
    
不妨把輸入程式觀察其形為

2018年9月30日 星期日

打好Python程式基礎


Python有一個很好用的套件-Turtle(海龜),初學者可以參考下面文件來學習。

第一個turtle程式:http://drweb.nksh.tp.edu.tw/student/lesson/A01/

1.畫一條線

import turtle

john = turtle.Turtle()

john.forward(100)


2. 更改線的顏色
import turtle

john = turtle.Turtle()
john.color("red")
john.forward(100)


3. 往上畫線
import turtle

john = turtle.Turtle()
john.color("red")
john.forward(100)
john.left(90)
john.forward(50)

4.畫長方形
import turtle

john = turtle.Turtle()
john.color("red")
john.forward(100)
john.left(90)
john.forward(50)
john.left(90)
john.forward(100)
john.left(90)
john.forward(50)


5. 畫正方形
import turtle

john = turtle.Turtle()
for i in [0,1,2,3]:
    john.forward(50)
    john.left(90)

另一種寫法
import turtle

john = turtle.Turtle()
for i in range(4):
    john.forward(50)
    john.left(90)

用函式來表示
import turtle

def drawRect():
    john = turtle.Turtle()
    for i in range(4):
        john.forward(50)
        john.left(90)

drawRect()

6.畫星星
import turtle 

star = turtle.Turtle()

for i in range(5):
    star.forward(50)
    star.right(144)
    
turtle.done()




進階練習

import turtle

def draw_diamond(some_turtle):
    some_turtle.left(30)
    some_turtle.forward(50)
    some_turtle.right(60)
    some_turtle.forward(50)
    some_turtle.right(120)
    some_turtle.forward(50)
    some_turtle.right(60)
    some_turtle.forward(50)
    some_turtle.right(150)

def draw_art():        
    # Instantiate a Screen object, window. Then customize window.
    window = turtle.Screen()
    window.bgcolor("white")     # set background color

    # Instantiate a Turtle object, brad. Then customize brad.
    brad = turtle.Turtle()
    brad.shape("turtle")      # see Turtle doc
    brad.color("blue")      # see Turtle doc
    brad.speed(0)             # 1 (slowest) to 10 (fastest). 0 means no animation.

    # Draw a circle with 36 diamonds. We rotate each diamond by 10 degrees at a time.
    for i in range (0, 36):      
        draw_diamond(brad)
        brad.right(10)

    # Draw a between middle of circle and the floor
    brad.right(90)
    brad.forward(200)
    
    # How to exit?
    window.exitonclick()      # click on the window to exit


# Invoke the procedure!
draw_art()

8. Turtle star
from turtle import *
color('red', 'yellow')
begin_fill()
while True:
    forward(200)
    left(170)
    if abs(pos()) < 1:
        break
end_fill()
done()

2018年9月16日 星期日

初遇Python,很好玩又受歡迎的程式語言


Python是2018年最受歡迎的程式語言,Python的優缺點可以參考:https://www.goinglearn.com.tw/programming-languages/144-python-優點與缺點,其優點是簡單易學,是最棒的初學者語言。雖然是簡單易學但又完整工法,同時支援程序導向、物件導向、和函式導向。最棒的是Python應用廣泛,有許多好用的函式庫可以支援。

我們來看看hacker.io上的python專案,Python專案: https://www.hackster.io/projects/tags/python
我們可以看到有114個專案。


我們試著用elderly關鍵字來搜尋,也有發現有51個專案,針對使用科技來進行老人照顧。

接下來我們再設定Python語言條件,就發現到只剩下8個老人照顧的專案。




2018年9月8日 星期六

當您老了,誰來做伴

每個人都會老,老了誰來做伴呢? 或許機器人會是一個選項,我們先來聽聽中國內地獨立音樂人趙照的詮釋,當您老了。



日本石黑浩發明逼真機器人



或許您會說,機器人長的太醜,沒有溫度,但這些似乎都克服了,不但長的跟人很像,而且體溫跟人差不多。


在台灣也有許多人一直在鑽研照顧機器人,兩年前中天新聞就有報導。

2018年8月20日 星期一

啟動智慧照顧落實智慧養老

台灣已進入高齡社會,意謂著100個人就至少有14位超過65歲,面對高齡人口愈來愈多,再加上少子化,要如何因應來解決這兩個現象所帶來問題,正考驗著生活在台灣的您和我。善用科技或許是解決這個問題的其中一種方法,台灣有全世界最好的資通訊產業,行動服務也非常的普及,本篇文章將帶大家來看一下,台灣目前在智慧照顧上的發展現況。

首先先來看看受恩智慧照顧大樓如何善用智慧生活科技來實現在地老化,運用資通訊技術讓更多長輩或照顧者知道日照中心舉辦辦能促進長輩身心健康的多樣的活動,另外還有臨時住宿、居家服務等,在受恩的照顧服務員必須時常接受資訊教育,善用科技,使得這些照顧服務員能迅速地熟悉並記錄各項工作,才能提供個別化服務,此外也為了讓長輩有好的居家作息,受恩把居家設備透過物聯網串連起來,經由大數據分析提供智慧化照護服務,並能主動提供長輩有興趣的活動資訊。


醫院也導入物聯網發展智慧醫療,運用智慧照護病房,加速看診和住院的流程,電子白板、智慧行動護理車、用藥比對病患條碼。


運用智慧照顧枕來監測長輩身體狀況,運用非接觸性光纖生理監控技術,可以得知淺眠或熟睡,呼吸暫停時可以發出警訊,透過頭部動作還能發出命令。


日照中心運用人臉辦識系統,當長輩離開時,可以通知醫護人員,另外結合物聯網技術,當窗戶被打開時,也能通知,可以預防意外的發生。


智慧機器人輪椅貼心照顧長輩,有的可以用站姿也可以用坐姿,另外也有用雙滑側機構來操控,操控器上裝有心電圖感知器,可即時監控長輩的心律。也有結合機器人和輪椅為長輩提供更好的選擇,可平移原地旋轉、遠距居家照顧等功能


智慧手錶關心長輩


陪伴是照顧長輩最重要的工作,陪伴機器人就是在這個需求下被設計出來。


國外機器人研發


華碩機器人




2018年8月19日 星期日

智慧新科技推動智慧城市

火熱的智慧城市議題正在全球各大都市討論以及推動,不管如何台灣是智慧城市最佳實驗場域,這是因為我們有不錯的資通訊產業以及相關的服務,以下是經濟部為了推動4G智慧城市概念所製作的動晝。



接下來我們來看看台灣四大城市:台北、台中、台南、和高雄,在推動智慧城市各有那些優點呢?台北市想推動智慧無礙服務,台中市則以智慧交通為主軸,台南市想結合古都概念來智慧城市,高雄市則以生態角度切入形塑宜居都市。



台北市為了推動智慧城市,設置智慧城市專案辦公室,台北市因人口較多,交通設施也比較複雜,常因為和朋友約在車站見面,但郤找不到人,因此導入室內導航的技術,不但可以幫助到市民在室內移動,更可以用在防災疏散上。智慧城市專案辦公室時常舉辦座談會來瞭解市民需求,再由政府和民眾合力,與台北市科技業者共同解決市民的問題,智慧城市專案辦公室訴求就是要把台北市打造成一個Living Lab。



台中市規劃水湳智慧城以智慧、低碳、創新為開發願景,企圖打造全國首座智慧城中城。



在台南有許多美食,但要如何得知呢?台南市推出巷弄X台南APP運用巷弄文化來幫在地商家推廣美食,讓遊客輕鬆找美食。


高雄市推動手持一卡通暢遊無阻來推動驚艷高雄成為科技城市。

2018年7月17日 星期二

智慧科技導入花園城市-中興新村



智創聯盟從2015年5月1日成立到現在已經有3年多了,前兩年主要的場域是初鄉茶間,其主要成果有時空旅人花語母親等。自2017年2月1日起,選定中興新村做為智創聯盟中心學校南開科技大學以及所有夥伴學校的共同場域,經過一年多的努力,已經有初步的成果,於2018/6/3舉辦成果展,非常感謝夥伴們的參與,讓我們持續為中興新村導入智慧生活科技努力。

智創聯盟聯絡電話:049-2563489#2814。

2018年5月13日 星期日

[Tinkercad Programming]光敏電阻實驗-小夜燈

本文將介紹光敏電阻的實驗,光敏電阻可以依照光線的強弱來改變電阻值,最常用於小夜燈,當白天時,小夜燈自動熄滅,到了晚上自動點亮。
如上圖,光敏電阻有2個接腳,其一是接到5V的電源,另一支腳則串接一個10K歐姆的電阻到GND,而與電阻連接地方,就是訊號線的接頭,接到A0腳位。
選擇變數(Varables)並按下Create variable按鈕後,輸入InValue,按下確定鈕後,就會出現上圖。接下來按照下圖配置程式。

上圖是設定inValue變數到讀取類比腳位A0的數值,然後把inValue數值從串列埠中輸出。接下來按下Start Simulation按鈕,就可以執行程式,然後調整在光敏電阻的上方出現的光源亮度調整鈕,您可以調整看看,並觀看右下方的串列埠Serial的輸出,其結果如下圖。



調整時會發現亮度愈亮,其電阻值愈高,其電路以及程式分別如下面兩張圖。






延伸練習:
PIR Sensor

Ultrasonic Sensor


2018年5月10日 星期四

[Tinkercad Programming]簡易通訊:兩片Arduino對傳


Tinkercad居然可以模擬兩片Arduino,這點讓敏哥很吃驚,把其中一片的TxD接腳連接到另一片RxD,再把RxD接到另一片的TxD,然後把兩片板子的GND連接起來。



上圖紅色地方可以切換不同板子,只需要一行print to serial monitor命令即可,記得兩片板子都要加喔!,我們把命令插在LED亮滅的中間,是為了讓使用者能知道有在進行通訊。在上圖的右下方,可以看到輸出的結果。下圖為接收端程式,圖中為何使用49呢?值得讀者思考。
相關文章:Arduino 筆記 – Serial Library 介紹