2026年7月13日 星期一

2026美國德州自駕體驗

因為出差關係,有了這次美國德州(沃斯堡/達拉斯)的自駕體驗。

1.要先到各地監理站辦理國際駕照,一次250元。過程大約不到5分鐘就搞定,但排隊要花比較久的時間。現場人員會提醒,到美國租車自駕一定要帶著台灣駕照、國際駕照與護照,要不然租車是不會交車的。

2.這次是選擇Herzt這家租車公司,並在沃斯堡市區(Talor Street) Pick up,DFW機場 Return。會什麼用英文來強調Pick up & Return?因為在機場還車時,一定要看清楚是在Return的地方,使用google map導航會帶你到Pick up的地方。

3.其實KKday、Rentalcars.com也有租車的服務,他們類似Agoda、Booking、Trip等飯店住宿服務,提供多家的租車公司(Hertz、SIXT、AIVS等)供選擇的服務,但後來考量在保險(租車公司 寫的比較詳細)、與萬一發生狀況時(租車公司處理;如果是找KKday,則是自已要先和對方先處理,並付錢後,KKday的保險再賠給你),選擇了Hertz。

4.另外在保險上面,也建議選擇全險(Complete bundle),包含:

  • 免自付額:車輛損失或損壞不需支付自付額。
  • 全額理賠:提供 100% 的車輛損壞保障。
  • 道路救援:提供 24/7 全天候緊急道路救援。
  • 責任險 (Liability coverage):僅「完整方案 (Complete)」與「標準方案 (Standard)」包含;「基本方案 (Basic)」不包含。
  • 意外傷亡與盜竊 (Accidental injury/death or theft):僅「完整方案 (Complete)」包含;其餘兩款方案皆不保障此項目。


但這次我還有加了Unlimited Tolling,後來才知道,大部份的高速公路在主線路段(如德州的30,35,820等)其實是不收費,只有express lanes(同一條高速公路有兩線道的快速通關,比較少車,也比較快,遇到主線塞車時,的確快很多)才要收費。如果只是走主線的話,這筆費用是可以省下來的(我們租5天要US$89.95)。另外這5天的租車費用總共US$691.08。



5.一開始Survey時,在沃斯堡市區(Talor Street)的這家Hertz,google網友評價不高,服務不好,要等很久,所以一直很猶豫是要在Hertz還是SIXT、AIVS等其它租車公司。實際上,這家如果遇到人多時,可能真的會等很久,好佳在我們這次進去時,前面只有一位,且加開第二櫃,所以我們整個租車pick up過程大約不到30分鐘。後面一直有人進來,感覺就要等一會的樣子。

猜是因為保全險,所以Hertz現場人員也沒和我們一起檢查車體外觀,就把Key交給我們。但我們還是有錄影存證。


6.這次租到的是Hyundai Palisade七人座,因為在台灣開的車就是Hyundai Custin,所以操作上不是什麼太大問題,但Apple Carplay一直設定不起來~~



7.美國德州高速公路速限75哩/時(不確定是否每個州都一樣),聽Partner提到,在內線一定要維持75哩/時 + 10哩/時的速限,否則會被開單?在外線好像就沒有這樣的限制。另外看到Stop的標示、行人一定要整台車停下來,確定沒車或行人已通過後才能開;Stop 4way的標示則是要讓先停下的車輛開;紅燈是可以右轉的,但一樣要先停三秒並確認沒車後才可以開?左轉如果有箭頭的燈號,則是要等綠色的箭頭(好像也有黃色的)亮起來才可以開。

8.市區停車,因為有去2026 FIFA Fan Festival的場地(Fair Park),原本擔心沒有停車位,所以前一天先透過parkmobile網站先Reserve了Fair Park和Downtown的停車位,分別需要US$17、US$11,在Fair Park的停車場有人會檢查Reservation資訊,在Downtown則是一般的停車場,沒有人檢查。後來發現,這兩個地方的停車位都超多,看起來不用事先Rervervation。

9.還車的體驗就更快了,只要開到DFW機場的還車中心(離機場還有一小段車程,有Shuttle bus可以搭,大約10分鐘),車子停好跟現場人員說一聲就可以走了(因為全險?),現場人員是不會和你一起檢查車體是否有受損。

10.最後在美國德州自駕的感想,馬路和停車場都很大,真的很好開、很好停;高速公路只有在下去時,常常會錯過閘道(畢竟不熟),但不要緊張,下一個閘道通常很近,且繞路有時也只是多10幾分鐘的車程(有時反而更快?)。希望下次還有機會可以到美國其它州自駕旅遊。 




2023年6月8日 星期四

[Python]Json格式的列印方式

 json本身就是許多串列,每個串列裡面有許多字典型態的資料集合,所以可以用

json1 = [{"name":"jeff","age":40,"location":"taichung"}
,{"name":"renee","age":20,"location":"taichung"}
,{"name":"molly","age":6,"location":"taichung"}]
print(type(json1))

for list1 in json1:
for key,values in list1.items():
print(key,values)

輸出

<class 'list'> name jeff age 40 location taichung name renee age 20 location taichung name molly age 6 location taichung

2023年4月16日 星期日

ESP32-CAM無法臉部辨識

 ESP32-CAM的板子是跟夜市小霸王買的(有一陣子了),參考夜市小霸王的兩篇範例操作可正常運作。

帶CH340的ESP32CAM簡易測試

但在臉部辨識的部份,一直無法辨識到,後來參考這篇

內容有提到要使用ESP module 1.0.4,將ESP module version 1.0.6 移除,重新安裝version 1.0.4後,即可進行臉部辨識,且感覺畫面也比較流暢。









2023年1月3日 星期二

於Google Cloud Function建立ChatGPT人工智慧聊天機器人

 一、事前準備工作

ChatGPT帳號申請

LineBot帳號申請

Google Cloud Function設定

LineBot帳號申請

程式碼佈署

二、ChatGPT帳號申請


按TRY CHATGPT按鈕申請一個新的帳號

申請一組API key(申請過程中,切記要把SECRET KEY複製下來)

也可以直接在線上試著問它問題

三、LineBot帳號申請
參考以下連結申請Line Channel帳號

主要是獲得二個重要的Key
  • Channel secret
  • Channel access token

四、Google Cloud Function設定

1.建立函式
2.函式名稱可自行定義
3.地區可搜尋"taiwan"(asia-east1)
4.驗證點選"允許未經驗證的叫用"(現在好像儲存後都會跳掉?)
5.儲存
6.下一步


五、程式碼


1.執行階段選Python3.8
2.requirements.txt輸入
Flask==2.1.0
openai
requests
line-bot-sdk
3.main.py是主程式
4.進入點改為callback
5.程式碼

import openai
from flask import Flask, request, abort

from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage,
)

app = Flask(__name__)

line_bot_api = LineBotApi('你的 Channel access token')
handler = WebhookHandler('你的 Channel secret')


@app.route("/callback", methods=['POST'])
def callback(request):
# get X-Line-Signature header value
signature = request.headers['X-Line-Signature']

# get request body as text
body = request.get_data(as_text=True)
app.logger.info("Request body: " + body)

# handle webhook body
try:
handler.handle(body, signature)
except InvalidSignatureError:
print("Invalid signature. Please check your channel access token/channel secret.")
abort(400)

return 'OK'


@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
msg = event.message.text
reply_msg= ""

openai.api_key = '你的openai key'
response = openai.Completion.create(
engine='text-davinci-003',
prompt=msg,
max_tokens=256,
temperature=0.5,
)
reply_msg = response["choices"][0]["text"]

line_bot_api.reply_message(
event.reply_token,
TextSendMessage(reply_msg))


if __name__ == "__main__":
app.run()

六、部署

按下部署後(會需要一點點時間),到觸發條件,將觸發網址複製下來

貼到Line Developers的Messaging API settings -> Webhook settings (Use webhook要記得打開)


七、測試






2022年11月15日 星期二

[Python]改檔案名

import os

#由於要找的檔案很多,且在多層目錄結構下,所以先將完整路徑存到串列
fullpath = []

for root,dirs,files in os.walk(os.getcwd()): #使用os.walk找當下目錄的所有檔案
for f in files: #將每個檔案拿出來做名稱比較
if "gt-cpu" in f: #要比對的檔名字串
rename = "gtx-" + str.lower(f[4:])
print(f)
os.rename(os.path.join(root,f),os.path.join(root,rename))
print("=====After change========")
print(rename)
fullpath.append(os.path.join(root,f)) 

2022年11月11日 星期五

[Python]使用os.walk來找資料匣底下的檔案

 之前還不會用os.walk()時,都是先把檔案集中到單一資料匣下,再用os.listdir()去把檔案列出來。這樣一來就會多一個檔案整理的動作。

1.先來看一下測試時的目錄結構。


2.使用os.walk("目前路徑或其它路徑")去跑一下

import os
for respones in os.walk(os.getcwd()):
print("----------------")
print(respones)

得到的結果

----------------

('/Users/winer406/python/OS', ['test'], ['test1.py', 'test.py', 'test2.py'])

----------------

('/Users/winer406/python/OS/test', [], ['abc.py'])


回傳--> ("路徑","目錄","此目錄下的所有檔案")


3.使用os.walk的另一種呈現方式

import os
for root, dirs, files in os.walk(os.getcwd()):
print("----------------")
print(root)
print(dirs)
print(files)

得到的結果

----------------

/Users/winer406/python/OS  <-- 在這個路徑下

['test']  <-- 有1個資料匣

['test1.py', 'test.py', 'test2.py']  <--有3個檔案

----------------

/Users/winer406/python/OS/test  <-- 在這個路徑下

[]  <-- 沒有資料匣匣

['abc.py']  <-- 有1個檔

4.一次性將檔案的路徑(包含檔案名)列出來,方便做後續的處理

import os

for root, dirs, files in os.walk(os.getcwd()):
for file in files:
fullpath = os.path.join(root,file)
print(fullpath)

得到的結果

/Users/winer406/python/OS/test1.py

/Users/winer406/python/OS/test.py

/Users/winer406/python/OS/test2.py

/Users/winer406/python/OS/test/abc.py

有了絕對路徑,後面要處理檔案就比較方便了

資料參考來源:https://www.ewdna.com/2012/04/pythonoswalk.html




2022年9月28日 星期三

[Python]tkinter的背景顏色

 使用Python模組tkinter時,要留意Python的版本(但目前還不知道什麼?也有可能是其它環境參考設定造成顏色問題)

是要留意在哪個終端機底下(bash or zsh),於bash底下執行才會是灰色背景。

Python 3.9.7


輸入結果,背景是灰的(所以label的字不能刻意去改顏色)


Python 3.9.6 輸出結果背景是黑色的,label裡的字也看不到了~~


更新:原來是在bash底下才會是第一張圖,和Python版本無關。



2022年7月8日 星期五

[LAB]Google colab CPU vs. GPU vs. TPU

讀到網路上一篇文章提到,google colab免費版就有支援CPU/GPU/TPU的運算資源。第一次聽到TPU,原來是google開發的晶片,專門給人工智慧、機器學習和深度學習等的科學項目,提供更佳的處理效果。 

修改google colab的運算資源:



剛好之前在colab練習寫了一個人臉辨識的小程式,利用deepface模組,可以辨識圖片中人像的情緒、年齡、種族和性別。並透過不同的運算資源來記錄程式的運算時間,原本以為會是TPU > GPU > CPU,但結果是GPU > TPU ~= CPU ?會不會是因為TPU在處理深度學習模型訓練上才會有明顯效果,還在研究中... 下次來練習寫個模型訓練來測試看看。

程式碼:
import time
import cv2
from deepface import DeepFace

start = time.time()

img = cv2.imread('test3.png') # 讀取圖片
try:
analyze = DeepFace.analyze(img)
print("情緒:",analyze["dominant_emotion"],"年齡:",analyze["age"])
print("種族:",analyze["dominant_race"],"性別:",analyze["gender"])
except:
pass

end = time.time()
print(end - start)

CPU 3.90秒

GPU 1.63秒


TPU 3.58秒

======================Round2==========================

有google colab真的太方便,馬上可以來檢驗上述的猜測,是否TPU更適合放在訓練模型上。直接使用tensorflow於colab初學者範例來跑跑看。結果竟然是CPU > GPU > TPU 為什麼?

CPU 19.84秒

GPU 21.96秒

TPU 24.26秒


======================Round3==========================
如果只計算訓練模型的時間,是否會有變化?結果GPU > TPU > CPU

CPU 51.15秒

GPU 40.76秒

TPU 45.80秒




2022年2月6日 星期日

ESP32s 燒錄時發生Invalid head of packet(0xe0)錯誤

 試過調低upload speed 為115200後ok(原為921600)




2021年11月2日 星期二

Autodesk DWG TrueView 依使用情境匯出PDF

 工作上需要,有時要把客戶提供的CAD檔,裡面會有幾個樓層平面圖轉成PDF匯出。但不是很常做,因此時常忘記,因此在這裡做個記錄。


選擇Export --> PDF


Save As PDF --> Export欄位選擇Window, 然後旁邊圖示按下去,於Trueview視窗上拉選想要區域即可。